aboutsummaryrefslogtreecommitdiffstats
path: root/third_party/webrender/wrench/src/main.rs
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/webrender/wrench/src/main.rs')
-rw-r--r--third_party/webrender/wrench/src/main.rs92
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:");