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.
5 #ifndef CC_LAYERS_PICTURE_LAYER_IMPL_H_
6 #define CC_LAYERS_PICTURE_LAYER_IMPL_H_
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"
22 struct AppendQuadsData;
24 class MicroBenchmarkImpl;
26 class CC_EXPORT PictureLayerImpl
28 NON_EXPORTED_BASE(public PictureLayerTilingClient) {
30 static scoped_ptr<PictureLayerImpl> Create(LayerTreeImpl* tree_impl, int id) {
31 return make_scoped_ptr(new PictureLayerImpl(tree_impl, id));
33 virtual ~PictureLayerImpl();
35 // LayerImpl overrides.
36 virtual const char* LayerTypeAsString() const OVERRIDE;
37 virtual scoped_ptr<LayerImpl> CreateLayerImpl(LayerTreeImpl* tree_impl)
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;
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;
69 // PushPropertiesTo active tree => pending tree.
70 void SyncTiling(const PictureLayerTiling* tiling);
72 // Mask-related functions
73 void SetIsMask(bool is_mask);
74 virtual ResourceProvider::ResourceId ContentsResourceId() const OVERRIDE;
76 virtual size_t GPUMemoryUsageInBytes() const OVERRIDE;
78 virtual void RunMicroBenchmark(MicroBenchmarkImpl* benchmark) OVERRIDE;
80 void SetShouldUseGpuRasterization(bool should_use_gpu_rasterization);
81 bool should_use_gpu_rasterization() const {
82 return should_use_gpu_rasterization_;
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();
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;
113 void DoPostCommitInitializationIfNeeded() {
114 if (needs_post_commit_initialization_)
115 DoPostCommitInitialization();
117 void DoPostCommitInitialization();
119 bool CanHaveTilings() const;
120 bool CanHaveTilingWithScale(float contents_scale) const;
121 void SanityCheckTilingState() const;
123 virtual void GetDebugBorderProperties(
124 SkColor* color, float* width) const OVERRIDE;
125 virtual void AsValueInto(base::DictionaryValue* dict) const OVERRIDE;
127 PictureLayerImpl* twin_layer_;
129 scoped_ptr<PictureLayerTilingSet> tilings_;
130 scoped_refptr<PicturePileImpl> pile_;
131 Region invalidation_;
135 float ideal_page_scale_;
136 float ideal_device_scale_;
137 float ideal_source_scale_;
138 float ideal_contents_scale_;
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_;
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_;
154 friend class PictureLayer;
155 DISALLOW_COPY_AND_ASSIGN(PictureLayerImpl);
160 #endif // CC_LAYERS_PICTURE_LAYER_IMPL_H_