Skip to content

Commit

Permalink
[SPv2] Map raster invalidations of PaintChunks to cc Layers
Browse files Browse the repository at this point in the history
Cq-Include-Trybots: master.tryserver.chromium.linux:linux_layout_tests_slimming_paint_v2
Change-Id: I124bb0161d23a65028b55c8fdf6a2a54be1793c8
Reviewed-on: https://chromium-review.googlesource.com/517281
Commit-Queue: Xianzhu Wang <wangxianzhu@chromium.org>
Reviewed-by: Chris harrelson <chrishtr@chromium.org>
Cr-Commit-Position: refs/heads/master@{#476224}
  • Loading branch information
wangxianzhu authored and Commit Bot committed Jun 1, 2017
1 parent 5468fab commit 0caff95
Show file tree
Hide file tree
Showing 6 changed files with 73 additions and 68 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,7 @@ Bug(none) virtual/without-smil/ [ Skip ]

Bug(none) paint/transparency/compositing-alpha-fold-crash.html [ Failure ]
Bug(none) paint/invalidation/table/row-change-background-rowspan-cell.html [ Failure ]
Bug(none) paint/invalidation/clip-flex-text.html [ Failure ]
Bug(none) paint/invalidation/clip-flex-text.html [ Pass Failure ]
Bug(none) virtual/new-remote-playback-pipeline/media/controls/video-controls-with-cast-rendering.html [ Failure ]
Bug(none) virtual/new-remote-playback-pipeline/media/controls/video-overlay-cast-dark-rendering.html [ Failure ]
Bug(none) virtual/new-remote-playback-pipeline/media/controls/video-overlay-cast-light-rendering.html [ Failure ]
Expand Down Expand Up @@ -1089,6 +1089,7 @@ Bug(none) paint/invalidation/compositing/invalidations-on-composited-layers.html
Bug(none) paint/invalidation/compositing/invalidations-with-large-negative-margin.html [ Failure ]
Bug(none) paint/invalidation/compositing/new-stacking-context.html [ Failure ]
Bug(none) paint/invalidation/compositing/newly-composited-on-scroll.html [ Failure ]
Bug(none) paint/invalidation/compositing/newly-composited-repaint-rect.html [ Pass Failure ]
Bug(none) paint/invalidation/compositing/overlap-test-with-filter.html [ Failure ]
Bug(none) paint/invalidation/compositing/remove-squashed-layer-plus-move.html [ Failure ]
Bug(none) paint/invalidation/compositing/repaint-overflow-scrolled-squashed-content.html [ Failure ]
Expand Down Expand Up @@ -1154,15 +1155,11 @@ Bug(none) paint/invalidation/filters/effect-reference-repaint-composite-3.html [
Bug(none) paint/invalidation/filters/effect-reference-repaint-composite-4.html [ Failure ]
Bug(none) paint/invalidation/filters/effect-reference-repaint-composite-5.html [ Failure ]
Bug(none) paint/invalidation/filters/effect-reference-repaint-composite-6.html [ Failure ]
Bug(none) paint/invalidation/filters/effect-reference-repaint-displacement.html [ Failure ]
Bug(none) paint/invalidation/filters/effect-reference-repaint-gaussianblur-xonly.html [ Failure ]
Bug(none) paint/invalidation/filters/effect-reference-repaint-gaussianblur-yonly.html [ Failure ]
Bug(none) paint/invalidation/filters/effect-reference-repaint-gaussianblur.html [ Failure ]
Bug(none) paint/invalidation/filters/effect-reference-repaint-lighting.html [ Failure ]
Bug(none) paint/invalidation/filters/effect-reference-repaint-merge.html [ Failure ]
Bug(none) paint/invalidation/filters/effect-reference-repaint-morphology-xonly.html [ Failure ]
Bug(none) paint/invalidation/filters/effect-reference-repaint-morphology-yonly.html [ Failure ]
Bug(none) paint/invalidation/filters/effect-reference-repaint-morphology.html [ Failure ]
Bug(none) paint/invalidation/filters/effect-reference-repaint-offset.html [ Failure ]
Bug(none) paint/invalidation/fixed-after-scroll.html [ Failure ]
Bug(none) paint/invalidation/fixed-and-absolute-position-scrolled.html [ Failure ]
Expand Down Expand Up @@ -1207,10 +1204,8 @@ Bug(none) paint/invalidation/gradients-em-stops-repaint.html [ Failure ]
Bug(none) paint/invalidation/hover-pseudo-borders.html [ Failure ]
Bug(none) paint/invalidation/iframe-display-block-to-display-none.html [ Failure ]
Bug(none) paint/invalidation/iframe-display-none-to-display-block.html [ Failure ]
Bug(none) paint/invalidation/iframe-rounding.html [ Failure ]
Bug(none) paint/invalidation/iframe-scrollbar-hover.html [ Failure ]
Bug(none) paint/invalidation/image-resize.html [ Failure ]
Bug(none) paint/invalidation/in-scaled-iframe.html [ Failure ]
Bug(none) paint/invalidation/inline-block-resize.html [ Failure ]
Bug(none) paint/invalidation/inline-color-change.html [ Failure ]
Bug(none) paint/invalidation/inline-focus.html [ Failure ]
Expand All @@ -1235,11 +1230,9 @@ Bug(none) paint/invalidation/invalidate-caret-in-non-composited-scrolling-contai
Bug(none) paint/invalidation/invalidate-cell-in-row-with-offset.html [ Failure ]
Bug(none) paint/invalidation/invalidate-descendants-when-receiving-paint-layer.html [ Failure ]
Bug(none) paint/invalidation/invalidate-invisible-element.html [ Failure ]
Bug(none) paint/invalidation/invalidate-paint-for-fixed-pos-inside-iframe.html [ Failure ]
Bug(none) paint/invalidation/invalidate-paint-in-iframe-in-composited-layer.html [ Failure ]
Bug(none) paint/invalidation/invalidation-after-opacity-change-subtree.html [ Failure ]
Bug(none) paint/invalidation/invalidation-on-foreground-graphics-layer.html [ Failure ]
Bug(none) paint/invalidation/invalidation-with-scale-transform.html [ Failure ]
Bug(none) paint/invalidation/japanese-rl-selection-clear.html [ Failure ]
Bug(none) paint/invalidation/japanese-rl-selection-repaint.html [ Failure ]
Bug(none) paint/invalidation/layer-hide-when-needs-layout.html [ Failure ]
Expand Down Expand Up @@ -1320,7 +1313,6 @@ Bug(none) paint/invalidation/paint-caret-in-div-with-negative-indent.html [ Fail
Bug(none) paint/invalidation/paint-invalidation-with-opacity.html [ Failure ]
Bug(none) paint/invalidation/paint-invalidation-with-reparent-across-frame-boundaries.html [ Failure ]
Bug(none) paint/invalidation/percent-size-image-resize-container.html [ Failure ]
Bug(none) paint/invalidation/percentage-transform-paint-offset.html [ Failure ]
Bug(none) paint/invalidation/position-change-keeping-geometry.html [ Failure ]
Bug(none) paint/invalidation/positioned-document-element.html [ Failure ]
Bug(none) paint/invalidation/positioned-great-grandparent-change-location.html [ Failure ]
Expand All @@ -1343,7 +1335,6 @@ Bug(none) paint/invalidation/repaint-composited-child-in-scrolled-container.html
Bug(none) paint/invalidation/repaint-descandant-on-ancestor-layer-move.html [ Failure ]
Bug(none) paint/invalidation/repaint-during-scroll-with-zoom.html [ Failure ]
Bug(none) paint/invalidation/repaint-during-scroll.html [ Failure ]
Bug(none) paint/invalidation/repaint-in-iframe.html [ Failure ]
Bug(none) paint/invalidation/repaint-resized-overflow.html [ Failure ]
Bug(none) paint/invalidation/repaint-table-row-in-composited-document.html [ Failure ]
Bug(none) paint/invalidation/replaced-clipped-positioned-not-wrong-incremental-repainting.html [ Failure ]
Expand All @@ -1352,7 +1343,7 @@ Bug(none) paint/invalidation/resize-iframe-text.html [ Failure ]
Bug(none) paint/invalidation/resize-scrollable-div.html [ Failure ]
Bug(none) paint/invalidation/resize-scrollable-iframe.html [ Failure ]
Bug(none) paint/invalidation/resize-skewed.html [ Failure ]
Bug(none) paint/invalidation/resize-with-border-clipped.html [ Failure ]
Bug(none) paint/invalidation/resize-with-border-clipped.html [ Pass Failure ]
Bug(none) paint/invalidation/resize-with-border.html [ Failure ]
Bug(none) paint/invalidation/ruby-flipped-blocks.html [ Failure ]
Bug(none) paint/invalidation/scroll-absolute-layer-with-reflection.html [ Failure ]
Expand Down Expand Up @@ -1420,34 +1411,18 @@ Bug(none) paint/invalidation/svg/deep-dynamic-updates.svg [ Failure ]
Bug(none) paint/invalidation/svg/embedded-svg-size-changes-no-layout-triggers.html [ Failure ]
Bug(none) paint/invalidation/svg/ems-display-none.svg [ Failure ]
Bug(none) paint/invalidation/svg/exs-display-none.svg [ Failure ]
Bug(none) paint/invalidation/svg/feImage-change-target-id.svg [ Failure ]
Bug(none) paint/invalidation/svg/feImage-multiple-targets-id-change.svg [ Failure ]
Bug(none) paint/invalidation/svg/feImage-reference-invalidation.svg [ Failure ]
Bug(none) paint/invalidation/svg/feImage-remove-target.svg [ Failure ]
Bug(none) paint/invalidation/svg/feImage-target-add-to-document.svg [ Failure ]
Bug(none) paint/invalidation/svg/feImage-target-attribute-change-with-use-indirection-2.svg [ Failure ]
Bug(none) paint/invalidation/svg/feImage-target-attribute-change-with-use-indirection.svg [ Failure ]
Bug(none) paint/invalidation/svg/feImage-target-attribute-change.svg [ Failure ]
Bug(none) paint/invalidation/svg/feImage-target-changes-id.svg [ Failure ]
Bug(none) paint/invalidation/svg/feImage-target-id-change.svg [ Failure ]
Bug(none) paint/invalidation/svg/feImage-target-inline-style-change.svg [ Failure ]
Bug(none) paint/invalidation/svg/feImage-target-property-change.svg [ Failure ]
Bug(none) paint/invalidation/svg/feImage-target-reappend-to-document.svg [ Failure ]
Bug(none) paint/invalidation/svg/feImage-target-remove-from-document.svg [ Failure ]
Bug(none) paint/invalidation/svg/feImage-target-style-change.svg [ Failure ]
Bug(none) paint/invalidation/svg/fecomponenttransfer-in1-change.svg [ Failure ]
Bug(none) paint/invalidation/svg/filter-child-repaint.svg [ Failure ]
Bug(none) paint/invalidation/svg/filter-refresh.svg [ Failure ]
Bug(none) paint/invalidation/svg/filter-width-update.svg [ Failure ]
Bug(none) paint/invalidation/svg/focus-element.html [ Failure ]
Bug(none) paint/invalidation/svg/foreign-object-repaint.svg [ Failure ]
Bug(none) paint/invalidation/svg/hairline-stroke-squarecap.svg [ Failure ]
Bug(none) paint/invalidation/svg/image-animation-with-zoom.html [ Failure ]
Bug(none) paint/invalidation/svg/image-animation-with-zoom.html [ Pass Failure ]
Bug(none) paint/invalidation/svg/image-with-clip-path.svg [ Failure ]
Bug(none) paint/invalidation/svg/inner-svg-change-viewBox-contract.svg [ Failure ]
Bug(none) paint/invalidation/svg/inner-svg-change-viewBox.svg [ Failure ]
Bug(none) paint/invalidation/svg/inner-svg-change-viewPort-relative.svg [ Failure ]
Bug(none) paint/invalidation/svg/invalidate-on-child-layout.svg [ Failure ]
Bug(none) paint/invalidation/svg/js-late-clipPath-and-object-creation.svg [ Failure ]
Bug(none) paint/invalidation/svg/js-late-clipPath-creation.svg [ Failure ]
Bug(none) paint/invalidation/svg/js-late-gradient-and-object-creation.svg [ Failure ]
Expand All @@ -1472,11 +1447,9 @@ Bug(none) paint/invalidation/svg/marker-viewBox-changes.svg [ Failure ]
Bug(none) paint/invalidation/svg/modify-inserted-listitem.html [ Failure ]
Bug(none) paint/invalidation/svg/modify-text-node-in-tspan.html [ Failure ]
Bug(none) paint/invalidation/svg/modify-transferred-listitem-different-attr.html [ Failure ]
Bug(none) paint/invalidation/svg/modify-transferred-listitem.html [ Failure ]
Bug(none) paint/invalidation/svg/nested-embedded-svg-size-changes-no-layout-triggers-1.html [ Failure ]
Bug(none) paint/invalidation/svg/nested-embedded-svg-size-changes-no-layout-triggers-2.html [ Failure ]
Bug(none) paint/invalidation/svg/object-sizing-no-width-height-change-content-box-size.xhtml [ Failure ]
Bug(none) paint/invalidation/svg/outline-offset-shape.html [ Failure ]
Bug(none) paint/invalidation/svg/outline-offset-text.html [ Failure ]
Bug(none) paint/invalidation/svg/paintorder-filtered.svg [ Failure ]
Bug(none) paint/invalidation/svg/path-pathlength-change.html [ Failure ]
Expand All @@ -1503,13 +1476,11 @@ Bug(none) paint/invalidation/svg/repaint-paintorder.svg [ Failure ]
Bug(none) paint/invalidation/svg/repaint-stroke-width-changes.svg [ Failure ]
Bug(none) paint/invalidation/svg/resize-svg-invalidate-children-2.html [ Failure ]
Bug(none) paint/invalidation/svg/resize-svg-invalidate-children.html [ Failure ]
Bug(none) paint/invalidation/svg/rounded-rect-height-change.html [ Failure ]
Bug(none) paint/invalidation/svg/scrolling-embedded-svg-file-image-repaint-problem.html [ Failure ]
Bug(none) paint/invalidation/svg/shape-transform-change.html [ Failure ]
Bug(none) paint/invalidation/svg/shape-with-nested-outline.html [ Failure ]
Bug(none) paint/invalidation/svg/stroke-opacity-update.svg [ Failure ]
Bug(none) paint/invalidation/svg/svg-image-change-content-size.xhtml [ Failure ]
Bug(none) paint/invalidation/svg/svg-image-par-resize.html [ Failure ]
Bug(none) paint/invalidation/svg/svgsvgelement-repaint-children.html [ Failure ]
Bug(none) paint/invalidation/svg/tabgroup.svg [ Failure ]
Bug(none) paint/invalidation/svg/text-dom-removal.svg [ Failure ]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,14 @@ CcLayersRasterInvalidationTrackingMap() {
return map;
}

template <typename T>
static std::unique_ptr<JSONArray> PointAsJSONArray(const T& point) {
std::unique_ptr<JSONArray> array = JSONArray::Create();
array->PushDouble(point.X());
array->PushDouble(point.Y());
return array;
}

template <typename T>
static std::unique_ptr<JSONArray> SizeAsJSONArray(const T& size) {
std::unique_ptr<JSONArray> array = JSONArray::Create();
Expand Down Expand Up @@ -104,34 +112,28 @@ class PaintArtifactCompositor::ContentLayerClientImpl
return false;
}

void SetNeedsDisplayRect(const gfx::Rect& rect) {
cc_picture_layer_->SetNeedsDisplayRect(rect);
RasterInvalidationTracking& EnsureRasterInvalidationTracking() {
return CcLayersRasterInvalidationTrackingMap().Add(cc_picture_layer_.get());
}

void AddTrackedRasterInvalidations(
const RasterInvalidationTracking& tracking) {
auto& cc_tracking =
CcLayersRasterInvalidationTrackingMap().Add(cc_picture_layer_.get());
cc_tracking.invalidations.AppendVector(tracking.invalidations);

if (!RuntimeEnabledFeatures::paintUnderInvalidationCheckingEnabled())
return;
for (const auto& info : tracking.invalidations) {
// TODO(crbug.com/496260): Some antialiasing effects overflow the paint
// invalidation rect.
IntRect r = info.rect;
r.Inflate(1);
cc_tracking.invalidation_region_since_last_paint.Unite(r);
}
void SetNeedsDisplayRect(const gfx::Rect& rect) {
cc_picture_layer_->SetNeedsDisplayRect(rect);
}

std::unique_ptr<JSONObject> LayerAsJSON(LayerTreeFlags flags) {
std::unique_ptr<JSONObject> json = JSONObject::Create();
json->SetString("name", debug_name_);

FloatPoint position(cc_picture_layer_->offset_to_transform_parent().x(),
cc_picture_layer_->offset_to_transform_parent().y());
if (position != FloatPoint())
json->SetArray("position", PointAsJSONArray(position));

IntSize bounds(cc_picture_layer_->bounds().width(),
cc_picture_layer_->bounds().height());
if (!bounds.IsEmpty())
json->SetArray("bounds", SizeAsJSONArray(bounds));

json->SetBoolean("contentsOpaque", cc_picture_layer_->contents_opaque());
json->SetBoolean("drawsContent", cc_picture_layer_->DrawsContent());

Expand Down Expand Up @@ -240,6 +242,24 @@ PaintArtifactCompositor::ClientForPaintChunk(
.GetId()));
}

IntRect PaintArtifactCompositor::MapRasterInvalidationRectFromChunkToLayer(
const FloatRect& r,
const PaintChunk& paint_chunk,
const PendingLayer& pending_layer,
const gfx::Vector2dF& layer_offset) {
FloatClipRect rect(
r == FloatRect(LayoutRect::InfiniteIntRect()) ? paint_chunk.bounds : r);
GeometryMapper::LocalToAncestorVisualRect(
paint_chunk.properties.property_tree_state,
pending_layer.property_tree_state, rect);
if (rect.Rect().IsEmpty())
return IntRect();
// Now rect is in the space of the containing transform node of pending_layer,
// so need to subtract off the layer offset.
rect.Rect().Move(-layer_offset.x(), -layer_offset.y());
return EnclosingIntRect(rect.Rect());
}

scoped_refptr<cc::Layer>
PaintArtifactCompositor::CompositedLayerForPendingLayer(
const PaintArtifact& paint_artifact,
Expand Down Expand Up @@ -290,22 +310,31 @@ PaintArtifactCompositor::CompositedLayerForPendingLayer(
DisplayItemList::kShownOnlyDisplayItemTypes));
}

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()));
if (cc_invalidation_rect.IsEmpty())
auto* raster_tracking =
tracking_map ? tracking_map->Find(paint_chunk) : nullptr;
DCHECK(!raster_tracking || paint_chunk->raster_invalidation_rects.size() ==
raster_tracking->invalidations.size());

for (size_t i = 0; i < paint_chunk->raster_invalidation_rects.size(); ++i) {
auto rect = MapRasterInvalidationRectFromChunkToLayer(
paint_chunk->raster_invalidation_rects[i], *paint_chunk,
pending_layer, layer_offset);
if (rect.IsEmpty())
continue;
// 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);
}
content_layer_client->SetNeedsDisplayRect(rect);

if (auto* raster_tracking =
tracking_map ? tracking_map->Find(paint_chunk) : nullptr)
content_layer_client->AddTrackedRasterInvalidations(*raster_tracking);
if (!raster_tracking)
continue;
auto& cc_tracking =
content_layer_client->EnsureRasterInvalidationTracking();
auto info = raster_tracking->invalidations[i];
info.rect = rect;
cc_tracking.invalidations.push_back(info);
// TODO(crbug.com/496260): Some antialiasing effects overflow the paint
// invalidation rect.
rect.Inflate(1);
cc_tracking.invalidation_region_since_last_paint.Unite(rect);
}
}

