Index: third_party/WebKit/Source/platform/graphics/compositing/PaintArtifactCompositor.cpp |
diff --git a/third_party/WebKit/Source/platform/graphics/compositing/PaintArtifactCompositor.cpp b/third_party/WebKit/Source/platform/graphics/compositing/PaintArtifactCompositor.cpp |
index 0aaecc29f3c0fddf654d9d7279d43c442aa709e0..612385a0f360279353a80562b430d51db769a035 100644 |
--- a/third_party/WebKit/Source/platform/graphics/compositing/PaintArtifactCompositor.cpp |
+++ b/third_party/WebKit/Source/platform/graphics/compositing/PaintArtifactCompositor.cpp |
@@ -91,7 +91,7 @@ class PaintArtifactCompositor::ContentLayerClientImpl |
return; |
if (RuntimeEnabledFeatures::paintUnderInvalidationCheckingEnabled()) |
- tracking->tracked_raster_invalidations.clear(); |
+ tracking->invalidations.clear(); |
else |
CcLayersRasterInvalidationTrackingMap().Remove(cc_picture_layer_.get()); |
} |
@@ -100,28 +100,28 @@ class PaintArtifactCompositor::ContentLayerClientImpl |
RasterInvalidationTracking* tracking = |
CcLayersRasterInvalidationTrackingMap().Find(cc_picture_layer_.get()); |
if (tracking) |
- return !tracking->tracked_raster_invalidations.IsEmpty(); |
+ return !tracking->invalidations.IsEmpty(); |
return false; |
} |
- void SetNeedsDisplayRect(const gfx::Rect& rect, |
- RasterInvalidationInfo* raster_invalidation_info) { |
+ void SetNeedsDisplayRect(const gfx::Rect& rect) { |
cc_picture_layer_->SetNeedsDisplayRect(rect); |
+ } |
- if (!raster_invalidation_info || rect.IsEmpty()) |
- return; |
- |
- RasterInvalidationTracking& tracking = |
+ void AddTrackedRasterInvalidations( |
+ const RasterInvalidationTracking& tracking) { |
+ auto& cc_tracking = |
CcLayersRasterInvalidationTrackingMap().Add(cc_picture_layer_.get()); |
+ cc_tracking.invalidations.AppendVector(tracking.invalidations); |
- tracking.tracked_raster_invalidations.push_back(*raster_invalidation_info); |
- |
- if (RuntimeEnabledFeatures::paintUnderInvalidationCheckingEnabled()) { |
+ if (!RuntimeEnabledFeatures::paintUnderInvalidationCheckingEnabled()) |
+ return; |
+ for (const auto& info : tracking.invalidations) { |
// TODO(crbug.com/496260): Some antialiasing effects overflow the paint |
// invalidation rect. |
- IntRect r = raster_invalidation_info->rect; |
+ IntRect r = info.rect; |
r.Inflate(1); |
- tracking.raster_invalidation_region_since_last_paint.Unite(r); |
+ cc_tracking.invalidation_region_since_last_paint.Unite(r); |
} |
} |
@@ -171,17 +171,10 @@ PaintArtifactCompositor::PaintArtifactCompositor() { |
root_layer_ = cc::Layer::Create(); |
web_layer_ = Platform::Current()->CompositorSupport()->CreateLayerFromCCLayer( |
root_layer_.get()); |
- is_tracking_raster_invalidations_ = false; |
} |
PaintArtifactCompositor::~PaintArtifactCompositor() {} |
-void PaintArtifactCompositor::SetTracksRasterInvalidations( |
- bool tracks_paint_invalidations) { |
- ResetTrackedRasterInvalidations(); |
- is_tracking_raster_invalidations_ = tracks_paint_invalidations; |
-} |
- |
void PaintArtifactCompositor::ResetTrackedRasterInvalidations() { |
for (auto& client : content_layer_clients_) |
client->ResetTrackedRasterInvalidations(); |
@@ -289,12 +282,6 @@ PaintArtifactCompositor::CompositedLayerForPendingLayer( |
content_layer_client->ClearPaintChunkDebugData(); |
for (const auto& paint_chunk : pending_layer.paint_chunks) { |
- RasterInvalidationTracking* raster_tracking = |
- tracking_map ? tracking_map->Find(paint_chunk) : nullptr; |
- DCHECK(!raster_tracking || |
- raster_tracking->tracked_raster_invalidations.size() == |
- paint_chunk->raster_invalidation_rects.size()); |
- |
if (store_debug_info) { |
content_layer_client->AddPaintChunkDebugData( |
paint_artifact.GetDisplayItemList().SubsequenceAsJSON( |
@@ -303,10 +290,8 @@ PaintArtifactCompositor::CompositedLayerForPendingLayer( |
DisplayItemList::kShownOnlyDisplayItemTypes)); |
} |
- for (unsigned index = 0; |
- index < paint_chunk->raster_invalidation_rects.size(); ++index) { |
- IntRect rect( |
- EnclosingIntRect(paint_chunk->raster_invalidation_rects[index])); |
+ for (const auto& r : paint_chunk->raster_invalidation_rects) { |
+ IntRect rect(EnclosingIntRect(r)); |
gfx::Rect cc_invalidation_rect(rect.X(), rect.Y(), |
std::max(0, rect.Width()), |
std::max(0, rect.Height())); |
@@ -315,12 +300,12 @@ PaintArtifactCompositor::CompositedLayerForPendingLayer( |
// Raster paintChunk.rasterInvalidationRects is in the space of the |
// containing transform node, so need to subtract off the layer offset. |
cc_invalidation_rect.Offset(-cc_combined_bounds.OffsetFromOrigin()); |
- content_layer_client->SetNeedsDisplayRect( |
- cc_invalidation_rect, |
- raster_tracking |
- ? &raster_tracking->tracked_raster_invalidations[index] |
- : nullptr); |
+ content_layer_client->SetNeedsDisplayRect(cc_invalidation_rect); |
} |
+ |
+ if (auto* raster_tracking = |
+ tracking_map ? tracking_map->Find(paint_chunk) : nullptr) |
+ content_layer_client->AddTrackedRasterInvalidations(*raster_tracking); |
} |
new_content_layer_clients.push_back(std::move(content_layer_client)); |