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