- add sources.
[platform/framework/web/crosswalk.git] / src / cc / layers / picture_layer_impl.h
1 // Copyright 2012 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_LAYERS_PICTURE_LAYER_IMPL_H_
6 #define CC_LAYERS_PICTURE_LAYER_IMPL_H_
7
8 #include <string>
9 #include <vector>
10
11 #include "cc/base/cc_export.h"
12 #include "cc/base/scoped_ptr_vector.h"
13 #include "cc/layers/layer_impl.h"
14 #include "cc/resources/picture_layer_tiling.h"
15 #include "cc/resources/picture_layer_tiling_set.h"
16 #include "cc/resources/picture_pile_impl.h"
17 #include "skia/ext/refptr.h"
18 #include "third_party/skia/include/core/SkPicture.h"
19
20 namespace cc {
21
22 struct AppendQuadsData;
23 class QuadSink;
24
25 class CC_EXPORT PictureLayerImpl
26     : public LayerImpl,
27       NON_EXPORTED_BASE(public PictureLayerTilingClient) {
28  public:
29   static scoped_ptr<PictureLayerImpl> Create(LayerTreeImpl* tree_impl, int id) {
30     return make_scoped_ptr(new PictureLayerImpl(tree_impl, id));
31   }
32   virtual ~PictureLayerImpl();
33
34   // LayerImpl overrides.
35   virtual const char* LayerTypeAsString() const OVERRIDE;
36   virtual scoped_ptr<LayerImpl> CreateLayerImpl(LayerTreeImpl* tree_impl)
37       OVERRIDE;
38   virtual void PushPropertiesTo(LayerImpl* layer) OVERRIDE;
39   virtual void AppendQuads(QuadSink* quad_sink,
40                            AppendQuadsData* append_quads_data) OVERRIDE;
41   virtual void UpdateTilePriorities() OVERRIDE;
42   virtual void DidBecomeActive() OVERRIDE;
43   virtual void DidBeginTracing() OVERRIDE;
44   virtual void DidLoseOutputSurface() OVERRIDE;
45   virtual void CalculateContentsScale(float ideal_contents_scale,
46                                       float device_scale_factor,
47                                       float page_scale_factor,
48                                       bool animating_transform_to_screen,
49                                       float* contents_scale_x,
50                                       float* contents_scale_y,
51                                       gfx::Size* content_bounds) OVERRIDE;
52   virtual skia::RefPtr<SkPicture> GetPicture() OVERRIDE;
53
54   // PictureLayerTilingClient overrides.
55   virtual scoped_refptr<Tile> CreateTile(PictureLayerTiling* tiling,
56                                          gfx::Rect content_rect) OVERRIDE;
57   virtual void UpdatePile(Tile* tile) OVERRIDE;
58   virtual gfx::Size CalculateTileSize(
59       gfx::Size content_bounds) const OVERRIDE;
60   virtual const Region* GetInvalidation() OVERRIDE;
61   virtual const PictureLayerTiling* GetTwinTiling(
62       const PictureLayerTiling* tiling) OVERRIDE;
63
64   // PushPropertiesTo active tree => pending tree.
65   void SyncTiling(const PictureLayerTiling* tiling);
66
67   // Mask-related functions
68   void SetIsMask(bool is_mask);
69   virtual ResourceProvider::ResourceId ContentsResourceId() const OVERRIDE;
70
71   virtual size_t GPUMemoryUsageInBytes() const OVERRIDE;
72
73  protected:
74   PictureLayerImpl(LayerTreeImpl* tree_impl, int id);
75   PictureLayerTiling* AddTiling(float contents_scale);
76   void RemoveTiling(float contents_scale);
77   void SyncFromActiveLayer(const PictureLayerImpl* other);
78   void ManageTilings(bool animating_transform_to_screen);
79   virtual bool ShouldAdjustRasterScale(
80       bool animating_transform_to_screen) const;
81   virtual void CalculateRasterContentsScale(
82       bool animating_transform_to_screen,
83       float* raster_contents_scale,
84       float* low_res_raster_contents_scale) const;
85   void CleanUpTilingsOnActiveLayer(
86       std::vector<PictureLayerTiling*> used_tilings);
87   float MinimumContentsScale() const;
88   void UpdateLCDTextStatus(bool new_status);
89   void ResetRasterScale();
90   void MarkVisibleResourcesAsRequired() const;
91   void DoPostCommitInitializationIfNeeded() {
92     if (needs_post_commit_initialization_)
93       DoPostCommitInitialization();
94   }
95   void DoPostCommitInitialization();
96
97   bool CanHaveTilings() const;
98   bool CanHaveTilingWithScale(float contents_scale) const;
99   void SanityCheckTilingState() const;
100
101   virtual void GetDebugBorderProperties(
102       SkColor* color, float* width) const OVERRIDE;
103   virtual void AsValueInto(base::DictionaryValue* dict) const OVERRIDE;
104
105   PictureLayerImpl* twin_layer_;
106
107   scoped_ptr<PictureLayerTilingSet> tilings_;
108   scoped_refptr<PicturePileImpl> pile_;
109   Region invalidation_;
110
111   gfx::Transform last_screen_space_transform_;
112   gfx::Size last_bounds_;
113   float last_content_scale_;
114   bool is_mask_;
115
116   float ideal_page_scale_;
117   float ideal_device_scale_;
118   float ideal_source_scale_;
119   float ideal_contents_scale_;
120
121   float raster_page_scale_;
122   float raster_device_scale_;
123   float raster_source_scale_;
124   float raster_contents_scale_;
125   float low_res_raster_contents_scale_;
126
127   bool raster_source_scale_was_animating_;
128   bool is_using_lcd_text_;
129   bool needs_post_commit_initialization_;
130   // A sanity state check to make sure UpdateTilePriorities only gets called
131   // after a CalculateContentsScale/ManageTilings.
132   bool should_update_tile_priorities_;
133
134   friend class PictureLayer;
135   DISALLOW_COPY_AND_ASSIGN(PictureLayerImpl);
136 };
137
138 }  // namespace cc
139
140 #endif  // CC_LAYERS_PICTURE_LAYER_IMPL_H_