Upstream version 5.34.104.0
[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 class MicroBenchmarkImpl;
25
26 class CC_EXPORT PictureLayerImpl
27     : public LayerImpl,
28       NON_EXPORTED_BASE(public PictureLayerTilingClient) {
29  public:
30   static scoped_ptr<PictureLayerImpl> Create(LayerTreeImpl* tree_impl, int id) {
31     return make_scoped_ptr(new PictureLayerImpl(tree_impl, id));
32   }
33   virtual ~PictureLayerImpl();
34
35   // LayerImpl overrides.
36   virtual const char* LayerTypeAsString() const OVERRIDE;
37   virtual scoped_ptr<LayerImpl> CreateLayerImpl(LayerTreeImpl* tree_impl)
38       OVERRIDE;
39   virtual void PushPropertiesTo(LayerImpl* layer) OVERRIDE;
40   virtual void AppendQuads(QuadSink* quad_sink,
41                            AppendQuadsData* append_quads_data) OVERRIDE;
42   virtual void UpdateTilePriorities() OVERRIDE;
43   virtual void DidBecomeActive() OVERRIDE;
44   virtual void DidBeginTracing() OVERRIDE;
45   virtual void ReleaseResources() OVERRIDE;
46   virtual void CalculateContentsScale(float ideal_contents_scale,
47                                       float device_scale_factor,
48                                       float page_scale_factor,
49                                       bool animating_transform_to_screen,
50                                       float* contents_scale_x,
51                                       float* contents_scale_y,
52                                       gfx::Size* content_bounds) OVERRIDE;
53   virtual skia::RefPtr<SkPicture> GetPicture() OVERRIDE;
54
55   // PictureLayerTilingClient overrides.
56   virtual scoped_refptr<Tile> CreateTile(
57     PictureLayerTiling* tiling,
58     const gfx::Rect& content_rect) OVERRIDE;
59   virtual void UpdatePile(Tile* tile) OVERRIDE;
60   virtual gfx::Size CalculateTileSize(
61       const gfx::Size& content_bounds) const OVERRIDE;
62   virtual const Region* GetInvalidation() OVERRIDE;
63   virtual const PictureLayerTiling* GetTwinTiling(
64       const PictureLayerTiling* tiling) const OVERRIDE;
65   virtual size_t GetMaxTilesForInterestArea() const OVERRIDE;
66   virtual float GetSkewportTargetTimeInSeconds() const OVERRIDE;
67   virtual int GetSkewportExtrapolationLimitInContentPixels() const OVERRIDE;
68
69   // PushPropertiesTo active tree => pending tree.
70   void SyncTiling(const PictureLayerTiling* tiling);
71
72   // Mask-related functions
73   void SetIsMask(bool is_mask);
74   virtual ResourceProvider::ResourceId ContentsResourceId() const OVERRIDE;
75
76   virtual size_t GPUMemoryUsageInBytes() const OVERRIDE;
77
78   virtual void RunMicroBenchmark(MicroBenchmarkImpl* benchmark) OVERRIDE;
79
80   void SetShouldUseGpuRasterization(bool should_use_gpu_rasterization);
81   bool should_use_gpu_rasterization() const {
82     return should_use_gpu_rasterization_;
83   }
84
85  protected:
86   PictureLayerImpl(LayerTreeImpl* tree_impl, int id);
87   PictureLayerTiling* AddTiling(float contents_scale);
88   void RemoveTiling(float contents_scale);
89   void RemoveAllTilings();
90   void SyncFromActiveLayer(const PictureLayerImpl* other);
91   void ManageTilings(bool animating_transform_to_screen);
92   bool ShouldHaveLowResTiling() const {
93     return !should_use_gpu_rasterization();
94   }
95   virtual bool ShouldAdjustRasterScale(
96       bool animating_transform_to_screen) const;
97   virtual void RecalculateRasterScales(
98       bool animating_transform_to_screen);
99   void CleanUpTilingsOnActiveLayer(
100       std::vector<PictureLayerTiling*> used_tilings);
101   float MinimumContentsScale() const;
102   float SnappedContentsScale(float new_contents_scale);
103   void UpdateLCDTextStatus(bool new_status);
104   void ResetRasterScale();
105   void MarkVisibleResourcesAsRequired() const;
106   bool MarkVisibleTilesAsRequired(
107       PictureLayerTiling* tiling,
108       const PictureLayerTiling* optional_twin_tiling,
109       float contents_scale,
110       const gfx::Rect& rect,
111       const Region& missing_region) const;
112
113   void DoPostCommitInitializationIfNeeded() {
114     if (needs_post_commit_initialization_)
115       DoPostCommitInitialization();
116   }
117   void DoPostCommitInitialization();
118
119   bool CanHaveTilings() const;
120   bool CanHaveTilingWithScale(float contents_scale) const;
121   void SanityCheckTilingState() const;
122
123   virtual void GetDebugBorderProperties(
124       SkColor* color, float* width) const OVERRIDE;
125   virtual void AsValueInto(base::DictionaryValue* dict) const OVERRIDE;
126
127   PictureLayerImpl* twin_layer_;
128
129   scoped_ptr<PictureLayerTilingSet> tilings_;
130   scoped_refptr<PicturePileImpl> pile_;
131   Region invalidation_;
132
133   bool is_mask_;
134
135   float ideal_page_scale_;
136   float ideal_device_scale_;
137   float ideal_source_scale_;
138   float ideal_contents_scale_;
139
140   float raster_page_scale_;
141   float raster_device_scale_;
142   float raster_source_scale_;
143   float raster_contents_scale_;
144   float low_res_raster_contents_scale_;
145
146   bool raster_source_scale_was_animating_;
147   bool is_using_lcd_text_;
148   bool needs_post_commit_initialization_;
149   // A sanity state check to make sure UpdateTilePriorities only gets called
150   // after a CalculateContentsScale/ManageTilings.
151   bool should_update_tile_priorities_;
152   bool should_use_gpu_rasterization_;
153
154   friend class PictureLayer;
155   DISALLOW_COPY_AND_ASSIGN(PictureLayerImpl);
156 };
157
158 }  // namespace cc
159
160 #endif  // CC_LAYERS_PICTURE_LAYER_IMPL_H_