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;
25 class CC_EXPORT PictureLayerImpl
27 NON_EXPORTED_BASE(public PictureLayerTilingClient) {
29 static scoped_ptr<PictureLayerImpl> Create(LayerTreeImpl* tree_impl, int id) {
30 return make_scoped_ptr(new PictureLayerImpl(tree_impl, id));
32 virtual ~PictureLayerImpl();
34 // LayerImpl overrides.
35 virtual const char* LayerTypeAsString() const OVERRIDE;
36 virtual scoped_ptr<LayerImpl> CreateLayerImpl(LayerTreeImpl* tree_impl)
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;
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;
64 // PushPropertiesTo active tree => pending tree.
65 void SyncTiling(const PictureLayerTiling* tiling);
67 // Mask-related functions
68 void SetIsMask(bool is_mask);
69 virtual ResourceProvider::ResourceId ContentsResourceId() const OVERRIDE;
71 virtual size_t GPUMemoryUsageInBytes() const OVERRIDE;
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();
95 void DoPostCommitInitialization();
97 bool CanHaveTilings() const;
98 bool CanHaveTilingWithScale(float contents_scale) const;
99 void SanityCheckTilingState() const;
101 virtual void GetDebugBorderProperties(
102 SkColor* color, float* width) const OVERRIDE;
103 virtual void AsValueInto(base::DictionaryValue* dict) const OVERRIDE;
105 PictureLayerImpl* twin_layer_;
107 scoped_ptr<PictureLayerTilingSet> tilings_;
108 scoped_refptr<PicturePileImpl> pile_;
109 Region invalidation_;
111 gfx::Transform last_screen_space_transform_;
112 gfx::Size last_bounds_;
113 float last_content_scale_;
116 float ideal_page_scale_;
117 float ideal_device_scale_;
118 float ideal_source_scale_;
119 float ideal_contents_scale_;
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_;
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_;
134 friend class PictureLayer;
135 DISALLOW_COPY_AND_ASSIGN(PictureLayerImpl);
140 #endif // CC_LAYERS_PICTURE_LAYER_IMPL_H_