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

Unified Diff: cc/playback/display_list_recording_source.cc

Issue 1452353002: Turn off computation of the interest rect in cc in synchronized paint mode. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 1 month 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
Index: cc/playback/display_list_recording_source.cc
diff --git a/cc/playback/display_list_recording_source.cc b/cc/playback/display_list_recording_source.cc
index 3a30cf96758b2ad126b2832d3a9cbbf001e39253..e5185eb370e429b658e3bdbf98eb2111d617d10f 100644
--- a/cc/playback/display_list_recording_source.cc
+++ b/cc/playback/display_list_recording_source.cc
@@ -110,50 +110,56 @@ bool DisplayListRecordingSource::UpdateAndExpandInvalidation(
const gfx::Size& layer_size,
const gfx::Rect& visible_layer_rect,
int frame_number,
- RecordingMode recording_mode) {
+ RecordingMode recording_mode,
+ bool blink_synchronous_painting_enabled) {
ScopedDisplayListRecordingSourceUpdateTimer timer;
- bool updated = false;
- if (size_ != layer_size) {
- size_ = layer_size;
- updated = true;
+ if (blink_synchronous_painting_enabled) {
+ recorded_viewport_ = gfx::Rect(layer_size);
+ } else {
+ bool updated = false;
+
+ if (size_ != layer_size) {
+ size_ = layer_size;
+ updated = true;
+ }
+
+ // The recorded viewport is the visible layer rect, expanded
+ // by the pixel record distance, up to a maximum of the total
+ // layer size.
+ gfx::Rect potential_new_recorded_viewport = visible_layer_rect;
+ potential_new_recorded_viewport.Inset(-pixel_record_distance_,
+ -pixel_record_distance_);
+ potential_new_recorded_viewport.Intersect(gfx::Rect(GetSize()));
enne (OOO) 2015/11/17 23:44:49 Because you still need to add invalidations for ne
chrishtr 2015/11/18 21:09:40 Done.
+
+ if (updated ||
+ ExposesEnoughNewArea(recorded_viewport_,
+ potential_new_recorded_viewport, GetSize())) {
+ gfx::Rect old_recorded_viewport = recorded_viewport_;
+ recorded_viewport_ = potential_new_recorded_viewport;
+
+ // Invalidate newly-exposed and no-longer-exposed areas.
enne (OOO) 2015/11/17 23:44:49 This is still needed even for synchronous painting
chrishtr 2015/11/18 21:09:40 Done.
+ Region newly_exposed_region(recorded_viewport_);
+ newly_exposed_region.Subtract(old_recorded_viewport);
+ invalidation->Union(newly_exposed_region);
+
+ Region no_longer_exposed_region(old_recorded_viewport);
+ no_longer_exposed_region.Subtract(recorded_viewport_);
+ invalidation->Union(no_longer_exposed_region);
+
+ updated = true;
+ }
+
+ // Count the area that is being invalidated.
+ Region recorded_invalidation(*invalidation);
+ recorded_invalidation.Intersect(recorded_viewport_);
+ for (Region::Iterator it(recorded_invalidation); it.has_rect(); it.next())
+ timer.AddArea(it.rect().size().GetCheckedArea());
+
+ if (!updated && !invalidation->Intersects(recorded_viewport_))
+ return false;
}
- // The recorded viewport is the visible layer rect, expanded
- // by the pixel record distance, up to a maximum of the total
- // layer size.
- gfx::Rect potential_new_recorded_viewport = visible_layer_rect;
- potential_new_recorded_viewport.Inset(-pixel_record_distance_,
- -pixel_record_distance_);
- potential_new_recorded_viewport.Intersect(gfx::Rect(GetSize()));
-
- if (updated ||
- ExposesEnoughNewArea(recorded_viewport_, potential_new_recorded_viewport,
- GetSize())) {
- gfx::Rect old_recorded_viewport = recorded_viewport_;
- recorded_viewport_ = potential_new_recorded_viewport;
-
- // Invalidate newly-exposed and no-longer-exposed areas.
- Region newly_exposed_region(recorded_viewport_);
- newly_exposed_region.Subtract(old_recorded_viewport);
- invalidation->Union(newly_exposed_region);
-
- Region no_longer_exposed_region(old_recorded_viewport);
- no_longer_exposed_region.Subtract(recorded_viewport_);
- invalidation->Union(no_longer_exposed_region);
-
- updated = true;
- }
-
- // Count the area that is being invalidated.
- Region recorded_invalidation(*invalidation);
- recorded_invalidation.Intersect(recorded_viewport_);
- for (Region::Iterator it(recorded_invalidation); it.has_rect(); it.next())
- timer.AddArea(it.rect().size().GetCheckedArea());
-
- if (!updated && !invalidation->Intersects(recorded_viewport_))
- return false;
-
ContentLayerClient::PaintingControlSetting painting_control =
ContentLayerClient::PAINTING_BEHAVIOR_NORMAL;
@@ -177,8 +183,8 @@ bool DisplayListRecordingSource::UpdateAndExpandInvalidation(
// TODO(vmpstr): Add a slow_down_recording_scale_factor_for_debug_ to be able
// to slow down recording.
- display_list_ =
- painter->PaintContentsToDisplayList(recorded_viewport_, painting_control);
+ display_list_ = painter->PaintContentsToDisplayList(painting_control,
+ &recorded_viewport_);
painter_reported_memory_usage_ = painter->GetApproximateUnsharedMemoryUsage();
DetermineIfSolidColor();

Powered by Google App Engine
This is Rietveld 408576698