Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1562)

Unified Diff: cc/surfaces/display.cc

Issue 952893003: Update from https://crrev.com/317530 (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Fix gn for nacl Created 5 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « cc/surfaces/display.h ('k') | cc/surfaces/display_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: cc/surfaces/display.cc
diff --git a/cc/surfaces/display.cc b/cc/surfaces/display.cc
index ab1f0afcdf7790e08433b4d867c31a3d0c9eb9b4..7ec46727385581123b61289e353b1d6d98821024 100644
--- a/cc/surfaces/display.cc
+++ b/cc/surfaces/display.cc
@@ -134,25 +134,46 @@ bool Display::Draw() {
}
DelegatedFrameData* frame_data = frame->delegated_frame_data.get();
- gfx::Size surface_size =
- frame_data->render_pass_list.back()->output_rect.size();
-
- gfx::Rect device_viewport_rect = gfx::Rect(current_surface_size_);
- gfx::Rect device_clip_rect = device_viewport_rect;
- bool disable_picture_quad_image_filtering = false;
+ frame->metadata.latency_info.insert(frame->metadata.latency_info.end(),
+ stored_latency_info_.begin(),
+ stored_latency_info_.end());
+ stored_latency_info_.clear();
+ bool have_copy_requests = false;
+ for (const auto* pass : frame_data->render_pass_list) {
+ have_copy_requests |= !pass->copy_requests.empty();
+ }
- renderer_->DecideRenderPassAllocationsForFrame(frame_data->render_pass_list);
- renderer_->DrawFrame(&frame_data->render_pass_list,
- device_scale_factor_,
- device_viewport_rect,
- device_clip_rect,
- disable_picture_quad_image_filtering);
+ gfx::Size surface_size;
+ bool have_damage = false;
+ if (!frame_data->render_pass_list.empty()) {
+ surface_size = frame_data->render_pass_list.back()->output_rect.size();
+ have_damage =
+ !frame_data->render_pass_list.back()->damage_rect.size().IsEmpty();
+ }
+ bool avoid_swap = surface_size != current_surface_size_;
+ bool should_draw = !frame->metadata.latency_info.empty() ||
+ have_copy_requests || (have_damage && !avoid_swap);
+
+ if (should_draw) {
+ gfx::Rect device_viewport_rect = gfx::Rect(current_surface_size_);
+ gfx::Rect device_clip_rect = device_viewport_rect;
+ bool disable_picture_quad_image_filtering = false;
+
+ renderer_->DecideRenderPassAllocationsForFrame(
+ frame_data->render_pass_list);
+ renderer_->DrawFrame(&frame_data->render_pass_list, device_scale_factor_,
+ device_viewport_rect, device_clip_rect,
+ disable_picture_quad_image_filtering);
+ }
- if (surface_size != current_surface_size_) {
+ if (should_draw && !avoid_swap) {
+ renderer_->SwapBuffers(frame->metadata);
+ } else {
+ stored_latency_info_.insert(stored_latency_info_.end(),
+ frame->metadata.latency_info.begin(),
+ frame->metadata.latency_info.end());
DidSwapBuffers();
DidSwapBuffersComplete();
- } else {
- renderer_->SwapBuffers(frame->metadata);
}
return true;
« no previous file with comments | « cc/surfaces/display.h ('k') | cc/surfaces/display_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698