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

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

Issue 2752523006: cc: Use SkCreateColorSpaceXformCanvas for color transforms (Closed)
Patch Set: Rebase Created 3 years, 9 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/playback/raster_source.cc ('k') | cc/raster/bitmap_raster_buffer_provider.cc » ('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 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "cc/playback/raster_source.h" 5 #include "cc/playback/raster_source.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include <memory> 9 #include <memory>
10 10
11 #include "cc/test/fake_recording_source.h" 11 #include "cc/test/fake_recording_source.h"
12 #include "cc/test/skia_common.h" 12 #include "cc/test/skia_common.h"
13 #include "cc/tiles/software_image_decode_cache.h" 13 #include "cc/tiles/software_image_decode_cache.h"
14 #include "testing/gtest/include/gtest/gtest.h" 14 #include "testing/gtest/include/gtest/gtest.h"
15 #include "third_party/skia/include/core/SkPixelRef.h" 15 #include "third_party/skia/include/core/SkPixelRef.h"
16 #include "third_party/skia/include/core/SkRefCnt.h" 16 #include "third_party/skia/include/core/SkRefCnt.h"
17 #include "third_party/skia/include/core/SkShader.h" 17 #include "third_party/skia/include/core/SkShader.h"
18 #include "ui/gfx/geometry/rect.h" 18 #include "ui/gfx/geometry/rect.h"
19 #include "ui/gfx/geometry/size_conversions.h" 19 #include "ui/gfx/geometry/size_conversions.h"
20 20
21 namespace cc { 21 namespace cc {
22 namespace { 22 namespace {
23 23
24 gfx::ColorSpace ColorSpaceForTesting() {
25 return gfx::ColorSpace();
26 }
27
24 TEST(RasterSourceTest, AnalyzeIsSolidUnscaled) { 28 TEST(RasterSourceTest, AnalyzeIsSolidUnscaled) {
25 gfx::Size layer_bounds(400, 400); 29 gfx::Size layer_bounds(400, 400);
26 30
27 std::unique_ptr<FakeRecordingSource> recording_source = 31 std::unique_ptr<FakeRecordingSource> recording_source =
28 FakeRecordingSource::CreateFilledRecordingSource(layer_bounds); 32 FakeRecordingSource::CreateFilledRecordingSource(layer_bounds);
29 33
30 PaintFlags solid_flags; 34 PaintFlags solid_flags;
31 SkColor solid_color = SkColorSetARGB(255, 12, 23, 34); 35 SkColor solid_color = SkColorSetARGB(255, 12, 23, 34);
32 solid_flags.setColor(solid_color); 36 solid_flags.setColor(solid_color);
33 37
(...skipping 245 matching lines...) Expand 10 before | Expand all | Expand 10 after
279 // up to one pixel outside the content rect is guaranteed to be opaque. 283 // up to one pixel outside the content rect is guaranteed to be opaque.
280 // Outside of that is undefined. 284 // Outside of that is undefined.
281 gfx::Rect canvas_rect(content_rect); 285 gfx::Rect canvas_rect(content_rect);
282 canvas_rect.Inset(0, 0, -1, -1); 286 canvas_rect.Inset(0, 0, -1, -1);
283 287
284 SkBitmap bitmap; 288 SkBitmap bitmap;
285 bitmap.allocN32Pixels(canvas_rect.width(), canvas_rect.height()); 289 bitmap.allocN32Pixels(canvas_rect.width(), canvas_rect.height());
286 SkCanvas canvas(bitmap); 290 SkCanvas canvas(bitmap);
287 canvas.clear(SK_ColorTRANSPARENT); 291 canvas.clear(SK_ColorTRANSPARENT);
288 292
289 raster->PlaybackToCanvas(&canvas, canvas_rect, canvas_rect, 293 raster->PlaybackToCanvas(&canvas, ColorSpaceForTesting(), canvas_rect,
290 contents_scale, 294 canvas_rect, contents_scale,
291 RasterSource::PlaybackSettings()); 295 RasterSource::PlaybackSettings());
292 296
293 SkColor* pixels = reinterpret_cast<SkColor*>(bitmap.getPixels()); 297 SkColor* pixels = reinterpret_cast<SkColor*>(bitmap.getPixels());
294 int num_pixels = bitmap.width() * bitmap.height(); 298 int num_pixels = bitmap.width() * bitmap.height();
295 bool all_white = true; 299 bool all_white = true;
296 for (int i = 0; i < num_pixels; ++i) { 300 for (int i = 0; i < num_pixels; ++i) {
297 EXPECT_EQ(SkColorGetA(pixels[i]), 255u); 301 EXPECT_EQ(SkColorGetA(pixels[i]), 255u);
298 all_white &= (SkColorGetR(pixels[i]) == 255); 302 all_white &= (SkColorGetR(pixels[i]) == 255);
299 all_white &= (SkColorGetG(pixels[i]) == 255); 303 all_white &= (SkColorGetG(pixels[i]) == 255);
300 all_white &= (SkColorGetB(pixels[i]) == 255); 304 all_white &= (SkColorGetB(pixels[i]) == 255);
(...skipping 30 matching lines...) Expand all
331 gfx::ScaleToCeiledSize(layer_bounds, contents_scale)); 335 gfx::ScaleToCeiledSize(layer_bounds, contents_scale));
332 336
333 SkBitmap bitmap; 337 SkBitmap bitmap;
334 bitmap.allocN32Pixels(content_bounds.width(), content_bounds.height()); 338 bitmap.allocN32Pixels(content_bounds.width(), content_bounds.height());
335 SkCanvas canvas(bitmap); 339 SkCanvas canvas(bitmap);
336 canvas.clear(SK_ColorTRANSPARENT); 340 canvas.clear(SK_ColorTRANSPARENT);
337 341
338 // Playback the full rect which should make everything white. 342 // Playback the full rect which should make everything white.
339 gfx::Rect raster_full_rect(content_bounds); 343 gfx::Rect raster_full_rect(content_bounds);
340 gfx::Rect playback_rect(content_bounds); 344 gfx::Rect playback_rect(content_bounds);
341 raster->PlaybackToCanvas(&canvas, raster_full_rect, playback_rect, 345 raster->PlaybackToCanvas(&canvas, ColorSpaceForTesting(), raster_full_rect,
342 contents_scale, RasterSource::PlaybackSettings()); 346 playback_rect, contents_scale,
347 RasterSource::PlaybackSettings());
343 348
344 { 349 {
345 SkColor* pixels = reinterpret_cast<SkColor*>(bitmap.getPixels()); 350 SkColor* pixels = reinterpret_cast<SkColor*>(bitmap.getPixels());
346 for (int i = 0; i < bitmap.width(); ++i) { 351 for (int i = 0; i < bitmap.width(); ++i) {
347 for (int j = 0; j < bitmap.height(); ++j) { 352 for (int j = 0; j < bitmap.height(); ++j) {
348 SCOPED_TRACE(i); 353 SCOPED_TRACE(i);
349 SCOPED_TRACE(j); 354 SCOPED_TRACE(j);
350 EXPECT_EQ(255u, SkColorGetA(pixels[i + j * bitmap.width()])); 355 EXPECT_EQ(255u, SkColorGetA(pixels[i + j * bitmap.width()]));
351 EXPECT_EQ(255u, SkColorGetR(pixels[i + j * bitmap.width()])); 356 EXPECT_EQ(255u, SkColorGetR(pixels[i + j * bitmap.width()]));
352 EXPECT_EQ(255u, SkColorGetG(pixels[i + j * bitmap.width()])); 357 EXPECT_EQ(255u, SkColorGetG(pixels[i + j * bitmap.width()]));
353 EXPECT_EQ(255u, SkColorGetB(pixels[i + j * bitmap.width()])); 358 EXPECT_EQ(255u, SkColorGetB(pixels[i + j * bitmap.width()]));
354 } 359 }
355 } 360 }
356 } 361 }
357 362
358 // Re-record everything as black. 363 // Re-record everything as black.
359 PaintFlags black_flags; 364 PaintFlags black_flags;
360 black_flags.setColor(SK_ColorBLACK); 365 black_flags.setColor(SK_ColorBLACK);
361 recording_source->add_draw_rect_with_flags(gfx::Rect(layer_bounds), 366 recording_source->add_draw_rect_with_flags(gfx::Rect(layer_bounds),
362 black_flags); 367 black_flags);
363 recording_source->Rerecord(); 368 recording_source->Rerecord();
364 369
365 // Make a new RasterSource from the new recording. 370 // Make a new RasterSource from the new recording.
366 raster = 371 raster =
367 RasterSource::CreateFromRecordingSource(recording_source.get(), false); 372 RasterSource::CreateFromRecordingSource(recording_source.get(), false);
368 373
369 // We're going to playback from "everything is black" into a smaller area, 374 // We're going to playback from "everything is black" into a smaller area,
370 // that touches the edge pixels of the recording. 375 // that touches the edge pixels of the recording.
371 playback_rect.Inset(1, 2, 0, 1); 376 playback_rect.Inset(1, 2, 0, 1);
372 raster->PlaybackToCanvas(&canvas, raster_full_rect, playback_rect, 377 raster->PlaybackToCanvas(&canvas, ColorSpaceForTesting(), raster_full_rect,
373 contents_scale, RasterSource::PlaybackSettings()); 378 playback_rect, contents_scale,
379 RasterSource::PlaybackSettings());
374 380
375 SkColor* pixels = reinterpret_cast<SkColor*>(bitmap.getPixels()); 381 SkColor* pixels = reinterpret_cast<SkColor*>(bitmap.getPixels());
376 int num_black = 0; 382 int num_black = 0;
377 int num_white = 0; 383 int num_white = 0;
378 for (int i = 0; i < bitmap.width(); ++i) { 384 for (int i = 0; i < bitmap.width(); ++i) {
379 for (int j = 0; j < bitmap.height(); ++j) { 385 for (int j = 0; j < bitmap.height(); ++j) {
380 SCOPED_TRACE(j); 386 SCOPED_TRACE(j);
381 SCOPED_TRACE(i); 387 SCOPED_TRACE(i);
382 bool expect_black = playback_rect.Contains(i, j); 388 bool expect_black = playback_rect.Contains(i, j);
383 if (expect_black) { 389 if (expect_black) {
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
426 gfx::ScaleToCeiledSize(layer_bounds, contents_scale)); 432 gfx::ScaleToCeiledSize(layer_bounds, contents_scale));
427 433
428 SkBitmap bitmap; 434 SkBitmap bitmap;
429 bitmap.allocN32Pixels(content_bounds.width(), content_bounds.height()); 435 bitmap.allocN32Pixels(content_bounds.width(), content_bounds.height());
430 SkCanvas canvas(bitmap); 436 SkCanvas canvas(bitmap);
431 canvas.clear(SK_ColorTRANSPARENT); 437 canvas.clear(SK_ColorTRANSPARENT);
432 438
433 // Playback the full rect which should make everything light gray (alpha=10). 439 // Playback the full rect which should make everything light gray (alpha=10).
434 gfx::Rect raster_full_rect(content_bounds); 440 gfx::Rect raster_full_rect(content_bounds);
435 gfx::Rect playback_rect(content_bounds); 441 gfx::Rect playback_rect(content_bounds);
436 raster->PlaybackToCanvas(&canvas, raster_full_rect, playback_rect, 442 raster->PlaybackToCanvas(&canvas, ColorSpaceForTesting(), raster_full_rect,
437 contents_scale, RasterSource::PlaybackSettings()); 443 playback_rect, contents_scale,
444 RasterSource::PlaybackSettings());
438 445
439 { 446 {
440 SkColor* pixels = reinterpret_cast<SkColor*>(bitmap.getPixels()); 447 SkColor* pixels = reinterpret_cast<SkColor*>(bitmap.getPixels());
441 for (int i = 0; i < bitmap.width(); ++i) { 448 for (int i = 0; i < bitmap.width(); ++i) {
442 for (int j = 0; j < bitmap.height(); ++j) { 449 for (int j = 0; j < bitmap.height(); ++j) {
443 SCOPED_TRACE(i); 450 SCOPED_TRACE(i);
444 SCOPED_TRACE(j); 451 SCOPED_TRACE(j);
445 EXPECT_EQ(alpha_dark, SkColorGetA(pixels[i + j * bitmap.width()])); 452 EXPECT_EQ(alpha_dark, SkColorGetA(pixels[i + j * bitmap.width()]));
446 EXPECT_EQ(alpha_dark, SkColorGetR(pixels[i + j * bitmap.width()])); 453 EXPECT_EQ(alpha_dark, SkColorGetR(pixels[i + j * bitmap.width()]));
447 EXPECT_EQ(alpha_dark, SkColorGetG(pixels[i + j * bitmap.width()])); 454 EXPECT_EQ(alpha_dark, SkColorGetG(pixels[i + j * bitmap.width()]));
(...skipping 17 matching lines...) Expand all
465 472
466 // Make a new RasterSource from the new recording. 473 // Make a new RasterSource from the new recording.
467 raster = RasterSource::CreateFromRecordingSource(recording_source_light.get(), 474 raster = RasterSource::CreateFromRecordingSource(recording_source_light.get(),
468 false); 475 false);
469 476
470 // We're going to playback from alpha(18) white rectangle into a smaller area 477 // We're going to playback from alpha(18) white rectangle into a smaller area
471 // of the recording resulting in a smaller lighter white rectangle over a 478 // of the recording resulting in a smaller lighter white rectangle over a
472 // darker white background rectangle. 479 // darker white background rectangle.
473 playback_rect = 480 playback_rect =
474 gfx::Rect(gfx::ScaleToCeiledSize(partial_bounds, contents_scale)); 481 gfx::Rect(gfx::ScaleToCeiledSize(partial_bounds, contents_scale));
475 raster->PlaybackToCanvas(&canvas, raster_full_rect, playback_rect, 482 raster->PlaybackToCanvas(&canvas, ColorSpaceForTesting(), raster_full_rect,
476 contents_scale, RasterSource::PlaybackSettings()); 483 playback_rect, contents_scale,
484 RasterSource::PlaybackSettings());
477 485
478 // Test that the whole playback_rect was cleared and repainted with new alpha. 486 // Test that the whole playback_rect was cleared and repainted with new alpha.
479 SkColor* pixels = reinterpret_cast<SkColor*>(bitmap.getPixels()); 487 SkColor* pixels = reinterpret_cast<SkColor*>(bitmap.getPixels());
480 for (int i = 0; i < playback_rect.width(); ++i) { 488 for (int i = 0; i < playback_rect.width(); ++i) {
481 for (int j = 0; j < playback_rect.height(); ++j) { 489 for (int j = 0; j < playback_rect.height(); ++j) {
482 SCOPED_TRACE(j); 490 SCOPED_TRACE(j);
483 SCOPED_TRACE(i); 491 SCOPED_TRACE(i);
484 EXPECT_EQ(alpha_light, SkColorGetA(pixels[i + j * bitmap.width()])); 492 EXPECT_EQ(alpha_light, SkColorGetA(pixels[i + j * bitmap.width()]));
485 EXPECT_EQ(alpha_light, SkColorGetR(pixels[i + j * bitmap.width()])); 493 EXPECT_EQ(alpha_light, SkColorGetR(pixels[i + j * bitmap.width()]));
486 EXPECT_EQ(alpha_light, SkColorGetG(pixels[i + j * bitmap.width()])); 494 EXPECT_EQ(alpha_light, SkColorGetG(pixels[i + j * bitmap.width()]));
(...skipping 18 matching lines...) Expand all
505 gfx::Size content_bounds( 513 gfx::Size content_bounds(
506 gfx::ScaleToCeiledSize(layer_bounds, contents_scale)); 514 gfx::ScaleToCeiledSize(layer_bounds, contents_scale));
507 515
508 gfx::Rect canvas_rect(content_bounds); 516 gfx::Rect canvas_rect(content_bounds);
509 canvas_rect.Inset(0, 0, -1, -1); 517 canvas_rect.Inset(0, 0, -1, -1);
510 518
511 SkBitmap bitmap; 519 SkBitmap bitmap;
512 bitmap.allocN32Pixels(canvas_rect.width(), canvas_rect.height()); 520 bitmap.allocN32Pixels(canvas_rect.width(), canvas_rect.height());
513 SkCanvas canvas(bitmap); 521 SkCanvas canvas(bitmap);
514 522
515 raster->PlaybackToCanvas(&canvas, canvas_rect, canvas_rect, contents_scale, 523 raster->PlaybackToCanvas(&canvas, ColorSpaceForTesting(), canvas_rect,
524 canvas_rect, contents_scale,
516 RasterSource::PlaybackSettings()); 525 RasterSource::PlaybackSettings());
517 526
518 SkColor* pixels = reinterpret_cast<SkColor*>(bitmap.getPixels()); 527 SkColor* pixels = reinterpret_cast<SkColor*>(bitmap.getPixels());
519 int num_pixels = bitmap.width() * bitmap.height(); 528 int num_pixels = bitmap.width() * bitmap.height();
520 for (int i = 0; i < num_pixels; ++i) { 529 for (int i = 0; i < num_pixels; ++i) {
521 EXPECT_EQ(SkColorGetA(pixels[i]), 0u); 530 EXPECT_EQ(SkColorGetA(pixels[i]), 0u);
522 } 531 }
523 } 532 }
524 533
525 TEST(RasterSourceTest, GetPictureMemoryUsageIncludesClientReportedMemory) { 534 TEST(RasterSourceTest, GetPictureMemoryUsageIncludesClientReportedMemory) {
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
578 raster_source->set_image_decode_cache(&controller); 587 raster_source->set_image_decode_cache(&controller);
579 588
580 SkBitmap bitmap; 589 SkBitmap bitmap;
581 bitmap.allocN32Pixels(size.width() * 0.5f, size.height() * 0.25f); 590 bitmap.allocN32Pixels(size.width() * 0.5f, size.height() * 0.25f);
582 SkCanvas canvas(bitmap); 591 SkCanvas canvas(bitmap);
583 canvas.scale(0.5f, 0.25f); 592 canvas.scale(0.5f, 0.25f);
584 593
585 RasterSource::PlaybackSettings settings; 594 RasterSource::PlaybackSettings settings;
586 settings.playback_to_shared_canvas = true; 595 settings.playback_to_shared_canvas = true;
587 settings.use_image_hijack_canvas = true; 596 settings.use_image_hijack_canvas = true;
588 raster_source->PlaybackToCanvas(&canvas, gfx::Rect(size), gfx::Rect(size), 597 raster_source->PlaybackToCanvas(&canvas, ColorSpaceForTesting(),
589 1.f, settings); 598 gfx::Rect(size), gfx::Rect(size), 1.f,
599 settings);
590 600
591 EXPECT_EQ(SK_ColorGREEN, bitmap.getColor(0, 0)); 601 EXPECT_EQ(SK_ColorGREEN, bitmap.getColor(0, 0));
592 EXPECT_EQ(SK_ColorGREEN, bitmap.getColor(49, 0)); 602 EXPECT_EQ(SK_ColorGREEN, bitmap.getColor(49, 0));
593 EXPECT_EQ(SK_ColorGREEN, bitmap.getColor(0, 24)); 603 EXPECT_EQ(SK_ColorGREEN, bitmap.getColor(0, 24));
594 EXPECT_EQ(SK_ColorGREEN, bitmap.getColor(49, 24)); 604 EXPECT_EQ(SK_ColorGREEN, bitmap.getColor(49, 24));
595 for (int x = 0; x < 49; ++x) 605 for (int x = 0; x < 49; ++x)
596 EXPECT_EQ(SK_ColorRED, bitmap.getColor(x, 12)); 606 EXPECT_EQ(SK_ColorRED, bitmap.getColor(x, 12));
597 for (int y = 0; y < 24; ++y) 607 for (int y = 0; y < 24; ++y)
598 EXPECT_EQ(SK_ColorRED, bitmap.getColor(24, y)); 608 EXPECT_EQ(SK_ColorRED, bitmap.getColor(24, y));
599 } 609 }
600 610
601 } // namespace 611 } // namespace
602 } // namespace cc 612 } // namespace cc
OLDNEW
« no previous file with comments | « cc/playback/raster_source.cc ('k') | cc/raster/bitmap_raster_buffer_provider.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698