Add key bindings for more WR debug / profiler options.

This commit is contained in:
Glenn Watson 2017-08-15 10:45:53 +10:00
parent e23ae30489
commit e1b1bc7c96
3 changed files with 30 additions and 8 deletions

View file

@ -34,7 +34,7 @@ use touch::{TouchHandler, TouchAction};
use webrender; use webrender;
use webrender_api::{self, ClipId, DeviceUintRect, DeviceUintSize, LayoutPoint, LayoutVector2D}; use webrender_api::{self, ClipId, DeviceUintRect, DeviceUintSize, LayoutPoint, LayoutVector2D};
use webrender_api::{ScrollEventPhase, ScrollLocation, ScrollClamping}; use webrender_api::{ScrollEventPhase, ScrollLocation, ScrollClamping};
use windowing::{self, MouseWindowEvent, WindowEvent, WindowMethods}; use windowing::{self, MouseWindowEvent, WebRenderDebugOption, WindowEvent, WindowMethods};
#[derive(Debug, PartialEq)] #[derive(Debug, PartialEq)]
enum UnableToComposite { enum UnableToComposite {
@ -813,9 +813,14 @@ impl<Window: WindowMethods> IOCompositor<Window> {
} }
} }
WindowEvent::ToggleWebRenderProfiler => { WindowEvent::ToggleWebRenderDebug(option) => {
let mut flags = self.webrender.get_debug_flags(); 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.set_debug_flags(flags);
self.webrender_api.generate_frame(self.webrender_document, None); self.webrender_api.generate_frame(self.webrender_document, None);
} }

View file

@ -27,6 +27,14 @@ pub enum MouseWindowEvent {
MouseUp(MouseButton, TypedPoint2D<f32, DevicePixel>), MouseUp(MouseButton, TypedPoint2D<f32, DevicePixel>),
} }
/// Various debug and profiling flags that WebRender supports.
#[derive(Clone)]
pub enum WebRenderDebugOption {
Profiler,
TextureCacheDebug,
RenderTargetDebug,
}
/// Events that the windowing system sends to Servo. /// Events that the windowing system sends to Servo.
#[derive(Clone)] #[derive(Clone)]
pub enum WindowEvent { pub enum WindowEvent {
@ -68,14 +76,14 @@ pub enum WindowEvent {
/// Sent when a key input state changes /// Sent when a key input state changes
KeyEvent(Option<char>, Key, KeyState, KeyModifiers), KeyEvent(Option<char>, Key, KeyState, KeyModifiers),
/// Sent when Ctr+R/Apple+R is called to reload the current page. /// Sent when Ctr+R/Apple+R is called to reload the current page.
/// Toggles the Web renderer profiler on and off
ToggleWebRenderProfiler,
Reload(TopLevelBrowsingContextId), Reload(TopLevelBrowsingContextId),
/// Create a new top level browsing context /// Create a new top level browsing context
NewBrowser(ServoUrl, IpcSender<TopLevelBrowsingContextId>), NewBrowser(ServoUrl, IpcSender<TopLevelBrowsingContextId>),
/// Make a top level browsing context visible, hiding the previous /// Make a top level browsing context visible, hiding the previous
/// visible one. /// visible one.
SelectBrowser(TopLevelBrowsingContextId), SelectBrowser(TopLevelBrowsingContextId),
/// Toggles a debug flag in WebRender
ToggleWebRenderDebug(WebRenderDebugOption),
} }
impl Debug for WindowEvent { impl Debug for WindowEvent {
@ -96,10 +104,10 @@ impl Debug for WindowEvent {
WindowEvent::ResetZoom => write!(f, "ResetZoom"), WindowEvent::ResetZoom => write!(f, "ResetZoom"),
WindowEvent::Navigation(..) => write!(f, "Navigation"), WindowEvent::Navigation(..) => write!(f, "Navigation"),
WindowEvent::Quit => write!(f, "Quit"), WindowEvent::Quit => write!(f, "Quit"),
WindowEvent::ToggleWebRenderProfiler => write!(f, "ToggleWebRenderProfiler"),
WindowEvent::Reload(..) => write!(f, "Reload"), WindowEvent::Reload(..) => write!(f, "Reload"),
WindowEvent::NewBrowser(..) => write!(f, "NewBrowser"), WindowEvent::NewBrowser(..) => write!(f, "NewBrowser"),
WindowEvent::SelectBrowser(..) => write!(f, "SelectBrowser"), WindowEvent::SelectBrowser(..) => write!(f, "SelectBrowser"),
WindowEvent::ToggleWebRenderDebug(..) => write!(f, "ToggleWebRenderDebug"),
} }
} }
} }

View file

@ -7,7 +7,7 @@
use NestedEventLoopListener; use NestedEventLoopListener;
use compositing::compositor_thread::EventLoopWaker; use compositing::compositor_thread::EventLoopWaker;
use compositing::windowing::{AnimationState, MouseWindowEvent}; use compositing::windowing::{AnimationState, MouseWindowEvent};
use compositing::windowing::{WindowEvent, WindowMethods}; use compositing::windowing::{WebRenderDebugOption, WindowEvent, WindowMethods};
use euclid::{Point2D, Size2D, TypedPoint2D, TypedVector2D, ScaleFactor, TypedSize2D}; use euclid::{Point2D, Size2D, TypedPoint2D, TypedVector2D, ScaleFactor, TypedSize2D};
#[cfg(target_os = "windows")] #[cfg(target_os = "windows")]
use gdi32; use gdi32;
@ -1312,8 +1312,17 @@ impl WindowMethods for Window {
self.event_queue.borrow_mut().push(WindowEvent::Quit); 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) => { (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);
} }
_ => { _ => {