Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

compositor: When WebRender is in use, only composite on new WebRender frames. #10936

Merged
merged 1 commit into from
May 1, 2016
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
36 changes: 25 additions & 11 deletions components/compositing/compositor.rs
Expand Up @@ -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)
}
Expand Down Expand Up @@ -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 {
Expand Down Expand Up @@ -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,
Expand Down Expand Up @@ -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,
Expand Down Expand Up @@ -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) {
Expand Down Expand Up @@ -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,
Expand All @@ -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,
Expand All @@ -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) {
Expand Down Expand Up @@ -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));
}
}
Expand Down Expand Up @@ -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) {
Expand Down Expand Up @@ -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();

Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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(_) => {}
Expand Down