diff options
Diffstat (limited to 'cc/playback/display_list_recording_source.cc')
-rw-r--r-- | cc/playback/display_list_recording_source.cc | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/cc/playback/display_list_recording_source.cc b/cc/playback/display_list_recording_source.cc index 52c8277..a6f5584 100644 --- a/cc/playback/display_list_recording_source.cc +++ b/cc/playback/display_list_recording_source.cc @@ -117,6 +117,14 @@ void DisplayListRecordingSource::FinishDisplayItemListUpdate() { display_list_->GenerateDiscardableImagesMetadata(); } +void DisplayListRecordingSource::SetNeedsDisplayRect( + const gfx::Rect& layer_rect) { + if (!layer_rect.IsEmpty()) { + // Clamp invalidation to the layer bounds. + invalidation_.Union(gfx::IntersectRects(layer_rect, gfx::Rect(size_))); + } +} + bool DisplayListRecordingSource::UpdateAndExpandInvalidation( ContentLayerClient* painter, Region* invalidation, @@ -133,6 +141,9 @@ bool DisplayListRecordingSource::UpdateAndExpandInvalidation( updated = true; } + invalidation_.Swap(invalidation); + invalidation_.Clear(); + gfx::Rect new_recorded_viewport = painter->PaintableRegion(); if (new_recorded_viewport != recorded_viewport_) { UpdateInvalidationForNewViewport(recorded_viewport_, new_recorded_viewport, @@ -150,6 +161,9 @@ bool DisplayListRecordingSource::UpdateAndExpandInvalidation( if (!updated && !invalidation->Intersects(recorded_viewport_)) return false; + if (invalidation->IsEmpty()) + return false; + ContentLayerClient::PaintingControlSetting painting_control = ContentLayerClient::PAINTING_BEHAVIOR_NORMAL; |