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

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

Issue 1985973002: Defer compositor context creation to the thread. Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: contextfactory: . 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
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"
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
54 } 54 }
55 55
56 void ProcessTask(TileTask* task) { 56 void ProcessTask(TileTask* task) {
57 ScheduleTask(task); 57 ScheduleTask(task);
58 RunTask(task); 58 RunTask(task);
59 CompleteTask(task); 59 CompleteTask(task);
60 } 60 }
61 61
62 TEST(GpuImageDecodeControllerTest, GetTaskForImageSameImage) { 62 TEST(GpuImageDecodeControllerTest, GetTaskForImageSameImage) {
63 auto context_provider = TestContextProvider::Create(); 63 auto context_provider = TestContextProvider::Create();
64 context_provider->BindToCurrentThread();
65 GpuImageDecodeController controller(context_provider.get(), 64 GpuImageDecodeController controller(context_provider.get(),
66 ResourceFormat::RGBA_8888); 65 ResourceFormat::RGBA_8888);
67 sk_sp<SkImage> image = CreateImage(100, 100); 66 sk_sp<SkImage> image = CreateImage(100, 100);
68 bool is_decomposable = true; 67 bool is_decomposable = true;
69 SkFilterQuality quality = kHigh_SkFilterQuality; 68 SkFilterQuality quality = kHigh_SkFilterQuality;
70 69
71 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), 70 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()),
72 quality, 71 quality,
73 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); 72 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable));
74 scoped_refptr<TileTask> task; 73 scoped_refptr<TileTask> task;
(...skipping 13 matching lines...) Expand all
88 87
89 ProcessTask(task->dependencies()[0].get()); 88 ProcessTask(task->dependencies()[0].get());
90 ProcessTask(task.get()); 89 ProcessTask(task.get());
91 90
92 controller.UnrefImage(draw_image); 91 controller.UnrefImage(draw_image);
93 controller.UnrefImage(draw_image); 92 controller.UnrefImage(draw_image);
94 } 93 }
95 94
96 TEST(GpuImageDecodeControllerTest, GetTaskForImageDifferentImage) { 95 TEST(GpuImageDecodeControllerTest, GetTaskForImageDifferentImage) {
97 auto context_provider = TestContextProvider::Create(); 96 auto context_provider = TestContextProvider::Create();
98 context_provider->BindToCurrentThread();
99 GpuImageDecodeController controller(context_provider.get(), 97 GpuImageDecodeController controller(context_provider.get(),
100 ResourceFormat::RGBA_8888); 98 ResourceFormat::RGBA_8888);
101 bool is_decomposable = true; 99 bool is_decomposable = true;
102 SkFilterQuality quality = kHigh_SkFilterQuality; 100 SkFilterQuality quality = kHigh_SkFilterQuality;
103 101
104 sk_sp<SkImage> first_image = CreateImage(100, 100); 102 sk_sp<SkImage> first_image = CreateImage(100, 100);
105 DrawImage first_draw_image( 103 DrawImage first_draw_image(
106 first_image, SkIRect::MakeWH(first_image->width(), first_image->height()), 104 first_image, SkIRect::MakeWH(first_image->width(), first_image->height()),
107 quality, CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); 105 quality, CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable));
108 scoped_refptr<TileTask> first_task; 106 scoped_refptr<TileTask> first_task;
(...skipping 18 matching lines...) Expand all
127 ProcessTask(first_task.get()); 125 ProcessTask(first_task.get());
128 ProcessTask(second_task->dependencies()[0].get()); 126 ProcessTask(second_task->dependencies()[0].get());
129 ProcessTask(second_task.get()); 127 ProcessTask(second_task.get());
130 128
131 controller.UnrefImage(first_draw_image); 129 controller.UnrefImage(first_draw_image);
132 controller.UnrefImage(second_draw_image); 130 controller.UnrefImage(second_draw_image);
133 } 131 }
134 132
135 TEST(GpuImageDecodeControllerTest, GetTaskForImageAlreadyDecodedAndLocked) { 133 TEST(GpuImageDecodeControllerTest, GetTaskForImageAlreadyDecodedAndLocked) {
136 auto context_provider = TestContextProvider::Create(); 134 auto context_provider = TestContextProvider::Create();
137 context_provider->BindToCurrentThread();
138 GpuImageDecodeController controller(context_provider.get(), 135 GpuImageDecodeController controller(context_provider.get(),
139 ResourceFormat::RGBA_8888); 136 ResourceFormat::RGBA_8888);
140 bool is_decomposable = true; 137 bool is_decomposable = true;
141 SkFilterQuality quality = kHigh_SkFilterQuality; 138 SkFilterQuality quality = kHigh_SkFilterQuality;
142 139
143 sk_sp<SkImage> image = CreateImage(100, 100); 140 sk_sp<SkImage> image = CreateImage(100, 100);
144 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), 141 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()),
145 quality, 142 quality,
146 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); 143 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable));
147 scoped_refptr<TileTask> task; 144 scoped_refptr<TileTask> task;
(...skipping 25 matching lines...) Expand all
173 170
174 // Finally, complete the original decode task. 171 // Finally, complete the original decode task.
175 CompleteTask(task->dependencies()[0].get()); 172 CompleteTask(task->dependencies()[0].get());
176 173
177 controller.UnrefImage(draw_image); 174 controller.UnrefImage(draw_image);
178 controller.UnrefImage(draw_image); 175 controller.UnrefImage(draw_image);
179 } 176 }
180 177
181 TEST(GpuImageDecodeControllerTest, GetTaskForImageAlreadyDecodedNotLocked) { 178 TEST(GpuImageDecodeControllerTest, GetTaskForImageAlreadyDecodedNotLocked) {
182 auto context_provider = TestContextProvider::Create(); 179 auto context_provider = TestContextProvider::Create();
183 context_provider->BindToCurrentThread();
184 GpuImageDecodeController controller(context_provider.get(), 180 GpuImageDecodeController controller(context_provider.get(),
185 ResourceFormat::RGBA_8888); 181 ResourceFormat::RGBA_8888);
186 bool is_decomposable = true; 182 bool is_decomposable = true;
187 SkFilterQuality quality = kHigh_SkFilterQuality; 183 SkFilterQuality quality = kHigh_SkFilterQuality;
188 184
189 sk_sp<SkImage> image = CreateImage(100, 100); 185 sk_sp<SkImage> image = CreateImage(100, 100);
190 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), 186 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()),
191 quality, 187 quality,
192 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); 188 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable));
193 scoped_refptr<TileTask> task; 189 scoped_refptr<TileTask> task;
(...skipping 25 matching lines...) Expand all
219 EXPECT_TRUE(task->dependencies()[0]); 215 EXPECT_TRUE(task->dependencies()[0]);
220 216
221 ProcessTask(another_task->dependencies()[0].get()); 217 ProcessTask(another_task->dependencies()[0].get());
222 ProcessTask(another_task.get()); 218 ProcessTask(another_task.get());
223 219
224 controller.UnrefImage(draw_image); 220 controller.UnrefImage(draw_image);
225 } 221 }
226 222
227 TEST(GpuImageDecodeControllerTest, GetTaskForImageAlreadyUploaded) { 223 TEST(GpuImageDecodeControllerTest, GetTaskForImageAlreadyUploaded) {
228 auto context_provider = TestContextProvider::Create(); 224 auto context_provider = TestContextProvider::Create();
229 context_provider->BindToCurrentThread();
230 GpuImageDecodeController controller(context_provider.get(), 225 GpuImageDecodeController controller(context_provider.get(),
231 ResourceFormat::RGBA_8888); 226 ResourceFormat::RGBA_8888);
232 bool is_decomposable = true; 227 bool is_decomposable = true;
233 SkFilterQuality quality = kHigh_SkFilterQuality; 228 SkFilterQuality quality = kHigh_SkFilterQuality;
234 229
235 sk_sp<SkImage> image = CreateImage(100, 100); 230 sk_sp<SkImage> image = CreateImage(100, 100);
236 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), 231 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()),
237 quality, 232 quality,
238 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); 233 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable));
239 scoped_refptr<TileTask> task; 234 scoped_refptr<TileTask> task;
(...skipping 15 matching lines...) Expand all
255 EXPECT_FALSE(another_task); 250 EXPECT_FALSE(another_task);
256 251
257 CompleteTask(task.get()); 252 CompleteTask(task.get());
258 253
259 controller.UnrefImage(draw_image); 254 controller.UnrefImage(draw_image);
260 controller.UnrefImage(draw_image); 255 controller.UnrefImage(draw_image);
261 } 256 }
262 257
263 TEST(GpuImageDecodeControllerTest, GetTaskForImageCanceledGetsNewTask) { 258 TEST(GpuImageDecodeControllerTest, GetTaskForImageCanceledGetsNewTask) {
264 auto context_provider = TestContextProvider::Create(); 259 auto context_provider = TestContextProvider::Create();
265 context_provider->BindToCurrentThread();
266 GpuImageDecodeController controller(context_provider.get(), 260 GpuImageDecodeController controller(context_provider.get(),
267 ResourceFormat::RGBA_8888); 261 ResourceFormat::RGBA_8888);
268 bool is_decomposable = true; 262 bool is_decomposable = true;
269 SkFilterQuality quality = kHigh_SkFilterQuality; 263 SkFilterQuality quality = kHigh_SkFilterQuality;
270 264
271 sk_sp<SkImage> image = CreateImage(100, 100); 265 sk_sp<SkImage> image = CreateImage(100, 100);
272 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), 266 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()),
273 quality, 267 quality,
274 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); 268 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable));
275 scoped_refptr<TileTask> task; 269 scoped_refptr<TileTask> task;
(...skipping 28 matching lines...) Expand all
304 298
305 ProcessTask(third_task->dependencies()[0].get()); 299 ProcessTask(third_task->dependencies()[0].get());
306 ProcessTask(third_task.get()); 300 ProcessTask(third_task.get());
307 301
308 controller.UnrefImage(draw_image); 302 controller.UnrefImage(draw_image);
309 } 303 }
310 304
311 TEST(GpuImageDecodeControllerTest, 305 TEST(GpuImageDecodeControllerTest,
312 GetTaskForImageCanceledWhileReffedGetsNewTask) { 306 GetTaskForImageCanceledWhileReffedGetsNewTask) {
313 auto context_provider = TestContextProvider::Create(); 307 auto context_provider = TestContextProvider::Create();
314 context_provider->BindToCurrentThread();
315 GpuImageDecodeController controller(context_provider.get(), 308 GpuImageDecodeController controller(context_provider.get(),
316 ResourceFormat::RGBA_8888); 309 ResourceFormat::RGBA_8888);
317 bool is_decomposable = true; 310 bool is_decomposable = true;
318 SkFilterQuality quality = kHigh_SkFilterQuality; 311 SkFilterQuality quality = kHigh_SkFilterQuality;
319 312
320 sk_sp<SkImage> image = CreateImage(100, 100); 313 sk_sp<SkImage> image = CreateImage(100, 100);
321 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), 314 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()),
322 quality, 315 quality,
323 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); 316 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable));
324 scoped_refptr<TileTask> task; 317 scoped_refptr<TileTask> task;
(...skipping 27 matching lines...) Expand all
352 ProcessTask(third_task.get()); 345 ProcessTask(third_task.get());
353 346
354 // 3 Unrefs! 347 // 3 Unrefs!
355 controller.UnrefImage(draw_image); 348 controller.UnrefImage(draw_image);
356 controller.UnrefImage(draw_image); 349 controller.UnrefImage(draw_image);
357 controller.UnrefImage(draw_image); 350 controller.UnrefImage(draw_image);
358 } 351 }
359 352
360 TEST(GpuImageDecodeControllerTest, NoTaskForImageAlreadyFailedDecoding) { 353 TEST(GpuImageDecodeControllerTest, NoTaskForImageAlreadyFailedDecoding) {
361 auto context_provider = TestContextProvider::Create(); 354 auto context_provider = TestContextProvider::Create();
362 context_provider->BindToCurrentThread();
363 GpuImageDecodeController controller(context_provider.get(), 355 GpuImageDecodeController controller(context_provider.get(),
364 ResourceFormat::RGBA_8888); 356 ResourceFormat::RGBA_8888);
365 bool is_decomposable = true; 357 bool is_decomposable = true;
366 SkFilterQuality quality = kHigh_SkFilterQuality; 358 SkFilterQuality quality = kHigh_SkFilterQuality;
367 359
368 sk_sp<SkImage> image = CreateImage(100, 100); 360 sk_sp<SkImage> image = CreateImage(100, 100);
369 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), 361 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()),
370 quality, 362 quality,
371 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); 363 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable));
372 scoped_refptr<TileTask> task; 364 scoped_refptr<TileTask> task;
(...skipping 13 matching lines...) Expand all
386 need_unref = controller.GetTaskForImageAndRef( 378 need_unref = controller.GetTaskForImageAndRef(
387 draw_image, ImageDecodeController::TracingInfo(), &another_task); 379 draw_image, ImageDecodeController::TracingInfo(), &another_task);
388 EXPECT_FALSE(need_unref); 380 EXPECT_FALSE(need_unref);
389 EXPECT_EQ(another_task.get(), nullptr); 381 EXPECT_EQ(another_task.get(), nullptr);
390 382
391 controller.UnrefImage(draw_image); 383 controller.UnrefImage(draw_image);
392 } 384 }
393 385
394 TEST(GpuImageDecodeControllerTest, GetDecodedImageForDraw) { 386 TEST(GpuImageDecodeControllerTest, GetDecodedImageForDraw) {
395 auto context_provider = TestContextProvider::Create(); 387 auto context_provider = TestContextProvider::Create();
396 context_provider->BindToCurrentThread();
397 GpuImageDecodeController controller(context_provider.get(), 388 GpuImageDecodeController controller(context_provider.get(),
398 ResourceFormat::RGBA_8888); 389 ResourceFormat::RGBA_8888);
399 bool is_decomposable = true; 390 bool is_decomposable = true;
400 SkFilterQuality quality = kHigh_SkFilterQuality; 391 SkFilterQuality quality = kHigh_SkFilterQuality;
401 392
402 sk_sp<SkImage> image = CreateImage(100, 100); 393 sk_sp<SkImage> image = CreateImage(100, 100);
403 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), 394 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()),
404 quality, 395 quality,
405 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); 396 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable));
406 scoped_refptr<TileTask> task; 397 scoped_refptr<TileTask> task;
(...skipping 13 matching lines...) Expand all
420 EXPECT_TRUE(decoded_draw_image.image()); 411 EXPECT_TRUE(decoded_draw_image.image());
421 EXPECT_TRUE(decoded_draw_image.image()->isTextureBacked()); 412 EXPECT_TRUE(decoded_draw_image.image()->isTextureBacked());
422 EXPECT_FALSE(decoded_draw_image.is_at_raster_decode()); 413 EXPECT_FALSE(decoded_draw_image.is_at_raster_decode());
423 414
424 controller.DrawWithImageFinished(draw_image, decoded_draw_image); 415 controller.DrawWithImageFinished(draw_image, decoded_draw_image);
425 controller.UnrefImage(draw_image); 416 controller.UnrefImage(draw_image);
426 } 417 }
427 418
428 TEST(GpuImageDecodeControllerTest, GetLargeDecodedImageForDraw) { 419 TEST(GpuImageDecodeControllerTest, GetLargeDecodedImageForDraw) {
429 auto context_provider = TestContextProvider::Create(); 420 auto context_provider = TestContextProvider::Create();
430 context_provider->BindToCurrentThread();
431 GpuImageDecodeController controller(context_provider.get(), 421 GpuImageDecodeController controller(context_provider.get(),
432 ResourceFormat::RGBA_8888); 422 ResourceFormat::RGBA_8888);
433 bool is_decomposable = true; 423 bool is_decomposable = true;
434 SkFilterQuality quality = kHigh_SkFilterQuality; 424 SkFilterQuality quality = kHigh_SkFilterQuality;
435 425
436 sk_sp<SkImage> image = CreateImage(1, 24000); 426 sk_sp<SkImage> image = CreateImage(1, 24000);
437 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), 427 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()),
438 quality, 428 quality,
439 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); 429 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable));
440 scoped_refptr<TileTask> task; 430 scoped_refptr<TileTask> task;
(...skipping 13 matching lines...) Expand all
454 EXPECT_TRUE(decoded_draw_image.image()); 444 EXPECT_TRUE(decoded_draw_image.image());
455 EXPECT_FALSE(decoded_draw_image.image()->isTextureBacked()); 445 EXPECT_FALSE(decoded_draw_image.image()->isTextureBacked());
456 EXPECT_FALSE(decoded_draw_image.is_at_raster_decode()); 446 EXPECT_FALSE(decoded_draw_image.is_at_raster_decode());
457 447
458 controller.DrawWithImageFinished(draw_image, decoded_draw_image); 448 controller.DrawWithImageFinished(draw_image, decoded_draw_image);
459 controller.UnrefImage(draw_image); 449 controller.UnrefImage(draw_image);
460 } 450 }
461 451
462 TEST(GpuImageDecodeControllerTest, GetDecodedImageForDrawAtRasterDecode) { 452 TEST(GpuImageDecodeControllerTest, GetDecodedImageForDrawAtRasterDecode) {
463 auto context_provider = TestContextProvider::Create(); 453 auto context_provider = TestContextProvider::Create();
464 context_provider->BindToCurrentThread();
465 GpuImageDecodeController controller(context_provider.get(), 454 GpuImageDecodeController controller(context_provider.get(),
466 ResourceFormat::RGBA_8888); 455 ResourceFormat::RGBA_8888);
467 bool is_decomposable = true; 456 bool is_decomposable = true;
468 SkFilterQuality quality = kHigh_SkFilterQuality; 457 SkFilterQuality quality = kHigh_SkFilterQuality;
469 458
470 controller.SetCachedItemLimitForTesting(0); 459 controller.SetCachedItemLimitForTesting(0);
471 controller.SetCachedBytesLimitForTesting(0); 460 controller.SetCachedBytesLimitForTesting(0);
472 461
473 sk_sp<SkImage> image = CreateImage(100, 100); 462 sk_sp<SkImage> image = CreateImage(100, 100);
474 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), 463 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()),
(...skipping 13 matching lines...) Expand all
488 controller.GetDecodedImageForDraw(draw_image); 477 controller.GetDecodedImageForDraw(draw_image);
489 EXPECT_TRUE(decoded_draw_image.image()); 478 EXPECT_TRUE(decoded_draw_image.image());
490 EXPECT_TRUE(decoded_draw_image.image()->isTextureBacked()); 479 EXPECT_TRUE(decoded_draw_image.image()->isTextureBacked());
491 EXPECT_TRUE(decoded_draw_image.is_at_raster_decode()); 480 EXPECT_TRUE(decoded_draw_image.is_at_raster_decode());
492 481
493 controller.DrawWithImageFinished(draw_image, decoded_draw_image); 482 controller.DrawWithImageFinished(draw_image, decoded_draw_image);
494 } 483 }
495 484
496 TEST(GpuImageDecodeControllerTest, AtRasterUsedDirectlyIfSpaceAllows) { 485 TEST(GpuImageDecodeControllerTest, AtRasterUsedDirectlyIfSpaceAllows) {
497 auto context_provider = TestContextProvider::Create(); 486 auto context_provider = TestContextProvider::Create();
498 context_provider->BindToCurrentThread();
499 GpuImageDecodeController controller(context_provider.get(), 487 GpuImageDecodeController controller(context_provider.get(),
500 ResourceFormat::RGBA_8888); 488 ResourceFormat::RGBA_8888);
501 bool is_decomposable = true; 489 bool is_decomposable = true;
502 SkFilterQuality quality = kHigh_SkFilterQuality; 490 SkFilterQuality quality = kHigh_SkFilterQuality;
503 491
504 controller.SetCachedItemLimitForTesting(0); 492 controller.SetCachedItemLimitForTesting(0);
505 controller.SetCachedBytesLimitForTesting(0); 493 controller.SetCachedBytesLimitForTesting(0);
506 494
507 sk_sp<SkImage> image = CreateImage(100, 100); 495 sk_sp<SkImage> image = CreateImage(100, 100);
508 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), 496 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()),
(...skipping 26 matching lines...) Expand all
535 bool another_task_needs_unref = controller.GetTaskForImageAndRef( 523 bool another_task_needs_unref = controller.GetTaskForImageAndRef(
536 draw_image, ImageDecodeController::TracingInfo(), &task); 524 draw_image, ImageDecodeController::TracingInfo(), &task);
537 EXPECT_TRUE(another_task_needs_unref); 525 EXPECT_TRUE(another_task_needs_unref);
538 EXPECT_FALSE(another_task); 526 EXPECT_FALSE(another_task);
539 controller.UnrefImage(draw_image); 527 controller.UnrefImage(draw_image);
540 } 528 }
541 529
542 TEST(GpuImageDecodeControllerTest, 530 TEST(GpuImageDecodeControllerTest,
543 GetDecodedImageForDrawAtRasterDecodeMultipleTimes) { 531 GetDecodedImageForDrawAtRasterDecodeMultipleTimes) {
544 auto context_provider = TestContextProvider::Create(); 532 auto context_provider = TestContextProvider::Create();
545 context_provider->BindToCurrentThread();
546 GpuImageDecodeController controller(context_provider.get(), 533 GpuImageDecodeController controller(context_provider.get(),
547 ResourceFormat::RGBA_8888); 534 ResourceFormat::RGBA_8888);
548 bool is_decomposable = true; 535 bool is_decomposable = true;
549 SkFilterQuality quality = kHigh_SkFilterQuality; 536 SkFilterQuality quality = kHigh_SkFilterQuality;
550 537
551 controller.SetCachedItemLimitForTesting(0); 538 controller.SetCachedItemLimitForTesting(0);
552 controller.SetCachedBytesLimitForTesting(0); 539 controller.SetCachedBytesLimitForTesting(0);
553 540
554 sk_sp<SkImage> image = CreateImage(100, 100); 541 sk_sp<SkImage> image = CreateImage(100, 100);
555 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), 542 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()),
(...skipping 13 matching lines...) Expand all
569 controller.GetDecodedImageForDraw(draw_image); 556 controller.GetDecodedImageForDraw(draw_image);
570 EXPECT_EQ(decoded_draw_image.image()->uniqueID(), 557 EXPECT_EQ(decoded_draw_image.image()->uniqueID(),
571 another_decoded_draw_image.image()->uniqueID()); 558 another_decoded_draw_image.image()->uniqueID());
572 559
573 controller.DrawWithImageFinished(draw_image, decoded_draw_image); 560 controller.DrawWithImageFinished(draw_image, decoded_draw_image);
574 controller.DrawWithImageFinished(draw_image, another_decoded_draw_image); 561 controller.DrawWithImageFinished(draw_image, another_decoded_draw_image);
575 } 562 }
576 563
577 TEST(GpuImageDecodeControllerTest, ZeroSizedImagesAreSkipped) { 564 TEST(GpuImageDecodeControllerTest, ZeroSizedImagesAreSkipped) {
578 auto context_provider = TestContextProvider::Create(); 565 auto context_provider = TestContextProvider::Create();
579 context_provider->BindToCurrentThread();
580 GpuImageDecodeController controller(context_provider.get(), 566 GpuImageDecodeController controller(context_provider.get(),
581 ResourceFormat::RGBA_8888); 567 ResourceFormat::RGBA_8888);
582 bool is_decomposable = true; 568 bool is_decomposable = true;
583 SkFilterQuality quality = kHigh_SkFilterQuality; 569 SkFilterQuality quality = kHigh_SkFilterQuality;
584 570
585 sk_sp<SkImage> image = CreateImage(100, 100); 571 sk_sp<SkImage> image = CreateImage(100, 100);
586 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), 572 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()),
587 quality, 573 quality,
588 CreateMatrix(SkSize::Make(0.f, 0.f), is_decomposable)); 574 CreateMatrix(SkSize::Make(0.f, 0.f), is_decomposable));
589 575
590 scoped_refptr<TileTask> task; 576 scoped_refptr<TileTask> task;
591 bool need_unref = controller.GetTaskForImageAndRef( 577 bool need_unref = controller.GetTaskForImageAndRef(
592 draw_image, ImageDecodeController::TracingInfo(), &task); 578 draw_image, ImageDecodeController::TracingInfo(), &task);
593 EXPECT_FALSE(task); 579 EXPECT_FALSE(task);
594 EXPECT_FALSE(need_unref); 580 EXPECT_FALSE(need_unref);
595 581
596 // Must hold context lock before calling GetDecodedImageForDraw / 582 // Must hold context lock before calling GetDecodedImageForDraw /
597 // DrawWithImageFinished. 583 // DrawWithImageFinished.
598 ContextProvider::ScopedContextLock context_lock(context_provider.get()); 584 ContextProvider::ScopedContextLock context_lock(context_provider.get());
599 DecodedDrawImage decoded_draw_image = 585 DecodedDrawImage decoded_draw_image =
600 controller.GetDecodedImageForDraw(draw_image); 586 controller.GetDecodedImageForDraw(draw_image);
601 EXPECT_FALSE(decoded_draw_image.image()); 587 EXPECT_FALSE(decoded_draw_image.image());
602 588
603 controller.DrawWithImageFinished(draw_image, decoded_draw_image); 589 controller.DrawWithImageFinished(draw_image, decoded_draw_image);
604 } 590 }
605 591
606 TEST(GpuImageDecodeControllerTest, NonOverlappingSrcRectImagesAreSkipped) { 592 TEST(GpuImageDecodeControllerTest, NonOverlappingSrcRectImagesAreSkipped) {
607 auto context_provider = TestContextProvider::Create(); 593 auto context_provider = TestContextProvider::Create();
608 context_provider->BindToCurrentThread();
609 GpuImageDecodeController controller(context_provider.get(), 594 GpuImageDecodeController controller(context_provider.get(),
610 ResourceFormat::RGBA_8888); 595 ResourceFormat::RGBA_8888);
611 bool is_decomposable = true; 596 bool is_decomposable = true;
612 SkFilterQuality quality = kHigh_SkFilterQuality; 597 SkFilterQuality quality = kHigh_SkFilterQuality;
613 598
614 sk_sp<SkImage> image = CreateImage(100, 100); 599 sk_sp<SkImage> image = CreateImage(100, 100);
615 DrawImage draw_image( 600 DrawImage draw_image(
616 image, SkIRect::MakeXYWH(150, 150, image->width(), image->height()), 601 image, SkIRect::MakeXYWH(150, 150, image->width(), image->height()),
617 quality, CreateMatrix(SkSize::Make(1.f, 1.f), is_decomposable)); 602 quality, CreateMatrix(SkSize::Make(1.f, 1.f), is_decomposable));
618 603
619 scoped_refptr<TileTask> task; 604 scoped_refptr<TileTask> task;
620 bool need_unref = controller.GetTaskForImageAndRef( 605 bool need_unref = controller.GetTaskForImageAndRef(
621 draw_image, ImageDecodeController::TracingInfo(), &task); 606 draw_image, ImageDecodeController::TracingInfo(), &task);
622 EXPECT_FALSE(task); 607 EXPECT_FALSE(task);
623 EXPECT_FALSE(need_unref); 608 EXPECT_FALSE(need_unref);
624 609
625 // Must hold context lock before calling GetDecodedImageForDraw / 610 // Must hold context lock before calling GetDecodedImageForDraw /
626 // DrawWithImageFinished. 611 // DrawWithImageFinished.
627 ContextProvider::ScopedContextLock context_lock(context_provider.get()); 612 ContextProvider::ScopedContextLock context_lock(context_provider.get());
628 DecodedDrawImage decoded_draw_image = 613 DecodedDrawImage decoded_draw_image =
629 controller.GetDecodedImageForDraw(draw_image); 614 controller.GetDecodedImageForDraw(draw_image);
630 EXPECT_FALSE(decoded_draw_image.image()); 615 EXPECT_FALSE(decoded_draw_image.image());
631 616
632 controller.DrawWithImageFinished(draw_image, decoded_draw_image); 617 controller.DrawWithImageFinished(draw_image, decoded_draw_image);
633 } 618 }
634 619
635 TEST(GpuImageDecodeControllerTest, CanceledTasksDoNotCountAgainstBudget) { 620 TEST(GpuImageDecodeControllerTest, CanceledTasksDoNotCountAgainstBudget) {
636 auto context_provider = TestContextProvider::Create(); 621 auto context_provider = TestContextProvider::Create();
637 context_provider->BindToCurrentThread();
638 GpuImageDecodeController controller(context_provider.get(), 622 GpuImageDecodeController controller(context_provider.get(),
639 ResourceFormat::RGBA_8888); 623 ResourceFormat::RGBA_8888);
640 bool is_decomposable = true; 624 bool is_decomposable = true;
641 SkFilterQuality quality = kHigh_SkFilterQuality; 625 SkFilterQuality quality = kHigh_SkFilterQuality;
642 626
643 sk_sp<SkImage> image = CreateImage(100, 100); 627 sk_sp<SkImage> image = CreateImage(100, 100);
644 DrawImage draw_image( 628 DrawImage draw_image(
645 image, SkIRect::MakeXYWH(0, 0, image->width(), image->height()), quality, 629 image, SkIRect::MakeXYWH(0, 0, image->width(), image->height()), quality,
646 CreateMatrix(SkSize::Make(1.f, 1.f), is_decomposable)); 630 CreateMatrix(SkSize::Make(1.f, 1.f), is_decomposable));
647 631
648 scoped_refptr<TileTask> task; 632 scoped_refptr<TileTask> task;
649 bool need_unref = controller.GetTaskForImageAndRef( 633 bool need_unref = controller.GetTaskForImageAndRef(
650 draw_image, ImageDecodeController::TracingInfo(), &task); 634 draw_image, ImageDecodeController::TracingInfo(), &task);
651 EXPECT_NE(0u, controller.GetBytesUsedForTesting()); 635 EXPECT_NE(0u, controller.GetBytesUsedForTesting());
652 EXPECT_TRUE(task); 636 EXPECT_TRUE(task);
653 EXPECT_TRUE(need_unref); 637 EXPECT_TRUE(need_unref);
654 638
655 ScheduleTask(task->dependencies()[0].get()); 639 ScheduleTask(task->dependencies()[0].get());
656 CompleteTask(task->dependencies()[0].get()); 640 CompleteTask(task->dependencies()[0].get());
657 ScheduleTask(task.get()); 641 ScheduleTask(task.get());
658 CompleteTask(task.get()); 642 CompleteTask(task.get());
659 643
660 controller.UnrefImage(draw_image); 644 controller.UnrefImage(draw_image);
661 EXPECT_EQ(0u, controller.GetBytesUsedForTesting()); 645 EXPECT_EQ(0u, controller.GetBytesUsedForTesting());
662 } 646 }
663 647
664 TEST(GpuImageDecodeControllerTest, ShouldAggressivelyFreeResources) { 648 TEST(GpuImageDecodeControllerTest, ShouldAggressivelyFreeResources) {
665 auto context_provider = TestContextProvider::Create(); 649 auto context_provider = TestContextProvider::Create();
666 context_provider->BindToCurrentThread();
667 GpuImageDecodeController controller(context_provider.get(), 650 GpuImageDecodeController controller(context_provider.get(),
668 ResourceFormat::RGBA_8888); 651 ResourceFormat::RGBA_8888);
669 bool is_decomposable = true; 652 bool is_decomposable = true;
670 SkFilterQuality quality = kHigh_SkFilterQuality; 653 SkFilterQuality quality = kHigh_SkFilterQuality;
671 654
672 sk_sp<SkImage> image = CreateImage(100, 100); 655 sk_sp<SkImage> image = CreateImage(100, 100);
673 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), 656 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()),
674 quality, 657 quality,
675 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); 658 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable));
676 scoped_refptr<TileTask> task; 659 scoped_refptr<TileTask> task;
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
714 ProcessTask(task->dependencies()[0].get()); 697 ProcessTask(task->dependencies()[0].get());
715 ProcessTask(task.get()); 698 ProcessTask(task.get());
716 699
717 // The image should be in our cache after un-ref. 700 // The image should be in our cache after un-ref.
718 controller.UnrefImage(draw_image); 701 controller.UnrefImage(draw_image);
719 DCHECK_GT(controller.GetBytesUsedForTesting(), 0u); 702 DCHECK_GT(controller.GetBytesUsedForTesting(), 0u);
720 } 703 }
721 704
722 } // namespace 705 } // namespace
723 } // namespace cc 706 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698