summaryrefslogtreecommitdiffstats
path: root/cc
diff options
context:
space:
mode:
authordanakj@chromium.org <danakj@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-03-10 22:33:08 +0000
committerdanakj@chromium.org <danakj@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-03-10 22:33:08 +0000
commitf636ce801b677854048affa6d550a9ac84c611b0 (patch)
tree9183d3dc2d897b80a2df18dfe8e5eda47c3f025f /cc
parent51dacee518ef680a24973a3573c09433c43e83ca (diff)
downloadchromium_src-f636ce801b677854048affa6d550a9ac84c611b0.zip
chromium_src-f636ce801b677854048affa6d550a9ac84c611b0.tar.gz
chromium_src-f636ce801b677854048affa6d550a9ac84c611b0.tar.bz2
cc: Fix damage when the HUD is enabled.
When the HUD is on, and partial swaps are enabled, the damage rects emitted by the renderer do not include the HUD, so the HUD is not updated correctly on screen. Previously we disabled partial swap in the renderer compositor to force the hud to display, but in ubercomp, partial swap is never used in the renderer, and the damage rect is given to the browser instead. So we need to update the renderer's damage rect in this case. R=enne@chromium.org, piman@chromium.org, caseq, enne BUG=350495 Review URL: https://codereview.chromium.org/191433002 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@256052 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'cc')
-rw-r--r--cc/debug/debug_rect_history.cc8
-rw-r--r--cc/debug/debug_rect_history.h5
-rw-r--r--cc/layers/heads_up_display_layer_impl.cc2
-rw-r--r--cc/layers/heads_up_display_layer_impl.h2
-rw-r--r--cc/layers/layer_impl.cc4
-rw-r--r--cc/layers/layer_impl.h6
-rw-r--r--cc/output/delegating_renderer.cc1
-rw-r--r--cc/output/delegating_renderer.h1
-rw-r--r--cc/output/direct_renderer.cc16
-rw-r--r--cc/output/direct_renderer.h5
-rw-r--r--cc/output/gl_renderer_unittest.cc49
-rw-r--r--cc/output/renderer.h1
-rw-r--r--cc/output/software_renderer_unittest.cc6
-rw-r--r--cc/test/pixel_test.cc3
-rw-r--r--cc/trees/layer_tree_host_impl.cc20
15 files changed, 28 insertions, 101 deletions
diff --git a/cc/debug/debug_rect_history.cc b/cc/debug/debug_rect_history.cc
index 47c952e..e165aed 100644
--- a/cc/debug/debug_rect_history.cc
+++ b/cc/debug/debug_rect_history.cc
@@ -26,6 +26,7 @@ DebugRectHistory::~DebugRectHistory() {}
void DebugRectHistory::SaveDebugRectsForCurrentFrame(
LayerImpl* root_layer,
+ LayerImpl* hud_layer,
const LayerImplList& render_surface_layer_list,
const std::vector<gfx::Rect>& occluding_screen_space_rects,
const std::vector<gfx::Rect>& non_occluding_screen_space_rects,
@@ -47,7 +48,7 @@ void DebugRectHistory::SaveDebugRectsForCurrentFrame(
SavePaintRects(root_layer);
if (debug_state.show_property_changed_rects)
- SavePropertyChangedRects(render_surface_layer_list);
+ SavePropertyChangedRects(render_surface_layer_list, hud_layer);
if (debug_state.show_surface_damage_rects)
SaveSurfaceDamageRects(render_surface_layer_list);
@@ -89,7 +90,8 @@ void DebugRectHistory::SavePaintRects(LayerImpl* layer) {
}
void DebugRectHistory::SavePropertyChangedRects(
- const LayerImplList& render_surface_layer_list) {
+ const LayerImplList& render_surface_layer_list,
+ LayerImpl* hud_layer) {
for (int surface_index = render_surface_layer_list.size() - 1;
surface_index >= 0;
--surface_index) {
@@ -107,7 +109,7 @@ void DebugRectHistory::SavePropertyChangedRects(
layer, render_surface_layer->id()))
continue;
- if (layer->LayerIsAlwaysDamaged())
+ if (layer == hud_layer)
continue;
if (layer->LayerPropertyChanged()) {
diff --git a/cc/debug/debug_rect_history.h b/cc/debug/debug_rect_history.h
index 33b74a2..f5ee0be 100644
--- a/cc/debug/debug_rect_history.h
+++ b/cc/debug/debug_rect_history.h
@@ -77,6 +77,7 @@ class DebugRectHistory {
// reset.
void SaveDebugRectsForCurrentFrame(
LayerImpl* root_layer,
+ LayerImpl* hud_layer,
const LayerImplList& render_surface_layer_list,
const std::vector<gfx::Rect>& occluding_screen_space_rects,
const std::vector<gfx::Rect>& non_occluding_screen_space_rects,
@@ -88,8 +89,8 @@ class DebugRectHistory {
DebugRectHistory();
void SavePaintRects(LayerImpl* layer);
- void SavePropertyChangedRects(
- const LayerImplList& render_surface_layer_list);
+ void SavePropertyChangedRects(const LayerImplList& render_surface_layer_list,
+ LayerImpl* hud_layer);
void SaveSurfaceDamageRects(
const LayerImplList& render_surface_layer_list);
void SaveScreenSpaceRects(
diff --git a/cc/layers/heads_up_display_layer_impl.cc b/cc/layers/heads_up_display_layer_impl.cc
index e98880a..27229fa 100644
--- a/cc/layers/heads_up_display_layer_impl.cc
+++ b/cc/layers/heads_up_display_layer_impl.cc
@@ -184,8 +184,6 @@ void HeadsUpDisplayLayerImpl::UpdateHudTexture(
void HeadsUpDisplayLayerImpl::ReleaseResources() { hud_resource_.reset(); }
-bool HeadsUpDisplayLayerImpl::LayerIsAlwaysDamaged() const { return true; }
-
void HeadsUpDisplayLayerImpl::UpdateHudContents() {
const LayerTreeDebugState& debug_state = layer_tree_impl()->debug_state();
diff --git a/cc/layers/heads_up_display_layer_impl.h b/cc/layers/heads_up_display_layer_impl.h
index 47afa1f..d5aa660 100644
--- a/cc/layers/heads_up_display_layer_impl.h
+++ b/cc/layers/heads_up_display_layer_impl.h
@@ -45,8 +45,6 @@ class CC_EXPORT HeadsUpDisplayLayerImpl : public LayerImpl {
virtual void ReleaseResources() OVERRIDE;
- virtual bool LayerIsAlwaysDamaged() const OVERRIDE;
-
private:
class Graph {
public:
diff --git a/cc/layers/layer_impl.cc b/cc/layers/layer_impl.cc
index dc5d85b..0d7be1e 100644
--- a/cc/layers/layer_impl.cc
+++ b/cc/layers/layer_impl.cc
@@ -716,10 +716,6 @@ void LayerImpl::ResetAllChangeTrackingForSubtree() {
num_dependents_need_push_properties_ = 0;
}
-bool LayerImpl::LayerIsAlwaysDamaged() const {
- return false;
-}
-
gfx::Vector2dF LayerImpl::ScrollOffsetForAnimation() const {
return TotalScrollOffset();
}
diff --git a/cc/layers/layer_impl.h b/cc/layers/layer_impl.h
index 856151e..f412fdb 100644
--- a/cc/layers/layer_impl.h
+++ b/cc/layers/layer_impl.h
@@ -450,14 +450,10 @@ class CC_EXPORT LayerImpl : public LayerAnimationValueObserver,
void SetStackingOrderChanged(bool stacking_order_changed);
- bool LayerPropertyChanged() const {
- return layer_property_changed_ || LayerIsAlwaysDamaged();
- }
+ bool LayerPropertyChanged() const { return layer_property_changed_; }
void ResetAllChangeTrackingForSubtree();
- virtual bool LayerIsAlwaysDamaged() const;
-
LayerAnimationController* layer_animation_controller() {
return layer_animation_controller_.get();
}
diff --git a/cc/output/delegating_renderer.cc b/cc/output/delegating_renderer.cc
index bca2a42..66cd53c 100644
--- a/cc/output/delegating_renderer.cc
+++ b/cc/output/delegating_renderer.cc
@@ -100,7 +100,6 @@ void DelegatingRenderer::DrawFrame(RenderPassList* render_passes_in_draw_order,
float device_scale_factor,
const gfx::Rect& device_viewport_rect,
const gfx::Rect& device_clip_rect,
- bool allow_partial_swap,
bool disable_picture_quad_image_filtering) {
TRACE_EVENT0("cc", "DelegatingRenderer::DrawFrame");
diff --git a/cc/output/delegating_renderer.h b/cc/output/delegating_renderer.h
index 9af2a6e..456d1ef 100644
--- a/cc/output/delegating_renderer.h
+++ b/cc/output/delegating_renderer.h
@@ -33,7 +33,6 @@ class CC_EXPORT DelegatingRenderer : public Renderer {
float device_scale_factor,
const gfx::Rect& device_viewport_rect,
const gfx::Rect& device_clip_rect,
- bool allow_partial_swap,
bool disable_picture_quad_image_filtering) OVERRIDE;
virtual void Finish() OVERRIDE {}
diff --git a/cc/output/direct_renderer.cc b/cc/output/direct_renderer.cc
index d508869..007ac45 100644
--- a/cc/output/direct_renderer.cc
+++ b/cc/output/direct_renderer.cc
@@ -198,7 +198,6 @@ void DirectRenderer::DrawFrame(RenderPassList* render_passes_in_draw_order,
float device_scale_factor,
const gfx::Rect& device_viewport_rect,
const gfx::Rect& device_clip_rect,
- bool allow_partial_swap,
bool disable_picture_quad_image_filtering) {
TRACE_EVENT0("cc", "DirectRenderer::DrawFrame");
UMA_HISTOGRAM_COUNTS("Renderer4.renderPassCount",
@@ -209,10 +208,9 @@ void DirectRenderer::DrawFrame(RenderPassList* render_passes_in_draw_order,
DrawingFrame frame;
frame.root_render_pass = root_render_pass;
- frame.root_damage_rect =
- Capabilities().using_partial_swap && allow_partial_swap
- ? root_render_pass->damage_rect
- : root_render_pass->output_rect;
+ frame.root_damage_rect = Capabilities().using_partial_swap
+ ? root_render_pass->damage_rect
+ : root_render_pass->output_rect;
frame.root_damage_rect.Intersect(gfx::Rect(device_viewport_rect.size()));
frame.device_viewport_rect = device_viewport_rect;
frame.device_clip_rect = device_clip_rect;
@@ -230,7 +228,7 @@ void DirectRenderer::DrawFrame(RenderPassList* render_passes_in_draw_order,
BeginDrawingFrame(&frame);
for (size_t i = 0; i < render_passes_in_draw_order->size(); ++i) {
RenderPass* pass = render_passes_in_draw_order->at(i);
- DrawRenderPass(&frame, pass, allow_partial_swap);
+ DrawRenderPass(&frame, pass);
for (ScopedPtrVector<CopyOutputRequest>::iterator it =
pass->copy_requests.begin();
@@ -331,14 +329,12 @@ void DirectRenderer::SetScissorTestRectInDrawSpace(
void DirectRenderer::FinishDrawingQuadList() {}
void DirectRenderer::DrawRenderPass(DrawingFrame* frame,
- const RenderPass* render_pass,
- bool allow_partial_swap) {
+ const RenderPass* render_pass) {
TRACE_EVENT0("cc", "DirectRenderer::DrawRenderPass");
if (!UseRenderPass(frame, render_pass))
return;
- bool using_scissor_as_optimization =
- Capabilities().using_partial_swap && allow_partial_swap;
+ bool using_scissor_as_optimization = Capabilities().using_partial_swap;
gfx::RectF render_pass_scissor;
bool draw_rect_covers_full_surface = true;
if (frame->current_render_pass == frame->root_render_pass &&
diff --git a/cc/output/direct_renderer.h b/cc/output/direct_renderer.h
index 46bfb56..a08feef 100644
--- a/cc/output/direct_renderer.h
+++ b/cc/output/direct_renderer.h
@@ -37,7 +37,6 @@ class CC_EXPORT DirectRenderer : public Renderer {
float device_scale_factor,
const gfx::Rect& device_viewport_rect,
const gfx::Rect& device_clip_rect,
- bool allow_partial_swap,
bool disable_picture_quad_image_filtering) OVERRIDE;
struct CC_EXPORT DrawingFrame {
@@ -92,9 +91,7 @@ class CC_EXPORT DirectRenderer : public Renderer {
static gfx::Size RenderPassTextureSize(const RenderPass* render_pass);
- void DrawRenderPass(DrawingFrame* frame,
- const RenderPass* render_pass,
- bool allow_partial_swap);
+ void DrawRenderPass(DrawingFrame* frame, const RenderPass* render_pass);
bool UseRenderPass(DrawingFrame* frame, const RenderPass* render_pass);
void RunOnDemandRasterTask(internal::Task* on_demand_raster_task);
diff --git a/cc/output/gl_renderer_unittest.cc b/cc/output/gl_renderer_unittest.cc
index 476f7a8..d5f848c 100644
--- a/cc/output/gl_renderer_unittest.cc
+++ b/cc/output/gl_renderer_unittest.cc
@@ -335,7 +335,6 @@ TEST_F(GLRendererWithDefaultHarnessTest,
1.f,
viewport_rect,
viewport_rect,
- true,
false);
EXPECT_FALSE(renderer_->IsBackbufferDiscarded());
@@ -361,7 +360,6 @@ TEST_F(GLRendererWithDefaultHarnessTest,
1.f,
viewport_rect,
viewport_rect,
- true,
false);
EXPECT_FALSE(renderer_->IsBackbufferDiscarded());
@@ -387,7 +385,6 @@ TEST_F(GLRendererWithDefaultHarnessTest, ExternalStencil) {
1.f,
viewport_rect,
viewport_rect,
- true,
false);
EXPECT_TRUE(renderer_->stencil_enabled());
}
@@ -612,7 +609,6 @@ TEST_F(GLRendererTest, OpaqueBackground) {
1.f,
viewport_rect,
viewport_rect,
- true,
false);
Mock::VerifyAndClearExpectations(context);
}
@@ -650,7 +646,6 @@ TEST_F(GLRendererTest, TransparentBackground) {
1.f,
viewport_rect,
viewport_rect,
- true,
false);
Mock::VerifyAndClearExpectations(context);
@@ -690,7 +685,6 @@ TEST_F(GLRendererTest, OffscreenOutputSurface) {
1.f,
viewport_rect,
viewport_rect,
- true,
false);
Mock::VerifyAndClearExpectations(context);
}
@@ -773,7 +767,6 @@ TEST_F(GLRendererTest, VisibilityChangeIsLastCall) {
1.f,
viewport_rect,
viewport_rect,
- true,
false);
renderer.SetVisible(false);
EXPECT_TRUE(context->last_call_was_set_visibility());
@@ -867,7 +860,6 @@ TEST_F(GLRendererTest, ActiveTextureState) {
1.f,
viewport_rect,
viewport_rect,
- true,
false);
Mock::VerifyAndClearExpectations(context);
}
@@ -944,7 +936,6 @@ TEST_F(GLRendererTest, ShouldClearRootRenderPass) {
1.f,
viewport_rect,
viewport_rect,
- true,
false);
// In multiple render passes all but the root pass should clear the
@@ -1027,7 +1018,6 @@ TEST_F(GLRendererTest, ScissorTestWhenClearing) {
1.f,
viewport_rect,
viewport_rect,
- true,
false);
}
@@ -1105,7 +1095,6 @@ TEST_F(GLRendererTest, NoDiscardOnPartialUpdates) {
1.f,
viewport_rect,
clip_rect,
- true,
false);
EXPECT_EQ(0, context->discarded());
context->reset();
@@ -1126,28 +1115,6 @@ TEST_F(GLRendererTest, NoDiscardOnPartialUpdates) {
1.f,
viewport_rect,
clip_rect,
- true,
- false);
- EXPECT_EQ(1, context->discarded());
- context->reset();
- }
- {
- // Partial frame, disallow partial swap, should discard.
- RenderPass::Id root_pass_id(1, 0);
- TestRenderPass* root_pass = AddRenderPass(&render_passes_in_draw_order_,
- root_pass_id,
- viewport_rect,
- gfx::Transform());
- AddQuad(root_pass, viewport_rect, SK_ColorGREEN);
- root_pass->damage_rect = gfx::RectF(2.f, 2.f, 3.f, 3.f);
-
- renderer.DecideRenderPassAllocationsForFrame(render_passes_in_draw_order_);
- renderer.DrawFrame(&render_passes_in_draw_order_,
- NULL,
- 1.f,
- viewport_rect,
- clip_rect,
- false,
false);
EXPECT_EQ(1, context->discarded());
context->reset();
@@ -1170,7 +1137,6 @@ TEST_F(GLRendererTest, NoDiscardOnPartialUpdates) {
1.f,
viewport_rect,
clip_rect,
- true,
false);
EXPECT_EQ(0, context->discarded());
context->reset();
@@ -1193,7 +1159,6 @@ TEST_F(GLRendererTest, NoDiscardOnPartialUpdates) {
1.f,
viewport_rect,
clip_rect,
- true,
false);
EXPECT_EQ(0, context->discarded());
context->reset();
@@ -1215,7 +1180,6 @@ TEST_F(GLRendererTest, NoDiscardOnPartialUpdates) {
1.f,
viewport_rect,
clip_rect,
- true,
false);
EXPECT_EQ(0, context->discarded());
context->reset();
@@ -1238,7 +1202,6 @@ TEST_F(GLRendererTest, NoDiscardOnPartialUpdates) {
1.f,
viewport_rect,
clip_rect,
- true,
false);
EXPECT_EQ(0, context->discarded());
context->reset();
@@ -1318,7 +1281,6 @@ TEST_F(GLRendererTest, ScissorAndViewportWithinNonreshapableSurface) {
1.f,
device_viewport_rect,
device_viewport_rect,
- true,
false);
}
@@ -1385,7 +1347,6 @@ TEST_F(GLRendererShaderTest, DrawRenderPassQuadShaderPermutations) {
1.f,
viewport_rect,
viewport_rect,
- true,
false);
TestRenderPassProgram(TexCoordPrecisionMedium);
@@ -1410,7 +1371,6 @@ TEST_F(GLRendererShaderTest, DrawRenderPassQuadShaderPermutations) {
1.f,
viewport_rect,
viewport_rect,
- true,
false);
TestRenderPassColorMatrixProgram(TexCoordPrecisionMedium);
@@ -1436,7 +1396,6 @@ TEST_F(GLRendererShaderTest, DrawRenderPassQuadShaderPermutations) {
1.f,
viewport_rect,
viewport_rect,
- true,
false);
TestRenderPassMaskProgram(TexCoordPrecisionMedium);
@@ -1461,7 +1420,6 @@ TEST_F(GLRendererShaderTest, DrawRenderPassQuadShaderPermutations) {
1.f,
viewport_rect,
viewport_rect,
- true,
false);
TestRenderPassMaskColorMatrixProgram(TexCoordPrecisionMedium);
@@ -1487,7 +1445,6 @@ TEST_F(GLRendererShaderTest, DrawRenderPassQuadShaderPermutations) {
1.f,
viewport_rect,
viewport_rect,
- true,
false);
TestRenderPassProgramAA(TexCoordPrecisionMedium);
@@ -1512,7 +1469,6 @@ TEST_F(GLRendererShaderTest, DrawRenderPassQuadShaderPermutations) {
1.f,
viewport_rect,
viewport_rect,
- true,
false);
TestRenderPassColorMatrixProgramAA(TexCoordPrecisionMedium);
@@ -1538,7 +1494,6 @@ TEST_F(GLRendererShaderTest, DrawRenderPassQuadShaderPermutations) {
1.f,
viewport_rect,
viewport_rect,
- true,
false);
TestRenderPassMaskProgramAA(TexCoordPrecisionMedium);
@@ -1563,7 +1518,6 @@ TEST_F(GLRendererShaderTest, DrawRenderPassQuadShaderPermutations) {
1.f,
viewport_rect,
viewport_rect,
- true,
false);
TestRenderPassMaskColorMatrixProgramAA(TexCoordPrecisionMedium);
}
@@ -1609,7 +1563,6 @@ TEST_F(GLRendererShaderTest, DrawRenderPassQuadSkipsAAForClippingTransform) {
1.f,
viewport_rect,
viewport_rect,
- true,
false);
// If use_aa incorrectly ignores clipping, it will use the
@@ -1641,7 +1594,6 @@ TEST_F(GLRendererShaderTest, DrawSolidColorShader) {
1.f,
viewport_rect,
viewport_rect,
- true,
false);
TestSolidColorProgramAA();
@@ -1722,7 +1674,6 @@ class MockOutputSurfaceTest : public GLRendererTest {
device_scale_factor,
device_viewport_rect,
device_viewport_rect,
- true,
false);
}
diff --git a/cc/output/renderer.h b/cc/output/renderer.h
index 14fc641..7cb921b 100644
--- a/cc/output/renderer.h
+++ b/cc/output/renderer.h
@@ -65,7 +65,6 @@ class CC_EXPORT Renderer {
float device_scale_factor,
const gfx::Rect& device_viewport_rect,
const gfx::Rect& device_clip_rect,
- bool allow_partial_swap,
bool disable_picture_quad_image_filtering) = 0;
// Waits for rendering to finish.
diff --git a/cc/output/software_renderer_unittest.cc b/cc/output/software_renderer_unittest.cc
index 3673314..4dd7fbb 100644
--- a/cc/output/software_renderer_unittest.cc
+++ b/cc/output/software_renderer_unittest.cc
@@ -96,7 +96,6 @@ TEST_F(SoftwareRendererTest, SolidColorQuad) {
device_scale_factor,
device_viewport_rect,
device_viewport_rect,
- true,
false);
SkBitmap output;
@@ -201,7 +200,6 @@ TEST_F(SoftwareRendererTest, TileQuad) {
device_scale_factor,
device_viewport_rect,
device_viewport_rect,
- true,
false);
SkBitmap output;
@@ -283,7 +281,6 @@ TEST_F(SoftwareRendererTest, TileQuadVisibleRect) {
device_scale_factor,
device_viewport_rect,
device_viewport_rect,
- true,
false);
SkBitmap output;
@@ -339,7 +336,6 @@ TEST_F(SoftwareRendererTest, ShouldClearRootRenderPass) {
device_scale_factor,
viewport_rect,
viewport_rect,
- true,
false);
renderer()->GetFramebufferPixels(output.getPixels(), viewport_rect);
@@ -364,7 +360,6 @@ TEST_F(SoftwareRendererTest, ShouldClearRootRenderPass) {
device_scale_factor,
viewport_rect,
viewport_rect,
- true,
false);
renderer()->GetFramebufferPixels(output.getPixels(), viewport_rect);
@@ -416,7 +411,6 @@ TEST_F(SoftwareRendererTest, RenderPassVisibleRect) {
device_scale_factor,
viewport_rect,
viewport_rect,
- true,
false);
renderer()->GetFramebufferPixels(output.getPixels(), viewport_rect);
diff --git a/cc/test/pixel_test.cc b/cc/test/pixel_test.cc
index 77a8f52..9277fe5 100644
--- a/cc/test/pixel_test.cc
+++ b/cc/test/pixel_test.cc
@@ -73,15 +73,12 @@ bool PixelTest::RunPixelTestWithReadbackTarget(
gfx::Rect device_clip_rect = external_device_clip_rect_.IsEmpty()
? device_viewport_rect
: external_device_clip_rect_;
- bool allow_partial_swap = true;
-
renderer_->DecideRenderPassAllocationsForFrame(*pass_list);
renderer_->DrawFrame(pass_list,
offscreen_contexts.get(),
device_scale_factor,
device_viewport_rect,
device_clip_rect,
- allow_partial_swap,
disable_picture_quad_image_filtering_);
// Wait for the readback to complete.
diff --git a/cc/trees/layer_tree_host_impl.cc b/cc/trees/layer_tree_host_impl.cc
index e3f31f5..90b8d9c 100644
--- a/cc/trees/layer_tree_host_impl.cc
+++ b/cc/trees/layer_tree_host_impl.cc
@@ -753,6 +753,17 @@ DrawSwapReadbackResult::DrawResult LayerTreeHostImpl::CalculateRenderPasses(
render_surface_layer->render_surface()->AppendRenderPasses(frame);
}
+ // When we are displaying the HUD, change the root damage rect to cover the
+ // entire root surface. This will disable partial-swap/scissor optimizations
+ // that would prevent the HUD from updating, since the HUD does not cause
+ // damage itself, to prevent it from messing with damage visualizations. Since
+ // damage visualizations are done off the LayerImpls and RenderSurfaceImpls,
+ // changing the RenderPass does not affect them.
+ if (active_tree_->hud_layer()) {
+ RenderPass* root_pass = frame->render_passes.back();
+ root_pass->damage_rect = root_pass->output_rect;
+ }
+
bool record_metrics_for_frame =
settings_.show_overdraw_in_tracing &&
base::debug::TraceLog::GetInstance() &&
@@ -1361,6 +1372,7 @@ void LayerTreeHostImpl::DrawLayers(FrameData* frame,
if (debug_state_.ShowHudRects()) {
debug_rect_history_->SaveDebugRectsForCurrentFrame(
active_tree_->root_layer(),
+ active_tree_->hud_layer(),
*frame->render_surface_layer_list,
frame->occluding_screen_space_rects,
frame->non_occluding_screen_space_rects,
@@ -1401,7 +1413,6 @@ void LayerTreeHostImpl::DrawLayers(FrameData* frame,
}
if (output_surface_->ForcedDrawToSoftwareDevice()) {
- bool allow_partial_swap = false;
bool disable_picture_quad_image_filtering =
IsCurrentlyScrolling() || needs_animate_layers();
@@ -1412,20 +1423,13 @@ void LayerTreeHostImpl::DrawLayers(FrameData* frame,
device_scale_factor_,
DeviceViewport(),
DeviceClip(),
- allow_partial_swap,
disable_picture_quad_image_filtering);
} else {
- // We don't track damage on the HUD layer (it interacts with damage tracking
- // visualizations), so disable partial swaps to make the HUD layer display
- // properly.
- bool allow_partial_swap = !debug_state_.ShowHudRects();
-
renderer_->DrawFrame(&frame->render_passes,
offscreen_context_provider_.get(),
device_scale_factor_,
DeviceViewport(),
DeviceClip(),
- allow_partial_swap,
false);
}
// The render passes should be consumed by the renderer.