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_CONTENT_LAYER_UPDATER_H_
6#define CC_RESOURCES_CONTENT_LAYER_UPDATER_H_
7
8#include "cc/base/cc_export.h"
9#include "cc/resources/layer_updater.h"
10#include "ui/gfx/rect.h"
11
12class SkCanvas;
13
14namespace cc {
15
16class LayerPainter;
17class RenderingStatsInstrumentation;
18
19// Base class for BitmapContentLayerUpdater and
20// SkPictureContentLayerUpdater that reduces code duplication between
21// their respective PaintContents implementations.
22class CC_EXPORT ContentLayerUpdater : public LayerUpdater {
23 public:
24  void set_rendering_stats_instrumentation(RenderingStatsInstrumentation* rsi);
25  virtual void SetOpaque(bool) OVERRIDE;
26
27 protected:
28  ContentLayerUpdater(scoped_ptr<LayerPainter> painter,
29                      RenderingStatsInstrumentation* stats_instrumentation,
30                      int layer_id);
31  virtual ~ContentLayerUpdater();
32
33  void PaintContents(SkCanvas* canvas,
34                     gfx::Point origin,
35                     float contents_width_scale,
36                     float contents_height_scale,
37                     gfx::Rect* resulting_opaque_rect);
38  gfx::Rect content_rect() const { return content_rect_; }
39
40  bool layer_is_opaque() const { return layer_is_opaque_; }
41
42  RenderingStatsInstrumentation* rendering_stats_instrumentation_;
43  int layer_id_;
44
45 private:
46  gfx::Rect content_rect_;
47  scoped_ptr<LayerPainter> painter_;
48
49 protected:
50  // True when it is known that all output pixels will be opaque.
51  bool layer_is_opaque_;
52
53  DISALLOW_COPY_AND_ASSIGN(ContentLayerUpdater);
54};
55
56}  // namespace cc
57
58#endif  // CC_RESOURCES_CONTENT_LAYER_UPDATER_H_
59