Skip to content

Commit

Permalink
Update WR (radial gradients, subpixel positioning, tiling changes).
Browse files Browse the repository at this point in the history
  • Loading branch information
gw3583 committed Jan 31, 2017
1 parent 71deabc commit 4cbefe8
Show file tree
Hide file tree
Showing 13 changed files with 117 additions and 61 deletions.
84 changes: 47 additions & 37 deletions Cargo.lock

Large diffs are not rendered by default.

10 changes: 7 additions & 3 deletions components/canvas/canvas_paint_thread.rs
Expand Up @@ -559,9 +559,13 @@ impl<'a> CanvasPaintThread<'a> {
self.drawtarget.snapshot().get_data_surface().with_data(|element| {
let size = self.drawtarget.get_size();
self.webrender_api.update_image(self.webrender_image_key,
size.width as u32,
size.height as u32,
webrender_traits::ImageFormat::RGBA8,
webrender_traits::ImageDescriptor {
width: size.width as u32,
height: size.height as u32,
stride: None,
format: webrender_traits::ImageFormat::RGBA8,
is_opaque: false,
},
element.into());

let data = CanvasImageData {
Expand Down
10 changes: 7 additions & 3 deletions components/canvas/webgl_paint_thread.rs
Expand Up @@ -236,9 +236,13 @@ impl WebGLPaintThread {
// TODO: This shouldn't be a common path, but try to avoid
// the spurious clone().
webrender_api.update_image(image_key,
width as u32,
height as u32,
webrender_traits::ImageFormat::RGBA8,
webrender_traits::ImageDescriptor {
width: width as u32,
height: height as u32,
stride: None,
format: webrender_traits::ImageFormat::RGBA8,
is_opaque: false,
},
pixels.clone());

let image_data = CanvasImageData {
Expand Down
1 change: 1 addition & 0 deletions components/compositing/compositor.rs
Expand Up @@ -739,6 +739,7 @@ impl<Window: WindowMethods> IOCompositor<Window> {

let pipeline_id = frame_tree.pipeline.id.to_webrender();
self.webrender_api.set_root_pipeline(pipeline_id);
self.webrender_api.generate_frame();

self.create_pipeline_details_for_frame_tree(&frame_tree);

Expand Down
2 changes: 1 addition & 1 deletion components/gfx/Cargo.toml
Expand Up @@ -49,7 +49,7 @@ features = ["serde_derive", "ipc"]
[target.'cfg(target_os = "macos")'.dependencies]
byteorder = "0.5"
core-foundation = "0.2"
core-graphics = "0.4"
core-graphics = "0.5"
core-text = "2.0"

[target.'cfg(any(target_os = "linux", target_os = "android"))'.dependencies]
Expand Down
3 changes: 2 additions & 1 deletion components/layout/webrender_helpers.rs
Expand Up @@ -246,7 +246,8 @@ impl WebRenderDisplayItemConverter for DisplayItem {
item.text_run.font_key,
item.text_color,
item.text_run.actual_pt_size,
item.blur_radius);
item.blur_radius,
None);
}
}
DisplayItem::Image(ref item) => {
Expand Down
1 change: 1 addition & 0 deletions components/layout_thread/lib.rs
Expand Up @@ -988,6 +988,7 @@ impl LayoutThread {
webrender_traits::Epoch(epoch_number),
viewport_size,
builder);
self.webrender_api.generate_frame();
});
}

Expand Down
46 changes: 36 additions & 10 deletions components/net/image_cache_thread.rs
Expand Up @@ -33,6 +33,26 @@ use webrender_traits;
/// MAYBE(Yoric):
/// * For faster lookups, it might be useful to store the LoadKey in the DOM once we have performed a first load.

// TODO(gw): This is a port of the old is_image_opaque code from WR.
// Consider using SIMD to speed this up if it shows in profiles.
fn is_image_opaque(format: webrender_traits::ImageFormat, bytes: &[u8]) -> bool {
match format {
webrender_traits::ImageFormat::RGBA8 => {
let mut is_opaque = true;
for i in 0..(bytes.len() / 4) {
if bytes[i * 4 + 3] != 255 {
is_opaque = false;
break;
}
}
is_opaque
}
webrender_traits::ImageFormat::RGB8 => true,
webrender_traits::ImageFormat::A8 => false,
webrender_traits::ImageFormat::Invalid | webrender_traits::ImageFormat::RGBAF32 => unreachable!(),
}
}

/// Represents an image that is either being loaded
/// by the resource thread, or decoded by a worker thread.
struct PendingLoad {
Expand Down Expand Up @@ -314,12 +334,15 @@ fn get_placeholder_image(webrender_api: &webrender_traits::RenderApi) -> io::Res
let format = convert_format(image.format);
let mut bytes = Vec::new();
bytes.extend_from_slice(&*image.bytes);
let descriptor = webrender_traits::ImageDescriptor {
width: image.width,
height: image.height,
stride: None,
format: format,
is_opaque: is_image_opaque(format, &bytes),
};
let data = webrender_traits::ImageData::new(bytes);
image.id = Some(webrender_api.add_image(image.width,
image.height,
None,
format,
data));
image.id = Some(webrender_api.add_image(descriptor, data));
Ok(Arc::new(image))
}

Expand Down Expand Up @@ -476,12 +499,15 @@ impl ImageCache {
let format = convert_format(image.format);
let mut bytes = Vec::new();
bytes.extend_from_slice(&*image.bytes);
let descriptor = webrender_traits::ImageDescriptor {
width: image.width,
height: image.height,
stride: None,
format: format,
is_opaque: is_image_opaque(format, &bytes),
};
let data = webrender_traits::ImageData::new(bytes);
image.id = Some(self.webrender_api.add_image(image.width,
image.height,
None,
format,
data));
image.id = Some(self.webrender_api.add_image(descriptor, data));
}
LoadResult::PlaceholderLoaded(..) | LoadResult::None => {}
}
Expand Down
10 changes: 9 additions & 1 deletion components/servo/lib.rs
Expand Up @@ -162,13 +162,21 @@ impl<Window> Browser<Window> where Window: WindowMethods + 'static {
webrender_traits::RendererKind::Native
};

let recorder = if opts.webrender_record {
let record_path = PathBuf::from("wr-record.bin");
let recorder = Box::new(webrender::BinaryRecorder::new(&record_path));
Some(recorder as Box<webrender::ApiRecordingReceiver>)
} else {
None
};

webrender::Renderer::new(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: opts.webrender_debug,
enable_recording: opts.webrender_record,
recorder: recorder,
precache_shaders: opts.precache_shaders,
enable_scrollbars: opts.output_file.is_none(),
renderer_kind: renderer_kind,
Expand Down
2 changes: 1 addition & 1 deletion ports/cef/Cargo.toml
Expand Up @@ -42,7 +42,7 @@ features = ["serde_derive", "ipc"]

[target.'cfg(target_os="macos")'.dependencies]
objc = "0.2"
cocoa = "0.5"
cocoa = "0.6"

[target.'cfg(target_os="linux")'.dependencies]
x11 = "2.3"
@@ -1,3 +1,4 @@
[regions-transforms-005.htm]
type: reftest
expected: FAIL
expected:
if os == "linux": FAIL

This file was deleted.

3 changes: 3 additions & 0 deletions tests/wpt/metadata-css/css21_dev/html4/bidi-008b.htm.ini
@@ -0,0 +1,3 @@
[bidi-008b.htm]
type: reftest
disabled: https://github.com/servo/servo/issues/15182

0 comments on commit 4cbefe8

Please sign in to comment.