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

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

Issue 1854513002: cc: Add RasterSource::PlaybackSettings for finer control of raster. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 8 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_tile_task_worker_pool.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 <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/raster_source.h" 8 #include "cc/playback/raster_source.h"
9 #include "cc/test/fake_recording_source.h" 9 #include "cc/test/fake_recording_source.h"
10 #include "cc/test/skia_common.h" 10 #include "cc/test/skia_common.h"
(...skipping 267 matching lines...) Expand 10 before | Expand all | Expand 10 after
278 // up to one pixel outside the content rect is guaranteed to be opaque. 278 // up to one pixel outside the content rect is guaranteed to be opaque.
279 // Outside of that is undefined. 279 // Outside of that is undefined.
280 gfx::Rect canvas_rect(content_rect); 280 gfx::Rect canvas_rect(content_rect);
281 canvas_rect.Inset(0, 0, -1, -1); 281 canvas_rect.Inset(0, 0, -1, -1);
282 282
283 SkBitmap bitmap; 283 SkBitmap bitmap;
284 bitmap.allocN32Pixels(canvas_rect.width(), canvas_rect.height()); 284 bitmap.allocN32Pixels(canvas_rect.width(), canvas_rect.height());
285 SkCanvas canvas(bitmap); 285 SkCanvas canvas(bitmap);
286 canvas.clear(SK_ColorTRANSPARENT); 286 canvas.clear(SK_ColorTRANSPARENT);
287 287
288 const bool include_images = true;
289 raster->PlaybackToCanvas(&canvas, canvas_rect, canvas_rect, 288 raster->PlaybackToCanvas(&canvas, canvas_rect, canvas_rect,
290 contents_scale, include_images); 289 contents_scale,
290 RasterSource::PlaybackSettings());
291 291
292 SkColor* pixels = reinterpret_cast<SkColor*>(bitmap.getPixels()); 292 SkColor* pixels = reinterpret_cast<SkColor*>(bitmap.getPixels());
293 int num_pixels = bitmap.width() * bitmap.height(); 293 int num_pixels = bitmap.width() * bitmap.height();
294 bool all_white = true; 294 bool all_white = true;
295 for (int i = 0; i < num_pixels; ++i) { 295 for (int i = 0; i < num_pixels; ++i) {
296 EXPECT_EQ(SkColorGetA(pixels[i]), 255u); 296 EXPECT_EQ(SkColorGetA(pixels[i]), 255u);
297 all_white &= (SkColorGetR(pixels[i]) == 255); 297 all_white &= (SkColorGetR(pixels[i]) == 255);
298 all_white &= (SkColorGetG(pixels[i]) == 255); 298 all_white &= (SkColorGetG(pixels[i]) == 255);
299 all_white &= (SkColorGetB(pixels[i]) == 255); 299 all_white &= (SkColorGetB(pixels[i]) == 255);
300 } 300 }
(...skipping 29 matching lines...) Expand all
330 gfx::ScaleToCeiledSize(layer_bounds, contents_scale)); 330 gfx::ScaleToCeiledSize(layer_bounds, contents_scale));
331 331
332 SkBitmap bitmap; 332 SkBitmap bitmap;
333 bitmap.allocN32Pixels(content_bounds.width(), content_bounds.height()); 333 bitmap.allocN32Pixels(content_bounds.width(), content_bounds.height());
334 SkCanvas canvas(bitmap); 334 SkCanvas canvas(bitmap);
335 canvas.clear(SK_ColorTRANSPARENT); 335 canvas.clear(SK_ColorTRANSPARENT);
336 336
337 // Playback the full rect which should make everything white. 337 // Playback the full rect which should make everything white.
338 gfx::Rect raster_full_rect(content_bounds); 338 gfx::Rect raster_full_rect(content_bounds);
339 gfx::Rect playback_rect(content_bounds); 339 gfx::Rect playback_rect(content_bounds);
340 const bool include_images = true;
341 raster->PlaybackToCanvas(&canvas, raster_full_rect, playback_rect, 340 raster->PlaybackToCanvas(&canvas, raster_full_rect, playback_rect,
342 contents_scale, include_images); 341 contents_scale, RasterSource::PlaybackSettings());
343 342
344 { 343 {
345 SkColor* pixels = reinterpret_cast<SkColor*>(bitmap.getPixels()); 344 SkColor* pixels = reinterpret_cast<SkColor*>(bitmap.getPixels());
346 for (int i = 0; i < bitmap.width(); ++i) { 345 for (int i = 0; i < bitmap.width(); ++i) {
347 for (int j = 0; j < bitmap.height(); ++j) { 346 for (int j = 0; j < bitmap.height(); ++j) {
348 SCOPED_TRACE(i); 347 SCOPED_TRACE(i);
349 SCOPED_TRACE(j); 348 SCOPED_TRACE(j);
350 EXPECT_EQ(255u, SkColorGetA(pixels[i + j * bitmap.width()])); 349 EXPECT_EQ(255u, SkColorGetA(pixels[i + j * bitmap.width()]));
351 EXPECT_EQ(255u, SkColorGetR(pixels[i + j * bitmap.width()])); 350 EXPECT_EQ(255u, SkColorGetR(pixels[i + j * bitmap.width()]));
352 EXPECT_EQ(255u, SkColorGetG(pixels[i + j * bitmap.width()])); 351 EXPECT_EQ(255u, SkColorGetG(pixels[i + j * bitmap.width()]));
(...skipping 10 matching lines...) Expand all
363 recording_source->Rerecord(); 362 recording_source->Rerecord();
364 363
365 // Make a new RasterSource from the new recording. 364 // Make a new RasterSource from the new recording.
366 raster = 365 raster =
367 RasterSource::CreateFromRecordingSource(recording_source.get(), false); 366 RasterSource::CreateFromRecordingSource(recording_source.get(), false);
368 367
369 // We're going to playback from "everything is black" into a smaller area, 368 // We're going to playback from "everything is black" into a smaller area,
370 // that touches the edge pixels of the recording. 369 // that touches the edge pixels of the recording.
371 playback_rect.Inset(1, 2, 0, 1); 370 playback_rect.Inset(1, 2, 0, 1);
372 raster->PlaybackToCanvas(&canvas, raster_full_rect, playback_rect, 371 raster->PlaybackToCanvas(&canvas, raster_full_rect, playback_rect,
373 contents_scale, include_images); 372 contents_scale, RasterSource::PlaybackSettings());
374 373
375 SkColor* pixels = reinterpret_cast<SkColor*>(bitmap.getPixels()); 374 SkColor* pixels = reinterpret_cast<SkColor*>(bitmap.getPixels());
376 int num_black = 0; 375 int num_black = 0;
377 int num_white = 0; 376 int num_white = 0;
378 for (int i = 0; i < bitmap.width(); ++i) { 377 for (int i = 0; i < bitmap.width(); ++i) {
379 for (int j = 0; j < bitmap.height(); ++j) { 378 for (int j = 0; j < bitmap.height(); ++j) {
380 SCOPED_TRACE(j); 379 SCOPED_TRACE(j);
381 SCOPED_TRACE(i); 380 SCOPED_TRACE(i);
382 bool expect_black = playback_rect.Contains(i, j); 381 bool expect_black = playback_rect.Contains(i, j);
383 if (expect_black) { 382 if (expect_black) {
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
426 gfx::ScaleToCeiledSize(layer_bounds, contents_scale)); 425 gfx::ScaleToCeiledSize(layer_bounds, contents_scale));
427 426
428 SkBitmap bitmap; 427 SkBitmap bitmap;
429 bitmap.allocN32Pixels(content_bounds.width(), content_bounds.height()); 428 bitmap.allocN32Pixels(content_bounds.width(), content_bounds.height());
430 SkCanvas canvas(bitmap); 429 SkCanvas canvas(bitmap);
431 canvas.clear(SK_ColorTRANSPARENT); 430 canvas.clear(SK_ColorTRANSPARENT);
432 431
433 // Playback the full rect which should make everything light gray (alpha=10). 432 // Playback the full rect which should make everything light gray (alpha=10).
434 gfx::Rect raster_full_rect(content_bounds); 433 gfx::Rect raster_full_rect(content_bounds);
435 gfx::Rect playback_rect(content_bounds); 434 gfx::Rect playback_rect(content_bounds);
436 const bool include_images = true;
437 raster->PlaybackToCanvas(&canvas, raster_full_rect, playback_rect, 435 raster->PlaybackToCanvas(&canvas, raster_full_rect, playback_rect,
438 contents_scale, include_images); 436 contents_scale, RasterSource::PlaybackSettings());
439 437
440 { 438 {
441 SkColor* pixels = reinterpret_cast<SkColor*>(bitmap.getPixels()); 439 SkColor* pixels = reinterpret_cast<SkColor*>(bitmap.getPixels());
442 for (int i = 0; i < bitmap.width(); ++i) { 440 for (int i = 0; i < bitmap.width(); ++i) {
443 for (int j = 0; j < bitmap.height(); ++j) { 441 for (int j = 0; j < bitmap.height(); ++j) {
444 SCOPED_TRACE(i); 442 SCOPED_TRACE(i);
445 SCOPED_TRACE(j); 443 SCOPED_TRACE(j);
446 EXPECT_EQ(alpha_dark, SkColorGetA(pixels[i + j * bitmap.width()])); 444 EXPECT_EQ(alpha_dark, SkColorGetA(pixels[i + j * bitmap.width()]));
447 EXPECT_EQ(alpha_dark, SkColorGetR(pixels[i + j * bitmap.width()])); 445 EXPECT_EQ(alpha_dark, SkColorGetR(pixels[i + j * bitmap.width()]));
448 EXPECT_EQ(alpha_dark, SkColorGetG(pixels[i + j * bitmap.width()])); 446 EXPECT_EQ(alpha_dark, SkColorGetG(pixels[i + j * bitmap.width()]));
(...skipping 18 matching lines...) Expand all
467 // Make a new RasterSource from the new recording. 465 // Make a new RasterSource from the new recording.
468 raster = RasterSource::CreateFromRecordingSource(recording_source_light.get(), 466 raster = RasterSource::CreateFromRecordingSource(recording_source_light.get(),
469 false); 467 false);
470 468
471 // We're going to playback from alpha(18) white rectangle into a smaller area 469 // We're going to playback from alpha(18) white rectangle into a smaller area
472 // of the recording resulting in a smaller lighter white rectangle over a 470 // of the recording resulting in a smaller lighter white rectangle over a
473 // darker white background rectangle. 471 // darker white background rectangle.
474 playback_rect = 472 playback_rect =
475 gfx::Rect(gfx::ScaleToCeiledSize(partial_bounds, contents_scale)); 473 gfx::Rect(gfx::ScaleToCeiledSize(partial_bounds, contents_scale));
476 raster->PlaybackToCanvas(&canvas, raster_full_rect, playback_rect, 474 raster->PlaybackToCanvas(&canvas, raster_full_rect, playback_rect,
477 contents_scale, include_images); 475 contents_scale, RasterSource::PlaybackSettings());
478 476
479 // Test that the whole playback_rect was cleared and repainted with new alpha. 477 // Test that the whole playback_rect was cleared and repainted with new alpha.
480 SkColor* pixels = reinterpret_cast<SkColor*>(bitmap.getPixels()); 478 SkColor* pixels = reinterpret_cast<SkColor*>(bitmap.getPixels());
481 for (int i = 0; i < playback_rect.width(); ++i) { 479 for (int i = 0; i < playback_rect.width(); ++i) {
482 for (int j = 0; j < playback_rect.height(); ++j) { 480 for (int j = 0; j < playback_rect.height(); ++j) {
483 SCOPED_TRACE(j); 481 SCOPED_TRACE(j);
484 SCOPED_TRACE(i); 482 SCOPED_TRACE(i);
485 EXPECT_EQ(alpha_light, SkColorGetA(pixels[i + j * bitmap.width()])); 483 EXPECT_EQ(alpha_light, SkColorGetA(pixels[i + j * bitmap.width()]));
486 EXPECT_EQ(alpha_light, SkColorGetR(pixels[i + j * bitmap.width()])); 484 EXPECT_EQ(alpha_light, SkColorGetR(pixels[i + j * bitmap.width()]));
487 EXPECT_EQ(alpha_light, SkColorGetG(pixels[i + j * bitmap.width()])); 485 EXPECT_EQ(alpha_light, SkColorGetG(pixels[i + j * bitmap.width()]));
(...skipping 18 matching lines...) Expand all
506 gfx::Size content_bounds( 504 gfx::Size content_bounds(
507 gfx::ScaleToCeiledSize(layer_bounds, contents_scale)); 505 gfx::ScaleToCeiledSize(layer_bounds, contents_scale));
508 506
509 gfx::Rect canvas_rect(content_bounds); 507 gfx::Rect canvas_rect(content_bounds);
510 canvas_rect.Inset(0, 0, -1, -1); 508 canvas_rect.Inset(0, 0, -1, -1);
511 509
512 SkBitmap bitmap; 510 SkBitmap bitmap;
513 bitmap.allocN32Pixels(canvas_rect.width(), canvas_rect.height()); 511 bitmap.allocN32Pixels(canvas_rect.width(), canvas_rect.height());
514 SkCanvas canvas(bitmap); 512 SkCanvas canvas(bitmap);
515 513
516 const bool include_images = true;
517 raster->PlaybackToCanvas(&canvas, canvas_rect, canvas_rect, contents_scale, 514 raster->PlaybackToCanvas(&canvas, canvas_rect, canvas_rect, contents_scale,
518 include_images); 515 RasterSource::PlaybackSettings());
519 516
520 SkColor* pixels = reinterpret_cast<SkColor*>(bitmap.getPixels()); 517 SkColor* pixels = reinterpret_cast<SkColor*>(bitmap.getPixels());
521 int num_pixels = bitmap.width() * bitmap.height(); 518 int num_pixels = bitmap.width() * bitmap.height();
522 for (int i = 0; i < num_pixels; ++i) { 519 for (int i = 0; i < num_pixels; ++i) {
523 EXPECT_EQ(SkColorGetA(pixels[i]), 0u); 520 EXPECT_EQ(SkColorGetA(pixels[i]), 0u);
524 } 521 }
525 } 522 }
526 523
527 TEST(RasterSourceTest, GetPictureMemoryUsageIncludesClientReportedMemory) { 524 TEST(RasterSourceTest, GetPictureMemoryUsageIncludesClientReportedMemory) {
528 const size_t kReportedMemoryUsageInBytes = 100 * 1024 * 1024; 525 const size_t kReportedMemoryUsageInBytes = 100 * 1024 * 1024;
529 gfx::Size layer_bounds(5, 3); 526 gfx::Size layer_bounds(5, 3);
530 scoped_ptr<FakeRecordingSource> recording_source = 527 scoped_ptr<FakeRecordingSource> recording_source =
531 FakeRecordingSource::CreateFilledRecordingSource(layer_bounds); 528 FakeRecordingSource::CreateFilledRecordingSource(layer_bounds);
532 recording_source->set_reported_memory_usage(kReportedMemoryUsageInBytes); 529 recording_source->set_reported_memory_usage(kReportedMemoryUsageInBytes);
533 recording_source->Rerecord(); 530 recording_source->Rerecord();
534 531
535 scoped_refptr<RasterSource> raster = 532 scoped_refptr<RasterSource> raster =
536 RasterSource::CreateFromRecordingSource(recording_source.get(), false); 533 RasterSource::CreateFromRecordingSource(recording_source.get(), false);
537 size_t total_memory_usage = raster->GetPictureMemoryUsage(); 534 size_t total_memory_usage = raster->GetPictureMemoryUsage();
538 EXPECT_GE(total_memory_usage, kReportedMemoryUsageInBytes); 535 EXPECT_GE(total_memory_usage, kReportedMemoryUsageInBytes);
539 EXPECT_LT(total_memory_usage, 2 * kReportedMemoryUsageInBytes); 536 EXPECT_LT(total_memory_usage, 2 * kReportedMemoryUsageInBytes);
540 } 537 }
541 538
542 } // namespace 539 } // namespace
543 } // namespace cc 540 } // namespace cc
OLDNEW
« no previous file with comments | « cc/playback/raster_source.cc ('k') | cc/raster/bitmap_tile_task_worker_pool.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698