| Index: cc/caching_bitmap_canvas_layer_texture_updater.cc
|
| diff --git a/cc/caching_bitmap_canvas_layer_texture_updater.cc b/cc/caching_bitmap_canvas_layer_texture_updater.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..7d2c85f1e6c3b04008f5df6f920edff04893c614
|
| --- /dev/null
|
| +++ b/cc/caching_bitmap_canvas_layer_texture_updater.cc
|
| @@ -0,0 +1,59 @@
|
| +// Copyright 2012 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 "config.h"
|
| +
|
| +#include "caching_bitmap_canvas_layer_texture_updater.h"
|
| +
|
| +#include "LayerPainterChromium.h"
|
| +#include "skia/ext/platform_canvas.h"
|
| +
|
| +namespace cc {
|
| +
|
| +PassRefPtr<CachingBitmapCanvasLayerTextureUpdater>
|
| +CachingBitmapCanvasLayerTextureUpdater::Create(
|
| + PassOwnPtr<LayerPainterChromium> painter) {
|
| + return adoptRef(new CachingBitmapCanvasLayerTextureUpdater(painter));
|
| +}
|
| +
|
| +CachingBitmapCanvasLayerTextureUpdater::CachingBitmapCanvasLayerTextureUpdater(
|
| + PassOwnPtr<LayerPainterChromium> painter)
|
| + : BitmapCanvasLayerTextureUpdater(painter),
|
| + pixels_did_change_(false) {
|
| +}
|
| +
|
| +void CachingBitmapCanvasLayerTextureUpdater::prepareToUpdate(
|
| + const IntRect& content_rect,
|
| + const IntSize& tile_size,
|
| + float contents_width_scale,
|
| + float contents_height_scale,
|
| + IntRect& resulting_opaque_rect,
|
| + CCRenderingStats& stats) {
|
| + BitmapCanvasLayerTextureUpdater::prepareToUpdate(content_rect,
|
| + tile_size,
|
| + contents_width_scale,
|
| + contents_height_scale,
|
| + resulting_opaque_rect,
|
| + stats);
|
| +
|
| + const SkBitmap& new_bitmap = m_canvas->getDevice()->accessBitmap(false);
|
| + SkAutoLockPixels lock(new_bitmap);
|
| + ASSERT(new_bitmap.bytesPerPixel() > 0);
|
| + pixels_did_change_ = new_bitmap.config() != cached_bitmap_.config() ||
|
| + new_bitmap.height() != cached_bitmap_.height() ||
|
| + new_bitmap.width() != cached_bitmap_.width() ||
|
| + memcmp(new_bitmap.getPixels(),
|
| + cached_bitmap_.getPixels(),
|
| + new_bitmap.getSafeSize());
|
| +
|
| + if (pixels_did_change_)
|
| + new_bitmap.deepCopyTo(&cached_bitmap_, new_bitmap.config());
|
| +}
|
| +
|
| +bool CachingBitmapCanvasLayerTextureUpdater::pixelsDidChange() const
|
| +{
|
| + return pixels_did_change_;
|
| +}
|
| +
|
| +} // namespace cc
|
|
|