Index: cc/output/direct_renderer.cc |
diff --git a/cc/output/direct_renderer.cc b/cc/output/direct_renderer.cc |
index 0a66eea2ae10bab6c2007d7e50fe60ea2c94d924..43e19c39c56a333e6f3e59092ea08ea05fd26188 100644 |
--- a/cc/output/direct_renderer.cc |
+++ b/cc/output/direct_renderer.cc |
@@ -242,6 +242,25 @@ void DirectRenderer::DrawFrame(RenderPassList* render_passes_in_draw_order, |
overlay_processor_->ProcessForOverlays( |
resource_provider_, render_passes_in_draw_order, &frame.overlay_list, |
&frame.root_damage_rect); |
+ |
+ // No need to render in case the damage rect is completely composited using |
+ // overlays and dont have any copy requests. |
+ if (frame.root_damage_rect.IsEmpty()) { |
+ bool handle_copy_requests = false; |
+ for (auto* pass : *render_passes_in_draw_order) { |
+ if (!pass->copy_requests.empty()) { |
+ handle_copy_requests = true; |
+ break; |
+ } |
+ } |
+ |
+ if (!handle_copy_requests) { |
+ BindFramebufferToOutputSurface(&frame); |
+ FinishDrawingFrame(&frame); |
+ render_passes_in_draw_order->clear(); |
+ return; |
+ } |
+ } |
} |
for (size_t i = 0; i < render_passes_in_draw_order->size(); ++i) { |