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

Side by Side Diff: cc/tiles/gpu_image_decode_controller_unittest.cc

Issue 1991363003: cc: Plumb gpu/sw image decode limits as layer tree settings. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 7 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
« no previous file with comments | « cc/tiles/gpu_image_decode_controller.cc ('k') | cc/tiles/software_image_decode_controller.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 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/tiles/gpu_image_decode_controller.h" 5 #include "cc/tiles/gpu_image_decode_controller.h"
6 6
7 #include "cc/playback/draw_image.h" 7 #include "cc/playback/draw_image.h"
8 #include "cc/raster/tile_task.h" 8 #include "cc/raster/tile_task.h"
9 #include "cc/test/test_context_provider.h" 9 #include "cc/test/test_context_provider.h"
10 #include "testing/gtest/include/gtest/gtest.h" 10 #include "testing/gtest/include/gtest/gtest.h"
11 #include "third_party/skia/include/core/SkRefCnt.h" 11 #include "third_party/skia/include/core/SkRefCnt.h"
12 12
13 namespace cc { 13 namespace cc {
14 namespace { 14 namespace {
15 15
16 size_t kGpuMemoryLimitBytes = 96 * 1024 * 1024;
17 class TestGpuImageDecodeController : public GpuImageDecodeController {
18 public:
19 explicit TestGpuImageDecodeController(ContextProvider* context)
20 : GpuImageDecodeController(context,
21 ResourceFormat::RGBA_8888,
22 kGpuMemoryLimitBytes) {}
23 };
24
16 sk_sp<SkImage> CreateImage(int width, int height) { 25 sk_sp<SkImage> CreateImage(int width, int height) {
17 SkBitmap bitmap; 26 SkBitmap bitmap;
18 bitmap.allocPixels(SkImageInfo::MakeN32Premul(width, height)); 27 bitmap.allocPixels(SkImageInfo::MakeN32Premul(width, height));
19 return SkImage::MakeFromBitmap(bitmap); 28 return SkImage::MakeFromBitmap(bitmap);
20 } 29 }
21 30
22 SkMatrix CreateMatrix(const SkSize& scale, bool is_decomposable) { 31 SkMatrix CreateMatrix(const SkSize& scale, bool is_decomposable) {
23 SkMatrix matrix; 32 SkMatrix matrix;
24 matrix.setScale(scale.width(), scale.height()); 33 matrix.setScale(scale.width(), scale.height());
25 34
(...skipping 29 matching lines...) Expand all
55 64
56 void ProcessTask(TileTask* task) { 65 void ProcessTask(TileTask* task) {
57 ScheduleTask(task); 66 ScheduleTask(task);
58 RunTask(task); 67 RunTask(task);
59 CompleteTask(task); 68 CompleteTask(task);
60 } 69 }
61 70
62 TEST(GpuImageDecodeControllerTest, GetTaskForImageSameImage) { 71 TEST(GpuImageDecodeControllerTest, GetTaskForImageSameImage) {
63 auto context_provider = TestContextProvider::Create(); 72 auto context_provider = TestContextProvider::Create();
64 context_provider->BindToCurrentThread(); 73 context_provider->BindToCurrentThread();
65 GpuImageDecodeController controller(context_provider.get(), 74 TestGpuImageDecodeController controller(context_provider.get());
66 ResourceFormat::RGBA_8888);
67 sk_sp<SkImage> image = CreateImage(100, 100); 75 sk_sp<SkImage> image = CreateImage(100, 100);
68 bool is_decomposable = true; 76 bool is_decomposable = true;
69 SkFilterQuality quality = kHigh_SkFilterQuality; 77 SkFilterQuality quality = kHigh_SkFilterQuality;
70 78
71 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), 79 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()),
72 quality, 80 quality,
73 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); 81 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable));
74 scoped_refptr<TileTask> task; 82 scoped_refptr<TileTask> task;
75 bool need_unref = controller.GetTaskForImageAndRef( 83 bool need_unref = controller.GetTaskForImageAndRef(
76 draw_image, ImageDecodeController::TracingInfo(), &task); 84 draw_image, ImageDecodeController::TracingInfo(), &task);
(...skipping 12 matching lines...) Expand all
89 ProcessTask(task->dependencies()[0].get()); 97 ProcessTask(task->dependencies()[0].get());
90 ProcessTask(task.get()); 98 ProcessTask(task.get());
91 99
92 controller.UnrefImage(draw_image); 100 controller.UnrefImage(draw_image);
93 controller.UnrefImage(draw_image); 101 controller.UnrefImage(draw_image);
94 } 102 }
95 103
96 TEST(GpuImageDecodeControllerTest, GetTaskForImageDifferentImage) { 104 TEST(GpuImageDecodeControllerTest, GetTaskForImageDifferentImage) {
97 auto context_provider = TestContextProvider::Create(); 105 auto context_provider = TestContextProvider::Create();
98 context_provider->BindToCurrentThread(); 106 context_provider->BindToCurrentThread();
99 GpuImageDecodeController controller(context_provider.get(), 107 TestGpuImageDecodeController controller(context_provider.get());
100 ResourceFormat::RGBA_8888);
101 bool is_decomposable = true; 108 bool is_decomposable = true;
102 SkFilterQuality quality = kHigh_SkFilterQuality; 109 SkFilterQuality quality = kHigh_SkFilterQuality;
103 110
104 sk_sp<SkImage> first_image = CreateImage(100, 100); 111 sk_sp<SkImage> first_image = CreateImage(100, 100);
105 DrawImage first_draw_image( 112 DrawImage first_draw_image(
106 first_image, SkIRect::MakeWH(first_image->width(), first_image->height()), 113 first_image, SkIRect::MakeWH(first_image->width(), first_image->height()),
107 quality, CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); 114 quality, CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable));
108 scoped_refptr<TileTask> first_task; 115 scoped_refptr<TileTask> first_task;
109 bool need_unref = controller.GetTaskForImageAndRef( 116 bool need_unref = controller.GetTaskForImageAndRef(
110 first_draw_image, ImageDecodeController::TracingInfo(), &first_task); 117 first_draw_image, ImageDecodeController::TracingInfo(), &first_task);
(...skipping 17 matching lines...) Expand all
128 ProcessTask(second_task->dependencies()[0].get()); 135 ProcessTask(second_task->dependencies()[0].get());
129 ProcessTask(second_task.get()); 136 ProcessTask(second_task.get());
130 137
131 controller.UnrefImage(first_draw_image); 138 controller.UnrefImage(first_draw_image);
132 controller.UnrefImage(second_draw_image); 139 controller.UnrefImage(second_draw_image);
133 } 140 }
134 141
135 TEST(GpuImageDecodeControllerTest, GetTaskForImageAlreadyDecodedAndLocked) { 142 TEST(GpuImageDecodeControllerTest, GetTaskForImageAlreadyDecodedAndLocked) {
136 auto context_provider = TestContextProvider::Create(); 143 auto context_provider = TestContextProvider::Create();
137 context_provider->BindToCurrentThread(); 144 context_provider->BindToCurrentThread();
138 GpuImageDecodeController controller(context_provider.get(), 145 TestGpuImageDecodeController controller(context_provider.get());
139 ResourceFormat::RGBA_8888);
140 bool is_decomposable = true; 146 bool is_decomposable = true;
141 SkFilterQuality quality = kHigh_SkFilterQuality; 147 SkFilterQuality quality = kHigh_SkFilterQuality;
142 148
143 sk_sp<SkImage> image = CreateImage(100, 100); 149 sk_sp<SkImage> image = CreateImage(100, 100);
144 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), 150 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()),
145 quality, 151 quality,
146 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); 152 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable));
147 scoped_refptr<TileTask> task; 153 scoped_refptr<TileTask> task;
148 bool need_unref = controller.GetTaskForImageAndRef( 154 bool need_unref = controller.GetTaskForImageAndRef(
149 draw_image, ImageDecodeController::TracingInfo(), &task); 155 draw_image, ImageDecodeController::TracingInfo(), &task);
(...skipping 24 matching lines...) Expand all
174 // Finally, complete the original decode task. 180 // Finally, complete the original decode task.
175 CompleteTask(task->dependencies()[0].get()); 181 CompleteTask(task->dependencies()[0].get());
176 182
177 controller.UnrefImage(draw_image); 183 controller.UnrefImage(draw_image);
178 controller.UnrefImage(draw_image); 184 controller.UnrefImage(draw_image);
179 } 185 }
180 186
181 TEST(GpuImageDecodeControllerTest, GetTaskForImageAlreadyDecodedNotLocked) { 187 TEST(GpuImageDecodeControllerTest, GetTaskForImageAlreadyDecodedNotLocked) {
182 auto context_provider = TestContextProvider::Create(); 188 auto context_provider = TestContextProvider::Create();
183 context_provider->BindToCurrentThread(); 189 context_provider->BindToCurrentThread();
184 GpuImageDecodeController controller(context_provider.get(), 190 TestGpuImageDecodeController controller(context_provider.get());
185 ResourceFormat::RGBA_8888);
186 bool is_decomposable = true; 191 bool is_decomposable = true;
187 SkFilterQuality quality = kHigh_SkFilterQuality; 192 SkFilterQuality quality = kHigh_SkFilterQuality;
188 193
189 sk_sp<SkImage> image = CreateImage(100, 100); 194 sk_sp<SkImage> image = CreateImage(100, 100);
190 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), 195 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()),
191 quality, 196 quality,
192 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); 197 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable));
193 scoped_refptr<TileTask> task; 198 scoped_refptr<TileTask> task;
194 bool need_unref = controller.GetTaskForImageAndRef( 199 bool need_unref = controller.GetTaskForImageAndRef(
195 draw_image, ImageDecodeController::TracingInfo(), &task); 200 draw_image, ImageDecodeController::TracingInfo(), &task);
(...skipping 24 matching lines...) Expand all
220 225
221 ProcessTask(another_task->dependencies()[0].get()); 226 ProcessTask(another_task->dependencies()[0].get());
222 ProcessTask(another_task.get()); 227 ProcessTask(another_task.get());
223 228
224 controller.UnrefImage(draw_image); 229 controller.UnrefImage(draw_image);
225 } 230 }
226 231
227 TEST(GpuImageDecodeControllerTest, GetTaskForImageAlreadyUploaded) { 232 TEST(GpuImageDecodeControllerTest, GetTaskForImageAlreadyUploaded) {
228 auto context_provider = TestContextProvider::Create(); 233 auto context_provider = TestContextProvider::Create();
229 context_provider->BindToCurrentThread(); 234 context_provider->BindToCurrentThread();
230 GpuImageDecodeController controller(context_provider.get(), 235 TestGpuImageDecodeController controller(context_provider.get());
231 ResourceFormat::RGBA_8888);
232 bool is_decomposable = true; 236 bool is_decomposable = true;
233 SkFilterQuality quality = kHigh_SkFilterQuality; 237 SkFilterQuality quality = kHigh_SkFilterQuality;
234 238
235 sk_sp<SkImage> image = CreateImage(100, 100); 239 sk_sp<SkImage> image = CreateImage(100, 100);
236 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), 240 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()),
237 quality, 241 quality,
238 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); 242 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable));
239 scoped_refptr<TileTask> task; 243 scoped_refptr<TileTask> task;
240 bool need_unref = controller.GetTaskForImageAndRef( 244 bool need_unref = controller.GetTaskForImageAndRef(
241 draw_image, ImageDecodeController::TracingInfo(), &task); 245 draw_image, ImageDecodeController::TracingInfo(), &task);
(...skipping 14 matching lines...) Expand all
256 260
257 CompleteTask(task.get()); 261 CompleteTask(task.get());
258 262
259 controller.UnrefImage(draw_image); 263 controller.UnrefImage(draw_image);
260 controller.UnrefImage(draw_image); 264 controller.UnrefImage(draw_image);
261 } 265 }
262 266
263 TEST(GpuImageDecodeControllerTest, GetTaskForImageCanceledGetsNewTask) { 267 TEST(GpuImageDecodeControllerTest, GetTaskForImageCanceledGetsNewTask) {
264 auto context_provider = TestContextProvider::Create(); 268 auto context_provider = TestContextProvider::Create();
265 context_provider->BindToCurrentThread(); 269 context_provider->BindToCurrentThread();
266 GpuImageDecodeController controller(context_provider.get(), 270 TestGpuImageDecodeController controller(context_provider.get());
267 ResourceFormat::RGBA_8888);
268 bool is_decomposable = true; 271 bool is_decomposable = true;
269 SkFilterQuality quality = kHigh_SkFilterQuality; 272 SkFilterQuality quality = kHigh_SkFilterQuality;
270 273
271 sk_sp<SkImage> image = CreateImage(100, 100); 274 sk_sp<SkImage> image = CreateImage(100, 100);
272 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), 275 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()),
273 quality, 276 quality,
274 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); 277 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable));
275 scoped_refptr<TileTask> task; 278 scoped_refptr<TileTask> task;
276 bool need_unref = controller.GetTaskForImageAndRef( 279 bool need_unref = controller.GetTaskForImageAndRef(
277 draw_image, ImageDecodeController::TracingInfo(), &task); 280 draw_image, ImageDecodeController::TracingInfo(), &task);
(...skipping 27 matching lines...) Expand all
305 ProcessTask(third_task->dependencies()[0].get()); 308 ProcessTask(third_task->dependencies()[0].get());
306 ProcessTask(third_task.get()); 309 ProcessTask(third_task.get());
307 310
308 controller.UnrefImage(draw_image); 311 controller.UnrefImage(draw_image);
309 } 312 }
310 313
311 TEST(GpuImageDecodeControllerTest, 314 TEST(GpuImageDecodeControllerTest,
312 GetTaskForImageCanceledWhileReffedGetsNewTask) { 315 GetTaskForImageCanceledWhileReffedGetsNewTask) {
313 auto context_provider = TestContextProvider::Create(); 316 auto context_provider = TestContextProvider::Create();
314 context_provider->BindToCurrentThread(); 317 context_provider->BindToCurrentThread();
315 GpuImageDecodeController controller(context_provider.get(), 318 TestGpuImageDecodeController controller(context_provider.get());
316 ResourceFormat::RGBA_8888);
317 bool is_decomposable = true; 319 bool is_decomposable = true;
318 SkFilterQuality quality = kHigh_SkFilterQuality; 320 SkFilterQuality quality = kHigh_SkFilterQuality;
319 321
320 sk_sp<SkImage> image = CreateImage(100, 100); 322 sk_sp<SkImage> image = CreateImage(100, 100);
321 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), 323 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()),
322 quality, 324 quality,
323 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); 325 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable));
324 scoped_refptr<TileTask> task; 326 scoped_refptr<TileTask> task;
325 bool need_unref = controller.GetTaskForImageAndRef( 327 bool need_unref = controller.GetTaskForImageAndRef(
326 draw_image, ImageDecodeController::TracingInfo(), &task); 328 draw_image, ImageDecodeController::TracingInfo(), &task);
(...skipping 26 matching lines...) Expand all
353 355
354 // 3 Unrefs! 356 // 3 Unrefs!
355 controller.UnrefImage(draw_image); 357 controller.UnrefImage(draw_image);
356 controller.UnrefImage(draw_image); 358 controller.UnrefImage(draw_image);
357 controller.UnrefImage(draw_image); 359 controller.UnrefImage(draw_image);
358 } 360 }
359 361
360 TEST(GpuImageDecodeControllerTest, NoTaskForImageAlreadyFailedDecoding) { 362 TEST(GpuImageDecodeControllerTest, NoTaskForImageAlreadyFailedDecoding) {
361 auto context_provider = TestContextProvider::Create(); 363 auto context_provider = TestContextProvider::Create();
362 context_provider->BindToCurrentThread(); 364 context_provider->BindToCurrentThread();
363 GpuImageDecodeController controller(context_provider.get(), 365 TestGpuImageDecodeController controller(context_provider.get());
364 ResourceFormat::RGBA_8888);
365 bool is_decomposable = true; 366 bool is_decomposable = true;
366 SkFilterQuality quality = kHigh_SkFilterQuality; 367 SkFilterQuality quality = kHigh_SkFilterQuality;
367 368
368 sk_sp<SkImage> image = CreateImage(100, 100); 369 sk_sp<SkImage> image = CreateImage(100, 100);
369 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), 370 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()),
370 quality, 371 quality,
371 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); 372 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable));
372 scoped_refptr<TileTask> task; 373 scoped_refptr<TileTask> task;
373 bool need_unref = controller.GetTaskForImageAndRef( 374 bool need_unref = controller.GetTaskForImageAndRef(
374 draw_image, ImageDecodeController::TracingInfo(), &task); 375 draw_image, ImageDecodeController::TracingInfo(), &task);
(...skipping 12 matching lines...) Expand all
387 draw_image, ImageDecodeController::TracingInfo(), &another_task); 388 draw_image, ImageDecodeController::TracingInfo(), &another_task);
388 EXPECT_FALSE(need_unref); 389 EXPECT_FALSE(need_unref);
389 EXPECT_EQ(another_task.get(), nullptr); 390 EXPECT_EQ(another_task.get(), nullptr);
390 391
391 controller.UnrefImage(draw_image); 392 controller.UnrefImage(draw_image);
392 } 393 }
393 394
394 TEST(GpuImageDecodeControllerTest, GetDecodedImageForDraw) { 395 TEST(GpuImageDecodeControllerTest, GetDecodedImageForDraw) {
395 auto context_provider = TestContextProvider::Create(); 396 auto context_provider = TestContextProvider::Create();
396 context_provider->BindToCurrentThread(); 397 context_provider->BindToCurrentThread();
397 GpuImageDecodeController controller(context_provider.get(), 398 TestGpuImageDecodeController controller(context_provider.get());
398 ResourceFormat::RGBA_8888);
399 bool is_decomposable = true; 399 bool is_decomposable = true;
400 SkFilterQuality quality = kHigh_SkFilterQuality; 400 SkFilterQuality quality = kHigh_SkFilterQuality;
401 401
402 sk_sp<SkImage> image = CreateImage(100, 100); 402 sk_sp<SkImage> image = CreateImage(100, 100);
403 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), 403 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()),
404 quality, 404 quality,
405 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); 405 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable));
406 scoped_refptr<TileTask> task; 406 scoped_refptr<TileTask> task;
407 bool need_unref = controller.GetTaskForImageAndRef( 407 bool need_unref = controller.GetTaskForImageAndRef(
408 draw_image, ImageDecodeController::TracingInfo(), &task); 408 draw_image, ImageDecodeController::TracingInfo(), &task);
(...skipping 13 matching lines...) Expand all
422 EXPECT_FALSE(decoded_draw_image.is_at_raster_decode()); 422 EXPECT_FALSE(decoded_draw_image.is_at_raster_decode());
423 EXPECT_FALSE(controller.DiscardableIsLockedForTesting(draw_image)); 423 EXPECT_FALSE(controller.DiscardableIsLockedForTesting(draw_image));
424 424
425 controller.DrawWithImageFinished(draw_image, decoded_draw_image); 425 controller.DrawWithImageFinished(draw_image, decoded_draw_image);
426 controller.UnrefImage(draw_image); 426 controller.UnrefImage(draw_image);
427 } 427 }
428 428
429 TEST(GpuImageDecodeControllerTest, GetLargeDecodedImageForDraw) { 429 TEST(GpuImageDecodeControllerTest, GetLargeDecodedImageForDraw) {
430 auto context_provider = TestContextProvider::Create(); 430 auto context_provider = TestContextProvider::Create();
431 context_provider->BindToCurrentThread(); 431 context_provider->BindToCurrentThread();
432 GpuImageDecodeController controller(context_provider.get(), 432 TestGpuImageDecodeController controller(context_provider.get());
433 ResourceFormat::RGBA_8888);
434 bool is_decomposable = true; 433 bool is_decomposable = true;
435 SkFilterQuality quality = kHigh_SkFilterQuality; 434 SkFilterQuality quality = kHigh_SkFilterQuality;
436 435
437 sk_sp<SkImage> image = CreateImage(1, 24000); 436 sk_sp<SkImage> image = CreateImage(1, 24000);
438 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), 437 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()),
439 quality, 438 quality,
440 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); 439 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable));
441 scoped_refptr<TileTask> task; 440 scoped_refptr<TileTask> task;
442 bool need_unref = controller.GetTaskForImageAndRef( 441 bool need_unref = controller.GetTaskForImageAndRef(
443 draw_image, ImageDecodeController::TracingInfo(), &task); 442 draw_image, ImageDecodeController::TracingInfo(), &task);
(...skipping 14 matching lines...) Expand all
458 EXPECT_TRUE(controller.DiscardableIsLockedForTesting(draw_image)); 457 EXPECT_TRUE(controller.DiscardableIsLockedForTesting(draw_image));
459 458
460 controller.DrawWithImageFinished(draw_image, decoded_draw_image); 459 controller.DrawWithImageFinished(draw_image, decoded_draw_image);
461 controller.UnrefImage(draw_image); 460 controller.UnrefImage(draw_image);
462 EXPECT_FALSE(controller.DiscardableIsLockedForTesting(draw_image)); 461 EXPECT_FALSE(controller.DiscardableIsLockedForTesting(draw_image));
463 } 462 }
464 463
465 TEST(GpuImageDecodeControllerTest, GetDecodedImageForDrawAtRasterDecode) { 464 TEST(GpuImageDecodeControllerTest, GetDecodedImageForDrawAtRasterDecode) {
466 auto context_provider = TestContextProvider::Create(); 465 auto context_provider = TestContextProvider::Create();
467 context_provider->BindToCurrentThread(); 466 context_provider->BindToCurrentThread();
468 GpuImageDecodeController controller(context_provider.get(), 467 TestGpuImageDecodeController controller(context_provider.get());
469 ResourceFormat::RGBA_8888);
470 bool is_decomposable = true; 468 bool is_decomposable = true;
471 SkFilterQuality quality = kHigh_SkFilterQuality; 469 SkFilterQuality quality = kHigh_SkFilterQuality;
472 470
473 controller.SetCachedItemLimitForTesting(0); 471 controller.SetCachedItemLimitForTesting(0);
474 controller.SetCachedBytesLimitForTesting(0); 472 controller.SetCachedBytesLimitForTesting(0);
475 473
476 sk_sp<SkImage> image = CreateImage(100, 100); 474 sk_sp<SkImage> image = CreateImage(100, 100);
477 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), 475 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()),
478 quality, 476 quality,
479 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); 477 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable));
(...skipping 13 matching lines...) Expand all
493 EXPECT_TRUE(decoded_draw_image.image()->isTextureBacked()); 491 EXPECT_TRUE(decoded_draw_image.image()->isTextureBacked());
494 EXPECT_TRUE(decoded_draw_image.is_at_raster_decode()); 492 EXPECT_TRUE(decoded_draw_image.is_at_raster_decode());
495 EXPECT_FALSE(controller.DiscardableIsLockedForTesting(draw_image)); 493 EXPECT_FALSE(controller.DiscardableIsLockedForTesting(draw_image));
496 494
497 controller.DrawWithImageFinished(draw_image, decoded_draw_image); 495 controller.DrawWithImageFinished(draw_image, decoded_draw_image);
498 } 496 }
499 497
500 TEST(GpuImageDecodeControllerTest, AtRasterUsedDirectlyIfSpaceAllows) { 498 TEST(GpuImageDecodeControllerTest, AtRasterUsedDirectlyIfSpaceAllows) {
501 auto context_provider = TestContextProvider::Create(); 499 auto context_provider = TestContextProvider::Create();
502 context_provider->BindToCurrentThread(); 500 context_provider->BindToCurrentThread();
503 GpuImageDecodeController controller(context_provider.get(), 501 TestGpuImageDecodeController controller(context_provider.get());
504 ResourceFormat::RGBA_8888);
505 bool is_decomposable = true; 502 bool is_decomposable = true;
506 SkFilterQuality quality = kHigh_SkFilterQuality; 503 SkFilterQuality quality = kHigh_SkFilterQuality;
507 504
508 controller.SetCachedItemLimitForTesting(0); 505 controller.SetCachedItemLimitForTesting(0);
509 controller.SetCachedBytesLimitForTesting(0); 506 controller.SetCachedBytesLimitForTesting(0);
510 507
511 sk_sp<SkImage> image = CreateImage(100, 100); 508 sk_sp<SkImage> image = CreateImage(100, 100);
512 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), 509 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()),
513 quality, 510 quality,
514 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); 511 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable));
(...skipping 26 matching lines...) Expand all
541 draw_image, ImageDecodeController::TracingInfo(), &task); 538 draw_image, ImageDecodeController::TracingInfo(), &task);
542 EXPECT_TRUE(another_task_needs_unref); 539 EXPECT_TRUE(another_task_needs_unref);
543 EXPECT_FALSE(another_task); 540 EXPECT_FALSE(another_task);
544 controller.UnrefImage(draw_image); 541 controller.UnrefImage(draw_image);
545 } 542 }
546 543
547 TEST(GpuImageDecodeControllerTest, 544 TEST(GpuImageDecodeControllerTest,
548 GetDecodedImageForDrawAtRasterDecodeMultipleTimes) { 545 GetDecodedImageForDrawAtRasterDecodeMultipleTimes) {
549 auto context_provider = TestContextProvider::Create(); 546 auto context_provider = TestContextProvider::Create();
550 context_provider->BindToCurrentThread(); 547 context_provider->BindToCurrentThread();
551 GpuImageDecodeController controller(context_provider.get(), 548 TestGpuImageDecodeController controller(context_provider.get());
552 ResourceFormat::RGBA_8888);
553 bool is_decomposable = true; 549 bool is_decomposable = true;
554 SkFilterQuality quality = kHigh_SkFilterQuality; 550 SkFilterQuality quality = kHigh_SkFilterQuality;
555 551
556 controller.SetCachedItemLimitForTesting(0); 552 controller.SetCachedItemLimitForTesting(0);
557 controller.SetCachedBytesLimitForTesting(0); 553 controller.SetCachedBytesLimitForTesting(0);
558 554
559 sk_sp<SkImage> image = CreateImage(100, 100); 555 sk_sp<SkImage> image = CreateImage(100, 100);
560 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), 556 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()),
561 quality, 557 quality,
562 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); 558 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable));
(...skipping 14 matching lines...) Expand all
577 another_decoded_draw_image.image()->uniqueID()); 573 another_decoded_draw_image.image()->uniqueID());
578 574
579 controller.DrawWithImageFinished(draw_image, decoded_draw_image); 575 controller.DrawWithImageFinished(draw_image, decoded_draw_image);
580 controller.DrawWithImageFinished(draw_image, another_decoded_draw_image); 576 controller.DrawWithImageFinished(draw_image, another_decoded_draw_image);
581 } 577 }
582 578
583 TEST(GpuImageDecodeControllerTest, 579 TEST(GpuImageDecodeControllerTest,
584 GetLargeDecodedImageForDrawAtRasterDecodeMultipleTimes) { 580 GetLargeDecodedImageForDrawAtRasterDecodeMultipleTimes) {
585 auto context_provider = TestContextProvider::Create(); 581 auto context_provider = TestContextProvider::Create();
586 context_provider->BindToCurrentThread(); 582 context_provider->BindToCurrentThread();
587 GpuImageDecodeController controller(context_provider.get(), 583 TestGpuImageDecodeController controller(context_provider.get());
588 ResourceFormat::RGBA_8888);
589 bool is_decomposable = true; 584 bool is_decomposable = true;
590 SkFilterQuality quality = kHigh_SkFilterQuality; 585 SkFilterQuality quality = kHigh_SkFilterQuality;
591 586
592 sk_sp<SkImage> image = CreateImage(1, 24000); 587 sk_sp<SkImage> image = CreateImage(1, 24000);
593 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), 588 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()),
594 quality, 589 quality,
595 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); 590 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable));
596 591
597 // Must hold context lock before calling GetDecodedImageForDraw / 592 // Must hold context lock before calling GetDecodedImageForDraw /
598 // DrawWithImageFinished. 593 // DrawWithImageFinished.
(...skipping 15 matching lines...) Expand all
614 EXPECT_TRUE(second_decoded_draw_image.is_at_raster_decode()); 609 EXPECT_TRUE(second_decoded_draw_image.is_at_raster_decode());
615 EXPECT_TRUE(controller.DiscardableIsLockedForTesting(draw_image)); 610 EXPECT_TRUE(controller.DiscardableIsLockedForTesting(draw_image));
616 611
617 controller.DrawWithImageFinished(draw_image, second_decoded_draw_image); 612 controller.DrawWithImageFinished(draw_image, second_decoded_draw_image);
618 EXPECT_FALSE(controller.DiscardableIsLockedForTesting(draw_image)); 613 EXPECT_FALSE(controller.DiscardableIsLockedForTesting(draw_image));
619 } 614 }
620 615
621 TEST(GpuImageDecodeControllerTest, ZeroSizedImagesAreSkipped) { 616 TEST(GpuImageDecodeControllerTest, ZeroSizedImagesAreSkipped) {
622 auto context_provider = TestContextProvider::Create(); 617 auto context_provider = TestContextProvider::Create();
623 context_provider->BindToCurrentThread(); 618 context_provider->BindToCurrentThread();
624 GpuImageDecodeController controller(context_provider.get(), 619 TestGpuImageDecodeController controller(context_provider.get());
625 ResourceFormat::RGBA_8888);
626 bool is_decomposable = true; 620 bool is_decomposable = true;
627 SkFilterQuality quality = kHigh_SkFilterQuality; 621 SkFilterQuality quality = kHigh_SkFilterQuality;
628 622
629 sk_sp<SkImage> image = CreateImage(100, 100); 623 sk_sp<SkImage> image = CreateImage(100, 100);
630 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), 624 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()),
631 quality, 625 quality,
632 CreateMatrix(SkSize::Make(0.f, 0.f), is_decomposable)); 626 CreateMatrix(SkSize::Make(0.f, 0.f), is_decomposable));
633 627
634 scoped_refptr<TileTask> task; 628 scoped_refptr<TileTask> task;
635 bool need_unref = controller.GetTaskForImageAndRef( 629 bool need_unref = controller.GetTaskForImageAndRef(
636 draw_image, ImageDecodeController::TracingInfo(), &task); 630 draw_image, ImageDecodeController::TracingInfo(), &task);
637 EXPECT_FALSE(task); 631 EXPECT_FALSE(task);
638 EXPECT_FALSE(need_unref); 632 EXPECT_FALSE(need_unref);
639 633
640 // Must hold context lock before calling GetDecodedImageForDraw / 634 // Must hold context lock before calling GetDecodedImageForDraw /
641 // DrawWithImageFinished. 635 // DrawWithImageFinished.
642 ContextProvider::ScopedContextLock context_lock(context_provider.get()); 636 ContextProvider::ScopedContextLock context_lock(context_provider.get());
643 DecodedDrawImage decoded_draw_image = 637 DecodedDrawImage decoded_draw_image =
644 controller.GetDecodedImageForDraw(draw_image); 638 controller.GetDecodedImageForDraw(draw_image);
645 EXPECT_FALSE(decoded_draw_image.image()); 639 EXPECT_FALSE(decoded_draw_image.image());
646 640
647 controller.DrawWithImageFinished(draw_image, decoded_draw_image); 641 controller.DrawWithImageFinished(draw_image, decoded_draw_image);
648 } 642 }
649 643
650 TEST(GpuImageDecodeControllerTest, NonOverlappingSrcRectImagesAreSkipped) { 644 TEST(GpuImageDecodeControllerTest, NonOverlappingSrcRectImagesAreSkipped) {
651 auto context_provider = TestContextProvider::Create(); 645 auto context_provider = TestContextProvider::Create();
652 context_provider->BindToCurrentThread(); 646 context_provider->BindToCurrentThread();
653 GpuImageDecodeController controller(context_provider.get(), 647 TestGpuImageDecodeController controller(context_provider.get());
654 ResourceFormat::RGBA_8888);
655 bool is_decomposable = true; 648 bool is_decomposable = true;
656 SkFilterQuality quality = kHigh_SkFilterQuality; 649 SkFilterQuality quality = kHigh_SkFilterQuality;
657 650
658 sk_sp<SkImage> image = CreateImage(100, 100); 651 sk_sp<SkImage> image = CreateImage(100, 100);
659 DrawImage draw_image( 652 DrawImage draw_image(
660 image, SkIRect::MakeXYWH(150, 150, image->width(), image->height()), 653 image, SkIRect::MakeXYWH(150, 150, image->width(), image->height()),
661 quality, CreateMatrix(SkSize::Make(1.f, 1.f), is_decomposable)); 654 quality, CreateMatrix(SkSize::Make(1.f, 1.f), is_decomposable));
662 655
663 scoped_refptr<TileTask> task; 656 scoped_refptr<TileTask> task;
664 bool need_unref = controller.GetTaskForImageAndRef( 657 bool need_unref = controller.GetTaskForImageAndRef(
665 draw_image, ImageDecodeController::TracingInfo(), &task); 658 draw_image, ImageDecodeController::TracingInfo(), &task);
666 EXPECT_FALSE(task); 659 EXPECT_FALSE(task);
667 EXPECT_FALSE(need_unref); 660 EXPECT_FALSE(need_unref);
668 661
669 // Must hold context lock before calling GetDecodedImageForDraw / 662 // Must hold context lock before calling GetDecodedImageForDraw /
670 // DrawWithImageFinished. 663 // DrawWithImageFinished.
671 ContextProvider::ScopedContextLock context_lock(context_provider.get()); 664 ContextProvider::ScopedContextLock context_lock(context_provider.get());
672 DecodedDrawImage decoded_draw_image = 665 DecodedDrawImage decoded_draw_image =
673 controller.GetDecodedImageForDraw(draw_image); 666 controller.GetDecodedImageForDraw(draw_image);
674 EXPECT_FALSE(decoded_draw_image.image()); 667 EXPECT_FALSE(decoded_draw_image.image());
675 668
676 controller.DrawWithImageFinished(draw_image, decoded_draw_image); 669 controller.DrawWithImageFinished(draw_image, decoded_draw_image);
677 } 670 }
678 671
679 TEST(GpuImageDecodeControllerTest, CanceledTasksDoNotCountAgainstBudget) { 672 TEST(GpuImageDecodeControllerTest, CanceledTasksDoNotCountAgainstBudget) {
680 auto context_provider = TestContextProvider::Create(); 673 auto context_provider = TestContextProvider::Create();
681 context_provider->BindToCurrentThread(); 674 context_provider->BindToCurrentThread();
682 GpuImageDecodeController controller(context_provider.get(), 675 TestGpuImageDecodeController controller(context_provider.get());
683 ResourceFormat::RGBA_8888);
684 bool is_decomposable = true; 676 bool is_decomposable = true;
685 SkFilterQuality quality = kHigh_SkFilterQuality; 677 SkFilterQuality quality = kHigh_SkFilterQuality;
686 678
687 sk_sp<SkImage> image = CreateImage(100, 100); 679 sk_sp<SkImage> image = CreateImage(100, 100);
688 DrawImage draw_image( 680 DrawImage draw_image(
689 image, SkIRect::MakeXYWH(0, 0, image->width(), image->height()), quality, 681 image, SkIRect::MakeXYWH(0, 0, image->width(), image->height()), quality,
690 CreateMatrix(SkSize::Make(1.f, 1.f), is_decomposable)); 682 CreateMatrix(SkSize::Make(1.f, 1.f), is_decomposable));
691 683
692 scoped_refptr<TileTask> task; 684 scoped_refptr<TileTask> task;
693 bool need_unref = controller.GetTaskForImageAndRef( 685 bool need_unref = controller.GetTaskForImageAndRef(
694 draw_image, ImageDecodeController::TracingInfo(), &task); 686 draw_image, ImageDecodeController::TracingInfo(), &task);
695 EXPECT_NE(0u, controller.GetBytesUsedForTesting()); 687 EXPECT_NE(0u, controller.GetBytesUsedForTesting());
696 EXPECT_TRUE(task); 688 EXPECT_TRUE(task);
697 EXPECT_TRUE(need_unref); 689 EXPECT_TRUE(need_unref);
698 690
699 ScheduleTask(task->dependencies()[0].get()); 691 ScheduleTask(task->dependencies()[0].get());
700 CompleteTask(task->dependencies()[0].get()); 692 CompleteTask(task->dependencies()[0].get());
701 ScheduleTask(task.get()); 693 ScheduleTask(task.get());
702 CompleteTask(task.get()); 694 CompleteTask(task.get());
703 695
704 controller.UnrefImage(draw_image); 696 controller.UnrefImage(draw_image);
705 EXPECT_EQ(0u, controller.GetBytesUsedForTesting()); 697 EXPECT_EQ(0u, controller.GetBytesUsedForTesting());
706 } 698 }
707 699
708 TEST(GpuImageDecodeControllerTest, ShouldAggressivelyFreeResources) { 700 TEST(GpuImageDecodeControllerTest, ShouldAggressivelyFreeResources) {
709 auto context_provider = TestContextProvider::Create(); 701 auto context_provider = TestContextProvider::Create();
710 context_provider->BindToCurrentThread(); 702 context_provider->BindToCurrentThread();
711 GpuImageDecodeController controller(context_provider.get(), 703 TestGpuImageDecodeController controller(context_provider.get());
712 ResourceFormat::RGBA_8888);
713 bool is_decomposable = true; 704 bool is_decomposable = true;
714 SkFilterQuality quality = kHigh_SkFilterQuality; 705 SkFilterQuality quality = kHigh_SkFilterQuality;
715 706
716 sk_sp<SkImage> image = CreateImage(100, 100); 707 sk_sp<SkImage> image = CreateImage(100, 100);
717 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), 708 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()),
718 quality, 709 quality,
719 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); 710 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable));
720 scoped_refptr<TileTask> task; 711 scoped_refptr<TileTask> task;
721 { 712 {
722 bool need_unref = controller.GetTaskForImageAndRef( 713 bool need_unref = controller.GetTaskForImageAndRef(
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
758 ProcessTask(task->dependencies()[0].get()); 749 ProcessTask(task->dependencies()[0].get());
759 ProcessTask(task.get()); 750 ProcessTask(task.get());
760 751
761 // The image should be in our cache after un-ref. 752 // The image should be in our cache after un-ref.
762 controller.UnrefImage(draw_image); 753 controller.UnrefImage(draw_image);
763 DCHECK_GT(controller.GetBytesUsedForTesting(), 0u); 754 DCHECK_GT(controller.GetBytesUsedForTesting(), 0u);
764 } 755 }
765 756
766 } // namespace 757 } // namespace
767 } // namespace cc 758 } // namespace cc
OLDNEW
« no previous file with comments | « cc/tiles/gpu_image_decode_controller.cc ('k') | cc/tiles/software_image_decode_controller.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698