new_content_layer_clients.push_back(std::move(content_layer_client));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -148,6 +148,12 @@ class PLATFORM_EXPORT PaintArtifactCompositor {
static bool CanDecompositeEffect(const EffectPaintPropertyNode*,
const PendingLayer&);

static IntRect MapRasterInvalidationRectFromChunkToLayer(
const FloatRect&,
const PaintChunk&,
const PendingLayer&,
const gfx::Vector2dF& layer_offset);

// Builds a leaf layer that represents a single paint chunk.
// Note: cc::Layer API assumes the layer bounds start at (0, 0), but the
// bounding box of a paint chunk does not necessarily start at (0, 0) (and
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -746,17 +746,15 @@ void PaintController::AddRasterInvalidation(const DisplayItemClient& client,
PaintInvalidationReason reason) {
chunk.raster_invalidation_rects.push_back(rect);
if (raster_invalidation_tracking_info_)
TrackRasterInvalidation(client, chunk, rect, reason);
TrackRasterInvalidation(client, chunk, reason);
}

void PaintController::TrackRasterInvalidation(const DisplayItemClient& client,
PaintChunk& chunk,
const FloatRect& rect,
PaintInvalidationReason reason) {
DCHECK(raster_invalidation_tracking_info_);

RasterInvalidationInfo info;
info.rect = EnclosingIntRect(rect);
info.client = &client;
if (reason == PaintInvalidationReason::kNone) {
// The client was validated by another PaintController, but not valid in
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -318,7 +318,6 @@ class PLATFORM_EXPORT PaintController {
PaintInvalidationReason);
void TrackRasterInvalidation(const DisplayItemClient&,
PaintChunk&,
const FloatRect&,
PaintInvalidationReason);

// The following two methods are for checking under-invalidations
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,8 @@ struct RasterInvalidationInfo {
// died.
const DisplayItemClient* client = nullptr;
String client_debug_name;
// For SPv2, this is set in PaintArtifactCompositor when converting chunk
// raster invalidations to cc raster invalidations.
IntRect rect;
PaintInvalidationReason reason = PaintInvalidationReason::kFull;
};
Expand Down

0 comments on commit 0caff95

Please sign in to comment.