| OLD | NEW |
| 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/raster/raster_source.h" | 5 #include "cc/raster/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/base/scale_translate2d.h" |
| 11 #include "cc/test/fake_recording_source.h" | 12 #include "cc/test/fake_recording_source.h" |
| 12 #include "cc/test/skia_common.h" | 13 #include "cc/test/skia_common.h" |
| 13 #include "cc/tiles/software_image_decode_cache.h" | 14 #include "cc/tiles/software_image_decode_cache.h" |
| 14 #include "testing/gtest/include/gtest/gtest.h" | 15 #include "testing/gtest/include/gtest/gtest.h" |
| 15 #include "third_party/skia/include/core/SkPixelRef.h" | 16 #include "third_party/skia/include/core/SkPixelRef.h" |
| 16 #include "third_party/skia/include/core/SkRefCnt.h" | 17 #include "third_party/skia/include/core/SkRefCnt.h" |
| 17 #include "third_party/skia/include/core/SkShader.h" | 18 #include "third_party/skia/include/core/SkShader.h" |
| 18 #include "ui/gfx/geometry/rect.h" | 19 #include "ui/gfx/geometry/rect.h" |
| 19 #include "ui/gfx/geometry/size_conversions.h" | 20 #include "ui/gfx/geometry/size_conversions.h" |
| 20 | 21 |
| (...skipping 262 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 283 // up to one pixel outside the content rect is guaranteed to be opaque. | 284 // up to one pixel outside the content rect is guaranteed to be opaque. |
| 284 // Outside of that is undefined. | 285 // Outside of that is undefined. |
| 285 gfx::Rect canvas_rect(content_rect); | 286 gfx::Rect canvas_rect(content_rect); |
| 286 canvas_rect.Inset(0, 0, -1, -1); | 287 canvas_rect.Inset(0, 0, -1, -1); |
| 287 | 288 |
| 288 SkBitmap bitmap; | 289 SkBitmap bitmap; |
| 289 bitmap.allocN32Pixels(canvas_rect.width(), canvas_rect.height()); | 290 bitmap.allocN32Pixels(canvas_rect.width(), canvas_rect.height()); |
| 290 SkCanvas canvas(bitmap); | 291 SkCanvas canvas(bitmap); |
| 291 canvas.clear(SK_ColorTRANSPARENT); | 292 canvas.clear(SK_ColorTRANSPARENT); |
| 292 | 293 |
| 293 raster->PlaybackToCanvas(&canvas, ColorSpaceForTesting(), canvas_rect, | 294 raster->PlaybackToCanvas( |
| 294 canvas_rect, contents_scale, | 295 &canvas, ColorSpaceForTesting(), canvas_rect, canvas_rect, |
| 295 RasterSource::PlaybackSettings()); | 296 ScaleTranslate2d(contents_scale, gfx::Vector2dF()), |
| 297 RasterSource::PlaybackSettings()); |
| 296 | 298 |
| 297 SkColor* pixels = reinterpret_cast<SkColor*>(bitmap.getPixels()); | 299 SkColor* pixels = reinterpret_cast<SkColor*>(bitmap.getPixels()); |
| 298 int num_pixels = bitmap.width() * bitmap.height(); | 300 int num_pixels = bitmap.width() * bitmap.height(); |
| 299 bool all_white = true; | 301 bool all_white = true; |
| 300 for (int i = 0; i < num_pixels; ++i) { | 302 for (int i = 0; i < num_pixels; ++i) { |
| 301 EXPECT_EQ(SkColorGetA(pixels[i]), 255u); | 303 EXPECT_EQ(SkColorGetA(pixels[i]), 255u); |
| 302 all_white &= (SkColorGetR(pixels[i]) == 255); | 304 all_white &= (SkColorGetR(pixels[i]) == 255); |
| 303 all_white &= (SkColorGetG(pixels[i]) == 255); | 305 all_white &= (SkColorGetG(pixels[i]) == 255); |
| 304 all_white &= (SkColorGetB(pixels[i]) == 255); | 306 all_white &= (SkColorGetB(pixels[i]) == 255); |
| 305 } | 307 } |
| (...skipping 30 matching lines...) Expand all Loading... |
| 336 | 338 |
| 337 SkBitmap bitmap; | 339 SkBitmap bitmap; |
| 338 bitmap.allocN32Pixels(content_bounds.width(), content_bounds.height()); | 340 bitmap.allocN32Pixels(content_bounds.width(), content_bounds.height()); |
| 339 SkCanvas canvas(bitmap); | 341 SkCanvas canvas(bitmap); |
| 340 canvas.clear(SK_ColorTRANSPARENT); | 342 canvas.clear(SK_ColorTRANSPARENT); |
| 341 | 343 |
| 342 // Playback the full rect which should make everything white. | 344 // Playback the full rect which should make everything white. |
| 343 gfx::Rect raster_full_rect(content_bounds); | 345 gfx::Rect raster_full_rect(content_bounds); |
| 344 gfx::Rect playback_rect(content_bounds); | 346 gfx::Rect playback_rect(content_bounds); |
| 345 raster->PlaybackToCanvas(&canvas, ColorSpaceForTesting(), raster_full_rect, | 347 raster->PlaybackToCanvas(&canvas, ColorSpaceForTesting(), raster_full_rect, |
| 346 playback_rect, contents_scale, | 348 playback_rect, |
| 349 ScaleTranslate2d(contents_scale, gfx::Vector2dF()), |
| 347 RasterSource::PlaybackSettings()); | 350 RasterSource::PlaybackSettings()); |
| 348 | 351 |
| 349 { | 352 { |
| 350 SkColor* pixels = reinterpret_cast<SkColor*>(bitmap.getPixels()); | 353 SkColor* pixels = reinterpret_cast<SkColor*>(bitmap.getPixels()); |
| 351 for (int i = 0; i < bitmap.width(); ++i) { | 354 for (int i = 0; i < bitmap.width(); ++i) { |
| 352 for (int j = 0; j < bitmap.height(); ++j) { | 355 for (int j = 0; j < bitmap.height(); ++j) { |
| 353 SCOPED_TRACE(i); | 356 SCOPED_TRACE(i); |
| 354 SCOPED_TRACE(j); | 357 SCOPED_TRACE(j); |
| 355 EXPECT_EQ(255u, SkColorGetA(pixels[i + j * bitmap.width()])); | 358 EXPECT_EQ(255u, SkColorGetA(pixels[i + j * bitmap.width()])); |
| 356 EXPECT_EQ(255u, SkColorGetR(pixels[i + j * bitmap.width()])); | 359 EXPECT_EQ(255u, SkColorGetR(pixels[i + j * bitmap.width()])); |
| (...skipping 11 matching lines...) Expand all Loading... |
| 368 recording_source->Rerecord(); | 371 recording_source->Rerecord(); |
| 369 | 372 |
| 370 // Make a new RasterSource from the new recording. | 373 // Make a new RasterSource from the new recording. |
| 371 raster = | 374 raster = |
| 372 RasterSource::CreateFromRecordingSource(recording_source.get(), false); | 375 RasterSource::CreateFromRecordingSource(recording_source.get(), false); |
| 373 | 376 |
| 374 // We're going to playback from "everything is black" into a smaller area, | 377 // We're going to playback from "everything is black" into a smaller area, |
| 375 // that touches the edge pixels of the recording. | 378 // that touches the edge pixels of the recording. |
| 376 playback_rect.Inset(1, 2, 0, 1); | 379 playback_rect.Inset(1, 2, 0, 1); |
| 377 raster->PlaybackToCanvas(&canvas, ColorSpaceForTesting(), raster_full_rect, | 380 raster->PlaybackToCanvas(&canvas, ColorSpaceForTesting(), raster_full_rect, |
| 378 playback_rect, contents_scale, | 381 playback_rect, |
| 382 ScaleTranslate2d(contents_scale, gfx::Vector2dF()), |
| 379 RasterSource::PlaybackSettings()); | 383 RasterSource::PlaybackSettings()); |
| 380 | 384 |
| 381 SkColor* pixels = reinterpret_cast<SkColor*>(bitmap.getPixels()); | 385 SkColor* pixels = reinterpret_cast<SkColor*>(bitmap.getPixels()); |
| 382 int num_black = 0; | 386 int num_black = 0; |
| 383 int num_white = 0; | 387 int num_white = 0; |
| 384 for (int i = 0; i < bitmap.width(); ++i) { | 388 for (int i = 0; i < bitmap.width(); ++i) { |
| 385 for (int j = 0; j < bitmap.height(); ++j) { | 389 for (int j = 0; j < bitmap.height(); ++j) { |
| 386 SCOPED_TRACE(j); | 390 SCOPED_TRACE(j); |
| 387 SCOPED_TRACE(i); | 391 SCOPED_TRACE(i); |
| 388 bool expect_black = playback_rect.Contains(i, j); | 392 bool expect_black = playback_rect.Contains(i, j); |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 433 | 437 |
| 434 SkBitmap bitmap; | 438 SkBitmap bitmap; |
| 435 bitmap.allocN32Pixels(content_bounds.width(), content_bounds.height()); | 439 bitmap.allocN32Pixels(content_bounds.width(), content_bounds.height()); |
| 436 SkCanvas canvas(bitmap); | 440 SkCanvas canvas(bitmap); |
| 437 canvas.clear(SK_ColorTRANSPARENT); | 441 canvas.clear(SK_ColorTRANSPARENT); |
| 438 | 442 |
| 439 // Playback the full rect which should make everything light gray (alpha=10). | 443 // Playback the full rect which should make everything light gray (alpha=10). |
| 440 gfx::Rect raster_full_rect(content_bounds); | 444 gfx::Rect raster_full_rect(content_bounds); |
| 441 gfx::Rect playback_rect(content_bounds); | 445 gfx::Rect playback_rect(content_bounds); |
| 442 raster->PlaybackToCanvas(&canvas, ColorSpaceForTesting(), raster_full_rect, | 446 raster->PlaybackToCanvas(&canvas, ColorSpaceForTesting(), raster_full_rect, |
| 443 playback_rect, contents_scale, | 447 playback_rect, |
| 448 ScaleTranslate2d(contents_scale, gfx::Vector2dF()), |
| 444 RasterSource::PlaybackSettings()); | 449 RasterSource::PlaybackSettings()); |
| 445 | 450 |
| 446 { | 451 { |
| 447 SkColor* pixels = reinterpret_cast<SkColor*>(bitmap.getPixels()); | 452 SkColor* pixels = reinterpret_cast<SkColor*>(bitmap.getPixels()); |
| 448 for (int i = 0; i < bitmap.width(); ++i) { | 453 for (int i = 0; i < bitmap.width(); ++i) { |
| 449 for (int j = 0; j < bitmap.height(); ++j) { | 454 for (int j = 0; j < bitmap.height(); ++j) { |
| 450 SCOPED_TRACE(i); | 455 SCOPED_TRACE(i); |
| 451 SCOPED_TRACE(j); | 456 SCOPED_TRACE(j); |
| 452 EXPECT_EQ(alpha_dark, SkColorGetA(pixels[i + j * bitmap.width()])); | 457 EXPECT_EQ(alpha_dark, SkColorGetA(pixels[i + j * bitmap.width()])); |
| 453 EXPECT_EQ(alpha_dark, SkColorGetR(pixels[i + j * bitmap.width()])); | 458 EXPECT_EQ(alpha_dark, SkColorGetR(pixels[i + j * bitmap.width()])); |
| (...skipping 19 matching lines...) Expand all Loading... |
| 473 // Make a new RasterSource from the new recording. | 478 // Make a new RasterSource from the new recording. |
| 474 raster = RasterSource::CreateFromRecordingSource(recording_source_light.get(), | 479 raster = RasterSource::CreateFromRecordingSource(recording_source_light.get(), |
| 475 false); | 480 false); |
| 476 | 481 |
| 477 // We're going to playback from alpha(18) white rectangle into a smaller area | 482 // We're going to playback from alpha(18) white rectangle into a smaller area |
| 478 // of the recording resulting in a smaller lighter white rectangle over a | 483 // of the recording resulting in a smaller lighter white rectangle over a |
| 479 // darker white background rectangle. | 484 // darker white background rectangle. |
| 480 playback_rect = | 485 playback_rect = |
| 481 gfx::Rect(gfx::ScaleToCeiledSize(partial_bounds, contents_scale)); | 486 gfx::Rect(gfx::ScaleToCeiledSize(partial_bounds, contents_scale)); |
| 482 raster->PlaybackToCanvas(&canvas, ColorSpaceForTesting(), raster_full_rect, | 487 raster->PlaybackToCanvas(&canvas, ColorSpaceForTesting(), raster_full_rect, |
| 483 playback_rect, contents_scale, | 488 playback_rect, |
| 489 ScaleTranslate2d(contents_scale, gfx::Vector2dF()), |
| 484 RasterSource::PlaybackSettings()); | 490 RasterSource::PlaybackSettings()); |
| 485 | 491 |
| 486 // Test that the whole playback_rect was cleared and repainted with new alpha. | 492 // Test that the whole playback_rect was cleared and repainted with new alpha. |
| 487 SkColor* pixels = reinterpret_cast<SkColor*>(bitmap.getPixels()); | 493 SkColor* pixels = reinterpret_cast<SkColor*>(bitmap.getPixels()); |
| 488 for (int i = 0; i < playback_rect.width(); ++i) { | 494 for (int i = 0; i < playback_rect.width(); ++i) { |
| 489 for (int j = 0; j < playback_rect.height(); ++j) { | 495 for (int j = 0; j < playback_rect.height(); ++j) { |
| 490 SCOPED_TRACE(j); | 496 SCOPED_TRACE(j); |
| 491 SCOPED_TRACE(i); | 497 SCOPED_TRACE(i); |
| 492 EXPECT_EQ(alpha_light, SkColorGetA(pixels[i + j * bitmap.width()])); | 498 EXPECT_EQ(alpha_light, SkColorGetA(pixels[i + j * bitmap.width()])); |
| 493 EXPECT_EQ(alpha_light, SkColorGetR(pixels[i + j * bitmap.width()])); | 499 EXPECT_EQ(alpha_light, SkColorGetR(pixels[i + j * bitmap.width()])); |
| (...skipping 20 matching lines...) Expand all Loading... |
| 514 gfx::ScaleToCeiledSize(layer_bounds, contents_scale)); | 520 gfx::ScaleToCeiledSize(layer_bounds, contents_scale)); |
| 515 | 521 |
| 516 gfx::Rect canvas_rect(content_bounds); | 522 gfx::Rect canvas_rect(content_bounds); |
| 517 canvas_rect.Inset(0, 0, -1, -1); | 523 canvas_rect.Inset(0, 0, -1, -1); |
| 518 | 524 |
| 519 SkBitmap bitmap; | 525 SkBitmap bitmap; |
| 520 bitmap.allocN32Pixels(canvas_rect.width(), canvas_rect.height()); | 526 bitmap.allocN32Pixels(canvas_rect.width(), canvas_rect.height()); |
| 521 SkCanvas canvas(bitmap); | 527 SkCanvas canvas(bitmap); |
| 522 | 528 |
| 523 raster->PlaybackToCanvas(&canvas, ColorSpaceForTesting(), canvas_rect, | 529 raster->PlaybackToCanvas(&canvas, ColorSpaceForTesting(), canvas_rect, |
| 524 canvas_rect, contents_scale, | 530 canvas_rect, |
| 531 ScaleTranslate2d(contents_scale, gfx::Vector2dF()), |
| 525 RasterSource::PlaybackSettings()); | 532 RasterSource::PlaybackSettings()); |
| 526 | 533 |
| 527 SkColor* pixels = reinterpret_cast<SkColor*>(bitmap.getPixels()); | 534 SkColor* pixels = reinterpret_cast<SkColor*>(bitmap.getPixels()); |
| 528 int num_pixels = bitmap.width() * bitmap.height(); | 535 int num_pixels = bitmap.width() * bitmap.height(); |
| 529 for (int i = 0; i < num_pixels; ++i) { | 536 for (int i = 0; i < num_pixels; ++i) { |
| 530 EXPECT_EQ(SkColorGetA(pixels[i]), 0u); | 537 EXPECT_EQ(SkColorGetA(pixels[i]), 0u); |
| 531 } | 538 } |
| 532 } | 539 } |
| 533 | 540 |
| 534 TEST(RasterSourceTest, GetPictureMemoryUsageIncludesClientReportedMemory) { | 541 TEST(RasterSourceTest, GetPictureMemoryUsageIncludesClientReportedMemory) { |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 588 | 595 |
| 589 SkBitmap bitmap; | 596 SkBitmap bitmap; |
| 590 bitmap.allocN32Pixels(size.width() * 0.5f, size.height() * 0.25f); | 597 bitmap.allocN32Pixels(size.width() * 0.5f, size.height() * 0.25f); |
| 591 SkCanvas canvas(bitmap); | 598 SkCanvas canvas(bitmap); |
| 592 canvas.scale(0.5f, 0.25f); | 599 canvas.scale(0.5f, 0.25f); |
| 593 | 600 |
| 594 RasterSource::PlaybackSettings settings; | 601 RasterSource::PlaybackSettings settings; |
| 595 settings.playback_to_shared_canvas = true; | 602 settings.playback_to_shared_canvas = true; |
| 596 settings.use_image_hijack_canvas = true; | 603 settings.use_image_hijack_canvas = true; |
| 597 raster_source->PlaybackToCanvas(&canvas, ColorSpaceForTesting(), | 604 raster_source->PlaybackToCanvas(&canvas, ColorSpaceForTesting(), |
| 598 gfx::Rect(size), gfx::Rect(size), 1.f, | 605 gfx::Rect(size), gfx::Rect(size), |
| 599 settings); | 606 ScaleTranslate2d(), settings); |
| 600 | 607 |
| 601 EXPECT_EQ(SK_ColorGREEN, bitmap.getColor(0, 0)); | 608 EXPECT_EQ(SK_ColorGREEN, bitmap.getColor(0, 0)); |
| 602 EXPECT_EQ(SK_ColorGREEN, bitmap.getColor(49, 0)); | 609 EXPECT_EQ(SK_ColorGREEN, bitmap.getColor(49, 0)); |
| 603 EXPECT_EQ(SK_ColorGREEN, bitmap.getColor(0, 24)); | 610 EXPECT_EQ(SK_ColorGREEN, bitmap.getColor(0, 24)); |
| 604 EXPECT_EQ(SK_ColorGREEN, bitmap.getColor(49, 24)); | 611 EXPECT_EQ(SK_ColorGREEN, bitmap.getColor(49, 24)); |
| 605 for (int x = 0; x < 49; ++x) | 612 for (int x = 0; x < 49; ++x) |
| 606 EXPECT_EQ(SK_ColorRED, bitmap.getColor(x, 12)); | 613 EXPECT_EQ(SK_ColorRED, bitmap.getColor(x, 12)); |
| 607 for (int y = 0; y < 24; ++y) | 614 for (int y = 0; y < 24; ++y) |
| 608 EXPECT_EQ(SK_ColorRED, bitmap.getColor(24, y)); | 615 EXPECT_EQ(SK_ColorRED, bitmap.getColor(24, y)); |
| 609 } | 616 } |
| 610 | 617 |
| 611 } // namespace | 618 } // namespace |
| 612 } // namespace cc | 619 } // namespace cc |
| OLD | NEW |