diff options
-rw-r--r-- | components/compositing/compositor.rs | 36 |
1 files changed, 25 insertions, 11 deletions
diff --git a/components/compositing/compositor.rs b/components/compositing/compositor.rs index 36688456333..2a5b5b403c4 100644 --- a/components/compositing/compositor.rs +++ b/components/compositing/compositor.rs @@ -631,7 +631,7 @@ impl<Window: WindowMethods> IOCompositor<Window> { debug!("delayed composition timeout!"); if let CompositionRequest::DelayedComposite(this_timestamp) = self.composition_request { - if timestamp == this_timestamp { + if timestamp == this_timestamp && !opts::get().use_webrender { self.composition_request = CompositionRequest::CompositeNow( CompositingReason::DelayedCompositeTimeout) } @@ -750,7 +750,7 @@ impl<Window: WindowMethods> IOCompositor<Window> { match animation_state { AnimationState::AnimationsPresent => { self.pipeline_details(pipeline_id).animations_running = true; - self.composite_if_necessary(CompositingReason::Animation); + self.composite_if_necessary_if_not_using_webrender(CompositingReason::Animation); } AnimationState::AnimationCallbacksPresent => { if !self.pipeline_details(pipeline_id).animation_callbacks_running { @@ -832,7 +832,7 @@ impl<Window: WindowMethods> IOCompositor<Window> { self.send_window_size(WindowSizeType::Initial); self.frame_tree_id.next(); - self.composite_if_necessary(CompositingReason::NewFrameTree); + self.composite_if_necessary_if_not_using_webrender(CompositingReason::NewFrameTree); } fn create_root_layer_for_pipeline_and_size(&mut self, @@ -1184,7 +1184,7 @@ impl<Window: WindowMethods> IOCompositor<Window> { // FIXME(pcwalton): This is going to cause problems with inconsistent frames since // we only composite one layer at a time. layer.add_buffers(self, new_layer_buffer_set, epoch); - self.composite_if_necessary(CompositingReason::NewPaintedBuffers); + self.composite_if_necessary_if_not_using_webrender(CompositingReason::NewPaintedBuffers); } fn scroll_fragment_to_point(&mut self, @@ -1447,7 +1447,7 @@ impl<Window: WindowMethods> IOCompositor<Window> { cursor: cursor, phase: ScrollEventPhase::Move(true), }); - self.composite_if_necessary(CompositingReason::Zoom); + self.composite_if_necessary_if_not_using_webrender(CompositingReason::Zoom); } TouchAction::DispatchEvent => { if let Some(result) = self.find_topmost_layer_at_point(point / self.scene.scale) { @@ -1501,7 +1501,7 @@ impl<Window: WindowMethods> IOCompositor<Window> { cursor: cursor, phase: ScrollEventPhase::Move(self.scroll_in_progress), }); - self.composite_if_necessary(CompositingReason::Scroll); + self.composite_if_necessary_if_not_using_webrender(CompositingReason::Scroll); } fn on_scroll_start_window_event(&mut self, @@ -1514,7 +1514,7 @@ impl<Window: WindowMethods> IOCompositor<Window> { cursor: cursor, phase: ScrollEventPhase::Start, }); - self.composite_if_necessary(CompositingReason::Scroll); + self.composite_if_necessary_if_not_using_webrender(CompositingReason::Scroll); } fn on_scroll_end_window_event(&mut self, @@ -1527,7 +1527,7 @@ impl<Window: WindowMethods> IOCompositor<Window> { cursor: cursor, phase: ScrollEventPhase::End, }); - self.composite_if_necessary(CompositingReason::Scroll); + self.composite_if_necessary_if_not_using_webrender(CompositingReason::Scroll); } fn process_pending_scroll_events(&mut self) { @@ -1658,7 +1658,7 @@ impl<Window: WindowMethods> IOCompositor<Window> { self.send_updated_display_ports_to_layout(); if self.send_buffer_requests_for_all_layers() { self.schedule_delayed_composite_if_necessary(); - } else { + } else if !opts::get().use_webrender { self.channel_to_self.send(Msg::Recomposite(CompositingReason::ContinueScroll)); } } @@ -1750,7 +1750,7 @@ impl<Window: WindowMethods> IOCompositor<Window> { cursor: Point2D::typed(-1, -1), // Make sure this hits the base layer. phase: ScrollEventPhase::Move(true), }); - self.composite_if_necessary(CompositingReason::Zoom); + self.composite_if_necessary_if_not_using_webrender(CompositingReason::Zoom); } fn on_navigation_window_event(&self, direction: WindowNavigateMsg) { @@ -2176,7 +2176,11 @@ impl<Window: WindowMethods> IOCompositor<Window> { self.last_composite_time = precise_time_ns(); self.composition_request = CompositionRequest::NoCompositingNecessary; - self.process_pending_scroll_events(); + + if !opts::get().use_webrender { + self.process_pending_scroll_events(); + } + self.process_animations(); self.start_scrolling_bounce_if_necessary(); @@ -2224,6 +2228,12 @@ impl<Window: WindowMethods> IOCompositor<Window> { } } + fn composite_if_necessary_if_not_using_webrender(&mut self, reason: CompositingReason) { + if !opts::get().use_webrender { + self.composite_if_necessary(reason) + } + } + fn initialize_compositing(&mut self) { if self.webrender.is_none() { let show_debug_borders = opts::get().show_debug_borders; @@ -2451,6 +2461,10 @@ impl<Window> CompositorEventListener for IOCompositor<Window> where Window: Wind self.send_buffer_requests_for_all_layers(); } + if !self.pending_scroll_zoom_events.is_empty() && opts::get().use_webrender { + self.process_pending_scroll_events() + } + match self.composition_request { CompositionRequest::NoCompositingNecessary | CompositionRequest::DelayedComposite(_) => {} |