aboutsummaryrefslogtreecommitdiffstats
path: root/third_party/webrender/wrench/src
diff options
context:
space:
mode:
authorMukilan Thiyagarajan <mukilan@igalia.com>2023-09-14 15:00:42 +0530
committerMukilan Thiyagarajan <mukilan@igalia.com>2023-09-14 15:00:42 +0530
commitc385b3c9737c17d59cb02e520c3b68b232cb6497 (patch)
treead598ffbbdfbcecd6a4cf458abe2afc702d92c27 /third_party/webrender/wrench/src
parent988e05a68b48c9e744bf49459faf41a1bd9b81d7 (diff)
downloadservo-revert-webrender.tar.gz
servo-revert-webrender.zip
Revert "Upgrade WebRender to e491e1ae637b2eed1e7195855d88357e5eb3ddf9 (#30323)"revert-webrender
This reverts commit a9d37cb85ac2c55fc630fccffe1ba60ff00f555b.
Diffstat (limited to 'third_party/webrender/wrench/src')
-rw-r--r--third_party/webrender/wrench/src/args.yaml42
-rw-r--r--third_party/webrender/wrench/src/egl.rs2
-rw-r--r--third_party/webrender/wrench/src/main.rs92
-rw-r--r--third_party/webrender/wrench/src/perf.rs2
-rw-r--r--third_party/webrender/wrench/src/rawtest.rs105
-rw-r--r--third_party/webrender/wrench/src/reftest.rs42
-rw-r--r--third_party/webrender/wrench/src/test_invalidation.rs129
-rw-r--r--third_party/webrender/wrench/src/wrench.rs23
-rw-r--r--third_party/webrender/wrench/src/yaml_frame_reader.rs62
-rw-r--r--third_party/webrender/wrench/src/yaml_helper.rs9
10 files changed, 194 insertions, 314 deletions
diff --git a/third_party/webrender/wrench/src/args.yaml b/third_party/webrender/wrench/src/args.yaml
index 46538b2536c..d8a263fcca5 100644
--- a/third_party/webrender/wrench/src/args.yaml
+++ b/third_party/webrender/wrench/src/args.yaml
@@ -28,14 +28,22 @@ args:
short: r
long: rebuild
help: Rebuild display list from scratch every frame
+ - save:
+ long: save
+ help: 'Save frames, one of: yaml, json, ron, or binary'
+ takes_value: true
- no_subpixel_aa:
short: a
long: no-subpixel-aa
help: Disable subpixel aa
+ - no_picture_caching:
+ long: no-picture-caching
+ help: Disable picture caching
- slow_subpixel:
long: slow-subpixel
help: Disable dual source blending
- headless:
+ short: h
long: headless
help: Enable headless rendering
- angle:
@@ -54,6 +62,11 @@ args:
long: size
help: Window size, specified as widthxheight (e.g. 1024x768), in pixels
takes_value: true
+ - time:
+ short: t
+ long: time
+ help: Time limit (in seconds)
+ takes_value: true
- vsync:
long: vsync
help: Enable vsync for OpenGL window
@@ -80,10 +93,6 @@ args:
- no_block:
long: no-block
help: Don't block on UI events - run event loop as fast as possible.
- - profiler_ui:
- long: profiler-ui
- takes_value: true
- help: A string describing what to show on in the profiler HUD (See https://github.com/servo/webrender/wiki/Debugging-WebRender#anchor_6).
subcommands:
- png:
@@ -106,6 +115,11 @@ subcommands:
about: show frame(s) described by YAML, binary recording, or capture
aliases: ['load', 'replay']
args:
+ - queue:
+ short: q
+ long: queue
+ help: How many frames to submit to WR ahead of time (default 1) (YAML only)
+ takes_value: true
- include:
long: include
help: Include the given element type. Can be specified multiple times. (rect/image/text/glyphs/border) (YAML only)
@@ -118,6 +132,15 @@ subcommands:
short: w
long: watch
help: Watch the given file, reloading whenever it changes (YAML only)
+ - api:
+ long: api
+ help: Reissue Api messages for each frame (binary recording only)
+ - skip-uploads:
+ long: skip-uploads
+ help: Skip re-uploads while reissuing Api messages (BROKEN)
+ - play:
+ long: play
+ help: Play entire recording through, then quit (useful with --save) (binary recording only)
- keyframes:
short: k
long: keyframes
@@ -137,6 +160,13 @@ subcommands:
help: The input YAML, binary recording, or capture directory
required: true
index: 1
+ - replay:
+ about: replay binary recording
+ args:
+ - INPUT:
+ help: The input binary file or directory
+ required: true
+ index: 1
- reftest:
about: run reftests
args:
@@ -179,8 +209,6 @@ subcommands:
long: sample_count
takes_value: true
help: number of samples to capture
- - test_invalidation:
- about: run invalidation tests
- compare_perf:
about: compare two benchmark files
args:
@@ -192,5 +220,3 @@ subcommands:
help: second benchmark file to compare
required: true
index: 2
- - test_init:
- about: Test for successful initialization then exit immediately
diff --git a/third_party/webrender/wrench/src/egl.rs b/third_party/webrender/wrench/src/egl.rs
index 4b91d8cd86d..4508646b452 100644
--- a/third_party/webrender/wrench/src/egl.rs
+++ b/third_party/webrender/wrench/src/egl.rs
@@ -467,7 +467,7 @@ unsafe fn choose_fbconfig(display: ffi::egl::types::EGLDisplay,
value
}
)
- }
+ };
let desc = PixelFormat {
hardware_accelerated: attrib!(display, config_id, ffi::egl::CONFIG_CAVEAT)
diff --git a/third_party/webrender/wrench/src/main.rs b/third_party/webrender/wrench/src/main.rs
index 843512f5953..9a7dd3bcfea 100644
--- a/third_party/webrender/wrench/src/main.rs
+++ b/third_party/webrender/wrench/src/main.rs
@@ -8,8 +8,6 @@ extern crate clap;
extern crate log;
#[macro_use]
extern crate serde;
-#[macro_use]
-extern crate tracy_rs;
mod angle;
mod blob;
@@ -20,7 +18,6 @@ mod png;
mod premultiply;
mod rawtest;
mod reftest;
-mod test_invalidation;
mod wrench;
mod yaml_frame_reader;
mod yaml_helper;
@@ -47,7 +44,6 @@ use std::slice;
use std::sync::mpsc::{channel, Sender, Receiver};
use webrender::DebugFlags;
use webrender::api::*;
-use webrender::render_api::*;
use webrender::api::units::*;
use winit::dpi::{LogicalPosition, LogicalSize};
use winit::VirtualKeyCode;
@@ -158,8 +154,7 @@ impl WindowWrapper {
let gl = self.native_gl();
let tex = gl.gen_textures(1)[0];
gl.bind_texture(gl::TEXTURE_2D, tex);
- let (data_ptr, w, h, stride) = swgl.get_color_buffer(0, true);
- assert!(stride == w * 4);
+ let (data_ptr, w, h) = swgl.get_color_buffer(0, true);
let buffer = unsafe { slice::from_raw_parts(data_ptr as *const u8, w as usize * h as usize * 4) };
gl.tex_image_2d(gl::TEXTURE_2D, 0, gl::RGBA8 as gl::GLint, w, h, 0, gl::BGRA, gl::UNSIGNED_BYTE, Some(buffer));
let fb = gl.gen_framebuffers(1)[0];
@@ -289,7 +284,7 @@ impl WindowWrapper {
#[cfg(feature = "software")]
fn update_software(&self, dim: DeviceIntSize) {
if let Some(swgl) = self.software_gl() {
- swgl.init_default_framebuffer(0, 0, dim.width, dim.height, 0, std::ptr::null_mut());
+ swgl.init_default_framebuffer(dim.width, dim.height);
}
}
@@ -305,15 +300,15 @@ impl WindowWrapper {
}
#[cfg(feature = "software")]
-fn make_software_context() -> swgl::Context {
+fn make_software_context() -> Option<swgl::Context> {
let ctx = swgl::Context::create();
ctx.make_current();
- ctx
+ Some(ctx)
}
#[cfg(not(feature = "software"))]
-fn make_software_context() -> swgl::Context {
- panic!("software feature not enabled")
+fn make_software_context() -> Option<swgl::Context> {
+ None
}
fn make_window(
@@ -326,7 +321,7 @@ fn make_window(
software: bool,
) -> WindowWrapper {
let sw_ctx = if software {
- Some(make_software_context())
+ make_software_context()
} else {
None
};
@@ -436,9 +431,7 @@ fn make_window(
#[derive(Copy, Clone, Debug, PartialEq, Eq)]
pub enum NotifierEvent {
- WakeUp {
- composite_needed: bool,
- },
+ WakeUp,
ShutDown,
}
@@ -454,14 +447,8 @@ impl RenderNotifier for Notifier {
})
}
- fn wake_up(
- &self,
- composite_needed: bool,
- ) {
- let msg = NotifierEvent::WakeUp {
- composite_needed,
- };
- self.tx.send(msg).unwrap();
+ fn wake_up(&self) {
+ self.tx.send(NotifierEvent::WakeUp).unwrap();
}
fn shut_down(&self) {
@@ -471,11 +458,11 @@ impl RenderNotifier for Notifier {
fn new_frame_ready(&self,
_: DocumentId,
_scrolled: bool,
- composite_needed: bool,
+ _composite_needed: bool,
_render_time: Option<u64>) {
// TODO(gw): Refactor wrench so that it can take advantage of cases
// where no composite is required when appropriate.
- self.wake_up(composite_needed);
+ self.wake_up();
}
}
@@ -646,7 +633,7 @@ fn main() {
let dp_ratio = dp_ratio.unwrap_or(window.hidpi_factor());
let dim = window.get_inner_size();
- let needs_frame_notifier = ["perf", "reftest", "png", "rawtest", "test_invalidation"]
+ let needs_frame_notifier = ["perf", "reftest", "png", "rawtest"]
.iter()
.any(|s| args.subcommand_matches(s).is_some());
let (notifier, rx) = if needs_frame_notifier {
@@ -665,6 +652,7 @@ fn main() {
dim,
args.is_present("rebuild"),
args.is_present("no_subpixel_aa"),
+ args.is_present("no_picture_caching"),
args.is_present("verbose"),
args.is_present("no_scissor"),
args.is_present("no_batch"),
@@ -675,11 +663,6 @@ fn main() {
dump_shader_source,
notifier,
);
-
- if let Some(ui_str) = args.value_of("profiler_ui") {
- wrench.renderer.set_profiler_ui(&ui_str);
- }
-
window.update(&mut wrench);
if let Some(window_title) = wrench.take_title() {
@@ -706,7 +689,7 @@ fn main() {
Some("gpu-cache") => png::ReadSurface::GpuCache,
_ => panic!("Unknown surface argument value")
};
- let output_path = subargs.value_of("OUTPUT").map(PathBuf::from);
+ let output_path = subargs.value_of("OUTPUT").map(|s| PathBuf::from(s));
let reader = YamlFrameReader::new_from_args(subargs);
png::png(&mut wrench, surface, &mut window, reader, rx.unwrap(), output_path);
} else if let Some(subargs) = args.subcommand_matches("reftest") {
@@ -749,32 +732,16 @@ fn main() {
}
harness.run(base_manifest, &filename, as_csv);
return;
- } else if let Some(_) = args.subcommand_matches("test_invalidation") {
- let harness = test_invalidation::TestHarness::new(
- &mut wrench,
- &mut window,
- rx.unwrap(),
- );
-
- harness.run();
} else if let Some(subargs) = args.subcommand_matches("compare_perf") {
let first_filename = subargs.value_of("first_filename").unwrap();
let second_filename = subargs.value_of("second_filename").unwrap();
perf::compare(first_filename, second_filename);
return;
- } else if let Some(_) = args.subcommand_matches("test_init") {
- // Wrench::new() unwraps the Renderer initialization, so if
- // we reach this point then we have initialized successfully.
- println!("Initialization successful");
} else {
panic!("Should never have gotten here! {:?}", args);
};
wrench.renderer.deinit();
-
- // On android force-exit the process otherwise it stays running forever.
- #[cfg(target_os = "android")]
- process::exit(0);
}
fn render<'a>(
@@ -832,7 +799,7 @@ fn render<'a>(
// Default the profile overlay on for android.
if cfg!(target_os = "android") {
- debug_flags.toggle(DebugFlags::PROFILER_DBG);
+ debug_flags.toggle(DebugFlags::PROFILER_DBG | DebugFlags::COMPACT_PROFILER);
wrench.api.send_debug_cmd(DebugCommand::SetFlags(debug_flags));
}
@@ -874,6 +841,11 @@ fn render<'a>(
VirtualKeyCode::Escape => {
return winit::ControlFlow::Break;
}
+ VirtualKeyCode::A => {
+ debug_flags.toggle(DebugFlags::DISABLE_PICTURE_CACHING);
+ wrench.api.send_debug_cmd(DebugCommand::SetFlags(debug_flags));
+ do_render = true;
+ }
VirtualKeyCode::B => {
debug_flags.toggle(DebugFlags::INVALIDATION_DBG);
wrench.api.send_debug_cmd(DebugCommand::SetFlags(debug_flags));
@@ -894,6 +866,11 @@ fn render<'a>(
wrench.api.send_debug_cmd(DebugCommand::SetFlags(debug_flags));
do_render = true;
}
+ VirtualKeyCode::S => {
+ debug_flags.toggle(DebugFlags::COMPACT_PROFILER);
+ wrench.api.send_debug_cmd(DebugCommand::SetFlags(debug_flags));
+ do_render = true;
+ }
VirtualKeyCode::D => {
debug_flags.toggle(DebugFlags::PICTURE_CACHING_DBG);
wrench.api.send_debug_cmd(DebugCommand::SetFlags(debug_flags));
@@ -948,6 +925,21 @@ fn render<'a>(
let path = PathBuf::from("../captures/wrench");
wrench.api.save_capture(path, CaptureBits::all());
}
+ VirtualKeyCode::Up | VirtualKeyCode::Down => {
+ let mut txn = Transaction::new();
+
+ let offset = match vk {
+ winit::VirtualKeyCode::Up => LayoutVector2D::new(0.0, 10.0),
+ winit::VirtualKeyCode::Down => LayoutVector2D::new(0.0, -10.0),
+ _ => unreachable!("Should not see non directional keys here.")
+ };
+
+ txn.scroll(ScrollLocation::Delta(offset), cursor_position);
+ txn.generate_frame();
+ wrench.api.send_transaction(wrench.document_id, txn);
+
+ do_frame = true;
+ }
VirtualKeyCode::Add => {
let current_zoom = wrench.get_page_zoom();
let new_zoom_factor = ZoomFactor::new(current_zoom.get() + 0.1);
@@ -965,7 +957,7 @@ fn render<'a>(
wrench.document_id,
None,
cursor_position,
- HitTestFlags::empty(),
+ HitTestFlags::FIND_ALL
);
println!("Hit test results:");
diff --git a/third_party/webrender/wrench/src/perf.rs b/third_party/webrender/wrench/src/perf.rs
index a67298ce29a..bd41ba6016f 100644
--- a/third_party/webrender/wrench/src/perf.rs
+++ b/third_party/webrender/wrench/src/perf.rs
@@ -14,7 +14,7 @@ use std::sync::mpsc::Receiver;
use crate::wrench::{Wrench, WrenchThing};
use crate::yaml_frame_reader::YamlFrameReader;
use webrender::DebugFlags;
-use webrender::render_api::DebugCommand;
+use webrender::api::DebugCommand;
const COLOR_DEFAULT: &str = "\x1b[0m";
const COLOR_RED: &str = "\x1b[31m";
diff --git a/third_party/webrender/wrench/src/rawtest.rs b/third_party/webrender/wrench/src/rawtest.rs
index b86b5836176..f0315155b17 100644
--- a/third_party/webrender/wrench/src/rawtest.rs
+++ b/third_party/webrender/wrench/src/rawtest.rs
@@ -7,7 +7,6 @@ use std::sync::Arc;
use std::sync::atomic::{AtomicIsize, Ordering};
use std::sync::mpsc::Receiver;
use webrender::api::*;
-use webrender::render_api::*;
use webrender::api::units::*;
use crate::{WindowWrapper, NotifierEvent};
use crate::blob;
@@ -107,7 +106,7 @@ impl<'a> RawtestHarness<'a> {
);
epoch.0 += 1;
- txn.generate_frame(0);
+ txn.generate_frame();
self.wrench.api.send_transaction(self.wrench.document_id, txn);
}
@@ -118,6 +117,7 @@ impl<'a> RawtestHarness<'a> {
clip_id: space_and_clip.clip_id,
spatial_id: space_and_clip.spatial_id,
flags: PrimitiveFlags::default(),
+ hit_info: None,
}
}
@@ -132,6 +132,7 @@ impl<'a> RawtestHarness<'a> {
clip_id,
spatial_id,
flags: PrimitiveFlags::default(),
+ hit_info: None,
}
}
@@ -154,7 +155,7 @@ impl<'a> RawtestHarness<'a> {
None,
);
- let mut builder = DisplayListBuilder::new(self.wrench.root_pipeline_id);
+ let mut builder = DisplayListBuilder::new(self.wrench.root_pipeline_id, layout_size);
let info = self.make_common_properties(rect(0.0, 0.0, 64.0, 64.0));
builder.push_image(
@@ -181,7 +182,7 @@ impl<'a> RawtestHarness<'a> {
&DirtyRect::All,
);
- let mut builder = DisplayListBuilder::new(self.wrench.root_pipeline_id);
+ let mut builder = DisplayListBuilder::new(self.wrench.root_pipeline_id, layout_size);
let info = self.make_common_properties(rect(0.0, 0.0, 1024.0, 1024.0));
builder.push_image(
@@ -206,7 +207,7 @@ impl<'a> RawtestHarness<'a> {
&DirtyRect::All,
);
- let mut builder = DisplayListBuilder::new(self.wrench.root_pipeline_id);
+ let mut builder = DisplayListBuilder::new(self.wrench.root_pipeline_id, layout_size);
let info = self.make_common_properties(rect(0.0, 0.0, 1024.0, 1024.0));
builder.push_image(
@@ -242,7 +243,7 @@ impl<'a> RawtestHarness<'a> {
Some(128),
);
- let mut builder = DisplayListBuilder::new(self.wrench.root_pipeline_id);
+ let mut builder = DisplayListBuilder::new(self.wrench.root_pipeline_id, layout_size);
let info = self.make_common_properties(rect(448.899994, 74.0, 151.000031, 56.));
@@ -306,7 +307,7 @@ impl<'a> RawtestHarness<'a> {
called_inner.fetch_add(1, Ordering::SeqCst);
});
- let mut builder = DisplayListBuilder::new(self.wrench.root_pipeline_id);
+ let mut builder = DisplayListBuilder::new(self.wrench.root_pipeline_id, layout_size);
let root_space_and_clip = SpaceAndClipInfo::root_scroll(self.wrench.root_pipeline_id);
let clip_id = builder.define_clip_rect(
@@ -319,6 +320,7 @@ impl<'a> RawtestHarness<'a> {
clip_id,
spatial_id: root_space_and_clip.spatial_id,
flags: PrimitiveFlags::default(),
+ hit_info: None,
};
// setup some malicious image size parameters
@@ -389,7 +391,7 @@ impl<'a> RawtestHarness<'a> {
Some(100),
);
- let mut builder = DisplayListBuilder::new(self.wrench.root_pipeline_id);
+ let mut builder = DisplayListBuilder::new(self.wrench.root_pipeline_id, layout_size);
let image_size = size2(400.0, 400.0);
@@ -404,6 +406,7 @@ impl<'a> RawtestHarness<'a> {
clip_id,
spatial_id: root_space_and_clip.spatial_id,
flags: PrimitiveFlags::default(),
+ hit_info: None,
};
builder.push_repeating_image(
@@ -485,7 +488,7 @@ impl<'a> RawtestHarness<'a> {
Some(128),
);
- let mut builder = DisplayListBuilder::new(self.wrench.root_pipeline_id);
+ let mut builder = DisplayListBuilder::new(self.wrench.root_pipeline_id, layout_size);
let root_space_and_clip = SpaceAndClipInfo::root_scroll(self.wrench.root_pipeline_id);
let clip_id = builder.define_clip_rect(
@@ -498,6 +501,7 @@ impl<'a> RawtestHarness<'a> {
clip_id,
spatial_id: root_space_and_clip.spatial_id,
flags: PrimitiveFlags::default(),
+ hit_info: None,
};
builder.push_repeating_image(
@@ -529,7 +533,7 @@ impl<'a> RawtestHarness<'a> {
size: size2(400, 400),
});
- let mut builder = DisplayListBuilder::new(self.wrench.root_pipeline_id);
+ let mut builder = DisplayListBuilder::new(self.wrench.root_pipeline_id, layout_size);
let root_space_and_clip = SpaceAndClipInfo::root_scroll(self.wrench.root_pipeline_id);
let clip_id = builder.define_clip_rect(
@@ -542,6 +546,7 @@ impl<'a> RawtestHarness<'a> {
clip_id,
spatial_id: root_space_and_clip.spatial_id,
flags: PrimitiveFlags::default(),
+ hit_info: None,
};
builder.push_repeating_image(
@@ -575,7 +580,7 @@ impl<'a> RawtestHarness<'a> {
Some(128),
);
- let mut builder = DisplayListBuilder::new(self.wrench.root_pipeline_id);
+ let mut builder = DisplayListBuilder::new(self.wrench.root_pipeline_id, layout_size);
let root_space_and_clip = SpaceAndClipInfo::root_scroll(self.wrench.root_pipeline_id);
let clip_id = builder.define_clip_rect(
@@ -588,6 +593,7 @@ impl<'a> RawtestHarness<'a> {
clip_id,
spatial_id: root_space_and_clip.spatial_id,
flags: PrimitiveFlags::default(),
+ hit_info: None,
};
builder.push_repeating_image(
@@ -640,7 +646,7 @@ impl<'a> RawtestHarness<'a> {
None,
);
- let mut builder = DisplayListBuilder::new(self.wrench.root_pipeline_id);
+ let mut builder = DisplayListBuilder::new(self.wrench.root_pipeline_id, layout_size);
let info = self.make_common_properties(rect(0., 0.0, 1510., 1510.));
@@ -666,7 +672,7 @@ impl<'a> RawtestHarness<'a> {
let mut epoch = Epoch(1);
- let mut builder = DisplayListBuilder::new(self.wrench.root_pipeline_id);
+ let mut builder = DisplayListBuilder::new(self.wrench.root_pipeline_id, layout_size);
let info = self.make_common_properties(rect(-10000., 0.0, 1510., 1510.));
@@ -698,7 +704,7 @@ impl<'a> RawtestHarness<'a> {
&rect(10, 10, 100, 100).into(),
);
- let mut builder = DisplayListBuilder::new(self.wrench.root_pipeline_id);
+ let mut builder = DisplayListBuilder::new(self.wrench.root_pipeline_id, layout_size);
let info = self.make_common_properties(rect(0., 0.0, 1510., 1510.));
@@ -765,7 +771,7 @@ impl<'a> RawtestHarness<'a> {
});
// draw the blob the first time
- let mut builder = DisplayListBuilder::new(self.wrench.root_pipeline_id);
+ let mut builder = DisplayListBuilder::new(self.wrench.root_pipeline_id, layout_size);
let info = self.make_common_properties(rect(0.0, 60.0, 200.0, 200.0));
builder.push_image(
@@ -788,7 +794,7 @@ impl<'a> RawtestHarness<'a> {
// draw the blob image a second time at a different location
// make a new display list that refers to the first image
- let mut builder = DisplayListBuilder::new(self.wrench.root_pipeline_id);
+ let mut builder = DisplayListBuilder::new(self.wrench.root_pipeline_id, layout_size);
let info = self.make_common_properties(rect(1.0, 60.0, 200.0, 200.0));
builder.push_image(
&info,
@@ -872,7 +878,7 @@ impl<'a> RawtestHarness<'a> {
});
// create two blob images and draw them
- let mut builder = DisplayListBuilder::new(self.wrench.root_pipeline_id);
+ let mut builder = DisplayListBuilder::new(self.wrench.root_pipeline_id, layout_size);
let info = self.make_common_properties(rect(0.0, 60.0, 200.0, 200.0));
let info2 = self.make_common_properties(rect(200.0, 60.0, 200.0, 200.0));
let push_images = |builder: &mut DisplayListBuilder| {
@@ -918,7 +924,7 @@ impl<'a> RawtestHarness<'a> {
&rect(100, 100, 100, 100).into(),
);
- let mut builder = DisplayListBuilder::new(self.wrench.root_pipeline_id);
+ let mut builder = DisplayListBuilder::new(self.wrench.root_pipeline_id, layout_size);
push_images(&mut builder);
self.submit_dl(&mut epoch, layout_size, builder, txn);
let _pixels_second = self.render_and_get_pixels(window_rect);
@@ -933,7 +939,7 @@ impl<'a> RawtestHarness<'a> {
&rect(200, 200, 100, 100).into(),
);
- let mut builder = DisplayListBuilder::new(self.wrench.root_pipeline_id);
+ let mut builder = DisplayListBuilder::new(self.wrench.root_pipeline_id, layout_size);
push_images(&mut builder);
self.submit_dl(&mut epoch, layout_size, builder, txn);
let _pixels_third = self.render_and_get_pixels(window_rect);
@@ -972,7 +978,7 @@ impl<'a> RawtestHarness<'a> {
};
// draw the blobs the first time
- let mut builder = DisplayListBuilder::new(self.wrench.root_pipeline_id);
+ let mut builder = DisplayListBuilder::new(self.wrench.root_pipeline_id, layout_size);
let info = self.make_common_properties(rect(0.0, 60.0, 200.0, 200.0));
builder.push_image(
@@ -1000,7 +1006,7 @@ impl<'a> RawtestHarness<'a> {
);
// make a new display list that refers to the first image
- let mut builder = DisplayListBuilder::new(self.wrench.root_pipeline_id);
+ let mut builder = DisplayListBuilder::new(self.wrench.root_pipeline_id, layout_size);
let info = self.make_common_properties(rect(0.0, 60.0, 200.0, 200.0));
builder.push_image(
&info,
@@ -1025,7 +1031,7 @@ impl<'a> RawtestHarness<'a> {
);
// make a new display list that refers to the first image
- let mut builder = DisplayListBuilder::new(self.wrench.root_pipeline_id);
+ let mut builder = DisplayListBuilder::new(self.wrench.root_pipeline_id, layout_size);
let info = self.make_common_properties(rect(0.0, 60.0, 200.0, 200.0));
builder.push_image(
&info,
@@ -1056,7 +1062,7 @@ impl<'a> RawtestHarness<'a> {
let layout_size = LayoutSize::new(400., 400.);
let mut do_test = |should_try_and_fail| {
- let mut builder = DisplayListBuilder::new(self.wrench.root_pipeline_id);
+ let mut builder = DisplayListBuilder::new(self.wrench.root_pipeline_id, layout_size);
let spatial_id = SpatialId::root_scroll_node(self.wrench.root_pipeline_id);
let clip_id = builder.define_clip_rect(
@@ -1104,6 +1110,7 @@ impl<'a> RawtestHarness<'a> {
clip_id,
spatial_id,
flags: PrimitiveFlags::default(),
+ hit_info: None,
};
builder.push_line(
&info,
@@ -1159,7 +1166,7 @@ impl<'a> RawtestHarness<'a> {
let layout_size = LayoutSize::new(400., 400.);
let mut do_test = |shadow_is_red| {
- let mut builder = DisplayListBuilder::new(self.wrench.root_pipeline_id);
+ let mut builder = DisplayListBuilder::new(self.wrench.root_pipeline_id, layout_size);
let shadow_color = if shadow_is_red {
ColorF::new(1.0, 0.0, 0.0, 1.0)
} else {
@@ -1218,7 +1225,7 @@ impl<'a> RawtestHarness<'a> {
None,
);
- let mut builder = DisplayListBuilder::new(self.wrench.root_pipeline_id);
+ let mut builder = DisplayListBuilder::new(self.wrench.root_pipeline_id, layout_size);
let info = self.make_common_properties(rect(300.0, 70.0, 150.0, 50.0));
builder.push_image(
@@ -1239,7 +1246,7 @@ impl<'a> RawtestHarness<'a> {
builder.finalize(),
false,
);
- txn.generate_frame(0);
+ txn.generate_frame();
self.wrench.api.send_transaction(self.wrench.document_id, txn);
@@ -1250,7 +1257,7 @@ impl<'a> RawtestHarness<'a> {
// 3. set a different scene
- builder = DisplayListBuilder::new(self.wrench.root_pipeline_id);
+ builder = DisplayListBuilder::new(self.wrench.root_pipeline_id, layout_size);
let mut txn = Transaction::new();
txn.set_display_list(
@@ -1274,7 +1281,7 @@ impl<'a> RawtestHarness<'a> {
// 6. rebuild the scene and compare again
let mut txn = Transaction::new();
txn.set_root_pipeline(captured.root_pipeline_id.unwrap());
- txn.generate_frame(0);
+ txn.generate_frame();
self.wrench.api.send_transaction(captured.document_id, txn);
let pixels2 = self.render_and_get_pixels(window_rect);
self.compare_pixels(pixels0, pixels2, window_rect.size);
@@ -1285,9 +1292,9 @@ impl<'a> RawtestHarness<'a> {
let layout_size = LayoutSize::new(120.0, 0.0);
let window_size = DeviceIntSize::new(layout_size.width as i32, layout_size.height as i32);
- let doc_id = self.wrench.api.add_document(window_size);
+ let doc_id = self.wrench.api.add_document(window_size, 1);
- let mut builder = DisplayListBuilder::new(self.wrench.root_pipeline_id);
+ let mut builder = DisplayListBuilder::new(self.wrench.root_pipeline_id, layout_size);
let info = self.make_common_properties(LayoutRect::new(LayoutPoint::zero(),
LayoutSize::new(100.0, 100.0)));
builder.push_rect(
@@ -1305,12 +1312,12 @@ impl<'a> RawtestHarness<'a> {
builder.finalize(),
false,
);
- txn.generate_frame(0);
+ txn.generate_frame();
self.wrench.api.send_transaction(doc_id, txn);
// Ensure we get a notification from rendering the above, even though
// there are zero visible pixels
- assert!(self.rx.recv().unwrap() == NotifierEvent::WakeUp { composite_needed: true });
+ assert!(self.rx.recv().unwrap() == NotifierEvent::WakeUp);
}
@@ -1318,24 +1325,20 @@ impl<'a> RawtestHarness<'a> {
println!("\thit testing test...");
let layout_size = LayoutSize::new(400., 400.);
- let mut builder = DisplayListBuilder::new(self.wrench.root_pipeline_id);
+ let mut builder = DisplayListBuilder::new(self.wrench.root_pipeline_id, layout_size);
// Add a rectangle that covers the entire scene.
- let info = self.make_common_properties(LayoutRect::new(LayoutPoint::zero(), layout_size));
- builder.push_hit_test(
- &info,
- (0, 1),
- );
+ let mut info = self.make_common_properties(LayoutRect::new(LayoutPoint::zero(), layout_size));
+ info.hit_info = Some((0, 1));
+ builder.push_rect(&info, info.clip_rect, ColorF::new(1.0, 1.0, 1.0, 1.0));
// Add a simple 100x100 rectangle at 100,0.
- let info = self.make_common_properties(LayoutRect::new(
+ let mut info = self.make_common_properties(LayoutRect::new(
LayoutPoint::new(100., 0.),
LayoutSize::new(100., 100.)
));
- builder.push_hit_test(
- &info,
- (0, 2),
- );
+ info.hit_info = Some((0, 2));
+ builder.push_rect(&info, info.clip_rect, ColorF::new(1.0, 1.0, 1.0, 1.0));
let space_and_clip = SpaceAndClipInfo::root_scroll(self.wrench.root_pipeline_id);
@@ -1353,14 +1356,16 @@ impl<'a> RawtestHarness<'a> {
&space_and_clip,
make_rounded_complex_clip(&rect, 20.),
);
- builder.push_hit_test(
+ builder.push_rect(
&CommonItemProperties {
+ hit_info: Some((0, 4)),
clip_rect: rect,
clip_id: temp_clip_id,
spatial_id: space_and_clip.spatial_id,
flags: PrimitiveFlags::default(),
},
- (0, 4),
+ rect,
+ ColorF::new(1.0, 1.0, 1.0, 1.0),
);
// Add a rectangle that is clipped by a ClipChain containing a rounded rect.
@@ -1370,14 +1375,16 @@ impl<'a> RawtestHarness<'a> {
make_rounded_complex_clip(&rect, 20.),
);
let clip_chain_id = builder.define_clip_chain(None, vec![clip_id]);
- builder.push_hit_test(
+ builder.push_rect(
&CommonItemProperties {
+ hit_info: Some((0, 5)),
clip_rect: rect,
clip_id: ClipId::ClipChain(clip_chain_id),
spatial_id: space_and_clip.spatial_id,
flags: PrimitiveFlags::default(),
},
- (0, 5),
+ rect,
+ ColorF::new(1.0, 1.0, 1.0, 1.0),
);
let mut epoch = Epoch(0);
@@ -1393,7 +1400,7 @@ impl<'a> RawtestHarness<'a> {
self.wrench.document_id,
None,
point,
- HitTetFlags::empty(),
+ HitTestFlags::FIND_ALL,
)
};
@@ -1444,7 +1451,7 @@ impl<'a> RawtestHarness<'a> {
self.wrench.api.send_message(ApiMsg::DebugCommand(DebugCommand::ClearCaches(ClearCache::all())));
let layout_size = LayoutSize::new(400., 400.);
- let builder = DisplayListBuilder::new(self.wrench.root_pipeline_id);
+ let builder = DisplayListBuilder::new(self.wrench.root_pipeline_id, layout_size);
let txn = Transaction::new();
let mut epoch = Epoch(0);
diff --git a/third_party/webrender/wrench/src/reftest.rs b/third_party/webrender/wrench/src/reftest.rs
index 77c20341b79..e05f194105a 100644
--- a/third_party/webrender/wrench/src/reftest.rs
+++ b/third_party/webrender/wrench/src/reftest.rs
@@ -19,7 +19,6 @@ use std::process::Command;
use std::sync::mpsc::Receiver;
use webrender::RenderResults;
use webrender::api::*;
-use webrender::render_api::*;
use webrender::api::units::*;
use crate::wrench::{Wrench, WrenchThing};
use crate::yaml_frame_reader::YamlFrameReader;
@@ -77,6 +76,9 @@ enum ExtraCheck {
DrawCalls(usize),
AlphaTargets(usize),
ColorTargets(usize),
+ /// Checks the dirty region when rendering the test at |index| in the
+ /// sequence, and compares its serialization to |region|.
+ DirtyRegion { index: usize, region: String },
}
impl ExtraCheck {
@@ -88,6 +90,9 @@ impl ExtraCheck {
x == results.last().unwrap().stats.alpha_target_count,
ExtraCheck::ColorTargets(x) =>
x == results.last().unwrap().stats.color_target_count,
+ ExtraCheck::DirtyRegion { index, ref region } => {
+ *region == format!("{}", results[index].recorded_dirty_regions[0])
+ }
}
}
}
@@ -367,6 +372,7 @@ impl ReftestManifest {
let mut disable_dual_source_blending = false;
let mut zoom_factor = 1.0;
let mut allow_mipmaps = false;
+ let mut dirty_region_index = 0;
let mut force_subpixel_aa_where_possible = None;
let mut parse_command = |token: &str| -> bool {
@@ -429,6 +435,15 @@ impl ReftestManifest {
let (_, args, _) = parse_function(function);
extra_checks.push(ExtraCheck::ColorTargets(args[0].parse().unwrap()));
}
+ function if function.starts_with("dirty(") => {
+ let (_, args, _) = parse_function(function);
+ let region: String = args[0].parse().unwrap();
+ extra_checks.push(ExtraCheck::DirtyRegion {
+ index: dirty_region_index,
+ region,
+ });
+ dirty_region_index += 1;
+ }
options if options.starts_with("options(") => {
let (_, args, _) = parse_function(options);
if args.iter().any(|arg| arg == &OPTION_DISABLE_SUBPX) {
@@ -497,7 +512,7 @@ impl ReftestManifest {
let op = match op {
Some(op) => op,
None => {
- assert!(paths.is_empty(), "paths = {:?}", paths);
+ assert!(paths.is_empty(), format!("paths = {:?}", paths));
continue;
}
};
@@ -509,14 +524,6 @@ impl ReftestManifest {
let reference = paths.pop().unwrap();
let test = paths;
- if environment.platform == "android" {
- // Add some fuzz on mobile as we do for non-wrench reftests.
- // First remove the ranges with difference <= 2, otherwise they might cause the
- // test to fail before the new range is picked up.
- fuzziness.retain(|fuzzy| fuzzy.max_difference > 2);
- fuzziness.push(RefTestFuzzy { max_difference: 2, num_differences: std::usize::MAX });
- }
-
// to avoid changing the meaning of existing tests, the case of
// only a single (or no) 'fuzzy' keyword means we use the max
// of that fuzzy and options.allow_.. (we don't want that to
@@ -739,9 +746,7 @@ impl<'a> ReftestHarness<'a> {
}
fn run_reftest(&mut self, t: &Reftest) -> bool {
- let test_name = t.to_string();
- println!("REFTEST {}", test_name);
- profile_scope!("wrench reftest", text: &test_name);
+ println!("REFTEST {}", t);
self.wrench
.api
@@ -838,14 +843,7 @@ impl<'a> ReftestHarness<'a> {
}
let reference = match reference_image {
- Some(image) => {
- let save_all_png = false; // flip to true to update all the tests!
- if save_all_png {
- let img = images.last().unwrap();
- save_flipped(&t.reference, img.data.clone(), img.size);
- }
- image
- }
+ Some(image) => image,
None => {
let output = self.render_yaml(
&t.reference,
@@ -970,7 +968,7 @@ impl<'a> ReftestHarness<'a> {
assert!(
size.width <= window_size.width &&
size.height <= window_size.height,
- "size={:?} ws={:?}", size, window_size
+ format!("size={:?} ws={:?}", size, window_size)
);
// taking the bottom left sub-rectangle
diff --git a/third_party/webrender/wrench/src/test_invalidation.rs b/third_party/webrender/wrench/src/test_invalidation.rs
deleted file mode 100644
index badcfae8cf1..00000000000
--- a/third_party/webrender/wrench/src/test_invalidation.rs
+++ /dev/null
@@ -1,129 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-use crate::NotifierEvent;
-use crate::WindowWrapper;
-use std::path::PathBuf;
-use std::sync::mpsc::Receiver;
-use crate::wrench::{Wrench, WrenchThing};
-use crate::yaml_frame_reader::YamlFrameReader;
-use webrender::{PictureCacheDebugInfo, TileDebugInfo};
-use webrender::api::units::*;
-
-pub struct TestHarness<'a> {
- wrench: &'a mut Wrench,
- window: &'a mut WindowWrapper,
- rx: Receiver<NotifierEvent>,
-}
-
-struct RenderResult {
- pc_debug: PictureCacheDebugInfo,
- composite_needed: bool,
-}
-
-// Convenience method to build a picture rect
-fn pr(x: f32, y: f32, w: f32, h: f32) -> PictureRect {
- PictureRect::new(
- PicturePoint::new(x, y),
- PictureSize::new(w, h),
- )
-}
-
-impl<'a> TestHarness<'a> {
- pub fn new(
- wrench: &'a mut Wrench,
- window: &'a mut WindowWrapper,
- rx: Receiver<NotifierEvent>
- ) -> Self {
- TestHarness {
- wrench,
- window,
- rx,
- }
- }
-
- /// Main entry point for invalidation tests
- pub fn run(
- mut self,
- ) {
- // List all invalidation tests here
- self.test_basic();
- self.test_composite_nop();
- }
-
- /// Simple validation / proof of concept of invalidation testing
- fn test_basic(
- &mut self,
- ) {
- // Render basic.yaml, ensure that the valid/dirty rects are as expected
- let results = self.render_yaml("basic");
- let tile_info = results.pc_debug.slice(0).tile(0, 0).as_dirty();
- assert_eq!(
- tile_info.local_valid_rect,
- pr(100.0, 100.0, 500.0, 100.0),
- );
- assert_eq!(
- tile_info.local_dirty_rect,
- pr(100.0, 100.0, 500.0, 100.0),
- );
-
- // Render it again and ensure the tile was considered valid (no rasterization was done)
- let results = self.render_yaml("basic");
- assert_eq!(*results.pc_debug.slice(0).tile(0, 0), TileDebugInfo::Valid);
- }
-
- /// Ensure WR detects composites are needed for position changes within a single tile.
- fn test_composite_nop(
- &mut self,
- ) {
- // Render composite_nop_1.yaml, ensure that the valid/dirty rects are as expected
- let results = self.render_yaml("composite_nop_1");
- let tile_info = results.pc_debug.slice(0).tile(0, 0).as_dirty();
- assert_eq!(
- tile_info.local_valid_rect,
- pr(100.0, 100.0, 100.0, 100.0),
- );
- assert_eq!(
- tile_info.local_dirty_rect,
- pr(100.0, 100.0, 100.0, 100.0),
- );
-
- // Render composite_nop_2.yaml, ensure that the valid/dirty rects are as expected
- let results = self.render_yaml("composite_nop_2");
- let tile_info = results.pc_debug.slice(0).tile(0, 0).as_dirty();
- assert_eq!(
- tile_info.local_valid_rect,
- pr(100.0, 120.0, 100.0, 100.0),
- );
- assert_eq!(
- tile_info.local_dirty_rect,
- pr(100.0, 120.0, 100.0, 100.0),
- );
-
- // Main part of this test - ensure WR detects a composite is required in this case
- assert!(results.composite_needed);
- }
-
- /// Render a YAML file, and return the picture cache debug info
- fn render_yaml(
- &mut self,
- filename: &str,
- ) -> RenderResult {
- let path = format!("invalidation/{}.yaml", filename);
- let mut reader = YamlFrameReader::new(&PathBuf::from(path));
-
- reader.do_frame(self.wrench);
- let composite_needed = match self.rx.recv().unwrap() {
- NotifierEvent::WakeUp { composite_needed } => composite_needed,
- NotifierEvent::ShutDown => unreachable!(),
- };
- let results = self.wrench.render();
- self.window.swap_buffers();
-
- RenderResult {
- pc_debug: results.picture_cache_debug,
- composite_needed,
- }
- }
-}
diff --git a/third_party/webrender/wrench/src/wrench.rs b/third_party/webrender/wrench/src/wrench.rs
index 9ae57c4af07..bce7ef6e476 100644
--- a/third_party/webrender/wrench/src/wrench.rs
+++ b/third_party/webrender/wrench/src/wrench.rs
@@ -17,7 +17,6 @@ use std::sync::mpsc::Receiver;
use time;
use webrender;
use webrender::api::*;
-use webrender::render_api::*;
use webrender::api::units::*;
use webrender::{DebugFlags, RenderResults, ShaderPrecacheFlags};
use crate::{WindowWrapper, NotifierEvent};
@@ -96,7 +95,7 @@ impl RenderNotifier for Notifier {
Box::new(Notifier(self.0.clone()))
}
- fn wake_up(&self, _composite_needed: bool) {
+ fn wake_up(&self) {
self.update(false);
}
@@ -230,6 +229,7 @@ impl Wrench {
size: DeviceIntSize,
do_rebuild: bool,
no_subpixel_aa: bool,
+ no_picture_caching: bool,
verbose: bool,
no_scissor: bool,
no_batch: bool,
@@ -263,14 +263,12 @@ impl Wrench {
precache_flags,
blob_image_handler: Some(Box::new(blob::CheckerboardRenderer::new(callbacks.clone()))),
chase_primitive,
+ enable_picture_caching: !no_picture_caching,
testing: true,
- max_internal_texture_size: Some(8196), // Needed for rawtest::test_resize_image.
+ max_texture_size: Some(8196), // Needed for rawtest::test_resize_image.
allow_dual_source_blending: !disable_dual_source_blending,
- allow_advanced_blend_equation: window.is_software(),
+ allow_advanced_blend_equation: true,
dump_shader_source,
- // SWGL doesn't support the GL_ALWAYS depth comparison function used by
- // `clear_caches_with_quads`, but scissored clears work well.
- clear_caches_with_quads: !window.is_software(),
..Default::default()
};
@@ -291,10 +289,11 @@ impl Wrench {
notifier,
opts,
None,
+ size,
).unwrap();
let api = sender.create_api();
- let document_id = api.add_document(size);
+ let document_id = api.add_document(size, 0);
let graphics_api = renderer.get_graphics_api_info();
let zoom_factor = ZoomFactor::new(zoom_factor);
@@ -586,7 +585,7 @@ impl Wrench {
pub fn send_lists(
&mut self,
frame_number: u32,
- display_lists: Vec<(PipelineId, BuiltDisplayList)>,
+ display_lists: Vec<(PipelineId, LayoutSize, BuiltDisplayList)>,
scroll_offsets: &HashMap<ExternalScrollId, LayoutPoint>,
) {
let root_background_color = Some(ColorF::new(1.0, 1.0, 1.0, 1.0));
@@ -606,7 +605,7 @@ impl Wrench {
txn.scroll_node_with_id(*offset, *id, ScrollClamping::NoClamping);
}
- txn.generate_frame(0);
+ txn.generate_frame();
self.api.send_transaction(self.document_id, txn);
}
@@ -620,14 +619,14 @@ impl Wrench {
self.renderer.update();
let _ = self.renderer.flush_pipeline_info();
self.renderer
- .render(self.window_size, 0)
+ .render(self.window_size)
.expect("errors encountered during render!")
}
pub fn refresh(&mut self) {
self.begin_frame();
let mut txn = Transaction::new();
- txn.generate_frame(0);
+ txn.generate_frame();
self.api.send_transaction(self.document_id, txn);
}
diff --git a/third_party/webrender/wrench/src/yaml_frame_reader.rs b/third_party/webrender/wrench/src/yaml_frame_reader.rs
index 492f155b667..e3bf04ed42e 100644
--- a/third_party/webrender/wrench/src/yaml_frame_reader.rs
+++ b/third_party/webrender/wrench/src/yaml_frame_reader.rs
@@ -15,9 +15,7 @@ use std::io::Read;
use std::path::{Path, PathBuf};
use std::usize;
use webrender::api::*;
-use webrender::render_api::*;
use webrender::api::units::*;
-use webrender::api::FillRule;
use crate::wrench::{FontDescriptor, Wrench, WrenchThing};
use crate::yaml_helper::{StringEnum, YamlHelper, make_perspective};
use yaml_rust::{Yaml, YamlLoader};
@@ -106,7 +104,7 @@ impl LocalExternalImageHandler {
pub fn add_image(&mut self,
device: &webrender::Device,
desc: ImageDescriptor,
- target: ImageBufferKind,
+ target: TextureTarget,
image_data: ImageData,
) -> ImageData {
let (image_id, channel_idx) = match image_data {
@@ -236,13 +234,8 @@ fn generate_checkerboard_image(
}
}
- let flags = match kind {
- CheckerboardKind::BlackGrey => ImageDescriptorFlags::IS_OPAQUE,
- CheckerboardKind::BlackTransparent => ImageDescriptorFlags::empty(),
- };
-
(
- ImageDescriptor::new(width as i32, height as i32, ImageFormat::BGRA8, flags),
+ ImageDescriptor::new(width as i32, height as i32, ImageFormat::BGRA8, ImageDescriptorFlags::IS_OPAQUE),
ImageData::new(pixels),
)
}
@@ -329,7 +322,7 @@ pub struct YamlFrameReader {
aux_dir: PathBuf,
frame_count: u32,
- display_lists: Vec<(PipelineId, BuiltDisplayList)>,
+ display_lists: Vec<(PipelineId, LayoutSize, BuiltDisplayList)>,
include_only: Vec<String>,
@@ -339,7 +332,6 @@ pub struct YamlFrameReader {
/// A HashMap of offsets which specify what scroll offsets particular
/// scroll layers should be initialized with.
scroll_offsets: HashMap<ExternalScrollId, LayoutPoint>,
- next_external_scroll_id: u64,
image_map: HashMap<(PathBuf, Option<i64>), (ImageKey, LayoutSize)>,
@@ -390,7 +382,6 @@ impl YamlFrameReader {
built_frame: usize::MAX,
keyframes: None,
external_image_handler: Some(Box::new(LocalExternalImageHandler::new())),
- next_external_scroll_id: 1000, // arbitrary to easily see in logs which are implicit
}
}
@@ -485,12 +476,14 @@ impl YamlFrameReader {
self.spatial_id_stack.clear();
self.spatial_id_stack.push(SpatialId::root_scroll_node(pipeline_id));
- let mut builder = DisplayListBuilder::new(pipeline_id);
+ let content_size = self.get_root_size_from_yaml(wrench, yaml);
+ let mut builder = DisplayListBuilder::new(pipeline_id, content_size);
let mut info = CommonItemProperties {
clip_rect: LayoutRect::zero(),
clip_id: ClipId::invalid(),
spatial_id: SpatialId::new(0, PipelineId::dummy()),
flags: PrimitiveFlags::default(),
+ hit_info: None,
};
self.add_stacking_context_from_yaml(&mut builder, wrench, yaml, true, &mut info);
self.display_lists.push(builder.finalize());
@@ -762,12 +755,13 @@ impl YamlFrameReader {
// ensure it gets created as such
let external_target = match item["external-target"].as_str() {
Some(ref s) => match &s[..] {
- "2d" => ImageBufferKind::Texture2D,
- "rect" => ImageBufferKind::TextureRect,
+ "2d" => TextureTarget::Default,
+ "array" => TextureTarget::Array,
+ "rect" => TextureTarget::Rect,
_ => panic!("Unsupported external texture target."),
}
None => {
- ImageBufferKind::Texture2D
+ TextureTarget::Default
}
};
@@ -1004,12 +998,7 @@ impl YamlFrameReader {
&info.clip_rect
);
- if let Some(tag) = self.to_hit_testing_tag(&item["hit-testing-tag"]) {
- dl.push_hit_test(
- &info,
- tag,
- );
- }
+ dl.push_hit_test(&info);
}
fn handle_line(
@@ -1754,6 +1743,7 @@ impl YamlFrameReader {
clip_rect,
clip_id: space_and_clip.clip_id,
spatial_id: space_and_clip.spatial_id,
+ hit_info: self.to_hit_testing_tag(&item["hit-testing-tag"]),
flags,
};
@@ -1812,12 +1802,11 @@ impl YamlFrameReader {
let numeric_id = yaml["id"].as_i64().map(|id| id as u64);
- let external_id = ExternalScrollId(self.next_external_scroll_id, dl.pipeline_id);
- self.next_external_scroll_id += 1;
-
- if let Some(size) = yaml["scroll-offset"].as_point() {
- self.scroll_offsets.insert(external_id, LayoutPoint::new(size.x, size.y));
- }
+ let external_id = yaml["scroll-offset"].as_point().map(|size| {
+ let id = ExternalScrollId((self.scroll_offsets.len() + 1) as u64, dl.pipeline_id);
+ self.scroll_offsets.insert(id, LayoutPoint::new(size.x, size.y));
+ id
+ });
let space_and_clip = dl.define_scroll_frame(
&self.top_space_and_clip(),
@@ -1983,8 +1972,6 @@ impl YamlFrameReader {
space_and_clip.clip_id = dl.define_clip_image_mask(
&space_and_clip,
image_mask,
- &vec![],
- FillRule::Nonzero,
);
}
@@ -2007,6 +1994,13 @@ impl YamlFrameReader {
}
}
+ fn get_root_size_from_yaml(&mut self, wrench: &mut Wrench, yaml: &Yaml) -> LayoutSize {
+ yaml["bounds"]
+ .as_rect()
+ .map(|rect| rect.size)
+ .unwrap_or(wrench.window_size_f32())
+ }
+
fn push_reference_frame(
&mut self,
dl: &mut DisplayListBuilder,
@@ -2041,10 +2035,7 @@ impl YamlFrameReader {
let reference_frame_kind = if !yaml["perspective"].is_badvalue() {
ReferenceFrameKind::Perspective { scrolling_relative_to: None }
} else {
- ReferenceFrameKind::Transform {
- is_2d_scale_translation: false,
- should_snap: false,
- }
+ ReferenceFrameKind::Transform
};
let transform = yaml["transform"]
@@ -2201,8 +2192,7 @@ impl WrenchThing for YamlFrameReader {
// If YAML isn't read yet, or watching source file, reload from disk.
if self.yaml_string.is_empty() || self.watch_source {
- let mut file = File::open(&self.yaml_path)
- .unwrap_or_else(|_| panic!("YAML '{:?}' doesn't exist", self.yaml_path));
+ let mut file = File::open(&self.yaml_path).unwrap();
self.yaml_string.clear();
file.read_to_string(&mut self.yaml_string).unwrap();
should_build_yaml = true;
diff --git a/third_party/webrender/wrench/src/yaml_helper.rs b/third_party/webrender/wrench/src/yaml_helper.rs
index f9974efdc75..d82f863e9cc 100644
--- a/third_party/webrender/wrench/src/yaml_helper.rs
+++ b/third_party/webrender/wrench/src/yaml_helper.rs
@@ -52,8 +52,6 @@ fn string_to_color(color: &str) -> Option<ColorF> {
"white" => Some(ColorF::new(1.0, 1.0, 1.0, 1.0)),
"black" => Some(ColorF::new(0.0, 0.0, 0.0, 1.0)),
"yellow" => Some(ColorF::new(1.0, 1.0, 0.0, 1.0)),
- "cyan" => Some(ColorF::new(0.0, 1.0, 1.0, 1.0)),
- "magenta" => Some(ColorF::new(1.0, 0.0, 1.0, 1.0)),
"transparent" => Some(ColorF::new(1.0, 1.0, 1.0, 0.0)),
s => {
let items: Vec<f32> = s.split_whitespace()
@@ -563,8 +561,8 @@ impl YamlHelper for Yaml {
("component-transfer", _, _) => {
Some(FilterOp::ComponentTransfer)
}
- ("blur", ref args, _) if args.len() == 2 => {
- Some(FilterOp::Blur(args[0].parse().unwrap(), args[1].parse().unwrap()))
+ ("blur", ref args, _) if args.len() == 1 => {
+ Some(FilterOp::Blur(args[0].parse().unwrap()))
}
("brightness", ref args, _) if args.len() == 1 => {
Some(FilterOp::Brightness(args[0].parse().unwrap()))
@@ -719,8 +717,7 @@ impl YamlHelper for Yaml {
"blur" => {
FilterPrimitiveKind::Blur(BlurPrimitive {
input: self["in"].as_filter_input().unwrap(),
- width: self["width"].as_f32().unwrap(),
- height: self["height"].as_f32().unwrap(),
+ radius: self["radius"].as_f32().unwrap(),
})
}
"opacity" => {