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

Side by Side Diff: cc/playback/display_item_list_unittest.cc

Issue 2640983002: Rename paint data structures (Closed)
Patch Set: Re-add ios changes Created 3 years, 10 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 unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "cc/playback/display_item_list.h" 5 #include "cc/playback/display_item_list.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include <vector> 9 #include <vector>
10 10
11 #include "base/memory/ptr_util.h" 11 #include "base/memory/ptr_util.h"
12 #include "cc/output/filter_operation.h" 12 #include "cc/output/filter_operation.h"
13 #include "cc/output/filter_operations.h" 13 #include "cc/output/filter_operations.h"
14 #include "cc/paint/paint_canvas.h"
15 #include "cc/paint/paint_flags.h"
16 #include "cc/paint/paint_recorder.h"
14 #include "cc/playback/clip_display_item.h" 17 #include "cc/playback/clip_display_item.h"
15 #include "cc/playback/clip_path_display_item.h" 18 #include "cc/playback/clip_path_display_item.h"
16 #include "cc/playback/compositing_display_item.h" 19 #include "cc/playback/compositing_display_item.h"
17 #include "cc/playback/display_item_list_settings.h" 20 #include "cc/playback/display_item_list_settings.h"
18 #include "cc/playback/drawing_display_item.h" 21 #include "cc/playback/drawing_display_item.h"
19 #include "cc/playback/filter_display_item.h" 22 #include "cc/playback/filter_display_item.h"
20 #include "cc/playback/float_clip_display_item.h" 23 #include "cc/playback/float_clip_display_item.h"
21 #include "cc/playback/transform_display_item.h" 24 #include "cc/playback/transform_display_item.h"
22 #include "cc/test/geometry_test_utils.h" 25 #include "cc/test/geometry_test_utils.h"
23 #include "cc/test/skia_common.h" 26 #include "cc/test/skia_common.h"
24 #include "testing/gmock/include/gmock/gmock.h" 27 #include "testing/gmock/include/gmock/gmock.h"
25 #include "testing/gtest/include/gtest/gtest.h" 28 #include "testing/gtest/include/gtest/gtest.h"
26 #include "third_party/skia/include/core/SkBitmap.h" 29 #include "third_party/skia/include/core/SkBitmap.h"
27 #include "third_party/skia/include/core/SkCanvas.h"
28 #include "third_party/skia/include/core/SkColor.h" 30 #include "third_party/skia/include/core/SkColor.h"
29 #include "third_party/skia/include/core/SkPictureRecorder.h"
30 #include "third_party/skia/include/core/SkSurface.h" 31 #include "third_party/skia/include/core/SkSurface.h"
31 32
32 #include "third_party/skia/include/effects/SkColorMatrixFilter.h" 33 #include "third_party/skia/include/effects/SkColorMatrixFilter.h"
33 #include "third_party/skia/include/effects/SkImageSource.h" 34 #include "third_party/skia/include/effects/SkImageSource.h"
34 #include "third_party/skia/include/utils/SkPictureUtils.h"
35 #include "ui/gfx/geometry/rect.h" 35 #include "ui/gfx/geometry/rect.h"
36 #include "ui/gfx/geometry/rect_conversions.h" 36 #include "ui/gfx/geometry/rect_conversions.h"
37 #include "ui/gfx/skia_util.h" 37 #include "ui/gfx/skia_util.h"
38 38
39 namespace cc { 39 namespace cc {
40 40
41 namespace { 41 namespace {
42 42
43 const gfx::Rect kVisualRect(0, 0, 42, 42); 43 const gfx::Rect kVisualRect(0, 0, 42, 42);
44 44
45 scoped_refptr<DisplayItemList> CreateDefaultList() { 45 scoped_refptr<DisplayItemList> CreateDefaultList() {
46 return DisplayItemList::Create(DisplayItemListSettings()); 46 return DisplayItemList::Create(DisplayItemListSettings());
47 } 47 }
48 48
49 sk_sp<const SkPicture> CreateRectPicture(const gfx::Rect& bounds) { 49 sk_sp<const PaintRecord> CreateRectPicture(const gfx::Rect& bounds) {
50 SkPictureRecorder recorder; 50 PaintRecorder recorder;
51 SkCanvas* canvas = recorder.beginRecording(bounds.width(), bounds.height()); 51 PaintCanvas* canvas =
52 recorder.beginRecording(bounds.width(), bounds.height());
52 canvas->drawRect( 53 canvas->drawRect(
53 SkRect::MakeXYWH(bounds.x(), bounds.y(), bounds.width(), bounds.height()), 54 SkRect::MakeXYWH(bounds.x(), bounds.y(), bounds.width(), bounds.height()),
54 SkPaint()); 55 PaintFlags());
55 return recorder.finishRecordingAsPicture(); 56 return recorder.finishRecordingAsPicture();
56 } 57 }
57 58
58 void AppendFirstSerializationTestPicture(scoped_refptr<DisplayItemList> list, 59 void AppendFirstSerializationTestPicture(scoped_refptr<DisplayItemList> list,
59 const gfx::Size& layer_size) { 60 const gfx::Size& layer_size) {
60 gfx::PointF offset(2.f, 3.f); 61 gfx::PointF offset(2.f, 3.f);
61 SkPictureRecorder recorder; 62 PaintRecorder recorder;
62 63
63 SkPaint red_paint; 64 PaintFlags red_paint;
64 red_paint.setColor(SK_ColorRED); 65 red_paint.setColor(SK_ColorRED);
65 66
66 SkCanvas* canvas = recorder.beginRecording(SkRect::MakeXYWH( 67 PaintCanvas* canvas = recorder.beginRecording(SkRect::MakeXYWH(
67 offset.x(), offset.y(), layer_size.width(), layer_size.height())); 68 offset.x(), offset.y(), layer_size.width(), layer_size.height()));
68 canvas->translate(offset.x(), offset.y()); 69 canvas->translate(offset.x(), offset.y());
69 canvas->drawRectCoords(0.f, 0.f, 4.f, 4.f, red_paint); 70 canvas->drawRectCoords(0.f, 0.f, 4.f, 4.f, red_paint);
70 list->CreateAndAppendDrawingItem<DrawingDisplayItem>( 71 list->CreateAndAppendDrawingItem<DrawingDisplayItem>(
71 kVisualRect, recorder.finishRecordingAsPicture()); 72 kVisualRect, recorder.finishRecordingAsPicture());
72 } 73 }
73 74
74 } // namespace 75 } // namespace
75 76
76 TEST(DisplayItemListTest, SingleDrawingItem) { 77 TEST(DisplayItemListTest, SingleDrawingItem) {
77 gfx::Rect layer_rect(100, 100); 78 gfx::Rect layer_rect(100, 100);
78 SkPictureRecorder recorder; 79 PaintRecorder recorder;
79 SkPaint blue_paint; 80 PaintFlags blue_paint;
80 blue_paint.setColor(SK_ColorBLUE); 81 blue_paint.setColor(SK_ColorBLUE);
81 SkPaint red_paint; 82 PaintFlags red_paint;
82 red_paint.setColor(SK_ColorRED); 83 red_paint.setColor(SK_ColorRED);
83 unsigned char pixels[4 * 100 * 100] = {0}; 84 unsigned char pixels[4 * 100 * 100] = {0};
84 DisplayItemListSettings settings; 85 DisplayItemListSettings settings;
85 settings.use_cached_picture = true; 86 settings.use_cached_picture = true;
86 scoped_refptr<DisplayItemList> list = DisplayItemList::Create(settings); 87 scoped_refptr<DisplayItemList> list = DisplayItemList::Create(settings);
87 88
88 gfx::PointF offset(8.f, 9.f); 89 gfx::PointF offset(8.f, 9.f);
89 gfx::RectF recording_rect(offset, gfx::SizeF(layer_rect.size())); 90 gfx::RectF recording_rect(offset, gfx::SizeF(layer_rect.size()));
90 SkCanvas* canvas = 91 PaintCanvas* canvas =
91 recorder.beginRecording(gfx::RectFToSkRect(recording_rect)); 92 recorder.beginRecording(gfx::RectFToSkRect(recording_rect));
92 canvas->translate(offset.x(), offset.y()); 93 canvas->translate(offset.x(), offset.y());
93 canvas->drawRectCoords(0.f, 0.f, 60.f, 60.f, red_paint); 94 canvas->drawRectCoords(0.f, 0.f, 60.f, 60.f, red_paint);
94 canvas->drawRectCoords(50.f, 50.f, 75.f, 75.f, blue_paint); 95 canvas->drawRectCoords(50.f, 50.f, 75.f, 75.f, blue_paint);
95 list->CreateAndAppendDrawingItem<DrawingDisplayItem>( 96 list->CreateAndAppendDrawingItem<DrawingDisplayItem>(
96 kVisualRect, recorder.finishRecordingAsPicture()); 97 kVisualRect, recorder.finishRecordingAsPicture());
97 list->Finalize(); 98 list->Finalize();
98 DrawDisplayList(pixels, layer_rect, list); 99 DrawDisplayList(pixels, layer_rect, list);
99 100
100 SkBitmap expected_bitmap; 101 SkBitmap expected_bitmap;
101 unsigned char expected_pixels[4 * 100 * 100] = {0}; 102 unsigned char expected_pixels[4 * 100 * 100] = {0};
102 SkImageInfo info = 103 SkImageInfo info =
103 SkImageInfo::MakeN32Premul(layer_rect.width(), layer_rect.height()); 104 SkImageInfo::MakeN32Premul(layer_rect.width(), layer_rect.height());
104 expected_bitmap.installPixels(info, expected_pixels, info.minRowBytes()); 105 expected_bitmap.installPixels(info, expected_pixels, info.minRowBytes());
105 SkCanvas expected_canvas(expected_bitmap); 106 SkCanvas expected_canvas(expected_bitmap);
106 expected_canvas.clipRect(gfx::RectToSkRect(layer_rect)); 107 expected_canvas.clipRect(gfx::RectToSkRect(layer_rect));
107 expected_canvas.drawRectCoords(0.f + offset.x(), 0.f + offset.y(), 108 expected_canvas.drawRectCoords(0.f + offset.x(), 0.f + offset.y(),
108 60.f + offset.x(), 60.f + offset.y(), 109 60.f + offset.x(), 60.f + offset.y(),
109 red_paint); 110 red_paint);
110 expected_canvas.drawRectCoords(50.f + offset.x(), 50.f + offset.y(), 111 expected_canvas.drawRectCoords(50.f + offset.x(), 50.f + offset.y(),
111 75.f + offset.x(), 75.f + offset.y(), 112 75.f + offset.x(), 75.f + offset.y(),
112 blue_paint); 113 blue_paint);
113 114
114 EXPECT_EQ(0, memcmp(pixels, expected_pixels, 4 * 100 * 100)); 115 EXPECT_EQ(0, memcmp(pixels, expected_pixels, 4 * 100 * 100));
115 } 116 }
116 117
117 TEST(DisplayItemListTest, ClipItem) { 118 TEST(DisplayItemListTest, ClipItem) {
118 gfx::Rect layer_rect(100, 100); 119 gfx::Rect layer_rect(100, 100);
119 SkPictureRecorder recorder; 120 PaintRecorder recorder;
120 SkPaint blue_paint; 121 PaintFlags blue_paint;
121 blue_paint.setColor(SK_ColorBLUE); 122 blue_paint.setColor(SK_ColorBLUE);
122 SkPaint red_paint; 123 PaintFlags red_paint;
123 red_paint.setColor(SK_ColorRED); 124 red_paint.setColor(SK_ColorRED);
124 unsigned char pixels[4 * 100 * 100] = {0}; 125 unsigned char pixels[4 * 100 * 100] = {0};
125 DisplayItemListSettings settings; 126 DisplayItemListSettings settings;
126 settings.use_cached_picture = true; 127 settings.use_cached_picture = true;
127 scoped_refptr<DisplayItemList> list = DisplayItemList::Create(settings); 128 scoped_refptr<DisplayItemList> list = DisplayItemList::Create(settings);
128 129
129 gfx::PointF first_offset(8.f, 9.f); 130 gfx::PointF first_offset(8.f, 9.f);
130 gfx::RectF first_recording_rect(first_offset, gfx::SizeF(layer_rect.size())); 131 gfx::RectF first_recording_rect(first_offset, gfx::SizeF(layer_rect.size()));
131 SkCanvas* canvas = 132 PaintCanvas* canvas =
132 recorder.beginRecording(gfx::RectFToSkRect(first_recording_rect)); 133 recorder.beginRecording(gfx::RectFToSkRect(first_recording_rect));
133 canvas->translate(first_offset.x(), first_offset.y()); 134 canvas->translate(first_offset.x(), first_offset.y());
134 canvas->drawRectCoords(0.f, 0.f, 60.f, 60.f, red_paint); 135 canvas->drawRectCoords(0.f, 0.f, 60.f, 60.f, red_paint);
135 list->CreateAndAppendDrawingItem<DrawingDisplayItem>( 136 list->CreateAndAppendDrawingItem<DrawingDisplayItem>(
136 kVisualRect, recorder.finishRecordingAsPicture()); 137 kVisualRect, recorder.finishRecordingAsPicture());
137 138
138 gfx::Rect clip_rect(60, 60, 10, 10); 139 gfx::Rect clip_rect(60, 60, 10, 10);
139 list->CreateAndAppendPairedBeginItem<ClipDisplayItem>( 140 list->CreateAndAppendPairedBeginItem<ClipDisplayItem>(
140 clip_rect, std::vector<SkRRect>(), true); 141 clip_rect, std::vector<SkRRect>(), true);
141 142
(...skipping 24 matching lines...) Expand all
166 expected_canvas.clipRect(gfx::RectToSkRect(clip_rect)); 167 expected_canvas.clipRect(gfx::RectToSkRect(clip_rect));
167 expected_canvas.drawRectCoords( 168 expected_canvas.drawRectCoords(
168 50.f + second_offset.x(), 50.f + second_offset.y(), 169 50.f + second_offset.x(), 50.f + second_offset.y(),
169 75.f + second_offset.x(), 75.f + second_offset.y(), blue_paint); 170 75.f + second_offset.x(), 75.f + second_offset.y(), blue_paint);
170 171
171 EXPECT_EQ(0, memcmp(pixels, expected_pixels, 4 * 100 * 100)); 172 EXPECT_EQ(0, memcmp(pixels, expected_pixels, 4 * 100 * 100));
172 } 173 }
173 174
174 TEST(DisplayItemListTest, TransformItem) { 175 TEST(DisplayItemListTest, TransformItem) {
175 gfx::Rect layer_rect(100, 100); 176 gfx::Rect layer_rect(100, 100);
176 SkPictureRecorder recorder; 177 PaintRecorder recorder;
177 SkPaint blue_paint; 178 PaintFlags blue_paint;
178 blue_paint.setColor(SK_ColorBLUE); 179 blue_paint.setColor(SK_ColorBLUE);
179 SkPaint red_paint; 180 PaintFlags red_paint;
180 red_paint.setColor(SK_ColorRED); 181 red_paint.setColor(SK_ColorRED);
181 unsigned char pixels[4 * 100 * 100] = {0}; 182 unsigned char pixels[4 * 100 * 100] = {0};
182 DisplayItemListSettings settings; 183 DisplayItemListSettings settings;
183 settings.use_cached_picture = true; 184 settings.use_cached_picture = true;
184 scoped_refptr<DisplayItemList> list = DisplayItemList::Create(settings); 185 scoped_refptr<DisplayItemList> list = DisplayItemList::Create(settings);
185 186
186 gfx::PointF first_offset(8.f, 9.f); 187 gfx::PointF first_offset(8.f, 9.f);
187 gfx::RectF first_recording_rect(first_offset, gfx::SizeF(layer_rect.size())); 188 gfx::RectF first_recording_rect(first_offset, gfx::SizeF(layer_rect.size()));
188 SkCanvas* canvas = 189 PaintCanvas* canvas =
189 recorder.beginRecording(gfx::RectFToSkRect(first_recording_rect)); 190 recorder.beginRecording(gfx::RectFToSkRect(first_recording_rect));
190 canvas->translate(first_offset.x(), first_offset.y()); 191 canvas->translate(first_offset.x(), first_offset.y());
191 canvas->drawRectCoords(0.f, 0.f, 60.f, 60.f, red_paint); 192 canvas->drawRectCoords(0.f, 0.f, 60.f, 60.f, red_paint);
192 list->CreateAndAppendDrawingItem<DrawingDisplayItem>( 193 list->CreateAndAppendDrawingItem<DrawingDisplayItem>(
193 kVisualRect, recorder.finishRecordingAsPicture()); 194 kVisualRect, recorder.finishRecordingAsPicture());
194 195
195 gfx::Transform transform; 196 gfx::Transform transform;
196 transform.Rotate(45.0); 197 transform.Rotate(45.0);
197 list->CreateAndAppendPairedBeginItem<TransformDisplayItem>(transform); 198 list->CreateAndAppendPairedBeginItem<TransformDisplayItem>(transform);
198 199
(...skipping 30 matching lines...) Expand all
229 } 230 }
230 231
231 TEST(DisplayItemListTest, FilterItem) { 232 TEST(DisplayItemListTest, FilterItem) {
232 gfx::Rect layer_rect(100, 100); 233 gfx::Rect layer_rect(100, 100);
233 FilterOperations filters; 234 FilterOperations filters;
234 unsigned char pixels[4 * 100 * 100] = {0}; 235 unsigned char pixels[4 * 100 * 100] = {0};
235 scoped_refptr<DisplayItemList> list = 236 scoped_refptr<DisplayItemList> list =
236 DisplayItemList::Create(DisplayItemListSettings()); 237 DisplayItemList::Create(DisplayItemListSettings());
237 238
238 sk_sp<SkSurface> source_surface = SkSurface::MakeRasterN32Premul(50, 50); 239 sk_sp<SkSurface> source_surface = SkSurface::MakeRasterN32Premul(50, 50);
239 SkCanvas* source_canvas = source_surface->getCanvas(); 240 PaintCanvas* source_canvas = source_surface->getCanvas();
240 source_canvas->clear(SkColorSetRGB(128, 128, 128)); 241 source_canvas->clear(SkColorSetRGB(128, 128, 128));
241 sk_sp<SkImage> source_image = source_surface->makeImageSnapshot(); 242 sk_sp<SkImage> source_image = source_surface->makeImageSnapshot();
242 243
243 // For most SkImageFilters, the |dst| bounds computed by computeFastBounds are 244 // For most SkImageFilters, the |dst| bounds computed by computeFastBounds are
244 // dependent on the provided |src| bounds. This means, for example, that 245 // dependent on the provided |src| bounds. This means, for example, that
245 // translating |src| results in a corresponding translation of |dst|. But this 246 // translating |src| results in a corresponding translation of |dst|. But this
246 // is not the case for all SkImageFilters; for some of them (e.g. 247 // is not the case for all SkImageFilters; for some of them (e.g.
247 // SkImageSource), the computation of |dst| in computeFastBounds doesn't 248 // SkImageSource), the computation of |dst| in computeFastBounds doesn't
248 // involve |src| at all. Incorrectly assuming such a relationship (e.g. by 249 // involve |src| at all. Incorrectly assuming such a relationship (e.g. by
249 // translating |dst| after it is computed by computeFastBounds, rather than 250 // translating |dst| after it is computed by computeFastBounds, rather than
250 // translating |src| before it provided to computedFastBounds) can cause 251 // translating |src| before it provided to computedFastBounds) can cause
251 // incorrect clipping of filter output. To test for this, we include an 252 // incorrect clipping of filter output. To test for this, we include an
252 // SkImageSource filter in |filters|. Here, |src| is |filter_bounds|, defined 253 // SkImageSource filter in |filters|. Here, |src| is |filter_bounds|, defined
253 // below. 254 // below.
254 sk_sp<SkImageFilter> image_filter = SkImageSource::Make(source_image); 255 sk_sp<SkImageFilter> image_filter = SkImageSource::Make(source_image);
255 filters.Append(FilterOperation::CreateReferenceFilter(image_filter)); 256 filters.Append(FilterOperation::CreateReferenceFilter(image_filter));
256 filters.Append(FilterOperation::CreateBrightnessFilter(0.5f)); 257 filters.Append(FilterOperation::CreateBrightnessFilter(0.5f));
257 gfx::RectF filter_bounds(10.f, 10.f, 50.f, 50.f); 258 gfx::RectF filter_bounds(10.f, 10.f, 50.f, 50.f);
258 list->CreateAndAppendPairedBeginItem<FilterDisplayItem>( 259 list->CreateAndAppendPairedBeginItem<FilterDisplayItem>(
259 filters, filter_bounds, filter_bounds.origin()); 260 filters, filter_bounds, filter_bounds.origin());
260 261
261 // Include a rect drawing so that filter is actually applied to something. 262 // Include a rect drawing so that filter is actually applied to something.
262 { 263 {
263 SkPictureRecorder recorder; 264 PaintRecorder recorder;
264 265
265 SkPaint red_paint; 266 PaintFlags red_paint;
266 red_paint.setColor(SK_ColorRED); 267 red_paint.setColor(SK_ColorRED);
267 268
268 SkCanvas* canvas = recorder.beginRecording( 269 PaintCanvas* canvas = recorder.beginRecording(
269 SkRect::MakeXYWH(0, 0, layer_rect.width(), layer_rect.height())); 270 SkRect::MakeXYWH(0, 0, layer_rect.width(), layer_rect.height()));
270 canvas->drawRectCoords(filter_bounds.x(), filter_bounds.y(), 271 canvas->drawRectCoords(filter_bounds.x(), filter_bounds.y(),
271 filter_bounds.right(), filter_bounds.bottom(), 272 filter_bounds.right(), filter_bounds.bottom(),
272 red_paint); 273 red_paint);
273 list->CreateAndAppendDrawingItem<DrawingDisplayItem>( 274 list->CreateAndAppendDrawingItem<DrawingDisplayItem>(
274 ToNearestRect(filter_bounds), recorder.finishRecordingAsPicture()); 275 ToNearestRect(filter_bounds), recorder.finishRecordingAsPicture());
275 } 276 }
276 277
277 list->CreateAndAppendPairedEndItem<EndFilterDisplayItem>(); 278 list->CreateAndAppendPairedEndItem<EndFilterDisplayItem>();
278 list->Finalize(); 279 list->Finalize();
279 280
280 DrawDisplayList(pixels, layer_rect, list); 281 DrawDisplayList(pixels, layer_rect, list);
281 282
282 SkBitmap expected_bitmap; 283 SkBitmap expected_bitmap;
283 unsigned char expected_pixels[4 * 100 * 100] = {0}; 284 unsigned char expected_pixels[4 * 100 * 100] = {0};
284 SkPaint paint; 285 PaintFlags paint;
285 paint.setColor(SkColorSetRGB(64, 64, 64)); 286 paint.setColor(SkColorSetRGB(64, 64, 64));
286 SkImageInfo info = 287 SkImageInfo info =
287 SkImageInfo::MakeN32Premul(layer_rect.width(), layer_rect.height()); 288 SkImageInfo::MakeN32Premul(layer_rect.width(), layer_rect.height());
288 expected_bitmap.installPixels(info, expected_pixels, info.minRowBytes()); 289 expected_bitmap.installPixels(info, expected_pixels, info.minRowBytes());
289 SkCanvas expected_canvas(expected_bitmap); 290 SkCanvas expected_canvas(expected_bitmap);
290 expected_canvas.drawRect(RectFToSkRect(filter_bounds), paint); 291 expected_canvas.drawRect(RectFToSkRect(filter_bounds), paint);
291 292
292 EXPECT_EQ(0, memcmp(pixels, expected_pixels, 4 * 100 * 100)); 293 EXPECT_EQ(0, memcmp(pixels, expected_pixels, 4 * 100 * 100));
293 } 294 }
294 295
295 TEST(DisplayItemListTest, CompactingItems) { 296 TEST(DisplayItemListTest, CompactingItems) {
296 gfx::Rect layer_rect(100, 100); 297 gfx::Rect layer_rect(100, 100);
297 SkPictureRecorder recorder; 298 PaintRecorder recorder;
298 SkPaint blue_paint; 299 PaintFlags blue_paint;
299 blue_paint.setColor(SK_ColorBLUE); 300 blue_paint.setColor(SK_ColorBLUE);
300 SkPaint red_paint; 301 PaintFlags red_paint;
301 red_paint.setColor(SK_ColorRED); 302 red_paint.setColor(SK_ColorRED);
302 unsigned char pixels[4 * 100 * 100] = {0}; 303 unsigned char pixels[4 * 100 * 100] = {0};
303 304
304 gfx::PointF offset(8.f, 9.f); 305 gfx::PointF offset(8.f, 9.f);
305 gfx::RectF recording_rect(offset, gfx::SizeF(layer_rect.size())); 306 gfx::RectF recording_rect(offset, gfx::SizeF(layer_rect.size()));
306 307
307 DisplayItemListSettings no_caching_settings; 308 DisplayItemListSettings no_caching_settings;
308 scoped_refptr<DisplayItemList> list_without_caching = 309 scoped_refptr<DisplayItemList> list_without_caching =
309 DisplayItemList::Create(no_caching_settings); 310 DisplayItemList::Create(no_caching_settings);
310 311
311 SkCanvas* canvas = 312 PaintCanvas* canvas =
312 recorder.beginRecording(gfx::RectFToSkRect(recording_rect)); 313 recorder.beginRecording(gfx::RectFToSkRect(recording_rect));
313 canvas->translate(offset.x(), offset.y()); 314 canvas->translate(offset.x(), offset.y());
314 canvas->drawRectCoords(0.f, 0.f, 60.f, 60.f, red_paint); 315 canvas->drawRectCoords(0.f, 0.f, 60.f, 60.f, red_paint);
315 canvas->drawRectCoords(50.f, 50.f, 75.f, 75.f, blue_paint); 316 canvas->drawRectCoords(50.f, 50.f, 75.f, 75.f, blue_paint);
316 sk_sp<SkPicture> picture = recorder.finishRecordingAsPicture(); 317 sk_sp<PaintRecord> picture = recorder.finishRecordingAsPicture();
317 list_without_caching->CreateAndAppendDrawingItem<DrawingDisplayItem>( 318 list_without_caching->CreateAndAppendDrawingItem<DrawingDisplayItem>(
318 kVisualRect, picture); 319 kVisualRect, picture);
319 list_without_caching->Finalize(); 320 list_without_caching->Finalize();
320 DrawDisplayList(pixels, layer_rect, list_without_caching); 321 DrawDisplayList(pixels, layer_rect, list_without_caching);
321 322
322 unsigned char expected_pixels[4 * 100 * 100] = {0}; 323 unsigned char expected_pixels[4 * 100 * 100] = {0};
323 DisplayItemListSettings caching_settings; 324 DisplayItemListSettings caching_settings;
324 caching_settings.use_cached_picture = true; 325 caching_settings.use_cached_picture = true;
325 scoped_refptr<DisplayItemList> list_with_caching = 326 scoped_refptr<DisplayItemList> list_with_caching =
326 DisplayItemList::Create(caching_settings); 327 DisplayItemList::Create(caching_settings);
327 list_with_caching->CreateAndAppendDrawingItem<DrawingDisplayItem>(kVisualRect, 328 list_with_caching->CreateAndAppendDrawingItem<DrawingDisplayItem>(kVisualRect,
328 picture); 329 picture);
329 list_with_caching->Finalize(); 330 list_with_caching->Finalize();
330 DrawDisplayList(expected_pixels, layer_rect, list_with_caching); 331 DrawDisplayList(expected_pixels, layer_rect, list_with_caching);
331 332
332 EXPECT_EQ(0, memcmp(pixels, expected_pixels, 4 * 100 * 100)); 333 EXPECT_EQ(0, memcmp(pixels, expected_pixels, 4 * 100 * 100));
333 } 334 }
334 335
335 TEST(DisplayItemListTest, ApproximateMemoryUsage) { 336 TEST(DisplayItemListTest, ApproximateMemoryUsage) {
336 const int kNumCommandsInTestSkPicture = 1000; 337 const int kNumCommandsInTestPaintRecord = 1000;
337 scoped_refptr<DisplayItemList> list; 338 scoped_refptr<DisplayItemList> list;
338 size_t memory_usage; 339 size_t memory_usage;
339 340
340 // Make an SkPicture whose size is known. 341 // Make a PaintRecord whose size is known.
341 gfx::Rect layer_rect(100, 100); 342 gfx::Rect layer_rect(100, 100);
342 SkPictureRecorder recorder; 343 PaintRecorder recorder;
343 SkPaint blue_paint; 344 PaintFlags blue_paint;
344 blue_paint.setColor(SK_ColorBLUE); 345 blue_paint.setColor(SK_ColorBLUE);
345 SkCanvas* canvas = recorder.beginRecording(gfx::RectToSkRect(layer_rect)); 346 PaintCanvas* canvas = recorder.beginRecording(gfx::RectToSkRect(layer_rect));
346 for (int i = 0; i < kNumCommandsInTestSkPicture; i++) 347 for (int i = 0; i < kNumCommandsInTestPaintRecord; i++)
347 canvas->drawPaint(blue_paint); 348 canvas->drawPaint(blue_paint);
348 sk_sp<SkPicture> picture = recorder.finishRecordingAsPicture(); 349 sk_sp<PaintRecord> picture = recorder.finishRecordingAsPicture();
349 size_t picture_size = SkPictureUtils::ApproximateBytesUsed(picture.get()); 350 size_t picture_size = SkPictureUtils::ApproximateBytesUsed(picture.get());
350 ASSERT_GE(picture_size, kNumCommandsInTestSkPicture * sizeof(blue_paint)); 351 ASSERT_GE(picture_size, kNumCommandsInTestPaintRecord * sizeof(blue_paint));
351 352
352 // Using a cached picture, we should get about the right size. 353 // Using a cached picture, we should get about the right size.
353 DisplayItemListSettings caching_settings; 354 DisplayItemListSettings caching_settings;
354 caching_settings.use_cached_picture = true; 355 caching_settings.use_cached_picture = true;
355 list = DisplayItemList::Create(caching_settings); 356 list = DisplayItemList::Create(caching_settings);
356 list->CreateAndAppendDrawingItem<DrawingDisplayItem>(kVisualRect, picture); 357 list->CreateAndAppendDrawingItem<DrawingDisplayItem>(kVisualRect, picture);
357 list->Finalize(); 358 list->Finalize();
358 memory_usage = list->ApproximateMemoryUsage(); 359 memory_usage = list->ApproximateMemoryUsage();
359 EXPECT_GE(memory_usage, picture_size); 360 EXPECT_GE(memory_usage, picture_size);
360 EXPECT_LE(memory_usage, 2 * picture_size); 361 EXPECT_LE(memory_usage, 2 * picture_size);
(...skipping 368 matching lines...) Expand 10 before | Expand all | Expand 10 after
729 list->CreateAndAppendPairedEndItem<EndClipDisplayItem>(); 730 list->CreateAndAppendPairedEndItem<EndClipDisplayItem>();
730 731
731 EXPECT_EQ(4u, list->size()); 732 EXPECT_EQ(4u, list->size());
732 EXPECT_RECT_EQ(filter_bounds, list->VisualRectForTesting(0)); 733 EXPECT_RECT_EQ(filter_bounds, list->VisualRectForTesting(0));
733 EXPECT_RECT_EQ(filter_bounds, list->VisualRectForTesting(1)); 734 EXPECT_RECT_EQ(filter_bounds, list->VisualRectForTesting(1));
734 EXPECT_RECT_EQ(filter_bounds, list->VisualRectForTesting(2)); 735 EXPECT_RECT_EQ(filter_bounds, list->VisualRectForTesting(2));
735 EXPECT_RECT_EQ(filter_bounds, list->VisualRectForTesting(3)); 736 EXPECT_RECT_EQ(filter_bounds, list->VisualRectForTesting(3));
736 } 737 }
737 738
738 } // namespace cc 739 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698