mirror of
https://github.com/servo/servo.git
synced 2025-08-05 13:40:08 +01:00
Auto merge of #18002 - glennw:update-wr-linux-subpx, r=emilio
Update WR (text optimizations, Linux subpixel positioning / rasterization). <!-- Reviewable:start --> This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/18002) <!-- Reviewable:end -->
This commit is contained in:
commit
31582a4874
9 changed files with 74 additions and 48 deletions
|
@ -585,28 +585,32 @@ impl<'a> CanvasPaintThread<'a> {
|
|||
};
|
||||
let data = webrender_api::ImageData::Raw(Arc::new(element.into()));
|
||||
|
||||
let mut updates = webrender_api::ResourceUpdates::new();
|
||||
|
||||
match self.image_key {
|
||||
Some(image_key) => {
|
||||
debug!("Updating image {:?}.", image_key);
|
||||
self.webrender_api.update_image(image_key,
|
||||
descriptor,
|
||||
data,
|
||||
None);
|
||||
updates.update_image(image_key,
|
||||
descriptor,
|
||||
data,
|
||||
None);
|
||||
}
|
||||
None => {
|
||||
self.image_key = Some(self.webrender_api.generate_image_key());
|
||||
debug!("New image {:?}.", self.image_key);
|
||||
self.webrender_api.add_image(self.image_key.unwrap(),
|
||||
descriptor,
|
||||
data,
|
||||
None);
|
||||
updates.add_image(self.image_key.unwrap(),
|
||||
descriptor,
|
||||
data,
|
||||
None);
|
||||
}
|
||||
}
|
||||
|
||||
if let Some(image_key) = mem::replace(&mut self.very_old_image_key, self.old_image_key.take()) {
|
||||
self.webrender_api.delete_image(image_key);
|
||||
updates.delete_image(image_key);
|
||||
}
|
||||
|
||||
self.webrender_api.update_resources(updates);
|
||||
|
||||
let data = CanvasImageData {
|
||||
image_key: self.image_key.unwrap(),
|
||||
};
|
||||
|
@ -764,12 +768,16 @@ impl<'a> CanvasPaintThread<'a> {
|
|||
|
||||
impl<'a> Drop for CanvasPaintThread<'a> {
|
||||
fn drop(&mut self) {
|
||||
let mut updates = webrender_api::ResourceUpdates::new();
|
||||
|
||||
if let Some(image_key) = self.old_image_key.take() {
|
||||
self.webrender_api.delete_image(image_key);
|
||||
updates.delete_image(image_key);
|
||||
}
|
||||
if let Some(image_key) = self.very_old_image_key.take() {
|
||||
self.webrender_api.delete_image(image_key);
|
||||
updates.delete_image(image_key);
|
||||
}
|
||||
|
||||
self.webrender_api.update_resources(updates);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -281,26 +281,30 @@ impl WebGLPaintThread {
|
|||
};
|
||||
let data = webrender_api::ImageData::Raw(Arc::new(pixels));
|
||||
|
||||
let mut updates = webrender_api::ResourceUpdates::new();
|
||||
|
||||
match *image_key {
|
||||
Some(image_key) => {
|
||||
webrender_api.update_image(image_key,
|
||||
descriptor,
|
||||
data,
|
||||
None);
|
||||
updates.update_image(image_key,
|
||||
descriptor,
|
||||
data,
|
||||
None);
|
||||
}
|
||||
None => {
|
||||
*image_key = Some(webrender_api.generate_image_key());
|
||||
webrender_api.add_image(image_key.unwrap(),
|
||||
descriptor,
|
||||
data,
|
||||
None);
|
||||
updates.add_image(image_key.unwrap(),
|
||||
descriptor,
|
||||
data,
|
||||
None);
|
||||
}
|
||||
}
|
||||
|
||||
if let Some(image_key) = mem::replace(very_old_image_key, old_image_key.take()) {
|
||||
webrender_api.delete_image(image_key);
|
||||
updates.delete_image(image_key);
|
||||
}
|
||||
|
||||
webrender_api.update_resources(updates);
|
||||
|
||||
let image_data = CanvasImageData {
|
||||
image_key: image_key.unwrap(),
|
||||
};
|
||||
|
@ -357,15 +361,19 @@ impl Drop for WebGLPaintThread {
|
|||
very_old_image_key,
|
||||
..
|
||||
} = self.data {
|
||||
let mut updates = webrender_api::ResourceUpdates::new();
|
||||
|
||||
if let Some(image_key) = image_key {
|
||||
webrender_api.delete_image(image_key);
|
||||
updates.delete_image(image_key);
|
||||
}
|
||||
if let Some(image_key) = old_image_key {
|
||||
webrender_api.delete_image(image_key);
|
||||
updates.delete_image(image_key);
|
||||
}
|
||||
if let Some(image_key) = very_old_image_key {
|
||||
webrender_api.delete_image(image_key);
|
||||
updates.delete_image(image_key);
|
||||
}
|
||||
|
||||
webrender_api.update_resources(updates);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -819,8 +819,9 @@ impl<Window: WindowMethods> IOCompositor<Window> {
|
|||
}
|
||||
|
||||
WindowEvent::ToggleWebRenderProfiler => {
|
||||
let profiler_enabled = self.webrender.get_profiler_enabled();
|
||||
self.webrender.set_profiler_enabled(!profiler_enabled);
|
||||
let mut flags = self.webrender.get_debug_flags();
|
||||
flags.toggle(webrender::renderer::PROFILER_DBG);
|
||||
self.webrender.set_debug_flags(flags);
|
||||
self.webrender_api.generate_frame(self.webrender_document, None);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -49,7 +49,7 @@ core-graphics = "0.8"
|
|||
core-text = "6.0"
|
||||
|
||||
[target.'cfg(any(target_os = "linux", target_os = "android"))'.dependencies]
|
||||
freetype = "0.2"
|
||||
freetype = "0.3"
|
||||
|
||||
[target.'cfg(target_os = "linux")'.dependencies]
|
||||
servo-fontconfig = "0.2.1"
|
||||
|
|
|
@ -348,11 +348,13 @@ impl FontCache {
|
|||
let webrender_fonts = &mut self.webrender_fonts;
|
||||
font_key = Some(*webrender_fonts.entry(template.identifier.clone()).or_insert_with(|| {
|
||||
let font_key = webrender_api.generate_font_key();
|
||||
let mut updates = webrender_api::ResourceUpdates::new();
|
||||
match (template.bytes_if_in_memory(), template.native_font()) {
|
||||
(Some(bytes), _) => webrender_api.add_raw_font(font_key, bytes, 0),
|
||||
(None, Some(native_font)) => webrender_api.add_native_font(font_key, native_font),
|
||||
(None, None) => webrender_api.add_raw_font(font_key, template.bytes().clone(), 0),
|
||||
(Some(bytes), _) => updates.add_raw_font(font_key, bytes, 0),
|
||||
(None, Some(native_font)) => updates.add_native_font(font_key, native_font),
|
||||
(None, None) => updates.add_raw_font(font_key, template.bytes().clone(), 0),
|
||||
}
|
||||
webrender_api.update_resources(updates);
|
||||
font_key
|
||||
}));
|
||||
}
|
||||
|
|
|
@ -1064,7 +1064,8 @@ impl LayoutThread {
|
|||
Some(get_root_flow_background_color(layout_root)),
|
||||
viewport_size,
|
||||
builder.finalize(),
|
||||
true);
|
||||
true,
|
||||
webrender_api::ResourceUpdates::new());
|
||||
self.webrender_api.generate_frame(self.webrender_document, None);
|
||||
});
|
||||
}
|
||||
|
|
|
@ -79,7 +79,9 @@ fn set_webrender_image_key(webrender_api: &webrender_api::RenderApi, image: &mut
|
|||
};
|
||||
let data = webrender_api::ImageData::new(bytes);
|
||||
let image_key = webrender_api.generate_image_key();
|
||||
webrender_api.add_image(image_key, descriptor, data, None);
|
||||
let mut updates = webrender_api::ResourceUpdates::new();
|
||||
updates.add_image(image_key, descriptor, data, None);
|
||||
webrender_api.update_resources(updates);
|
||||
image.id = Some(image_key);
|
||||
}
|
||||
|
||||
|
|
|
@ -174,11 +174,14 @@ impl<Window> Browser<Window> where Window: WindowMethods + 'static {
|
|||
None
|
||||
};
|
||||
|
||||
let mut debug_flags = webrender::renderer::DebugFlags::empty();
|
||||
debug_flags.set(webrender::renderer::PROFILER_DBG, opts.webrender_stats);
|
||||
|
||||
webrender::Renderer::new(window.gl(), webrender::RendererOptions {
|
||||
device_pixel_ratio: device_pixel_ratio,
|
||||
resource_override_path: Some(resource_path),
|
||||
enable_aa: opts.enable_text_antialiasing,
|
||||
enable_profiler: opts.webrender_stats,
|
||||
debug_flags: debug_flags,
|
||||
enable_batcher: opts.webrender_batch,
|
||||
debug: opts.webrender_debug,
|
||||
recorder: recorder,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue