Chromium Code Reviews| 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(); |