1// Copyright 2011 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#ifndef CC_RESOURCES_BITMAP_CONTENT_LAYER_UPDATER_H_ 6#define CC_RESOURCES_BITMAP_CONTENT_LAYER_UPDATER_H_ 7 8#include "cc/base/cc_export.h" 9#include "cc/resources/content_layer_updater.h" 10#include "skia/ext/refptr.h" 11#include "third_party/skia/include/core/SkBitmap.h" 12 13class SkCanvas; 14 15namespace cc { 16 17class LayerPainter; 18class RenderingStatsInstrumenation; 19 20// This class rasterizes the content_rect into a skia bitmap canvas. It then 21// updates textures by copying from the canvas into the texture, using 22// MapSubImage if possible. 23class CC_EXPORT BitmapContentLayerUpdater : public ContentLayerUpdater { 24 public: 25 class Resource : public LayerUpdater::Resource { 26 public: 27 Resource(BitmapContentLayerUpdater* updater, 28 scoped_ptr<PrioritizedResource> resource); 29 virtual ~Resource(); 30 31 virtual void Update(ResourceUpdateQueue* queue, 32 gfx::Rect source_rect, 33 gfx::Vector2d dest_offset, 34 bool partial_update) OVERRIDE; 35 36 private: 37 BitmapContentLayerUpdater* updater_; 38 39 DISALLOW_COPY_AND_ASSIGN(Resource); 40 }; 41 42 static scoped_refptr<BitmapContentLayerUpdater> Create( 43 scoped_ptr<LayerPainter> painter, 44 RenderingStatsInstrumentation* stats_instrumenation, 45 int layer_id); 46 47 virtual scoped_ptr<LayerUpdater::Resource> CreateResource( 48 PrioritizedResourceManager* manager) OVERRIDE; 49 virtual void PrepareToUpdate(gfx::Rect content_rect, 50 gfx::Size tile_size, 51 float contents_width_scale, 52 float contents_height_scale, 53 gfx::Rect* resulting_opaque_rect) OVERRIDE; 54 void UpdateTexture(ResourceUpdateQueue* queue, 55 PrioritizedResource* resource, 56 gfx::Rect source_rect, 57 gfx::Vector2d dest_offset, 58 bool partial_update); 59 virtual void SetOpaque(bool opaque) OVERRIDE; 60 virtual void ReduceMemoryUsage() OVERRIDE; 61 62 protected: 63 BitmapContentLayerUpdater( 64 scoped_ptr<LayerPainter> painter, 65 RenderingStatsInstrumentation* stats_instrumenation, 66 int layer_id); 67 virtual ~BitmapContentLayerUpdater(); 68 69 SkBitmap bitmap_backing_; 70 skia::RefPtr<SkCanvas> canvas_; 71 gfx::Size canvas_size_; 72 bool opaque_; 73 74 private: 75 DISALLOW_COPY_AND_ASSIGN(BitmapContentLayerUpdater); 76}; 77 78} // namespace cc 79 80#endif // CC_RESOURCES_BITMAP_CONTENT_LAYER_UPDATER_H_ 81