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(); |