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

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

Issue 2382663004: cc: Use medium filter quality for downscales. (Closed)
Patch Set: Created 4 years, 2 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/software_image_decode_controller.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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/software_image_decode_controller.h" 5 #include "cc/tiles/software_image_decode_controller.h"
6 6
7 #include "cc/playback/draw_image.h" 7 #include "cc/playback/draw_image.h"
8 #include "cc/resources/resource_format.h" 8 #include "cc/resources/resource_format.h"
9 #include "cc/test/test_tile_task_runner.h" 9 #include "cc/test/test_tile_task_runner.h"
10 #include "testing/gtest/include/gtest/gtest.h" 10 #include "testing/gtest/include/gtest/gtest.h"
(...skipping 281 matching lines...) Expand 10 before | Expand all | Expand 10 after
292 292
293 auto key = ImageDecodeControllerKey::FromDrawImage(draw_image); 293 auto key = ImageDecodeControllerKey::FromDrawImage(draw_image);
294 EXPECT_EQ(image->uniqueID(), key.image_id()); 294 EXPECT_EQ(image->uniqueID(), key.image_id());
295 EXPECT_EQ(quality, key.filter_quality()); 295 EXPECT_EQ(quality, key.filter_quality());
296 EXPECT_EQ(7, key.target_size().width()); 296 EXPECT_EQ(7, key.target_size().width());
297 EXPECT_EQ(3, key.target_size().height()); 297 EXPECT_EQ(3, key.target_size().height());
298 EXPECT_FALSE(key.can_use_original_decode()); 298 EXPECT_FALSE(key.can_use_original_decode());
299 EXPECT_EQ(7u * 3u * 4u, key.locked_bytes()); 299 EXPECT_EQ(7u * 3u * 4u, key.locked_bytes());
300 } 300 }
301 301
302 TEST(SoftwareImageDecodeControllerTest, ImageKeyHighQuality) { 302 TEST(SoftwareImageDecodeControllerTest,
303 ImageKeyPartialDowscalesDropsHighQualityToMedium) {
303 sk_sp<SkImage> image = CreateImage(100, 100); 304 sk_sp<SkImage> image = CreateImage(100, 100);
304 bool is_decomposable = true; 305 bool is_decomposable = true;
305 SkFilterQuality quality = kHigh_SkFilterQuality; 306 SkFilterQuality quality = kHigh_SkFilterQuality;
306 307
307 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), 308 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()),
308 quality, 309 quality,
309 CreateMatrix(SkSize::Make(0.5f, 1.5f), is_decomposable)); 310 CreateMatrix(SkSize::Make(0.5f, 1.5f), is_decomposable));
310 311
311 auto key = ImageDecodeControllerKey::FromDrawImage(draw_image); 312 auto key = ImageDecodeControllerKey::FromDrawImage(draw_image);
312 EXPECT_EQ(image->uniqueID(), key.image_id()); 313 EXPECT_EQ(image->uniqueID(), key.image_id());
314 EXPECT_EQ(kMedium_SkFilterQuality, key.filter_quality());
315 EXPECT_EQ(100, key.target_size().width());
316 EXPECT_EQ(100, key.target_size().height());
317 EXPECT_FALSE(key.can_use_original_decode());
318 EXPECT_EQ(100u * 100u * 4u, key.locked_bytes());
319 }
320
321 TEST(SoftwareImageDecodeControllerTest,
322 ImageKeyFullDowscalesDropsHighQualityToMedium) {
323 sk_sp<SkImage> image = CreateImage(100, 100);
324 bool is_decomposable = true;
325 SkFilterQuality quality = kHigh_SkFilterQuality;
326
327 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()),
328 quality,
329 CreateMatrix(SkSize::Make(0.5f, 0.2f), is_decomposable));
330
331 auto key = ImageDecodeControllerKey::FromDrawImage(draw_image);
332 EXPECT_EQ(image->uniqueID(), key.image_id());
333 EXPECT_EQ(kMedium_SkFilterQuality, key.filter_quality());
334 EXPECT_EQ(50, key.target_size().width());
335 EXPECT_EQ(50, key.target_size().height());
336 EXPECT_FALSE(key.can_use_original_decode());
337 EXPECT_EQ(50u * 50u * 4u, key.locked_bytes());
338 }
339
340 TEST(SoftwareImageDecodeControllerTest, ImageKeyDowscalesHighQuality) {
341 sk_sp<SkImage> image = CreateImage(100, 100);
342 bool is_decomposable = true;
343 SkFilterQuality quality = kHigh_SkFilterQuality;
344
345 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()),
346 quality,
347 CreateMatrix(SkSize::Make(2.5f, 1.5f), is_decomposable));
348
349 auto key = ImageDecodeControllerKey::FromDrawImage(draw_image);
350 EXPECT_EQ(image->uniqueID(), key.image_id());
313 EXPECT_EQ(quality, key.filter_quality()); 351 EXPECT_EQ(quality, key.filter_quality());
314 EXPECT_EQ(50, key.target_size().width()); 352 EXPECT_EQ(250, key.target_size().width());
315 EXPECT_EQ(150, key.target_size().height()); 353 EXPECT_EQ(150, key.target_size().height());
316 EXPECT_FALSE(key.can_use_original_decode()); 354 EXPECT_FALSE(key.can_use_original_decode());
317 EXPECT_EQ(50u * 150u * 4u, key.locked_bytes()); 355 EXPECT_EQ(250u * 150u * 4u, key.locked_bytes());
318 } 356 }
319 357
320 TEST(SoftwareImageDecodeControllerTest, 358 TEST(SoftwareImageDecodeControllerTest,
321 ImageKeyHighQualityDropToMediumIfTooLarge) { 359 ImageKeyHighQualityDropToMediumIfTooLarge) {
322 // Just over 64MB when scaled. 360 // Just over 64MB when scaled.
323 sk_sp<SkImage> image = CreateImage(4555, 2048); 361 sk_sp<SkImage> image = CreateImage(4555, 2048);
324 bool is_decomposable = true; 362 bool is_decomposable = true;
325 SkFilterQuality quality = kHigh_SkFilterQuality; 363 SkFilterQuality quality = kHigh_SkFilterQuality;
326 364
327 // At least one dimension should scale down, so that medium quality doesn't 365 // At least one dimension should scale down, so that medium quality doesn't
(...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after
471 sk_sp<SkImage> image = CreateImage(100, 100); 509 sk_sp<SkImage> image = CreateImage(100, 100);
472 bool is_decomposable = true; 510 bool is_decomposable = true;
473 SkFilterQuality quality = kHigh_SkFilterQuality; 511 SkFilterQuality quality = kHigh_SkFilterQuality;
474 512
475 DrawImage draw_image( 513 DrawImage draw_image(
476 image, SkIRect::MakeXYWH(20, 30, image->width(), image->height()), 514 image, SkIRect::MakeXYWH(20, 30, image->width(), image->height()),
477 quality, CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); 515 quality, CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable));
478 516
479 auto key = ImageDecodeControllerKey::FromDrawImage(draw_image); 517 auto key = ImageDecodeControllerKey::FromDrawImage(draw_image);
480 EXPECT_EQ(image->uniqueID(), key.image_id()); 518 EXPECT_EQ(image->uniqueID(), key.image_id());
481 EXPECT_EQ(kHigh_SkFilterQuality, key.filter_quality()); 519 EXPECT_EQ(kMedium_SkFilterQuality, key.filter_quality());
482 EXPECT_EQ(40, key.target_size().width()); 520 EXPECT_EQ(40, key.target_size().width());
483 EXPECT_EQ(35, key.target_size().height()); 521 EXPECT_EQ(35, key.target_size().height());
484 EXPECT_EQ(gfx::Rect(20, 30, 80, 70), key.src_rect()); 522 EXPECT_EQ(gfx::Rect(20, 30, 80, 70), key.src_rect());
485 EXPECT_EQ(40u * 35u * 4u, key.locked_bytes()); 523 EXPECT_EQ(40u * 35u * 4u, key.locked_bytes());
486 } 524 }
487 525
488 TEST(SoftwareImageDecodeControllerTest, GetTaskForImageSameImage) { 526 TEST(SoftwareImageDecodeControllerTest, GetTaskForImageSameImage) {
489 TestSoftwareImageDecodeController controller; 527 TestSoftwareImageDecodeController controller;
490 sk_sp<SkImage> image = CreateImage(100, 100); 528 sk_sp<SkImage> image = CreateImage(100, 100);
491 bool is_decomposable = true; 529 bool is_decomposable = true;
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
525 image, SkIRect::MakeWH(image->width(), image->height()), 563 image, SkIRect::MakeWH(image->width(), image->height()),
526 kHigh_SkFilterQuality, 564 kHigh_SkFilterQuality,
527 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); 565 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable));
528 scoped_refptr<TileTask> high_quality_task; 566 scoped_refptr<TileTask> high_quality_task;
529 bool need_unref = controller.GetTaskForImageAndRef( 567 bool need_unref = controller.GetTaskForImageAndRef(
530 high_quality_draw_image, ImageDecodeController::TracingInfo(), 568 high_quality_draw_image, ImageDecodeController::TracingInfo(),
531 &high_quality_task); 569 &high_quality_task);
532 EXPECT_TRUE(need_unref); 570 EXPECT_TRUE(need_unref);
533 EXPECT_TRUE(high_quality_task); 571 EXPECT_TRUE(high_quality_task);
534 572
535 DrawImage medium_quality_draw_image(
536 image, SkIRect::MakeWH(image->width(), image->height()),
537 kMedium_SkFilterQuality,
538 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable));
539 scoped_refptr<TileTask> medium_quality_task;
540 need_unref = controller.GetTaskForImageAndRef(
541 medium_quality_draw_image, ImageDecodeController::TracingInfo(),
542 &medium_quality_task);
543 EXPECT_TRUE(need_unref);
544 EXPECT_TRUE(medium_quality_task);
545 EXPECT_TRUE(high_quality_task.get() != medium_quality_task.get());
546
547 DrawImage low_quality_draw_image( 573 DrawImage low_quality_draw_image(
548 image, SkIRect::MakeWH(image->width(), image->height()), 574 image, SkIRect::MakeWH(image->width(), image->height()),
549 kLow_SkFilterQuality, 575 kLow_SkFilterQuality,
550 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); 576 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable));
551 scoped_refptr<TileTask> low_quality_task; 577 scoped_refptr<TileTask> low_quality_task;
552 need_unref = controller.GetTaskForImageAndRef( 578 need_unref = controller.GetTaskForImageAndRef(
553 low_quality_draw_image, ImageDecodeController::TracingInfo(), 579 low_quality_draw_image, ImageDecodeController::TracingInfo(),
554 &low_quality_task); 580 &low_quality_task);
555 EXPECT_TRUE(need_unref); 581 EXPECT_TRUE(need_unref);
556 EXPECT_TRUE(low_quality_task); 582 EXPECT_TRUE(low_quality_task);
557 EXPECT_TRUE(high_quality_task.get() != low_quality_task.get()); 583 EXPECT_TRUE(high_quality_task.get() != low_quality_task.get());
558 EXPECT_TRUE(medium_quality_task.get() != low_quality_task.get());
559 584
560 TestTileTaskRunner::ProcessTask(high_quality_task.get()); 585 TestTileTaskRunner::ProcessTask(high_quality_task.get());
561 TestTileTaskRunner::ProcessTask(medium_quality_task.get());
562 TestTileTaskRunner::ProcessTask(low_quality_task.get()); 586 TestTileTaskRunner::ProcessTask(low_quality_task.get());
563 587
564 controller.UnrefImage(high_quality_draw_image); 588 controller.UnrefImage(high_quality_draw_image);
565 controller.UnrefImage(medium_quality_draw_image);
566 controller.UnrefImage(low_quality_draw_image); 589 controller.UnrefImage(low_quality_draw_image);
567 } 590 }
568 591
569 TEST(SoftwareImageDecodeControllerTest, GetTaskForImageSameImageDifferentSize) { 592 TEST(SoftwareImageDecodeControllerTest, GetTaskForImageSameImageDifferentSize) {
570 TestSoftwareImageDecodeController controller; 593 TestSoftwareImageDecodeController controller;
571 sk_sp<SkImage> image = CreateImage(100, 100); 594 sk_sp<SkImage> image = CreateImage(100, 100);
572 bool is_decomposable = true; 595 bool is_decomposable = true;
573 SkFilterQuality quality = kHigh_SkFilterQuality; 596 SkFilterQuality quality = kHigh_SkFilterQuality;
574 597
575 DrawImage half_size_draw_image( 598 DrawImage half_size_draw_image(
(...skipping 850 matching lines...) Expand 10 before | Expand all | Expand 10 after
1426 EXPECT_EQ(decoded_draw_image_50.image(), decoded_draw_image_49.image()); 1449 EXPECT_EQ(decoded_draw_image_50.image(), decoded_draw_image_49.image());
1427 1450
1428 controller.DrawWithImageFinished(draw_image_50, decoded_draw_image_50); 1451 controller.DrawWithImageFinished(draw_image_50, decoded_draw_image_50);
1429 controller.UnrefImage(draw_image_50); 1452 controller.UnrefImage(draw_image_50);
1430 controller.DrawWithImageFinished(draw_image_49, decoded_draw_image_49); 1453 controller.DrawWithImageFinished(draw_image_49, decoded_draw_image_49);
1431 controller.UnrefImage(draw_image_49); 1454 controller.UnrefImage(draw_image_49);
1432 } 1455 }
1433 1456
1434 } // namespace 1457 } // namespace
1435 } // namespace cc 1458 } // namespace cc
OLDNEW
« no previous file with comments | « cc/tiles/software_image_decode_controller.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698