Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3407)

Unified Diff: cc/playback/display_item_list_unittest.cc

Issue 2230513005: Move visual rect unioning between paired items to cc::DisplayItemList. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Code review feedback. Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « cc/playback/display_item_list.cc ('k') | cc/playback/display_item_proto_factory.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: cc/playback/display_item_list_unittest.cc
diff --git a/cc/playback/display_item_list_unittest.cc b/cc/playback/display_item_list_unittest.cc
index 1bb6d3da481a11a42862b1302af358bf0ef20e85..67d96b4a6dd3eb5c52b4ef7cf07834e3090c916d 100644
--- a/cc/playback/display_item_list_unittest.cc
+++ b/cc/playback/display_item_list_unittest.cc
@@ -23,6 +23,7 @@
#include "cc/test/fake_client_picture_cache.h"
#include "cc/test/fake_engine_picture_cache.h"
#include "cc/test/fake_image_serialization_processor.h"
+#include "cc/test/geometry_test_utils.h"
#include "cc/test/skia_common.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
@@ -45,6 +46,21 @@ namespace {
const gfx::Rect kVisualRect(0, 0, 42, 42);
+scoped_refptr<DisplayItemList> CreateDefaultList() {
+ return DisplayItemList::Create(gfx::Rect(), DisplayItemListSettings());
+}
+
+sk_sp<const SkPicture> CreateRectPicture(const gfx::Rect& bounds) {
+ SkPictureRecorder recorder;
+ sk_sp<SkCanvas> canvas;
+
+ canvas = sk_ref_sp(recorder.beginRecording(bounds.width(), bounds.height()));
+ canvas->drawRect(
+ SkRect::MakeXYWH(bounds.x(), bounds.y(), bounds.width(), bounds.height()),
+ SkPaint());
+ return recorder.finishRecordingAsPicture();
+}
+
void AppendFirstSerializationTestPicture(scoped_refptr<DisplayItemList> list,
const gfx::Size& layer_size) {
gfx::PointF offset(2.f, 3.f);
@@ -58,7 +74,7 @@ void AppendFirstSerializationTestPicture(scoped_refptr<DisplayItemList> list,
offset.x(), offset.y(), layer_size.width(), layer_size.height())));
canvas->translate(offset.x(), offset.y());
canvas->drawRectCoords(0.f, 0.f, 4.f, 4.f, red_paint);
- list->CreateAndAppendItem<DrawingDisplayItem>(
+ list->CreateAndAppendDrawingItem<DrawingDisplayItem>(
kVisualRect, recorder.finishRecordingAsPicture());
}
@@ -75,7 +91,7 @@ void AppendSecondSerializationTestPicture(scoped_refptr<DisplayItemList> list,
offset.x(), offset.y(), layer_size.width(), layer_size.height())));
canvas->translate(offset.x(), offset.y());
canvas->drawRectCoords(3.f, 3.f, 7.f, 7.f, blue_paint);
- list->CreateAndAppendItem<DrawingDisplayItem>(
+ list->CreateAndAppendDrawingItem<DrawingDisplayItem>(
kVisualRect, recorder.finishRecordingAsPicture());
}
@@ -160,14 +176,14 @@ TEST(DisplayItemListTest, SerializeClipItem) {
gfx::Rect clip_rect(6, 6, 1, 1);
std::vector<SkRRect> rrects;
rrects.push_back(SkRRect::MakeOval(SkRect::MakeXYWH(5.f, 5.f, 4.f, 4.f)));
- list->CreateAndAppendItem<ClipDisplayItem>(kVisualRect, clip_rect, rrects,
- true);
+ list->CreateAndAppendPairedBeginItem<ClipDisplayItem>(clip_rect, rrects,
+ true);
// Build the second DrawingDisplayItem.
AppendSecondSerializationTestPicture(list, layer_size);
// Build the EndClipDisplayItem.
- list->CreateAndAppendItem<EndClipDisplayItem>(kVisualRect);
+ list->CreateAndAppendPairedEndItem<EndClipDisplayItem>();
ValidateDisplayItemListSerialization(layer_size, list);
}
@@ -185,14 +201,14 @@ TEST(DisplayItemListTest, SerializeClipPathItem) {
// Build the ClipPathDisplayItem.
SkPath path;
path.addCircle(5.f, 5.f, 2.f, SkPath::Direction::kCW_Direction);
- list->CreateAndAppendItem<ClipPathDisplayItem>(
- kVisualRect, path, SkRegion::Op::kReplace_Op, false);
+ list->CreateAndAppendPairedBeginItem<ClipPathDisplayItem>(
+ path, SkRegion::Op::kReplace_Op, false);
// Build the second DrawingDisplayItem.
AppendSecondSerializationTestPicture(list, layer_size);
// Build the EndClipPathDisplayItem.
- list->CreateAndAppendItem<EndClipPathDisplayItem>(kVisualRect);
+ list->CreateAndAppendPairedEndItem<EndClipPathDisplayItem>();
ValidateDisplayItemListSerialization(layer_size, list);
}
@@ -208,8 +224,8 @@ TEST(DisplayItemListTest, SerializeCompositingItem) {
AppendFirstSerializationTestPicture(list, layer_size);
// Build the CompositingDisplayItem.
- list->CreateAndAppendItem<CompositingDisplayItem>(
- kVisualRect, 150, SkXfermode::Mode::kDst_Mode, nullptr,
+ list->CreateAndAppendPairedBeginItem<CompositingDisplayItem>(
+ 150, SkXfermode::Mode::kDst_Mode, nullptr,
SkColorMatrixFilter::MakeLightingFilter(SK_ColorRED, SK_ColorGREEN),
false);
@@ -217,7 +233,7 @@ TEST(DisplayItemListTest, SerializeCompositingItem) {
AppendSecondSerializationTestPicture(list, layer_size);
// Build the EndCompositingDisplayItem.
- list->CreateAndAppendItem<EndCompositingDisplayItem>(kVisualRect);
+ list->CreateAndAppendPairedEndItem<EndCompositingDisplayItem>();
ValidateDisplayItemListSerialization(layer_size, list);
}
@@ -234,13 +250,13 @@ TEST(DisplayItemListTest, SerializeFloatClipItem) {
// Build the FloatClipDisplayItem.
gfx::RectF clip_rect(6.f, 6.f, 1.f, 1.f);
- list->CreateAndAppendItem<FloatClipDisplayItem>(kVisualRect, clip_rect);
+ list->CreateAndAppendPairedBeginItem<FloatClipDisplayItem>(clip_rect);
// Build the second DrawingDisplayItem.
AppendSecondSerializationTestPicture(list, layer_size);
// Build the EndFloatClipDisplayItem.
- list->CreateAndAppendItem<EndFloatClipDisplayItem>(kVisualRect);
+ list->CreateAndAppendPairedEndItem<EndFloatClipDisplayItem>();
ValidateDisplayItemListSerialization(layer_size, list);
}
@@ -259,13 +275,13 @@ TEST(DisplayItemListTest, SerializeTransformItem) {
gfx::Transform transform;
transform.Scale(1.25f, 1.25f);
transform.Translate(-1.f, -1.f);
- list->CreateAndAppendItem<TransformDisplayItem>(kVisualRect, transform);
+ list->CreateAndAppendPairedBeginItem<TransformDisplayItem>(transform);
// Build the second DrawingDisplayItem.
AppendSecondSerializationTestPicture(list, layer_size);
// Build the EndTransformDisplayItem.
- list->CreateAndAppendItem<EndTransformDisplayItem>(kVisualRect);
+ list->CreateAndAppendPairedEndItem<EndTransformDisplayItem>();
ValidateDisplayItemListSerialization(layer_size, list);
}
@@ -290,7 +306,7 @@ TEST(DisplayItemListTest, SingleDrawingItem) {
canvas->translate(offset.x(), offset.y());
canvas->drawRectCoords(0.f, 0.f, 60.f, 60.f, red_paint);
canvas->drawRectCoords(50.f, 50.f, 75.f, 75.f, blue_paint);
- list->CreateAndAppendItem<DrawingDisplayItem>(
+ list->CreateAndAppendDrawingItem<DrawingDisplayItem>(
kVisualRect, recorder.finishRecordingAsPicture());
list->Finalize();
DrawDisplayList(pixels, layer_rect, list);
@@ -332,12 +348,12 @@ TEST(DisplayItemListTest, ClipItem) {
recorder.beginRecording(gfx::RectFToSkRect(first_recording_rect)));
canvas->translate(first_offset.x(), first_offset.y());
canvas->drawRectCoords(0.f, 0.f, 60.f, 60.f, red_paint);
- list->CreateAndAppendItem<DrawingDisplayItem>(
+ list->CreateAndAppendDrawingItem<DrawingDisplayItem>(
kVisualRect, recorder.finishRecordingAsPicture());
gfx::Rect clip_rect(60, 60, 10, 10);
- list->CreateAndAppendItem<ClipDisplayItem>(kVisualRect, clip_rect,
- std::vector<SkRRect>(), true);
+ list->CreateAndAppendPairedBeginItem<ClipDisplayItem>(
+ clip_rect, std::vector<SkRRect>(), true);
gfx::PointF second_offset(2.f, 3.f);
gfx::RectF second_recording_rect(second_offset,
@@ -346,10 +362,10 @@ TEST(DisplayItemListTest, ClipItem) {
recorder.beginRecording(gfx::RectFToSkRect(second_recording_rect)));
canvas->translate(second_offset.x(), second_offset.y());
canvas->drawRectCoords(50.f, 50.f, 75.f, 75.f, blue_paint);
- list->CreateAndAppendItem<DrawingDisplayItem>(
+ list->CreateAndAppendDrawingItem<DrawingDisplayItem>(
kVisualRect, recorder.finishRecordingAsPicture());
- list->CreateAndAppendItem<EndClipDisplayItem>(kVisualRect);
+ list->CreateAndAppendPairedEndItem<EndClipDisplayItem>();
list->Finalize();
DrawDisplayList(pixels, layer_rect, list);
@@ -392,12 +408,12 @@ TEST(DisplayItemListTest, TransformItem) {
recorder.beginRecording(gfx::RectFToSkRect(first_recording_rect)));
canvas->translate(first_offset.x(), first_offset.y());
canvas->drawRectCoords(0.f, 0.f, 60.f, 60.f, red_paint);
- list->CreateAndAppendItem<DrawingDisplayItem>(
+ list->CreateAndAppendDrawingItem<DrawingDisplayItem>(
kVisualRect, recorder.finishRecordingAsPicture());
gfx::Transform transform;
transform.Rotate(45.0);
- list->CreateAndAppendItem<TransformDisplayItem>(kVisualRect, transform);
+ list->CreateAndAppendPairedBeginItem<TransformDisplayItem>(transform);
gfx::PointF second_offset(2.f, 3.f);
gfx::RectF second_recording_rect(second_offset,
@@ -406,10 +422,10 @@ TEST(DisplayItemListTest, TransformItem) {
recorder.beginRecording(gfx::RectFToSkRect(second_recording_rect)));
canvas->translate(second_offset.x(), second_offset.y());
canvas->drawRectCoords(50.f, 50.f, 75.f, 75.f, blue_paint);
- list->CreateAndAppendItem<DrawingDisplayItem>(
+ list->CreateAndAppendDrawingItem<DrawingDisplayItem>(
kVisualRect, recorder.finishRecordingAsPicture());
- list->CreateAndAppendItem<EndTransformDisplayItem>(kVisualRect);
+ list->CreateAndAppendPairedEndItem<EndTransformDisplayItem>();
list->Finalize();
DrawDisplayList(pixels, layer_rect, list);
@@ -461,9 +477,9 @@ TEST(DisplayItemListTest, FilterItem) {
filters.Append(FilterOperation::CreateReferenceFilter(image_filter));
filters.Append(FilterOperation::CreateBrightnessFilter(0.5f));
gfx::RectF filter_bounds(10.f, 10.f, 50.f, 50.f);
- list->CreateAndAppendItem<FilterDisplayItem>(kVisualRect, filters,
- filter_bounds);
- list->CreateAndAppendItem<EndFilterDisplayItem>(kVisualRect);
+ list->CreateAndAppendPairedBeginItem<FilterDisplayItem>(filters,
+ filter_bounds);
+ list->CreateAndAppendPairedEndItem<EndFilterDisplayItem>();
list->Finalize();
DrawDisplayList(pixels, layer_rect, list);
@@ -505,8 +521,8 @@ TEST(DisplayItemListTest, CompactingItems) {
canvas->drawRectCoords(0.f, 0.f, 60.f, 60.f, red_paint);
canvas->drawRectCoords(50.f, 50.f, 75.f, 75.f, blue_paint);
sk_sp<SkPicture> picture = recorder.finishRecordingAsPicture();
- list_without_caching->CreateAndAppendItem<DrawingDisplayItem>(kVisualRect,
- picture);
+ list_without_caching->CreateAndAppendDrawingItem<DrawingDisplayItem>(
+ kVisualRect, picture);
list_without_caching->Finalize();
DrawDisplayList(pixels, layer_rect, list_without_caching);
@@ -515,8 +531,8 @@ TEST(DisplayItemListTest, CompactingItems) {
caching_settings.use_cached_picture = true;
scoped_refptr<DisplayItemList> list_with_caching =
DisplayItemList::Create(layer_rect, caching_settings);
- list_with_caching->CreateAndAppendItem<DrawingDisplayItem>(kVisualRect,
- picture);
+ list_with_caching->CreateAndAppendDrawingItem<DrawingDisplayItem>(kVisualRect,
+ picture);
list_with_caching->Finalize();
DrawDisplayList(expected_pixels, layer_rect, list_with_caching);
@@ -544,7 +560,7 @@ TEST(DisplayItemListTest, ApproximateMemoryUsage) {
DisplayItemListSettings caching_settings;
caching_settings.use_cached_picture = true;
list = DisplayItemList::Create(layer_rect, caching_settings);
- list->CreateAndAppendItem<DrawingDisplayItem>(kVisualRect, picture);
+ list->CreateAndAppendDrawingItem<DrawingDisplayItem>(kVisualRect, picture);
list->Finalize();
memory_usage = list->ApproximateMemoryUsage();
EXPECT_GE(memory_usage, picture_size);
@@ -554,7 +570,7 @@ TEST(DisplayItemListTest, ApproximateMemoryUsage) {
DisplayItemListSettings no_caching_settings;
no_caching_settings.use_cached_picture = false;
list = DisplayItemList::Create(layer_rect, no_caching_settings);
- list->CreateAndAppendItem<DrawingDisplayItem>(kVisualRect, picture);
+ list->CreateAndAppendDrawingItem<DrawingDisplayItem>(kVisualRect, picture);
list->Finalize();
memory_usage = list->ApproximateMemoryUsage();
EXPECT_GE(memory_usage, picture_size);
@@ -564,7 +580,7 @@ TEST(DisplayItemListTest, ApproximateMemoryUsage) {
// picture and items are retained (currently this only happens due to certain
// categories being traced).
list = new DisplayItemList(layer_rect, caching_settings, true);
- list->CreateAndAppendItem<DrawingDisplayItem>(kVisualRect, picture);
+ list->CreateAndAppendDrawingItem<DrawingDisplayItem>(kVisualRect, picture);
list->Finalize();
memory_usage = list->ApproximateMemoryUsage();
EXPECT_EQ(static_cast<size_t>(0), memory_usage);
@@ -592,9 +608,9 @@ TEST(DisplayItemListTest, AsValueWithRectAndItems) {
DisplayItemList::Create(layer_rect, DisplayItemListSettings());
gfx::Transform transform;
transform.Translate(6.f, 7.f);
- list->CreateAndAppendItem<TransformDisplayItem>(kVisualRect, transform);
+ list->CreateAndAppendPairedBeginItem<TransformDisplayItem>(transform);
AppendFirstSerializationTestPicture(list, layer_rect.size());
- list->CreateAndAppendItem<EndTransformDisplayItem>(kVisualRect);
+ list->CreateAndAppendPairedEndItem<EndTransformDisplayItem>();
list->Finalize();
std::string value = list->AsValue(true)->ToString();
@@ -611,8 +627,7 @@ TEST(DisplayItemListTest, AsValueWithRectAndItems) {
}
TEST(DisplayItemListTest, AsValueWithEmptyRectAndNoItems) {
- scoped_refptr<DisplayItemList> list =
- DisplayItemList::Create(gfx::Rect(), DisplayItemListSettings());
+ scoped_refptr<DisplayItemList> list = CreateDefaultList();
list->Finalize();
std::string value = list->AsValue(true)->ToString();
@@ -627,13 +642,12 @@ TEST(DisplayItemListTest, AsValueWithEmptyRectAndNoItems) {
}
TEST(DisplayItemListTest, AsValueWithEmptyRectAndItems) {
- scoped_refptr<DisplayItemList> list =
- DisplayItemList::Create(gfx::Rect(), DisplayItemListSettings());
+ scoped_refptr<DisplayItemList> list = CreateDefaultList();
gfx::Transform transform;
transform.Translate(6.f, 7.f);
- list->CreateAndAppendItem<TransformDisplayItem>(kVisualRect, transform);
+ list->CreateAndAppendPairedBeginItem<TransformDisplayItem>(transform);
AppendFirstSerializationTestPicture(list, gfx::Size());
- list->CreateAndAppendItem<EndTransformDisplayItem>(kVisualRect);
+ list->CreateAndAppendPairedEndItem<EndTransformDisplayItem>();
list->Finalize();
std::string value = list->AsValue(true)->ToString();
@@ -651,4 +665,282 @@ TEST(DisplayItemListTest, AsValueWithEmptyRectAndItems) {
EXPECT_EQ(value.find("\"skp64\":"), std::string::npos);
}
+TEST(DisplayItemListTest, SizeEmpty) {
+ scoped_refptr<DisplayItemList> list = CreateDefaultList();
+ EXPECT_EQ(0u, list->size());
+}
+
+TEST(DisplayItemListTest, SizeOne) {
+ scoped_refptr<DisplayItemList> list = CreateDefaultList();
+ gfx::Rect drawing_bounds(5, 6, 1, 1);
+ list->CreateAndAppendDrawingItem<DrawingDisplayItem>(
+ drawing_bounds, CreateRectPicture(drawing_bounds));
+ EXPECT_EQ(1u, list->size());
+}
+
+TEST(DisplayItemListTest, SizeMultiple) {
+ scoped_refptr<DisplayItemList> list = CreateDefaultList();
+ gfx::Rect clip_bounds(5, 6, 7, 8);
+ list->CreateAndAppendPairedBeginItem<ClipDisplayItem>(
+ clip_bounds, std::vector<SkRRect>(), true);
+ list->CreateAndAppendPairedEndItem<EndClipDisplayItem>();
+ EXPECT_EQ(2u, list->size());
+}
+
+TEST(DisplayItemListTest, AppendVisualRectSimple) {
+ scoped_refptr<DisplayItemList> list = CreateDefaultList();
+
+ // One drawing: D.
+
+ gfx::Rect drawing_bounds(5, 6, 7, 8);
+ list->CreateAndAppendDrawingItem<DrawingDisplayItem>(
+ drawing_bounds, CreateRectPicture(drawing_bounds));
+
+ EXPECT_EQ(1u, list->size());
+ EXPECT_RECT_EQ(drawing_bounds, list->VisualRectForTesting(0));
+}
+
+TEST(DisplayItemListTest, AppendVisualRectEmptyBlock) {
+ scoped_refptr<DisplayItemList> list = CreateDefaultList();
+
+ // One block: B1, E1.
+
+ gfx::Rect clip_bounds(5, 6, 7, 8);
+ list->CreateAndAppendPairedBeginItem<ClipDisplayItem>(
+ clip_bounds, std::vector<SkRRect>(), true);
+
+ list->CreateAndAppendPairedEndItem<EndClipDisplayItem>();
+
+ EXPECT_EQ(2u, list->size());
+ EXPECT_RECT_EQ(gfx::Rect(), list->VisualRectForTesting(0));
+ EXPECT_RECT_EQ(gfx::Rect(), list->VisualRectForTesting(1));
+}
+
+TEST(DisplayItemListTest, AppendVisualRectEmptyBlockContainingEmptyBlock) {
+ scoped_refptr<DisplayItemList> list = CreateDefaultList();
+
+ // Two nested blocks: B1, B2, E2, E1.
+
+ gfx::Rect clip_bounds(5, 6, 7, 8);
+ list->CreateAndAppendPairedBeginItem<ClipDisplayItem>(
+ clip_bounds, std::vector<SkRRect>(), true);
+ list->CreateAndAppendPairedBeginItem<TransformDisplayItem>(gfx::Transform());
+ list->CreateAndAppendPairedEndItem<EndTransformDisplayItem>();
+ list->CreateAndAppendPairedEndItem<EndClipDisplayItem>();
+
+ EXPECT_EQ(4u, list->size());
+ EXPECT_RECT_EQ(gfx::Rect(), list->VisualRectForTesting(0));
+ EXPECT_RECT_EQ(gfx::Rect(), list->VisualRectForTesting(1));
+ EXPECT_RECT_EQ(gfx::Rect(), list->VisualRectForTesting(2));
+ EXPECT_RECT_EQ(gfx::Rect(), list->VisualRectForTesting(3));
+}
+
+TEST(DisplayItemListTest, AppendVisualRectBlockContainingDrawing) {
+ scoped_refptr<DisplayItemList> list = CreateDefaultList();
+
+ // One block with one drawing: B1, Da, E1.
+
+ gfx::Rect clip_bounds(5, 6, 7, 8);
+ list->CreateAndAppendPairedBeginItem<ClipDisplayItem>(
+ clip_bounds, std::vector<SkRRect>(), true);
+
+ gfx::Rect drawing_bounds(5, 6, 1, 1);
+ list->CreateAndAppendDrawingItem<DrawingDisplayItem>(
+ drawing_bounds, CreateRectPicture(drawing_bounds));
+
+ list->CreateAndAppendPairedEndItem<EndClipDisplayItem>();
+
+ EXPECT_EQ(3u, list->size());
+ EXPECT_RECT_EQ(drawing_bounds, list->VisualRectForTesting(0));
+ EXPECT_RECT_EQ(drawing_bounds, list->VisualRectForTesting(1));
+ EXPECT_RECT_EQ(drawing_bounds, list->VisualRectForTesting(2));
+}
+
+TEST(DisplayItemListTest, AppendVisualRectBlockContainingEscapedDrawing) {
+ scoped_refptr<DisplayItemList> list = CreateDefaultList();
+
+ // One block with one drawing: B1, Da (escapes), E1.
+
+ gfx::Rect clip_bounds(5, 6, 7, 8);
+ list->CreateAndAppendPairedBeginItem<ClipDisplayItem>(
+ clip_bounds, std::vector<SkRRect>(), true);
+
+ gfx::Rect drawing_bounds(1, 2, 3, 4);
+ list->CreateAndAppendDrawingItem<DrawingDisplayItem>(
+ drawing_bounds, CreateRectPicture(drawing_bounds));
+
+ list->CreateAndAppendPairedEndItem<EndClipDisplayItem>();
+
+ EXPECT_EQ(3u, list->size());
+ EXPECT_RECT_EQ(drawing_bounds, list->VisualRectForTesting(0));
+ EXPECT_RECT_EQ(drawing_bounds, list->VisualRectForTesting(1));
+ EXPECT_RECT_EQ(drawing_bounds, list->VisualRectForTesting(2));
+}
+
+TEST(DisplayItemListTest,
+ AppendVisualRectDrawingFollowedByBlockContainingEscapedDrawing) {
+ scoped_refptr<DisplayItemList> list = CreateDefaultList();
+
+ // One drawing followed by one block with one drawing: Da, B1, Db (escapes),
+ // E1.
+
+ gfx::Rect drawing_a_bounds(1, 2, 3, 4);
+ list->CreateAndAppendDrawingItem<DrawingDisplayItem>(
+ drawing_a_bounds, CreateRectPicture(drawing_a_bounds));
+
+ gfx::Rect clip_bounds(5, 6, 7, 8);
+ list->CreateAndAppendPairedBeginItem<ClipDisplayItem>(
+ clip_bounds, std::vector<SkRRect>(), true);
+
+ gfx::Rect drawing_b_bounds(13, 14, 1, 1);
+ list->CreateAndAppendDrawingItem<DrawingDisplayItem>(
+ drawing_b_bounds, CreateRectPicture(drawing_b_bounds));
+
+ list->CreateAndAppendPairedEndItem<EndClipDisplayItem>();
+
+ EXPECT_EQ(4u, list->size());
+ EXPECT_RECT_EQ(drawing_a_bounds, list->VisualRectForTesting(0));
+ EXPECT_RECT_EQ(drawing_b_bounds, list->VisualRectForTesting(1));
+ EXPECT_RECT_EQ(drawing_b_bounds, list->VisualRectForTesting(2));
+ EXPECT_RECT_EQ(drawing_b_bounds, list->VisualRectForTesting(3));
+}
+
+TEST(DisplayItemListTest, AppendVisualRectTwoBlocksTwoDrawings) {
+ scoped_refptr<DisplayItemList> list = CreateDefaultList();
+
+ // Multiple nested blocks with drawings amidst: B1, Da, B2, Db, E2, E1.
+
+ gfx::Rect clip_bounds(5, 6, 7, 8);
+ list->CreateAndAppendPairedBeginItem<ClipDisplayItem>(
+ clip_bounds, std::vector<SkRRect>(), true);
+
+ gfx::Rect drawing_a_bounds(5, 6, 1, 1);
+ list->CreateAndAppendDrawingItem<DrawingDisplayItem>(
+ drawing_a_bounds, CreateRectPicture(drawing_a_bounds));
+
+ list->CreateAndAppendPairedBeginItem<TransformDisplayItem>(gfx::Transform());
+
+ gfx::Rect drawing_b_bounds(7, 8, 1, 1);
+ list->CreateAndAppendDrawingItem<DrawingDisplayItem>(
+ drawing_b_bounds, CreateRectPicture(drawing_b_bounds));
+
+ list->CreateAndAppendPairedEndItem<EndTransformDisplayItem>();
+ list->CreateAndAppendPairedEndItem<EndClipDisplayItem>();
+
+ EXPECT_EQ(6u, list->size());
+ gfx::Rect merged_drawing_bounds = gfx::Rect(drawing_a_bounds);
+ merged_drawing_bounds.Union(drawing_b_bounds);
+ EXPECT_RECT_EQ(merged_drawing_bounds, list->VisualRectForTesting(0));
+ EXPECT_RECT_EQ(drawing_a_bounds, list->VisualRectForTesting(1));
+ EXPECT_RECT_EQ(drawing_b_bounds, list->VisualRectForTesting(2));
+ EXPECT_RECT_EQ(drawing_b_bounds, list->VisualRectForTesting(3));
+ EXPECT_RECT_EQ(drawing_b_bounds, list->VisualRectForTesting(4));
+ EXPECT_RECT_EQ(merged_drawing_bounds, list->VisualRectForTesting(5));
+}
+
+TEST(DisplayItemListTest,
+ AppendVisualRectTwoBlocksTwoDrawingsInnerDrawingEscaped) {
+ scoped_refptr<DisplayItemList> list = CreateDefaultList();
+
+ // Multiple nested blocks with drawings amidst: B1, Da, B2, Db (escapes), E2,
+ // E1.
+
+ gfx::Rect clip_bounds(5, 6, 7, 8);
+ list->CreateAndAppendPairedBeginItem<ClipDisplayItem>(
+ clip_bounds, std::vector<SkRRect>(), true);
+
+ gfx::Rect drawing_a_bounds(5, 6, 1, 1);
+ list->CreateAndAppendDrawingItem<DrawingDisplayItem>(
+ drawing_a_bounds, CreateRectPicture(drawing_a_bounds));
+
+ list->CreateAndAppendPairedBeginItem<TransformDisplayItem>(gfx::Transform());
+
+ gfx::Rect drawing_b_bounds(1, 2, 3, 4);
+ list->CreateAndAppendDrawingItem<DrawingDisplayItem>(
+ drawing_b_bounds, CreateRectPicture(drawing_b_bounds));
+
+ list->CreateAndAppendPairedEndItem<EndTransformDisplayItem>();
+ list->CreateAndAppendPairedEndItem<EndClipDisplayItem>();
+
+ EXPECT_EQ(6u, list->size());
+ gfx::Rect merged_drawing_bounds = gfx::Rect(drawing_a_bounds);
+ merged_drawing_bounds.Union(drawing_b_bounds);
+ EXPECT_RECT_EQ(merged_drawing_bounds, list->VisualRectForTesting(0));
+ EXPECT_RECT_EQ(drawing_a_bounds, list->VisualRectForTesting(1));
+ EXPECT_RECT_EQ(drawing_b_bounds, list->VisualRectForTesting(2));
+ EXPECT_RECT_EQ(drawing_b_bounds, list->VisualRectForTesting(3));
+ EXPECT_RECT_EQ(drawing_b_bounds, list->VisualRectForTesting(4));
+ EXPECT_RECT_EQ(merged_drawing_bounds, list->VisualRectForTesting(5));
+}
+
+TEST(DisplayItemListTest,
+ AppendVisualRectTwoBlocksTwoDrawingsOuterDrawingEscaped) {
+ scoped_refptr<DisplayItemList> list = CreateDefaultList();
+
+ // Multiple nested blocks with drawings amidst: B1, Da (escapes), B2, Db, E2,
+ // E1.
+
+ gfx::Rect clip_bounds(5, 6, 7, 8);
+ list->CreateAndAppendPairedBeginItem<ClipDisplayItem>(
+ clip_bounds, std::vector<SkRRect>(), true);
+
+ gfx::Rect drawing_a_bounds(1, 2, 3, 4);
+ list->CreateAndAppendDrawingItem<DrawingDisplayItem>(
+ drawing_a_bounds, CreateRectPicture(drawing_a_bounds));
+
+ list->CreateAndAppendPairedBeginItem<TransformDisplayItem>(gfx::Transform());
+
+ gfx::Rect drawing_b_bounds(7, 8, 1, 1);
+ list->CreateAndAppendDrawingItem<DrawingDisplayItem>(
+ drawing_b_bounds, CreateRectPicture(drawing_b_bounds));
+
+ list->CreateAndAppendPairedEndItem<EndTransformDisplayItem>();
+ list->CreateAndAppendPairedEndItem<EndClipDisplayItem>();
+
+ EXPECT_EQ(6u, list->size());
+ gfx::Rect merged_drawing_bounds = gfx::Rect(drawing_a_bounds);
+ merged_drawing_bounds.Union(drawing_b_bounds);
+ EXPECT_RECT_EQ(merged_drawing_bounds, list->VisualRectForTesting(0));
+ EXPECT_RECT_EQ(drawing_a_bounds, list->VisualRectForTesting(1));
+ EXPECT_RECT_EQ(drawing_b_bounds, list->VisualRectForTesting(2));
+ EXPECT_RECT_EQ(drawing_b_bounds, list->VisualRectForTesting(3));
+ EXPECT_RECT_EQ(drawing_b_bounds, list->VisualRectForTesting(4));
+ EXPECT_RECT_EQ(merged_drawing_bounds, list->VisualRectForTesting(5));
+}
+
+TEST(DisplayItemListTest,
+ AppendVisualRectTwoBlocksTwoDrawingsBothDrawingsEscaped) {
+ scoped_refptr<DisplayItemList> list = CreateDefaultList();
+
+ // Multiple nested blocks with drawings amidst:
+ // B1, Da (escapes to the right), B2, Db (escapes to the left), E2, E1.
+
+ gfx::Rect clip_bounds(5, 6, 7, 8);
+ list->CreateAndAppendPairedBeginItem<ClipDisplayItem>(
+ clip_bounds, std::vector<SkRRect>(), true);
+
+ gfx::Rect drawing_a_bounds(13, 14, 1, 1);
+ list->CreateAndAppendDrawingItem<DrawingDisplayItem>(
+ drawing_a_bounds, CreateRectPicture(drawing_a_bounds));
+
+ list->CreateAndAppendPairedBeginItem<TransformDisplayItem>(gfx::Transform());
+
+ gfx::Rect drawing_b_bounds(1, 2, 3, 4);
+ list->CreateAndAppendDrawingItem<DrawingDisplayItem>(
+ drawing_b_bounds, CreateRectPicture(drawing_b_bounds));
+
+ list->CreateAndAppendPairedEndItem<EndTransformDisplayItem>();
+ list->CreateAndAppendPairedEndItem<EndClipDisplayItem>();
+
+ EXPECT_EQ(6u, list->size());
+ gfx::Rect merged_drawing_bounds = gfx::Rect(drawing_a_bounds);
+ merged_drawing_bounds.Union(drawing_b_bounds);
+ EXPECT_RECT_EQ(merged_drawing_bounds, list->VisualRectForTesting(0));
+ EXPECT_RECT_EQ(drawing_a_bounds, list->VisualRectForTesting(1));
+ EXPECT_RECT_EQ(drawing_b_bounds, list->VisualRectForTesting(2));
+ EXPECT_RECT_EQ(drawing_b_bounds, list->VisualRectForTesting(3));
+ EXPECT_RECT_EQ(drawing_b_bounds, list->VisualRectForTesting(4));
+ EXPECT_RECT_EQ(merged_drawing_bounds, list->VisualRectForTesting(5));
+}
+
} // namespace cc
« no previous file with comments | « cc/playback/display_item_list.cc ('k') | cc/playback/display_item_proto_factory.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698