// Copyright 2015 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "sky/compositor/rasterizer_bitmap.h" #include "sky/compositor/layer_client.h" #include "sky/compositor/layer_host.h" #include "third_party/skia/include/core/SkBitmapDevice.h" #include "third_party/skia/include/core/SkCanvas.h" #include "third_party/skia/include/core/SkPicture.h" #include "ui/gfx/codec/png_codec.h" #include "ui/gfx/geometry/rect.h" namespace sky { RasterizerBitmap::RasterizerBitmap(LayerHost* host) : host_(host) { DCHECK(host_); } RasterizerBitmap::~RasterizerBitmap() { } void RasterizerBitmap::GetPixelsForTesting(std::vector* pixels) { gfx::PNGCodec::EncodeBGRASkBitmap(bitmap_, true, pixels); } scoped_ptr RasterizerBitmap::Rasterize(SkPicture* picture) { auto size = picture->cullRect(); bitmap_.allocN32Pixels(size.width(), size.height()); SkBitmapDevice device(bitmap_); SkCanvas canvas(&device); // Draw red so we can see when we fail to paint. canvas.drawColor(SK_ColorRED); canvas.drawPicture(picture); canvas.flush(); return host_->resource_manager()->CreateTexture( gfx::Size(size.width(), size.height())); } } // namespace sky