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 d4e6a3e..bfd8fdd 100644 --- a/cc/playback/display_list_recording_source.cc +++ b/cc/playback/display_list_recording_source.cc @@ -111,6 +111,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, @@ -127,6 +135,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, @@ -144,6 +155,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; |