| OLD | NEW |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 |
| OLD | NEW |