diff options
author | Fabrice Desré <fabrice@desre.org> | 2016-04-25 16:28:35 -0700 |
---|---|---|
committer | Fabrice Desré <fabrice@desre.org> | 2016-04-25 18:16:42 -0700 |
commit | aac71015933c15a36dd1ca319159f4a0e5dbbe4c (patch) | |
tree | b0921817e2fbed6ecef95a95ac59bef054d6c8a5 | |
parent | 81f6e70a623a6f11535322ed2ef954eafaf8c70c (diff) | |
download | servo-aac71015933c15a36dd1ca319159f4a0e5dbbe4c.tar.gz servo-aac71015933c15a36dd1ca319159f4a0e5dbbe4c.zip |
Don't expect a native_window when using webrender
-rw-r--r-- | components/compositing/compositor.rs | 23 | ||||
-rw-r--r-- | components/compositing/compositor_thread.rs | 4 |
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). |