feat(windowevent): expose CaptureWebRender event

This commit is contained in:
OJ Kwon 2018-03-16 10:01:02 -07:00
parent b943a711f5
commit 7b0beedf3d
No known key found for this signature in database
GPG key ID: 6C23A45602A44DA6
4 changed files with 21 additions and 1 deletions

1
.gitignore vendored
View file

@ -22,6 +22,7 @@
Servo.app Servo.app
.config.mk.last .config.mk.last
/glfw /glfw
capture_webrender/
# Editors # Editors

View file

@ -23,6 +23,7 @@ use script_traits::CompositorEvent::{MouseMoveEvent, MouseButtonEvent, TouchEven
use servo_config::opts; use servo_config::opts;
use servo_geometry::DeviceIndependentPixel; use servo_geometry::DeviceIndependentPixel;
use std::collections::HashMap; use std::collections::HashMap;
use std::env;
use std::fs::File; use std::fs::File;
use std::rc::Rc; use std::rc::Rc;
use std::sync::mpsc::Sender; use std::sync::mpsc::Sender;
@ -30,7 +31,7 @@ use std::time::{Duration, Instant};
use style_traits::{CSSPixel, DevicePixel, PinchZoomFactor}; use style_traits::{CSSPixel, DevicePixel, PinchZoomFactor};
use style_traits::cursor::CursorKind; use style_traits::cursor::CursorKind;
use style_traits::viewport::ViewportConstraints; use style_traits::viewport::ViewportConstraints;
use time::{precise_time_ns, precise_time_s}; use time::{now, precise_time_ns, precise_time_s};
use touch::{TouchHandler, TouchAction}; use touch::{TouchHandler, TouchAction};
use webrender; use webrender;
use webrender_api::{self, DeviceUintRect, DeviceUintSize, HitTestFlags, HitTestResult}; use webrender_api::{self, DeviceUintRect, DeviceUintSize, HitTestFlags, HitTestResult};
@ -1530,6 +1531,17 @@ impl<Window: WindowMethods> IOCompositor<Window> {
txn.generate_frame(); txn.generate_frame();
self.webrender_api.send_transaction(self.webrender_document, txn); self.webrender_api.send_transaction(self.webrender_document, txn);
} }
pub fn capture_webrender(&mut self) {
match env::current_dir() {
Ok(current_dir) => {
let capture_id = now().to_timespec().sec.to_string();
let capture_path = current_dir.join("capture_webrender").join(capture_id);
self.webrender_api.save_capture(capture_path, webrender_api::CaptureBits::all());
},
Err(err) => println!("could not locate path to save captures: {:?}", err)
}
}
} }
/// Why we performed a composite. This is used for debugging. /// Why we performed a composite. This is used for debugging.

View file

@ -84,6 +84,8 @@ pub enum WindowEvent {
SelectBrowser(TopLevelBrowsingContextId), SelectBrowser(TopLevelBrowsingContextId),
/// Toggles a debug flag in WebRender /// Toggles a debug flag in WebRender
ToggleWebRenderDebug(WebRenderDebugOption), ToggleWebRenderDebug(WebRenderDebugOption),
/// Capture current WebRender
CaptureWebRender,
} }
impl Debug for WindowEvent { impl Debug for WindowEvent {
@ -108,6 +110,7 @@ impl Debug for WindowEvent {
WindowEvent::CloseBrowser(..) => write!(f, "CloseBrowser"), WindowEvent::CloseBrowser(..) => write!(f, "CloseBrowser"),
WindowEvent::SelectBrowser(..) => write!(f, "SelectBrowser"), WindowEvent::SelectBrowser(..) => write!(f, "SelectBrowser"),
WindowEvent::ToggleWebRenderDebug(..) => write!(f, "ToggleWebRenderDebug"), WindowEvent::ToggleWebRenderDebug(..) => write!(f, "ToggleWebRenderDebug"),
WindowEvent::CaptureWebRender => write!(f, "CaptureWebRender"),
} }
} }
} }

View file

@ -333,6 +333,10 @@ impl<Window> Servo<Window> where Window: WindowMethods + 'static {
self.compositor.toggle_webrender_debug(option); self.compositor.toggle_webrender_debug(option);
} }
WindowEvent::CaptureWebRender => {
self.compositor.capture_webrender();
}
WindowEvent::NewBrowser(url, response_chan) => { WindowEvent::NewBrowser(url, response_chan) => {
let msg = ConstellationMsg::NewBrowser(url, response_chan); let msg = ConstellationMsg::NewBrowser(url, response_chan);
if let Err(e) = self.constellation_chan.send(msg) { if let Err(e) = self.constellation_chan.send(msg) {