diff options
author | Mukilan Thiyagarajan <mukilan@igalia.com> | 2023-09-14 15:00:42 +0530 |
---|---|---|
committer | Mukilan Thiyagarajan <mukilan@igalia.com> | 2023-09-14 15:00:42 +0530 |
commit | c385b3c9737c17d59cb02e520c3b68b232cb6497 (patch) | |
tree | ad598ffbbdfbcecd6a4cf458abe2afc702d92c27 /third_party/webrender/wrench/src | |
parent | 988e05a68b48c9e744bf49459faf41a1bd9b81d7 (diff) | |
download | servo-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.yaml | 42 | ||||
-rw-r--r-- | third_party/webrender/wrench/src/egl.rs | 2 | ||||
-rw-r--r-- | third_party/webrender/wrench/src/main.rs | 92 | ||||
-rw-r--r-- | third_party/webrender/wrench/src/perf.rs | 2 | ||||
-rw-r--r-- | third_party/webrender/wrench/src/rawtest.rs | 105 | ||||
-rw-r--r-- | third_party/webrender/wrench/src/reftest.rs | 42 | ||||
-rw-r--r-- | third_party/webrender/wrench/src/test_invalidation.rs | 129 | ||||
-rw-r--r-- | third_party/webrender/wrench/src/wrench.rs | 23 | ||||
-rw-r--r-- | third_party/webrender/wrench/src/yaml_frame_reader.rs | 62 | ||||
-rw-r--r-- | third_party/webrender/wrench/src/yaml_helper.rs | 9 |
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" => { |