| 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 <stddef.h> | 5 #include <stddef.h> |
| 6 | 6 |
| 7 #include "base/memory/scoped_ptr.h" | 7 #include "base/memory/scoped_ptr.h" |
| 8 #include "cc/playback/display_list_raster_source.h" | 8 #include "cc/playback/display_list_raster_source.h" |
| 9 #include "cc/test/fake_display_list_recording_source.h" | 9 #include "cc/test/fake_display_list_recording_source.h" |
| 10 #include "cc/test/skia_common.h" | 10 #include "cc/test/skia_common.h" |
| (...skipping 272 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. | 283 // up to one pixel outside the content rect is guaranteed to be opaque. |
| 284 // Outside of that is undefined. | 284 // Outside of that is undefined. |
| 285 gfx::Rect canvas_rect(content_rect); | 285 gfx::Rect canvas_rect(content_rect); |
| 286 canvas_rect.Inset(0, 0, -1, -1); | 286 canvas_rect.Inset(0, 0, -1, -1); |
| 287 | 287 |
| 288 SkBitmap bitmap; | 288 SkBitmap bitmap; |
| 289 bitmap.allocN32Pixels(canvas_rect.width(), canvas_rect.height()); | 289 bitmap.allocN32Pixels(canvas_rect.width(), canvas_rect.height()); |
| 290 SkCanvas canvas(bitmap); | 290 SkCanvas canvas(bitmap); |
| 291 canvas.clear(SK_ColorTRANSPARENT); | 291 canvas.clear(SK_ColorTRANSPARENT); |
| 292 | 292 |
| 293 const bool include_images = true; |
| 293 raster->PlaybackToCanvas(&canvas, canvas_rect, canvas_rect, | 294 raster->PlaybackToCanvas(&canvas, canvas_rect, canvas_rect, |
| 294 contents_scale); | 295 contents_scale, include_images); |
| 295 | 296 |
| 296 SkColor* pixels = reinterpret_cast<SkColor*>(bitmap.getPixels()); | 297 SkColor* pixels = reinterpret_cast<SkColor*>(bitmap.getPixels()); |
| 297 int num_pixels = bitmap.width() * bitmap.height(); | 298 int num_pixels = bitmap.width() * bitmap.height(); |
| 298 bool all_white = true; | 299 bool all_white = true; |
| 299 for (int i = 0; i < num_pixels; ++i) { | 300 for (int i = 0; i < num_pixels; ++i) { |
| 300 EXPECT_EQ(SkColorGetA(pixels[i]), 255u); | 301 EXPECT_EQ(SkColorGetA(pixels[i]), 255u); |
| 301 all_white &= (SkColorGetR(pixels[i]) == 255); | 302 all_white &= (SkColorGetR(pixels[i]) == 255); |
| 302 all_white &= (SkColorGetG(pixels[i]) == 255); | 303 all_white &= (SkColorGetG(pixels[i]) == 255); |
| 303 all_white &= (SkColorGetB(pixels[i]) == 255); | 304 all_white &= (SkColorGetB(pixels[i]) == 255); |
| 304 } | 305 } |
| (...skipping 30 matching lines...) Expand all Loading... |
| 335 gfx::ScaleToCeiledSize(layer_bounds, contents_scale)); | 336 gfx::ScaleToCeiledSize(layer_bounds, contents_scale)); |
| 336 | 337 |
| 337 SkBitmap bitmap; | 338 SkBitmap bitmap; |
| 338 bitmap.allocN32Pixels(content_bounds.width(), content_bounds.height()); | 339 bitmap.allocN32Pixels(content_bounds.width(), content_bounds.height()); |
| 339 SkCanvas canvas(bitmap); | 340 SkCanvas canvas(bitmap); |
| 340 canvas.clear(SK_ColorTRANSPARENT); | 341 canvas.clear(SK_ColorTRANSPARENT); |
| 341 | 342 |
| 342 // Playback the full rect which should make everything white. | 343 // Playback the full rect which should make everything white. |
| 343 gfx::Rect raster_full_rect(content_bounds); | 344 gfx::Rect raster_full_rect(content_bounds); |
| 344 gfx::Rect playback_rect(content_bounds); | 345 gfx::Rect playback_rect(content_bounds); |
| 346 const bool include_images = true; |
| 345 raster->PlaybackToCanvas(&canvas, raster_full_rect, playback_rect, | 347 raster->PlaybackToCanvas(&canvas, raster_full_rect, playback_rect, |
| 346 contents_scale); | 348 contents_scale, include_images); |
| 347 | 349 |
| 348 { | 350 { |
| 349 SkColor* pixels = reinterpret_cast<SkColor*>(bitmap.getPixels()); | 351 SkColor* pixels = reinterpret_cast<SkColor*>(bitmap.getPixels()); |
| 350 for (int i = 0; i < bitmap.width(); ++i) { | 352 for (int i = 0; i < bitmap.width(); ++i) { |
| 351 for (int j = 0; j < bitmap.height(); ++j) { | 353 for (int j = 0; j < bitmap.height(); ++j) { |
| 352 SCOPED_TRACE(i); | 354 SCOPED_TRACE(i); |
| 353 SCOPED_TRACE(j); | 355 SCOPED_TRACE(j); |
| 354 EXPECT_EQ(255u, SkColorGetA(pixels[i + j * bitmap.width()])); | 356 EXPECT_EQ(255u, SkColorGetA(pixels[i + j * bitmap.width()])); |
| 355 EXPECT_EQ(255u, SkColorGetR(pixels[i + j * bitmap.width()])); | 357 EXPECT_EQ(255u, SkColorGetR(pixels[i + j * bitmap.width()])); |
| 356 EXPECT_EQ(255u, SkColorGetG(pixels[i + j * bitmap.width()])); | 358 EXPECT_EQ(255u, SkColorGetG(pixels[i + j * bitmap.width()])); |
| (...skipping 10 matching lines...) Expand all Loading... |
| 367 recording_source->Rerecord(); | 369 recording_source->Rerecord(); |
| 368 | 370 |
| 369 // Make a new DisplayListRasterSource from the new recording. | 371 // Make a new DisplayListRasterSource from the new recording. |
| 370 raster = DisplayListRasterSource::CreateFromDisplayListRecordingSource( | 372 raster = DisplayListRasterSource::CreateFromDisplayListRecordingSource( |
| 371 recording_source.get(), false); | 373 recording_source.get(), false); |
| 372 | 374 |
| 373 // We're going to playback from "everything is black" into a smaller area, | 375 // We're going to playback from "everything is black" into a smaller area, |
| 374 // that touches the edge pixels of the recording. | 376 // that touches the edge pixels of the recording. |
| 375 playback_rect.Inset(1, 2, 0, 1); | 377 playback_rect.Inset(1, 2, 0, 1); |
| 376 raster->PlaybackToCanvas(&canvas, raster_full_rect, playback_rect, | 378 raster->PlaybackToCanvas(&canvas, raster_full_rect, playback_rect, |
| 377 contents_scale); | 379 contents_scale, include_images); |
| 378 | 380 |
| 379 SkColor* pixels = reinterpret_cast<SkColor*>(bitmap.getPixels()); | 381 SkColor* pixels = reinterpret_cast<SkColor*>(bitmap.getPixels()); |
| 380 int num_black = 0; | 382 int num_black = 0; |
| 381 int num_white = 0; | 383 int num_white = 0; |
| 382 for (int i = 0; i < bitmap.width(); ++i) { | 384 for (int i = 0; i < bitmap.width(); ++i) { |
| 383 for (int j = 0; j < bitmap.height(); ++j) { | 385 for (int j = 0; j < bitmap.height(); ++j) { |
| 384 SCOPED_TRACE(j); | 386 SCOPED_TRACE(j); |
| 385 SCOPED_TRACE(i); | 387 SCOPED_TRACE(i); |
| 386 bool expect_black = playback_rect.Contains(i, j); | 388 bool expect_black = playback_rect.Contains(i, j); |
| 387 if (expect_black) { | 389 if (expect_black) { |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 431 gfx::ScaleToCeiledSize(layer_bounds, contents_scale)); | 433 gfx::ScaleToCeiledSize(layer_bounds, contents_scale)); |
| 432 | 434 |
| 433 SkBitmap bitmap; | 435 SkBitmap bitmap; |
| 434 bitmap.allocN32Pixels(content_bounds.width(), content_bounds.height()); | 436 bitmap.allocN32Pixels(content_bounds.width(), content_bounds.height()); |
| 435 SkCanvas canvas(bitmap); | 437 SkCanvas canvas(bitmap); |
| 436 canvas.clear(SK_ColorTRANSPARENT); | 438 canvas.clear(SK_ColorTRANSPARENT); |
| 437 | 439 |
| 438 // Playback the full rect which should make everything light gray (alpha=10). | 440 // Playback the full rect which should make everything light gray (alpha=10). |
| 439 gfx::Rect raster_full_rect(content_bounds); | 441 gfx::Rect raster_full_rect(content_bounds); |
| 440 gfx::Rect playback_rect(content_bounds); | 442 gfx::Rect playback_rect(content_bounds); |
| 443 const bool include_images = true; |
| 441 raster->PlaybackToCanvas(&canvas, raster_full_rect, playback_rect, | 444 raster->PlaybackToCanvas(&canvas, raster_full_rect, playback_rect, |
| 442 contents_scale); | 445 contents_scale, include_images); |
| 443 | 446 |
| 444 { | 447 { |
| 445 SkColor* pixels = reinterpret_cast<SkColor*>(bitmap.getPixels()); | 448 SkColor* pixels = reinterpret_cast<SkColor*>(bitmap.getPixels()); |
| 446 for (int i = 0; i < bitmap.width(); ++i) { | 449 for (int i = 0; i < bitmap.width(); ++i) { |
| 447 for (int j = 0; j < bitmap.height(); ++j) { | 450 for (int j = 0; j < bitmap.height(); ++j) { |
| 448 SCOPED_TRACE(i); | 451 SCOPED_TRACE(i); |
| 449 SCOPED_TRACE(j); | 452 SCOPED_TRACE(j); |
| 450 EXPECT_EQ(alpha_dark, SkColorGetA(pixels[i + j * bitmap.width()])); | 453 EXPECT_EQ(alpha_dark, SkColorGetA(pixels[i + j * bitmap.width()])); |
| 451 EXPECT_EQ(alpha_dark, SkColorGetR(pixels[i + j * bitmap.width()])); | 454 EXPECT_EQ(alpha_dark, SkColorGetR(pixels[i + j * bitmap.width()])); |
| 452 EXPECT_EQ(alpha_dark, SkColorGetG(pixels[i + j * bitmap.width()])); | 455 EXPECT_EQ(alpha_dark, SkColorGetG(pixels[i + j * bitmap.width()])); |
| (...skipping 18 matching lines...) Expand all Loading... |
| 471 // Make a new DisplayListRasterSource from the new recording. | 474 // Make a new DisplayListRasterSource from the new recording. |
| 472 raster = DisplayListRasterSource::CreateFromDisplayListRecordingSource( | 475 raster = DisplayListRasterSource::CreateFromDisplayListRecordingSource( |
| 473 recording_source_light.get(), false); | 476 recording_source_light.get(), false); |
| 474 | 477 |
| 475 // We're going to playback from alpha(18) white rectangle into a smaller area | 478 // We're going to playback from alpha(18) white rectangle into a smaller area |
| 476 // of the recording resulting in a smaller lighter white rectangle over a | 479 // of the recording resulting in a smaller lighter white rectangle over a |
| 477 // darker white background rectangle. | 480 // darker white background rectangle. |
| 478 playback_rect = | 481 playback_rect = |
| 479 gfx::Rect(gfx::ScaleToCeiledSize(partial_bounds, contents_scale)); | 482 gfx::Rect(gfx::ScaleToCeiledSize(partial_bounds, contents_scale)); |
| 480 raster->PlaybackToCanvas(&canvas, raster_full_rect, playback_rect, | 483 raster->PlaybackToCanvas(&canvas, raster_full_rect, playback_rect, |
| 481 contents_scale); | 484 contents_scale, include_images); |
| 482 | 485 |
| 483 // 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. |
| 484 SkColor* pixels = reinterpret_cast<SkColor*>(bitmap.getPixels()); | 487 SkColor* pixels = reinterpret_cast<SkColor*>(bitmap.getPixels()); |
| 485 for (int i = 0; i < playback_rect.width(); ++i) { | 488 for (int i = 0; i < playback_rect.width(); ++i) { |
| 486 for (int j = 0; j < playback_rect.height(); ++j) { | 489 for (int j = 0; j < playback_rect.height(); ++j) { |
| 487 SCOPED_TRACE(j); | 490 SCOPED_TRACE(j); |
| 488 SCOPED_TRACE(i); | 491 SCOPED_TRACE(i); |
| 489 EXPECT_EQ(alpha_light, SkColorGetA(pixels[i + j * bitmap.width()])); | 492 EXPECT_EQ(alpha_light, SkColorGetA(pixels[i + j * bitmap.width()])); |
| 490 EXPECT_EQ(alpha_light, SkColorGetR(pixels[i + j * bitmap.width()])); | 493 EXPECT_EQ(alpha_light, SkColorGetR(pixels[i + j * bitmap.width()])); |
| 491 EXPECT_EQ(alpha_light, SkColorGetG(pixels[i + j * bitmap.width()])); | 494 EXPECT_EQ(alpha_light, SkColorGetG(pixels[i + j * bitmap.width()])); |
| (...skipping 19 matching lines...) Expand all Loading... |
| 511 gfx::Size content_bounds( | 514 gfx::Size content_bounds( |
| 512 gfx::ScaleToCeiledSize(layer_bounds, contents_scale)); | 515 gfx::ScaleToCeiledSize(layer_bounds, contents_scale)); |
| 513 | 516 |
| 514 gfx::Rect canvas_rect(content_bounds); | 517 gfx::Rect canvas_rect(content_bounds); |
| 515 canvas_rect.Inset(0, 0, -1, -1); | 518 canvas_rect.Inset(0, 0, -1, -1); |
| 516 | 519 |
| 517 SkBitmap bitmap; | 520 SkBitmap bitmap; |
| 518 bitmap.allocN32Pixels(canvas_rect.width(), canvas_rect.height()); | 521 bitmap.allocN32Pixels(canvas_rect.width(), canvas_rect.height()); |
| 519 SkCanvas canvas(bitmap); | 522 SkCanvas canvas(bitmap); |
| 520 | 523 |
| 521 raster->PlaybackToCanvas(&canvas, canvas_rect, canvas_rect, contents_scale); | 524 const bool include_images = true; |
| 525 raster->PlaybackToCanvas(&canvas, canvas_rect, canvas_rect, contents_scale, |
| 526 include_images); |
| 522 | 527 |
| 523 SkColor* pixels = reinterpret_cast<SkColor*>(bitmap.getPixels()); | 528 SkColor* pixels = reinterpret_cast<SkColor*>(bitmap.getPixels()); |
| 524 int num_pixels = bitmap.width() * bitmap.height(); | 529 int num_pixels = bitmap.width() * bitmap.height(); |
| 525 for (int i = 0; i < num_pixels; ++i) { | 530 for (int i = 0; i < num_pixels; ++i) { |
| 526 EXPECT_EQ(SkColorGetA(pixels[i]), 0u); | 531 EXPECT_EQ(SkColorGetA(pixels[i]), 0u); |
| 527 } | 532 } |
| 528 } | 533 } |
| 529 | 534 |
| 530 TEST(DisplayListRasterSourceTest, | 535 TEST(DisplayListRasterSourceTest, |
| 531 GetPictureMemoryUsageIncludesClientReportedMemory) { | 536 GetPictureMemoryUsageIncludesClientReportedMemory) { |
| 532 const size_t kReportedMemoryUsageInBytes = 100 * 1024 * 1024; | 537 const size_t kReportedMemoryUsageInBytes = 100 * 1024 * 1024; |
| 533 gfx::Size layer_bounds(5, 3); | 538 gfx::Size layer_bounds(5, 3); |
| 534 scoped_ptr<FakeDisplayListRecordingSource> recording_source = | 539 scoped_ptr<FakeDisplayListRecordingSource> recording_source = |
| 535 FakeDisplayListRecordingSource::CreateFilledRecordingSource(layer_bounds); | 540 FakeDisplayListRecordingSource::CreateFilledRecordingSource(layer_bounds); |
| 536 recording_source->set_reported_memory_usage(kReportedMemoryUsageInBytes); | 541 recording_source->set_reported_memory_usage(kReportedMemoryUsageInBytes); |
| 537 recording_source->Rerecord(); | 542 recording_source->Rerecord(); |
| 538 | 543 |
| 539 scoped_refptr<DisplayListRasterSource> raster = | 544 scoped_refptr<DisplayListRasterSource> raster = |
| 540 DisplayListRasterSource::CreateFromDisplayListRecordingSource( | 545 DisplayListRasterSource::CreateFromDisplayListRecordingSource( |
| 541 recording_source.get(), false); | 546 recording_source.get(), false); |
| 542 size_t total_memory_usage = raster->GetPictureMemoryUsage(); | 547 size_t total_memory_usage = raster->GetPictureMemoryUsage(); |
| 543 EXPECT_GE(total_memory_usage, kReportedMemoryUsageInBytes); | 548 EXPECT_GE(total_memory_usage, kReportedMemoryUsageInBytes); |
| 544 EXPECT_LT(total_memory_usage, 2 * kReportedMemoryUsageInBytes); | 549 EXPECT_LT(total_memory_usage, 2 * kReportedMemoryUsageInBytes); |
| 545 } | 550 } |
| 546 | 551 |
| 547 } // namespace | 552 } // namespace |
| 548 } // namespace cc | 553 } // namespace cc |
| OLD | NEW |