diff --git a/components/compositing/compositor.rs b/components/compositing/compositor.rs index 99273256d52..7358fff8e19 100644 --- a/components/compositing/compositor.rs +++ b/components/compositing/compositor.rs @@ -34,7 +34,7 @@ use touch::{TouchHandler, TouchAction}; use webrender; use webrender_api::{self, ClipId, DeviceUintRect, DeviceUintSize, LayoutPoint, LayoutVector2D}; use webrender_api::{ScrollEventPhase, ScrollLocation, ScrollClamping}; -use windowing::{self, MouseWindowEvent, WindowEvent, WindowMethods}; +use windowing::{self, MouseWindowEvent, WebRenderDebugOption, WindowEvent, WindowMethods}; #[derive(Debug, PartialEq)] enum UnableToComposite { @@ -813,9 +813,14 @@ impl IOCompositor { } } - WindowEvent::ToggleWebRenderProfiler => { + WindowEvent::ToggleWebRenderDebug(option) => { let mut flags = self.webrender.get_debug_flags(); - flags.toggle(webrender::renderer::PROFILER_DBG); + let flag = match option { + WebRenderDebugOption::Profiler => webrender::renderer::PROFILER_DBG, + WebRenderDebugOption::TextureCacheDebug => webrender::renderer::TEXTURE_CACHE_DBG, + WebRenderDebugOption::RenderTargetDebug => webrender::renderer::RENDER_TARGET_DBG, + }; + flags.toggle(flag); self.webrender.set_debug_flags(flags); self.webrender_api.generate_frame(self.webrender_document, None); } diff --git a/components/compositing/windowing.rs b/components/compositing/windowing.rs index cceaaf9fce8..8f647c0d0d6 100644 --- a/components/compositing/windowing.rs +++ b/components/compositing/windowing.rs @@ -27,6 +27,14 @@ pub enum MouseWindowEvent { MouseUp(MouseButton, TypedPoint2D), } +/// Various debug and profiling flags that WebRender supports. +#[derive(Clone)] +pub enum WebRenderDebugOption { + Profiler, + TextureCacheDebug, + RenderTargetDebug, +} + /// Events that the windowing system sends to Servo. #[derive(Clone)] pub enum WindowEvent { @@ -68,14 +76,14 @@ pub enum WindowEvent { /// Sent when a key input state changes KeyEvent(Option, Key, KeyState, KeyModifiers), /// Sent when Ctr+R/Apple+R is called to reload the current page. - /// Toggles the Web renderer profiler on and off - ToggleWebRenderProfiler, Reload(TopLevelBrowsingContextId), /// Create a new top level browsing context NewBrowser(ServoUrl, IpcSender), /// Make a top level browsing context visible, hiding the previous /// visible one. SelectBrowser(TopLevelBrowsingContextId), + /// Toggles a debug flag in WebRender + ToggleWebRenderDebug(WebRenderDebugOption), } impl Debug for WindowEvent { @@ -96,10 +104,10 @@ impl Debug for WindowEvent { WindowEvent::ResetZoom => write!(f, "ResetZoom"), WindowEvent::Navigation(..) => write!(f, "Navigation"), WindowEvent::Quit => write!(f, "Quit"), - WindowEvent::ToggleWebRenderProfiler => write!(f, "ToggleWebRenderProfiler"), WindowEvent::Reload(..) => write!(f, "Reload"), WindowEvent::NewBrowser(..) => write!(f, "NewBrowser"), WindowEvent::SelectBrowser(..) => write!(f, "SelectBrowser"), + WindowEvent::ToggleWebRenderDebug(..) => write!(f, "ToggleWebRenderDebug"), } } } diff --git a/ports/glutin/window.rs b/ports/glutin/window.rs index 1e35d36b610..ff486efbd43 100644 --- a/ports/glutin/window.rs +++ b/ports/glutin/window.rs @@ -7,7 +7,7 @@ use NestedEventLoopListener; use compositing::compositor_thread::EventLoopWaker; use compositing::windowing::{AnimationState, MouseWindowEvent}; -use compositing::windowing::{WindowEvent, WindowMethods}; +use compositing::windowing::{WebRenderDebugOption, WindowEvent, WindowMethods}; use euclid::{Point2D, Size2D, TypedPoint2D, TypedVector2D, ScaleFactor, TypedSize2D}; #[cfg(target_os = "windows")] use gdi32; @@ -1312,8 +1312,17 @@ impl WindowMethods for Window { self.event_queue.borrow_mut().push(WindowEvent::Quit); } } + (CONTROL, None, Key::F10) => { + let event = WindowEvent::ToggleWebRenderDebug(WebRenderDebugOption::RenderTargetDebug); + self.event_queue.borrow_mut().push(event); + } + (CONTROL, None, Key::F11) => { + let event = WindowEvent::ToggleWebRenderDebug(WebRenderDebugOption::TextureCacheDebug); + self.event_queue.borrow_mut().push(event); + } (CONTROL, None, Key::F12) => { - self.event_queue.borrow_mut().push(WindowEvent::ToggleWebRenderProfiler); + let event = WindowEvent::ToggleWebRenderDebug(WebRenderDebugOption::Profiler); + self.event_queue.borrow_mut().push(event); } _ => {