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
.config.mk.last
/glfw
capture_webrender/
# Editors

View file

@ -23,6 +23,7 @@ use script_traits::CompositorEvent::{MouseMoveEvent, MouseButtonEvent, TouchEven
use servo_config::opts;
use servo_geometry::DeviceIndependentPixel;
use std::collections::HashMap;
use std::env;
use std::fs::File;
use std::rc::Rc;
use std::sync::mpsc::Sender;
@ -30,7 +31,7 @@ use std::time::{Duration, Instant};
use style_traits::{CSSPixel, DevicePixel, PinchZoomFactor};
use style_traits::cursor::CursorKind;
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 webrender;
use webrender_api::{self, DeviceUintRect, DeviceUintSize, HitTestFlags, HitTestResult};
@ -1530,6 +1531,17 @@ impl<Window: WindowMethods> IOCompositor<Window> {
txn.generate_frame();
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.

View file

@ -84,6 +84,8 @@ pub enum WindowEvent {
SelectBrowser(TopLevelBrowsingContextId),
/// Toggles a debug flag in WebRender
ToggleWebRenderDebug(WebRenderDebugOption),
/// Capture current WebRender
CaptureWebRender,
}
impl Debug for WindowEvent {
@ -108,6 +110,7 @@ impl Debug for WindowEvent {
WindowEvent::CloseBrowser(..) => write!(f, "CloseBrowser"),
WindowEvent::SelectBrowser(..) => write!(f, "SelectBrowser"),
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);
}
WindowEvent::CaptureWebRender => {
self.compositor.capture_webrender();
}
WindowEvent::NewBrowser(url, response_chan) => {
let msg = ConstellationMsg::NewBrowser(url, response_chan);
if let Err(e) = self.constellation_chan.send(msg) {