aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFabrice Desré <fabrice@desre.org>2016-04-25 16:28:35 -0700
committerFabrice Desré <fabrice@desre.org>2016-04-25 18:16:42 -0700
commitaac71015933c15a36dd1ca319159f4a0e5dbbe4c (patch)
treeb0921817e2fbed6ecef95a95ac59bef054d6c8a5
parent81f6e70a623a6f11535322ed2ef954eafaf8c70c (diff)
downloadservo-aac71015933c15a36dd1ca319159f4a0e5dbbe4c.tar.gz
servo-aac71015933c15a36dd1ca319159f4a0e5dbbe4c.zip
Don't expect a native_window when using webrender
-rw-r--r--components/compositing/compositor.rs23
-rw-r--r--components/compositing/compositor_thread.rs4
2 files changed, 19 insertions, 8 deletions
diff --git a/components/compositing/compositor.rs b/components/compositing/compositor.rs
index b84516191d9..36688456333 100644
--- a/components/compositing/compositor.rs
+++ b/components/compositing/compositor.rs
@@ -93,8 +93,8 @@ pub struct IOCompositor<Window: WindowMethods> {
/// The application window.
window: Rc<Window>,
- /// The display this compositor targets.
- native_display: NativeDisplay,
+ /// The display this compositor targets. Will be None when using webrender.
+ native_display: Option<NativeDisplay>,
/// The port on which we receive messages.
port: Box<CompositorReceiver>,
@@ -401,7 +401,12 @@ impl<Window: WindowMethods> IOCompositor<Window> {
sender.create_api()
});
- let native_display = window.native_display();
+ let native_display = if state.webrender.is_some() {
+ None
+ } else {
+ Some(window.native_display())
+ };
+
IOCompositor {
window: window,
native_display: native_display,
@@ -572,7 +577,9 @@ impl<Window: WindowMethods> IOCompositor<Window> {
(Msg::ReturnUnusedNativeSurfaces(native_surfaces),
ShutdownState::NotShuttingDown) => {
- self.surface_map.insert_surfaces(&self.native_display, native_surfaces);
+ if let Some(ref native_display) = self.native_display {
+ self.surface_map.insert_surfaces(native_display, native_surfaces);
+ }
}
(Msg::ScrollFragmentPoint(pipeline_id, layer_id, point, _),
@@ -2220,7 +2227,9 @@ impl<Window: WindowMethods> IOCompositor<Window> {
fn initialize_compositing(&mut self) {
if self.webrender.is_none() {
let show_debug_borders = opts::get().show_debug_borders;
- self.context = Some(rendergl::RenderContext::new(self.native_display.clone(),
+ // We can unwrap native_display because it's only None when using webrender.
+ self.context = Some(rendergl::RenderContext::new(self.native_display
+ .expect("n_d should be Some when not using wr").clone(),
show_debug_borders,
opts::get().output_file.is_some()))
}
@@ -2309,7 +2318,9 @@ impl<Window: WindowMethods> IOCompositor<Window> {
where B: IntoIterator<Item=Box<LayerBuffer>>
{
let surfaces = buffers.into_iter().map(|buffer| buffer.native_surface);
- self.surface_map.insert_surfaces(&self.native_display, surfaces);
+ if let Some(ref native_display) = self.native_display {
+ self.surface_map.insert_surfaces(native_display, surfaces);
+ }
}
fn get_root_pipeline_id(&self) -> Option<PipelineId> {
diff --git a/components/compositing/compositor_thread.rs b/components/compositing/compositor_thread.rs
index d624e0212a9..1fa17c6d70e 100644
--- a/components/compositing/compositor_thread.rs
+++ b/components/compositing/compositor_thread.rs
@@ -128,7 +128,7 @@ impl PaintListener for Box<CompositorProxy + 'static + Send> {
// just return None in this case, since the paint thread
// will exit shortly and never actually be requested
// to paint buffers by the compositor.
- port.recv().ok()
+ port.recv().unwrap_or(None)
}
fn assign_painted_buffers(&mut self,
@@ -179,7 +179,7 @@ pub enum Msg {
/// Requests the compositor's graphics metadata. Graphics metadata is what the painter needs
/// to create surfaces that the compositor can see. On Linux this is the X display; on Mac this
/// is the pixel format.
- GetNativeDisplay(Sender<NativeDisplay>),
+ GetNativeDisplay(Sender<Option<NativeDisplay>>),
/// Tells the compositor to create or update the layers for a pipeline if necessary
/// (i.e. if no layer with that ID exists).