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

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

Issue 1799883002: cc: Refactor SkipImageCanvas and create it during playback. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 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
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 <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
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
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
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698