| Index: cc/playback/display_list_raster_source_unittest.cc
|
| diff --git a/cc/playback/display_list_raster_source_unittest.cc b/cc/playback/display_list_raster_source_unittest.cc
|
| index 2cf6f0694b43d3134840a732a96c9045e77572d8..c32e016afeda40034dced551933aaa7c919e2c8b 100644
|
| --- a/cc/playback/display_list_raster_source_unittest.cc
|
| +++ b/cc/playback/display_list_raster_source_unittest.cc
|
| @@ -8,6 +8,7 @@
|
| #include "cc/playback/display_list_raster_source.h"
|
| #include "cc/test/fake_display_list_recording_source.h"
|
| #include "cc/test/skia_common.h"
|
| +#include "skia/ext/platform_canvas.h"
|
| #include "skia/ext/refptr.h"
|
| #include "testing/gtest/include/gtest/gtest.h"
|
| #include "third_party/skia/include/core/SkPixelRef.h"
|
| @@ -544,5 +545,74 @@ TEST(DisplayListRasterSourceTest,
|
| EXPECT_LT(total_memory_usage, 2 * kReportedMemoryUsageInBytes);
|
| }
|
|
|
| +class BadPainter : public FakeOnPaintDelegate {
|
| + public:
|
| + BadPainter() {}
|
| + void OnPaint(SkCanvas* canvas,
|
| + const gfx::Rect& invalidation) override {
|
| + skia::RefPtr<SkCanvas> temp_canvas =
|
| + skia::AdoptRef(
|
| + skia::CreatePlatformCanvas(invalidation.width(),
|
| + invalidation.height(),
|
| + false));
|
| + SkPaint bkgnd_paint;
|
| + bkgnd_paint.setColor(SK_ColorBLACK);
|
| + SkRect rect = gfx::RectToSkRect(invalidation);
|
| + temp_canvas->drawRect(rect, bkgnd_paint);
|
| + SkPixmap pixmap;
|
| + skia::GetWritablePixels(temp_canvas.get(), &pixmap);
|
| +
|
| + bool is_odd = false;
|
| + for (int cur_y = 0; cur_y < pixmap.height(); cur_y++) {
|
| + uint32_t* text_row = pixmap.writable_addr32(0, cur_y);
|
| + for (int cur_x = 0; cur_x < pixmap.width(); cur_x++) {
|
| + if (is_odd)
|
| + text_row[cur_x] = SK_ColorRED;
|
| + is_odd = !is_odd;
|
| + }
|
| + }
|
| +
|
| + SkBitmap bitmap;
|
| + bitmap.installPixels(pixmap.info(),
|
| + pixmap.writable_addr(),
|
| + pixmap.rowBytes());
|
| + // HBitmap can't be immutable!
|
| + // bitmap.setImmutable();
|
| + canvas->drawBitmap(bitmap, 0, 0);
|
| + }
|
| +};
|
| +
|
| +TEST(DisplayListRasterSourceTest, TemporaryBitmapRaster) {
|
| + gfx::Size layer_bounds(10, 10);
|
| +
|
| + scoped_ptr<FakeDisplayListRecordingSource> recording_source =
|
| + FakeDisplayListRecordingSource::CreateFilledRecordingSource(layer_bounds);
|
| + recording_source->SetBackgroundColor(SK_ColorTRANSPARENT);
|
| + recording_source->SetRequiresClear(true);
|
| + recording_source->SetClearCanvasWithDebugColor(false);
|
| + recording_source->set_on_paint_delegate(make_scoped_ptr(new BadPainter));
|
| + recording_source->Rerecord();
|
| +
|
| + scoped_refptr<DisplayListRasterSource> raster =
|
| + DisplayListRasterSource::CreateFromDisplayListRecordingSource(
|
| + recording_source.get(), false);
|
| +
|
| + SkBitmap bitmap;
|
| + bitmap.allocN32Pixels(layer_bounds.width(), layer_bounds.height());
|
| + SkCanvas canvas(bitmap);
|
| +
|
| + gfx::Rect canvas_rect(layer_bounds);
|
| + raster->PlaybackToCanvas(&canvas, canvas_rect, canvas_rect, 1.0f);
|
| +
|
| + SkColor* pixels = reinterpret_cast<SkColor*>(bitmap.getPixels());
|
| + int num_pixels = bitmap.width() * bitmap.height();
|
| + for (int i = 0; i < num_pixels; ++i) {
|
| + if (i % 2 == 0)
|
| + EXPECT_EQ(SK_ColorBLACK, pixels[i]);
|
| + else
|
| + EXPECT_EQ(SK_ColorRED, pixels[i]);
|
| + }
|
| +}
|
| +
|
| } // namespace
|
| } // namespace cc
|
|
|