diff options
Diffstat (limited to 'third_party/webrender/wrench/src/main.rs')
-rw-r--r-- | third_party/webrender/wrench/src/main.rs | 92 |
1 files changed, 42 insertions, 50 deletions
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:"); |