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// creates a ResourceUpdate with this bitmap canvas and inserts the 22// ResourceBundle to the provided ResourceUpdateQueue. Actual texture uploading 23// is done by ResourceUpdateController. 24class CC_EXPORT BitmapContentLayerUpdater : public ContentLayerUpdater { 25 public: 26 class Resource : public LayerUpdater::Resource { 27 public: 28 Resource(BitmapContentLayerUpdater* updater, 29 scoped_ptr<PrioritizedResource> resource); 30 virtual ~Resource(); 31 32 virtual void Update(ResourceUpdateQueue* queue, 33 const gfx::Rect& source_rect, 34 const gfx::Vector2d& dest_offset, 35 bool partial_update) OVERRIDE; 36 37 private: 38 BitmapContentLayerUpdater* updater_; 39 40 DISALLOW_COPY_AND_ASSIGN(Resource); 41 }; 42 43 static scoped_refptr<BitmapContentLayerUpdater> Create( 44 scoped_ptr<LayerPainter> painter, 45 RenderingStatsInstrumentation* stats_instrumenation, 46 int layer_id); 47 48 virtual scoped_ptr<LayerUpdater::Resource> CreateResource( 49 PrioritizedResourceManager* manager) OVERRIDE; 50 virtual void PrepareToUpdate(const gfx::Size& content_size, 51 const gfx::Rect& paint_rect, 52 const gfx::Size& tile_size, 53 float contents_width_scale, 54 float contents_height_scale) OVERRIDE; 55 void UpdateTexture(ResourceUpdateQueue* queue, 56 PrioritizedResource* resource, 57 const gfx::Rect& source_rect, 58 const gfx::Vector2d& dest_offset, 59 bool partial_update); 60 virtual void SetOpaque(bool opaque) OVERRIDE; 61 virtual void ReduceMemoryUsage() OVERRIDE; 62 63 protected: 64 BitmapContentLayerUpdater( 65 scoped_ptr<LayerPainter> painter, 66 RenderingStatsInstrumentation* stats_instrumenation, 67 int layer_id); 68 virtual ~BitmapContentLayerUpdater(); 69 70 SkBitmap bitmap_backing_; 71 skia::RefPtr<SkCanvas> canvas_; 72 gfx::Size canvas_size_; 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