summaryrefslogtreecommitdiff
path: root/chromium/third_party/blink/renderer/platform/graphics/paint/raster_invalidator_test.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/third_party/blink/renderer/platform/graphics/paint/raster_invalidator_test.cc')
-rw-r--r--chromium/third_party/blink/renderer/platform/graphics/paint/raster_invalidator_test.cc459
1 files changed, 266 insertions, 193 deletions
diff --git a/chromium/third_party/blink/renderer/platform/graphics/paint/raster_invalidator_test.cc b/chromium/third_party/blink/renderer/platform/graphics/paint/raster_invalidator_test.cc
index f4ad986d71a..d4598f77c81 100644
--- a/chromium/third_party/blink/renderer/platform/graphics/paint/raster_invalidator_test.cc
+++ b/chromium/third_party/blink/renderer/platform/graphics/paint/raster_invalidator_test.cc
@@ -6,6 +6,7 @@
#include <utility>
#include "base/bind_helpers.h"
+#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "third_party/blink/renderer/platform/graphics/paint/geometry_mapper.h"
#include "third_party/blink/renderer/platform/graphics/paint/paint_artifact.h"
@@ -13,6 +14,8 @@
#include "third_party/blink/renderer/platform/testing/paint_test_configurations.h"
#include "third_party/blink/renderer/platform/testing/test_paint_artifact.h"
+using testing::ElementsAre;
+
namespace blink {
static const IntRect kDefaultLayerBounds(-9999, -7777, 18888, 16666);
@@ -20,7 +23,7 @@ static const IntRect kDefaultLayerBounds(-9999, -7777, 18888, 16666);
class RasterInvalidatorTest : public testing::Test,
public PaintTestConfigurations {
public:
- RasterInvalidatorTest() : invalidator_(base::DoNothing()) {}
+ RasterInvalidatorTest() = default;
static PropertyTreeState DefaultPropertyTreeState() {
return PropertyTreeState::Root();
@@ -47,58 +50,60 @@ class RasterInvalidatorTest : public testing::Test,
return invalidator_.GetTracking()->Invalidations();
}
- using MapFunction = base::RepeatingCallback<void(IntRect&)>;
- static IntRect ChunkRectToLayer(
- const IntRect& rect,
- const IntPoint& layer_offset,
- const MapFunction& mapper = base::DoNothing()) {
- auto r = rect;
- mapper.Run(r);
- r.MoveBy(layer_offset);
- return r;
- }
-
RasterInvalidator invalidator_;
};
INSTANTIATE_PAINT_TEST_SUITE_P(RasterInvalidatorTest);
-#define EXPECT_CHUNK_INVALIDATION_CUSTOM( \
- invalidations, index, chunk, expected_reason, layer_offset, mapper) \
- do { \
- const auto& info = (invalidations)[index]; \
- EXPECT_EQ(ChunkRectToLayer((chunk).bounds, layer_offset, mapper), \
- info.rect); \
- EXPECT_EQ(&(chunk).id.client, info.client); \
- EXPECT_EQ(expected_reason, info.reason); \
- } while (false)
-
-#define EXPECT_CHUNK_INVALIDATION(invalidations, index, chunk, reason) \
- EXPECT_CHUNK_INVALIDATION_CUSTOM(invalidations, index, chunk, reason, \
- -kDefaultLayerBounds.Location(), \
- base::DoNothing())
-
-#define EXPECT_INCREMENTAL_INVALIDATION(invalidations, index, chunk, \
- chunk_rect) \
- do { \
- const auto& info = (invalidations)[index]; \
- EXPECT_EQ(ChunkRectToLayer(chunk_rect, -kDefaultLayerBounds.Location()), \
- info.rect); \
- EXPECT_EQ(&(chunk).id.client, info.client); \
- EXPECT_EQ(PaintInvalidationReason::kIncremental, info.reason); \
- } while (false)
+using MapFunction = base::RepeatingCallback<void(IntRect&)>;
+static IntRect ChunkRectToLayer(const IntRect& rect,
+ const IntPoint& layer_offset,
+ const MapFunction& mapper = base::DoNothing()) {
+ auto r = rect;
+ mapper.Run(r);
+ r.MoveBy(layer_offset);
+ return r;
+}
+
+static bool CheckChunkInvalidation(
+ const RasterInvalidationInfo& info,
+ const PaintChunk& chunk,
+ const IntRect& chunk_rect,
+ PaintInvalidationReason reason,
+ const IntPoint& layer_offset,
+ const MapFunction& mapper = base::DoNothing()) {
+ return ChunkRectToLayer(chunk_rect, layer_offset, mapper) == info.rect &&
+ &chunk.id.client == info.client && reason == info.reason;
+}
+
+MATCHER_P4(ChunkInvalidation, chunk, reason, layer_offset, mapper, "") {
+ return CheckChunkInvalidation(arg, *chunk, chunk->drawable_bounds, reason,
+ layer_offset, mapper);
+}
+
+MATCHER_P2(ChunkInvalidation, chunk, reason, "") {
+ return CheckChunkInvalidation(arg, *chunk, chunk->drawable_bounds, reason,
+ -kDefaultLayerBounds.Location());
+}
+
+MATCHER_P2(IncrementalInvalidation, chunk, chunk_rect, "") {
+ return CheckChunkInvalidation(arg, *chunk, chunk_rect,
+ PaintInvalidationReason::kIncremental,
+ -kDefaultLayerBounds.Location());
+}
TEST_P(RasterInvalidatorTest, ImplicitFullLayerInvalidation) {
auto artifact = TestPaintArtifact().Chunk(0).Build();
invalidator_.SetTracksRasterInvalidations(true);
- invalidator_.Generate(artifact, kDefaultLayerBounds,
+ invalidator_.Generate(base::DoNothing(), artifact, kDefaultLayerBounds,
DefaultPropertyTreeState());
- const auto& invalidations = TrackedRasterInvalidations();
- ASSERT_EQ(1u, invalidations.size());
- EXPECT_EQ(IntRect(IntPoint(), kDefaultLayerBounds.Size()),
- invalidations[0].rect);
- EXPECT_EQ(PaintInvalidationReason::kFullLayer, invalidations[0].reason);
+ const auto& client = artifact->PaintChunks()[0].id.client;
+ EXPECT_THAT(TrackedRasterInvalidations(),
+ ElementsAre(RasterInvalidationInfo{
+ &client, client.DebugName(),
+ IntRect(IntPoint(), kDefaultLayerBounds.Size()),
+ PaintInvalidationReason::kFullLayer}));
FinishCycle(*artifact);
invalidator_.SetTracksRasterInvalidations(false);
}
@@ -106,34 +111,35 @@ TEST_P(RasterInvalidatorTest, ImplicitFullLayerInvalidation) {
TEST_P(RasterInvalidatorTest, LayerBounds) {
auto artifact = TestPaintArtifact().Chunk(0).Build();
- invalidator_.Generate(artifact, kDefaultLayerBounds,
+ invalidator_.Generate(base::DoNothing(), artifact, kDefaultLayerBounds,
DefaultPropertyTreeState());
FinishCycle(*artifact);
invalidator_.SetTracksRasterInvalidations(true);
- invalidator_.Generate(artifact, kDefaultLayerBounds,
+ invalidator_.Generate(base::DoNothing(), artifact, kDefaultLayerBounds,
DefaultPropertyTreeState());
// No raster invalidations needed if layer origin doesn't change.
EXPECT_TRUE(TrackedRasterInvalidations().IsEmpty());
auto new_layer_bounds = kDefaultLayerBounds;
new_layer_bounds.Move(66, 77);
- invalidator_.Generate(artifact, new_layer_bounds, DefaultPropertyTreeState());
+ invalidator_.Generate(base::DoNothing(), artifact, new_layer_bounds,
+ DefaultPropertyTreeState());
// Change of layer origin causes change of chunk0's transform to layer.
- const auto& invalidations = TrackedRasterInvalidations();
- ASSERT_EQ(2u, invalidations.size());
- EXPECT_CHUNK_INVALIDATION(invalidations, 0, artifact->PaintChunks()[0],
- PaintInvalidationReason::kPaintProperty);
- EXPECT_CHUNK_INVALIDATION_CUSTOM(invalidations, 1, artifact->PaintChunks()[0],
- PaintInvalidationReason::kPaintProperty,
- -new_layer_bounds.Location(),
- base::DoNothing());
+ EXPECT_THAT(
+ TrackedRasterInvalidations(),
+ ElementsAre(
+ ChunkInvalidation(&artifact->PaintChunks()[0],
+ PaintInvalidationReason::kPaintProperty),
+ ChunkInvalidation(&artifact->PaintChunks()[0],
+ PaintInvalidationReason::kPaintProperty,
+ -new_layer_bounds.Location(), base::DoNothing())));
FinishCycle(*artifact);
}
TEST_P(RasterInvalidatorTest, ReorderChunks) {
auto artifact = TestPaintArtifact().Chunk(0).Chunk(1).Chunk(2).Build();
- invalidator_.Generate(artifact, kDefaultLayerBounds,
+ invalidator_.Generate(base::DoNothing(), artifact, kDefaultLayerBounds,
DefaultPropertyTreeState());
FinishCycle(*artifact);
@@ -145,23 +151,23 @@ TEST_P(RasterInvalidatorTest, ReorderChunks) {
.Chunk(1)
.Bounds(IntRect(11, 22, 33, 44))
.Build();
- invalidator_.Generate(new_artifact, kDefaultLayerBounds,
+ invalidator_.Generate(base::DoNothing(), new_artifact, kDefaultLayerBounds,
DefaultPropertyTreeState());
- const auto& invalidations = TrackedRasterInvalidations();
- ASSERT_EQ(2u, invalidations.size());
// Invalidated new chunk 2's old (as artifact->PaintChunks()[1]) and new
// (as new_artifact->PaintChunks()[2]) bounds.
- EXPECT_CHUNK_INVALIDATION(invalidations, 0, artifact->PaintChunks()[1],
- PaintInvalidationReason::kChunkReordered);
- EXPECT_CHUNK_INVALIDATION(invalidations, 1, new_artifact->PaintChunks()[2],
- PaintInvalidationReason::kChunkReordered);
+ EXPECT_THAT(
+ TrackedRasterInvalidations(),
+ ElementsAre(ChunkInvalidation(&artifact->PaintChunks()[1],
+ PaintInvalidationReason::kChunkReordered),
+ ChunkInvalidation(&new_artifact->PaintChunks()[2],
+ PaintInvalidationReason::kChunkReordered)));
FinishCycle(*new_artifact);
}
TEST_P(RasterInvalidatorTest, ReorderChunkSubsequences) {
auto artifact =
TestPaintArtifact().Chunk(0).Chunk(1).Chunk(2).Chunk(3).Chunk(4).Build();
- invalidator_.Generate(artifact, kDefaultLayerBounds,
+ invalidator_.Generate(base::DoNothing(), artifact, kDefaultLayerBounds,
DefaultPropertyTreeState());
FinishCycle(*artifact);
@@ -175,63 +181,98 @@ TEST_P(RasterInvalidatorTest, ReorderChunkSubsequences) {
.Bounds(IntRect(11, 22, 33, 44))
.Chunk(2)
.Build();
- invalidator_.Generate(new_artifact, kDefaultLayerBounds,
+ invalidator_.Generate(base::DoNothing(), new_artifact, kDefaultLayerBounds,
DefaultPropertyTreeState());
- const auto& invalidations = TrackedRasterInvalidations();
- ASSERT_EQ(3u, invalidations.size());
// Invalidated new chunk 3's old (as artifact->PaintChunks()[1] and new
// (as new_artifact->PaintChunks()[3]) bounds.
- EXPECT_CHUNK_INVALIDATION(invalidations, 0, artifact->PaintChunks()[1],
- PaintInvalidationReason::kChunkReordered);
- EXPECT_CHUNK_INVALIDATION(invalidations, 1, new_artifact->PaintChunks()[3],
- PaintInvalidationReason::kChunkReordered);
// Invalidated new chunk 4's new bounds. Didn't invalidate old bounds because
// it's the same as the new bounds.
- EXPECT_CHUNK_INVALIDATION(invalidations, 2, new_artifact->PaintChunks()[4],
- PaintInvalidationReason::kChunkReordered);
+ EXPECT_THAT(
+ TrackedRasterInvalidations(),
+ ElementsAre(ChunkInvalidation(&artifact->PaintChunks()[1],
+ PaintInvalidationReason::kChunkReordered),
+ ChunkInvalidation(&new_artifact->PaintChunks()[3],
+ PaintInvalidationReason::kChunkReordered),
+ ChunkInvalidation(&new_artifact->PaintChunks()[4],
+ PaintInvalidationReason::kChunkReordered)));
FinishCycle(*new_artifact);
}
TEST_P(RasterInvalidatorTest, ChunkAppearAndDisappear) {
auto artifact = TestPaintArtifact().Chunk(0).Chunk(1).Chunk(2).Build();
- invalidator_.Generate(artifact, kDefaultLayerBounds,
+ invalidator_.Generate(base::DoNothing(), artifact, kDefaultLayerBounds,
DefaultPropertyTreeState());
FinishCycle(*artifact);
// Chunk 1 and 2 disappeared, 3 and 4 appeared.
invalidator_.SetTracksRasterInvalidations(true);
auto new_artifact = TestPaintArtifact().Chunk(0).Chunk(3).Chunk(4).Build();
- invalidator_.Generate(new_artifact, kDefaultLayerBounds,
+ invalidator_.Generate(base::DoNothing(), new_artifact, kDefaultLayerBounds,
+ DefaultPropertyTreeState());
+ EXPECT_THAT(
+ TrackedRasterInvalidations(),
+ ElementsAre(
+ ChunkInvalidation(&new_artifact->PaintChunks()[1],
+ PaintInvalidationReason::kChunkAppeared),
+ ChunkInvalidation(&new_artifact->PaintChunks()[2],
+ PaintInvalidationReason::kChunkAppeared),
+ ChunkInvalidation(&artifact->PaintChunks()[1],
+ PaintInvalidationReason::kChunkDisappeared),
+ ChunkInvalidation(&artifact->PaintChunks()[2],
+ PaintInvalidationReason::kChunkDisappeared)));
+ FinishCycle(*new_artifact);
+}
+
+TEST_P(RasterInvalidatorTest, InvalidateDrawableBounds) {
+ IntRect drawable_bounds(11, 22, 33, 44);
+ IntRect bounds(0, 0, 100, 100);
+ auto artifact = TestPaintArtifact()
+ .Chunk(0)
+ .Chunk(1)
+ .Bounds(bounds)
+ .DrawableBounds(drawable_bounds)
+ .Build();
+ invalidator_.Generate(base::DoNothing(), artifact, kDefaultLayerBounds,
+ DefaultPropertyTreeState());
+ FinishCycle(*artifact);
+
+ invalidator_.SetTracksRasterInvalidations(true);
+ auto new_artifact = TestPaintArtifact()
+ .Chunk(0)
+ .Chunk(2)
+ .Bounds(bounds)
+ .DrawableBounds(drawable_bounds)
+ .Build();
+ invalidator_.Generate(base::DoNothing(), new_artifact, kDefaultLayerBounds,
DefaultPropertyTreeState());
- const auto& invalidations = TrackedRasterInvalidations();
- ASSERT_EQ(4u, invalidations.size());
- EXPECT_CHUNK_INVALIDATION(invalidations, 0, new_artifact->PaintChunks()[1],
- PaintInvalidationReason::kChunkAppeared);
- EXPECT_CHUNK_INVALIDATION(invalidations, 1, new_artifact->PaintChunks()[2],
- PaintInvalidationReason::kChunkAppeared);
- EXPECT_CHUNK_INVALIDATION(invalidations, 2, artifact->PaintChunks()[1],
- PaintInvalidationReason::kChunkDisappeared);
- EXPECT_CHUNK_INVALIDATION(invalidations, 3, artifact->PaintChunks()[2],
- PaintInvalidationReason::kChunkDisappeared);
+ // ChunkInvalidation uses the drawable_bounds. We expect raster invalidations
+ // based on drawable_bounds instead of bounds.
+ EXPECT_THAT(
+ TrackedRasterInvalidations(),
+ ElementsAre(
+ ChunkInvalidation(&new_artifact->PaintChunks()[1],
+ PaintInvalidationReason::kChunkAppeared),
+ ChunkInvalidation(&artifact->PaintChunks()[1],
+ PaintInvalidationReason::kChunkDisappeared)));
FinishCycle(*new_artifact);
}
TEST_P(RasterInvalidatorTest, ChunkAppearAtEnd) {
auto artifact = TestPaintArtifact().Chunk(0).Build();
- invalidator_.Generate(artifact, kDefaultLayerBounds,
+ invalidator_.Generate(base::DoNothing(), artifact, kDefaultLayerBounds,
DefaultPropertyTreeState());
FinishCycle(*artifact);
invalidator_.SetTracksRasterInvalidations(true);
auto new_artifact = TestPaintArtifact().Chunk(0).Chunk(1).Chunk(2).Build();
- invalidator_.Generate(new_artifact, kDefaultLayerBounds,
+ invalidator_.Generate(base::DoNothing(), new_artifact, kDefaultLayerBounds,
DefaultPropertyTreeState());
- const auto& invalidations = TrackedRasterInvalidations();
- ASSERT_EQ(2u, invalidations.size());
- EXPECT_CHUNK_INVALIDATION(invalidations, 0, new_artifact->PaintChunks()[1],
- PaintInvalidationReason::kChunkAppeared);
- EXPECT_CHUNK_INVALIDATION(invalidations, 1, new_artifact->PaintChunks()[2],
- PaintInvalidationReason::kChunkAppeared);
+ EXPECT_THAT(
+ TrackedRasterInvalidations(),
+ ElementsAre(ChunkInvalidation(&new_artifact->PaintChunks()[1],
+ PaintInvalidationReason::kChunkAppeared),
+ ChunkInvalidation(&new_artifact->PaintChunks()[2],
+ PaintInvalidationReason::kChunkAppeared)));
FinishCycle(*new_artifact);
}
@@ -239,21 +280,22 @@ TEST_P(RasterInvalidatorTest, UncacheableChunks) {
auto artifact =
TestPaintArtifact().Chunk(0).Chunk(1).Uncacheable().Chunk(2).Build();
- invalidator_.Generate(artifact, kDefaultLayerBounds,
+ invalidator_.Generate(base::DoNothing(), artifact, kDefaultLayerBounds,
DefaultPropertyTreeState());
FinishCycle(*artifact);
invalidator_.SetTracksRasterInvalidations(true);
auto new_artifact =
TestPaintArtifact().Chunk(0).Chunk(2).Chunk(1).Uncacheable().Build();
- invalidator_.Generate(new_artifact, kDefaultLayerBounds,
+ invalidator_.Generate(base::DoNothing(), new_artifact, kDefaultLayerBounds,
DefaultPropertyTreeState());
- const auto& invalidations = TrackedRasterInvalidations();
- ASSERT_EQ(2u, invalidations.size());
- EXPECT_CHUNK_INVALIDATION(invalidations, 0, new_artifact->PaintChunks()[2],
- PaintInvalidationReason::kChunkUncacheable);
- EXPECT_CHUNK_INVALIDATION(invalidations, 1, artifact->PaintChunks()[1],
- PaintInvalidationReason::kChunkUncacheable);
+ EXPECT_THAT(
+ TrackedRasterInvalidations(),
+ ElementsAre(
+ ChunkInvalidation(&new_artifact->PaintChunks()[2],
+ PaintInvalidationReason::kChunkUncacheable),
+ ChunkInvalidation(&artifact->PaintChunks()[1],
+ PaintInvalidationReason::kChunkUncacheable)));
FinishCycle(*new_artifact);
}
@@ -275,7 +317,8 @@ TEST_P(RasterInvalidatorTest, ClipPropertyChangeRounded) {
.Properties(t0(), *clip2, e0())
.Build();
- invalidator_.Generate(artifact, kDefaultLayerBounds, layer_state);
+ invalidator_.Generate(base::DoNothing(), artifact, kDefaultLayerBounds,
+ layer_state);
FinishCycle(*artifact);
// Change both clip0 and clip2.
@@ -288,13 +331,14 @@ TEST_P(RasterInvalidatorTest, ClipPropertyChangeRounded) {
ClipPaintPropertyNode::State{&clip2->LocalTransformSpace(),
new_clip_rect});
- invalidator_.Generate(artifact, kDefaultLayerBounds, layer_state);
- const auto& invalidations = TrackedRasterInvalidations();
- ASSERT_EQ(1u, invalidations.size());
+ invalidator_.Generate(base::DoNothing(), artifact, kDefaultLayerBounds,
+ layer_state);
// Property change in the layer state should not trigger raster invalidation.
// |clip2| change should trigger raster invalidation.
- EXPECT_CHUNK_INVALIDATION(invalidations, 0, artifact->PaintChunks()[2],
- PaintInvalidationReason::kPaintProperty);
+ EXPECT_THAT(
+ TrackedRasterInvalidations(),
+ ElementsAre(ChunkInvalidation(&artifact->PaintChunks()[2],
+ PaintInvalidationReason::kPaintProperty)));
invalidator_.SetTracksRasterInvalidations(false);
FinishCycle(*artifact);
@@ -309,11 +353,12 @@ TEST_P(RasterInvalidatorTest, ClipPropertyChangeRounded) {
.Build();
invalidator_.SetTracksRasterInvalidations(true);
- invalidator_.Generate(new_artifact1, kDefaultLayerBounds, layer_state);
- const auto& invalidations1 = TrackedRasterInvalidations();
- ASSERT_EQ(1u, invalidations1.size());
- EXPECT_CHUNK_INVALIDATION(invalidations1, 0, new_artifact1->PaintChunks()[1],
- PaintInvalidationReason::kPaintProperty);
+ invalidator_.Generate(base::DoNothing(), new_artifact1, kDefaultLayerBounds,
+ layer_state);
+ EXPECT_THAT(
+ TrackedRasterInvalidations(),
+ ElementsAre(ChunkInvalidation(&new_artifact1->PaintChunks()[1],
+ PaintInvalidationReason::kPaintProperty)));
invalidator_.SetTracksRasterInvalidations(false);
FinishCycle(*new_artifact1);
}
@@ -334,7 +379,8 @@ TEST_P(RasterInvalidatorTest, ClipPropertyChangeSimple) {
.Bounds(EnclosingIntRect(clip_rect.Rect()))
.Build();
- invalidator_.Generate(artifact, kDefaultLayerBounds, layer_state);
+ invalidator_.Generate(base::DoNothing(), artifact, kDefaultLayerBounds,
+ layer_state);
FinishCycle(*artifact);
// Change clip1 to bigger, which is still bound by clip0, resulting no actual
@@ -345,7 +391,8 @@ TEST_P(RasterInvalidatorTest, ClipPropertyChangeSimple) {
ClipPaintPropertyNode::State{&clip1->LocalTransformSpace(),
new_clip_rect1});
- invalidator_.Generate(artifact, kDefaultLayerBounds, layer_state);
+ invalidator_.Generate(base::DoNothing(), artifact, kDefaultLayerBounds,
+ layer_state);
EXPECT_TRUE(TrackedRasterInvalidations().IsEmpty());
FinishCycle(*artifact);
@@ -355,18 +402,19 @@ TEST_P(RasterInvalidatorTest, ClipPropertyChangeSimple) {
ClipPaintPropertyNode::State{&clip1->LocalTransformSpace(),
new_clip_rect2});
- invalidator_.Generate(artifact, kDefaultLayerBounds, layer_state);
- const auto& invalidations = TrackedRasterInvalidations();
- ASSERT_EQ(4u, invalidations.size());
+ invalidator_.Generate(base::DoNothing(), artifact, kDefaultLayerBounds,
+ layer_state);
// |clip1| change should trigger incremental raster invalidation.
- EXPECT_INCREMENTAL_INVALIDATION(invalidations, 0, artifact->PaintChunks()[1],
- IntRect(-1000, -1000, 2000, 500));
- EXPECT_INCREMENTAL_INVALIDATION(invalidations, 1, artifact->PaintChunks()[1],
- IntRect(-1000, -500, 500, 1000));
- EXPECT_INCREMENTAL_INVALIDATION(invalidations, 2, artifact->PaintChunks()[1],
- IntRect(500, -500, 500, 1000));
- EXPECT_INCREMENTAL_INVALIDATION(invalidations, 3, artifact->PaintChunks()[1],
- IntRect(-1000, 500, 2000, 500));
+ EXPECT_THAT(
+ TrackedRasterInvalidations(),
+ ElementsAre(IncrementalInvalidation(&artifact->PaintChunks()[1],
+ IntRect(-1000, -1000, 2000, 500)),
+ IncrementalInvalidation(&artifact->PaintChunks()[1],
+ IntRect(-1000, -500, 500, 1000)),
+ IncrementalInvalidation(&artifact->PaintChunks()[1],
+ IntRect(500, -500, 500, 1000)),
+ IncrementalInvalidation(&artifact->PaintChunks()[1],
+ IntRect(-1000, 500, 2000, 500))));
invalidator_.SetTracksRasterInvalidations(false);
FinishCycle(*artifact);
@@ -377,12 +425,12 @@ TEST_P(RasterInvalidatorTest, ClipPropertyChangeSimple) {
new_clip_rect3});
invalidator_.SetTracksRasterInvalidations(true);
- invalidator_.Generate(artifact, kDefaultLayerBounds, layer_state);
- const auto& invalidations1 = TrackedRasterInvalidations();
- ASSERT_EQ(1u, invalidations1.size());
+ invalidator_.Generate(base::DoNothing(), artifact, kDefaultLayerBounds,
+ layer_state);
// |clip1| change should trigger incremental raster invalidation.
- EXPECT_INCREMENTAL_INVALIDATION(invalidations1, 0, artifact->PaintChunks()[1],
- IntRect(500, -500, 500, 1000));
+ EXPECT_THAT(TrackedRasterInvalidations(),
+ ElementsAre(IncrementalInvalidation(
+ &artifact->PaintChunks()[1], IntRect(500, -500, 500, 1000))));
invalidator_.SetTracksRasterInvalidations(false);
FinishCycle(*artifact);
}
@@ -402,21 +450,22 @@ TEST_P(RasterInvalidatorTest, ClipPropertyChangeWithOutsetForRasterEffects) {
.OutsetForRasterEffects(2)
.Build();
- invalidator_.Generate(artifact, kDefaultLayerBounds, layer_state);
+ invalidator_.Generate(base::DoNothing(), artifact, kDefaultLayerBounds,
+ layer_state);
FinishCycle(*artifact);
invalidator_.SetTracksRasterInvalidations(true);
FloatRoundedRect new_clip_rect(-2000, -2000, 4000, 4000);
clip->Update(c0(), ClipPaintPropertyNode::State{&t0(), new_clip_rect});
- invalidator_.Generate(artifact, kDefaultLayerBounds, layer_state);
- const auto& invalidations = TrackedRasterInvalidations();
- ASSERT_EQ(1u, invalidations.size());
+ invalidator_.Generate(base::DoNothing(), artifact, kDefaultLayerBounds,
+ layer_state);
auto mapper = [](IntRect& r) { r.Inflate(2); };
- EXPECT_CHUNK_INVALIDATION_CUSTOM(invalidations, 0, artifact->PaintChunks()[0],
- PaintInvalidationReason::kPaintProperty,
- -kDefaultLayerBounds.Location(),
- base::BindRepeating(mapper));
+ EXPECT_THAT(
+ TrackedRasterInvalidations(),
+ ElementsAre(ChunkInvalidation(
+ &artifact->PaintChunks()[0], PaintInvalidationReason::kPaintProperty,
+ -kDefaultLayerBounds.Location(), base::BindRepeating(mapper))));
invalidator_.SetTracksRasterInvalidations(false);
FinishCycle(*artifact);
}
@@ -434,7 +483,8 @@ TEST_P(RasterInvalidatorTest, ClipLocalTransformSpaceChange) {
auto artifact =
TestPaintArtifact().Chunk(0).Properties(*t2, *c1, e0()).Build();
- invalidator_.Generate(artifact, kDefaultLayerBounds, layer_state);
+ invalidator_.Generate(base::DoNothing(), artifact, kDefaultLayerBounds,
+ layer_state);
FinishCycle(*artifact);
// Change both t1 and t2 but keep t1*t2 unchanged, to test change of
@@ -443,11 +493,12 @@ TEST_P(RasterInvalidatorTest, ClipLocalTransformSpaceChange) {
t1->Update(t0(), TransformPaintPropertyNode::State{FloatSize(-10, -20)});
t2->Update(*t1, TransformPaintPropertyNode::State{FloatSize(10, 20)});
- invalidator_.Generate(artifact, kDefaultLayerBounds, layer_state);
- const auto& invalidations = TrackedRasterInvalidations();
- ASSERT_EQ(1u, invalidations.size());
- EXPECT_CHUNK_INVALIDATION(invalidations, 0, artifact->PaintChunks()[0],
- PaintInvalidationReason::kPaintProperty);
+ invalidator_.Generate(base::DoNothing(), artifact, kDefaultLayerBounds,
+ layer_state);
+ EXPECT_THAT(
+ TrackedRasterInvalidations(),
+ ElementsAre(ChunkInvalidation(&artifact->PaintChunks()[0],
+ PaintInvalidationReason::kPaintProperty)));
invalidator_.SetTracksRasterInvalidations(false);
}
@@ -468,7 +519,8 @@ TEST_P(RasterInvalidatorTest, ClipLocalTransformSpaceChangeNoInvalidation) {
auto artifact =
TestPaintArtifact().Chunk(0).Properties(*t2, *c1, e0()).Build();
- invalidator_.Generate(artifact, kDefaultLayerBounds, layer_state);
+ invalidator_.Generate(base::DoNothing(), artifact, kDefaultLayerBounds,
+ layer_state);
FinishCycle(*artifact);
// Change both t1 and t2 but keep t1*t2 unchanged.
@@ -476,7 +528,8 @@ TEST_P(RasterInvalidatorTest, ClipLocalTransformSpaceChangeNoInvalidation) {
t1->Update(t0(), TransformPaintPropertyNode::State{FloatSize(-10, -20)});
t2->Update(*t1, TransformPaintPropertyNode::State{FloatSize(10, 20)});
- invalidator_.Generate(artifact, kDefaultLayerBounds, layer_state);
+ invalidator_.Generate(base::DoNothing(), artifact, kDefaultLayerBounds,
+ layer_state);
EXPECT_TRUE(TrackedRasterInvalidations().IsEmpty());
FinishCycle(*artifact);
}
@@ -494,7 +547,8 @@ TEST_P(RasterInvalidatorTest, TransformPropertyChange) {
.Properties(*transform1, c0(), e0())
.Build();
- invalidator_.Generate(artifact, kDefaultLayerBounds, layer_state);
+ invalidator_.Generate(base::DoNothing(), artifact, kDefaultLayerBounds,
+ layer_state);
FinishCycle(*artifact);
// Change layer_transform should not cause raster invalidation in the layer.
@@ -503,7 +557,8 @@ TEST_P(RasterInvalidatorTest, TransformPropertyChange) {
*layer_transform->Parent(),
TransformPaintPropertyNode::State{TransformationMatrix().Scale(10)});
- invalidator_.Generate(artifact, kDefaultLayerBounds, layer_state);
+ invalidator_.Generate(base::DoNothing(), artifact, kDefaultLayerBounds,
+ layer_state);
EXPECT_TRUE(TrackedRasterInvalidations().IsEmpty());
FinishCycle(*artifact);
@@ -516,7 +571,8 @@ TEST_P(RasterInvalidatorTest, TransformPropertyChange) {
transform0->Update(*new_layer_transform, TransformPaintPropertyNode::State{
transform0->Translation2D()});
- invalidator_.Generate(artifact, kDefaultLayerBounds, layer_state);
+ invalidator_.Generate(base::DoNothing(), artifact, kDefaultLayerBounds,
+ layer_state);
EXPECT_TRUE(TrackedRasterInvalidations().IsEmpty());
FinishCycle(*artifact);
@@ -526,7 +582,8 @@ TEST_P(RasterInvalidatorTest, TransformPropertyChange) {
transform0->Update(layer_state.Transform(), TransformPaintPropertyNode::State{
transform0->Translation2D()});
- invalidator_.Generate(artifact, kDefaultLayerBounds, layer_state);
+ invalidator_.Generate(base::DoNothing(), artifact, kDefaultLayerBounds,
+ layer_state);
EXPECT_TRUE(TrackedRasterInvalidations().IsEmpty());
FinishCycle(*artifact);
@@ -540,19 +597,20 @@ TEST_P(RasterInvalidatorTest, TransformPropertyChange) {
TransformPaintPropertyNode::State{
transform1->Translation2D() + FloatSize(-20, -30)});
- invalidator_.Generate(artifact, kDefaultLayerBounds, layer_state);
- const auto& invalidations = TrackedRasterInvalidations();
- ASSERT_EQ(2u, invalidations.size());
+ invalidator_.Generate(base::DoNothing(), artifact, kDefaultLayerBounds,
+ layer_state);
auto mapper0 = [](IntRect& r) { r.Move(10, 20); };
- EXPECT_CHUNK_INVALIDATION_CUSTOM(invalidations, 0, artifact->PaintChunks()[0],
- PaintInvalidationReason::kPaintProperty,
- -kDefaultLayerBounds.Location(),
- base::BindRepeating(mapper0));
auto mapper1 = [](IntRect& r) { r.Move(30, 50); };
- EXPECT_CHUNK_INVALIDATION_CUSTOM(invalidations, 1, artifact->PaintChunks()[0],
- PaintInvalidationReason::kPaintProperty,
- -kDefaultLayerBounds.Location(),
- base::BindRepeating(mapper1));
+ EXPECT_THAT(
+ TrackedRasterInvalidations(),
+ ElementsAre(ChunkInvalidation(&artifact->PaintChunks()[0],
+ PaintInvalidationReason::kPaintProperty,
+ -kDefaultLayerBounds.Location(),
+ base::BindRepeating(mapper0)),
+ ChunkInvalidation(&artifact->PaintChunks()[0],
+ PaintInvalidationReason::kPaintProperty,
+ -kDefaultLayerBounds.Location(),
+ base::BindRepeating(mapper1))));
invalidator_.SetTracksRasterInvalidations(false);
FinishCycle(*artifact);
}
@@ -567,7 +625,8 @@ TEST_P(RasterInvalidatorTest, TransformPropertyTinyChange) {
.Properties(*chunk_transform, c0(), e0())
.Build();
- invalidator_.Generate(artifact, kDefaultLayerBounds, layer_state);
+ invalidator_.Generate(base::DoNothing(), artifact, kDefaultLayerBounds,
+ layer_state);
FinishCycle(*artifact);
// Change chunk_transform by tiny difference, which should be ignored.
@@ -579,7 +638,8 @@ TEST_P(RasterInvalidatorTest, TransformPropertyTinyChange) {
.Scale(1.0000001)
.Rotate(0.0000001)});
- invalidator_.Generate(artifact, kDefaultLayerBounds, layer_state);
+ invalidator_.Generate(base::DoNothing(), artifact, kDefaultLayerBounds,
+ layer_state);
EXPECT_TRUE(TrackedRasterInvalidations().IsEmpty());
FinishCycle(*artifact);
@@ -593,7 +653,8 @@ TEST_P(RasterInvalidatorTest, TransformPropertyTinyChange) {
.Translate(0.0000001, -0.0000001)
.Scale(1.0000001)
.Rotate(0.0000001)});
- invalidator_.Generate(artifact, kDefaultLayerBounds, layer_state);
+ invalidator_.Generate(base::DoNothing(), artifact, kDefaultLayerBounds,
+ layer_state);
invalidated = !TrackedRasterInvalidations().IsEmpty();
FinishCycle(*artifact);
}
@@ -613,7 +674,8 @@ TEST_P(RasterInvalidatorTest, TransformPropertyTinyChangeScale) {
.Bounds(chunk_bounds)
.Build();
- invalidator_.Generate(artifact, kDefaultLayerBounds, layer_state);
+ invalidator_.Generate(base::DoNothing(), artifact, kDefaultLayerBounds,
+ layer_state);
FinishCycle(*artifact);
// Scale change from 1e-6 to 2e-6 should be treated as significant.
@@ -622,7 +684,8 @@ TEST_P(RasterInvalidatorTest, TransformPropertyTinyChangeScale) {
layer_state.Transform(),
TransformPaintPropertyNode::State{TransformationMatrix().Scale(2e-6)});
- invalidator_.Generate(artifact, kDefaultLayerBounds, layer_state);
+ invalidator_.Generate(base::DoNothing(), artifact, kDefaultLayerBounds,
+ layer_state);
EXPECT_FALSE(TrackedRasterInvalidations().IsEmpty());
invalidator_.SetTracksRasterInvalidations(false);
FinishCycle(*artifact);
@@ -633,7 +696,8 @@ TEST_P(RasterInvalidatorTest, TransformPropertyTinyChangeScale) {
TransformPaintPropertyNode::State{
TransformationMatrix().Scale(2e-6 + 1e-15)});
- invalidator_.Generate(artifact, kDefaultLayerBounds, layer_state);
+ invalidator_.Generate(base::DoNothing(), artifact, kDefaultLayerBounds,
+ layer_state);
EXPECT_TRUE(TrackedRasterInvalidations().IsEmpty());
invalidator_.SetTracksRasterInvalidations(false);
FinishCycle(*artifact);
@@ -650,7 +714,8 @@ TEST_P(RasterInvalidatorTest, EffectLocalTransformSpaceChange) {
auto artifact =
TestPaintArtifact().Chunk(0).Properties(*t2, c0(), *e1).Build();
- invalidator_.Generate(artifact, kDefaultLayerBounds, layer_state);
+ invalidator_.Generate(base::DoNothing(), artifact, kDefaultLayerBounds,
+ layer_state);
FinishCycle(*artifact);
// Change both t1 and t2 but keep t1*t2 unchanged, to test change of
@@ -659,14 +724,14 @@ TEST_P(RasterInvalidatorTest, EffectLocalTransformSpaceChange) {
t1->Update(t0(), TransformPaintPropertyNode::State{FloatSize(-10, -20)});
t2->Update(*t1, TransformPaintPropertyNode::State{FloatSize(10, 20)});
- invalidator_.Generate(artifact, kDefaultLayerBounds, layer_state);
- const auto& invalidations = TrackedRasterInvalidations();
- ASSERT_EQ(1u, invalidations.size());
+ invalidator_.Generate(base::DoNothing(), artifact, kDefaultLayerBounds,
+ layer_state);
auto mapper = [](IntRect& r) { r.Inflate(60); };
- EXPECT_CHUNK_INVALIDATION_CUSTOM(invalidations, 0, artifact->PaintChunks()[0],
- PaintInvalidationReason::kPaintProperty,
- -kDefaultLayerBounds.Location(),
- base::BindRepeating(mapper));
+ EXPECT_THAT(
+ TrackedRasterInvalidations(),
+ ElementsAre(ChunkInvalidation(
+ &artifact->PaintChunks()[0], PaintInvalidationReason::kPaintProperty,
+ -kDefaultLayerBounds.Location(), base::BindRepeating(mapper))));
invalidator_.SetTracksRasterInvalidations(false);
FinishCycle(*artifact);
}
@@ -686,7 +751,8 @@ TEST_P(RasterInvalidatorTest, EffectLocalTransformSpaceChangeNoInvalidation) {
auto artifact =
TestPaintArtifact().Chunk(0).Properties(*t2, c0(), *e1).Build();
- invalidator_.Generate(artifact, kDefaultLayerBounds, layer_state);
+ invalidator_.Generate(base::DoNothing(), artifact, kDefaultLayerBounds,
+ layer_state);
FinishCycle(*artifact);
// Change both t1 and t2 but keep t1*t2 unchanged.
@@ -694,7 +760,8 @@ TEST_P(RasterInvalidatorTest, EffectLocalTransformSpaceChangeNoInvalidation) {
t1->Update(t0(), TransformPaintPropertyNode::State{FloatSize(-10, -20)});
t2->Update(*t1, TransformPaintPropertyNode::State{FloatSize(10, 20)});
- invalidator_.Generate(artifact, kDefaultLayerBounds, layer_state);
+ invalidator_.Generate(base::DoNothing(), artifact, kDefaultLayerBounds,
+ layer_state);
EXPECT_TRUE(TrackedRasterInvalidations().IsEmpty());
FinishCycle(*artifact);
}
@@ -711,7 +778,8 @@ TEST_P(RasterInvalidatorTest, AliasEffectParentChanges) {
PropertyTreeState chunk_state(t0(), c0(), *alias_effect);
auto artifact = TestPaintArtifact().Chunk(0).Properties(chunk_state).Build();
- invalidator_.Generate(artifact, kDefaultLayerBounds, layer_state);
+ invalidator_.Generate(base::DoNothing(), artifact, kDefaultLayerBounds,
+ layer_state);
FinishCycle(*artifact);
invalidator_.SetTracksRasterInvalidations(true);
@@ -721,11 +789,12 @@ TEST_P(RasterInvalidatorTest, AliasEffectParentChanges) {
// We expect to get invalidations since the effect unaliased effect is
// actually different now.
- invalidator_.Generate(artifact, kDefaultLayerBounds, layer_state);
- const auto& invalidations = TrackedRasterInvalidations();
- ASSERT_EQ(1u, invalidations.size());
- EXPECT_CHUNK_INVALIDATION(invalidations, 0, artifact->PaintChunks()[0],
- PaintInvalidationReason::kPaintProperty);
+ invalidator_.Generate(base::DoNothing(), artifact, kDefaultLayerBounds,
+ layer_state);
+ EXPECT_THAT(
+ TrackedRasterInvalidations(),
+ ElementsAre(ChunkInvalidation(&artifact->PaintChunks()[0],
+ PaintInvalidationReason::kPaintProperty)));
FinishCycle(*artifact);
}
@@ -742,7 +811,8 @@ TEST_P(RasterInvalidatorTest, NestedAliasEffectParentChanges) {
PropertyTreeState chunk_state(t0(), c0(), *alias_effect_2);
auto artifact = TestPaintArtifact().Chunk(0).Properties(chunk_state).Build();
- invalidator_.Generate(artifact, kDefaultLayerBounds, layer_state);
+ invalidator_.Generate(base::DoNothing(), artifact, kDefaultLayerBounds,
+ layer_state);
FinishCycle(*artifact);
invalidator_.SetTracksRasterInvalidations(true);
@@ -753,11 +823,12 @@ TEST_P(RasterInvalidatorTest, NestedAliasEffectParentChanges) {
// We expect to get invalidations since the effect unaliased effect is
// actually different now.
- invalidator_.Generate(artifact, kDefaultLayerBounds, layer_state);
- const auto& invalidations = TrackedRasterInvalidations();
- ASSERT_EQ(1u, invalidations.size());
- EXPECT_CHUNK_INVALIDATION(invalidations, 0, artifact->PaintChunks()[0],
- PaintInvalidationReason::kPaintProperty);
+ invalidator_.Generate(base::DoNothing(), artifact, kDefaultLayerBounds,
+ layer_state);
+ EXPECT_THAT(
+ TrackedRasterInvalidations(),
+ ElementsAre(ChunkInvalidation(&artifact->PaintChunks()[0],
+ PaintInvalidationReason::kPaintProperty)));
FinishCycle(*artifact);
}
@@ -775,7 +846,8 @@ TEST_P(RasterInvalidatorTest, EffectWithAliasTransformWhoseParentChanges) {
PropertyTreeState chunk_state(t0(), c0(), *e1);
auto artifact = TestPaintArtifact().Chunk(0).Properties(chunk_state).Build();
- invalidator_.Generate(artifact, kDefaultLayerBounds, layer_state);
+ invalidator_.Generate(base::DoNothing(), artifact, kDefaultLayerBounds,
+ layer_state);
FinishCycle(*artifact);
invalidator_.SetTracksRasterInvalidations(true);
@@ -785,11 +857,12 @@ TEST_P(RasterInvalidatorTest, EffectWithAliasTransformWhoseParentChanges) {
// We expect to get invalidations since the effect unaliased effect is
// actually different now.
- invalidator_.Generate(artifact, kDefaultLayerBounds, layer_state);
- const auto& invalidations = TrackedRasterInvalidations();
- ASSERT_EQ(1u, invalidations.size());
- EXPECT_CHUNK_INVALIDATION(invalidations, 0, artifact->PaintChunks()[0],
- PaintInvalidationReason::kPaintProperty);
+ invalidator_.Generate(base::DoNothing(), artifact, kDefaultLayerBounds,
+ layer_state);
+ EXPECT_THAT(
+ TrackedRasterInvalidations(),
+ ElementsAre(ChunkInvalidation(&artifact->PaintChunks()[0],
+ PaintInvalidationReason::kPaintProperty)));
FinishCycle(*artifact);
}