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 SyncFromActiveLayer(); 66 void SyncTiling(const PictureLayerTiling* tiling); 67 void UpdateTwinLayer(); 68 69 void CreateTilingSetIfNeeded(); 70 71 // Mask-related functions 72 void SetIsMask(bool is_mask); 73 virtual ResourceProvider::ResourceId ContentsResourceId() const OVERRIDE; 74 75 virtual size_t GPUMemoryUsageInBytes() const OVERRIDE; 76 77 protected: 78 PictureLayerImpl(LayerTreeImpl* tree_impl, int id); 79 PictureLayerTiling* AddTiling(float contents_scale); 80 void RemoveTiling(float contents_scale); 81 void SyncFromActiveLayer(const PictureLayerImpl* other); 82 void ManageTilings(bool animating_transform_to_screen); 83 virtual bool ShouldAdjustRasterScale( 84 bool animating_transform_to_screen) const; 85 virtual void CalculateRasterContentsScale( 86 bool animating_transform_to_screen, 87 float* raster_contents_scale, 88 float* low_res_raster_contents_scale) const; 89 void CleanUpTilingsOnActiveLayer( 90 std::vector<PictureLayerTiling*> used_tilings); 91 float MinimumContentsScale() const; 92 void UpdateLCDTextStatus(bool new_status); 93 void ResetRasterScale(); 94 void MarkVisibleResourcesAsRequired() const; 95 96 bool CanHaveTilings() const; 97 bool CanHaveTilingWithScale(float contents_scale) const; 98 99 virtual void GetDebugBorderProperties( 100 SkColor* color, float* width) const OVERRIDE; 101 virtual void AsValueInto(base::DictionaryValue* dict) const OVERRIDE; 102 103 PictureLayerImpl* twin_layer_; 104 105 scoped_ptr<PictureLayerTilingSet> tilings_; 106 scoped_refptr<PicturePileImpl> pile_; 107 Region invalidation_; 108 109 gfx::Transform last_screen_space_transform_; 110 gfx::Size last_bounds_; 111 float last_content_scale_; 112 bool is_mask_; 113 114 float ideal_page_scale_; 115 float ideal_device_scale_; 116 float ideal_source_scale_; 117 float ideal_contents_scale_; 118 119 float raster_page_scale_; 120 float raster_device_scale_; 121 float raster_source_scale_; 122 float raster_contents_scale_; 123 float low_res_raster_contents_scale_; 124 125 bool raster_source_scale_was_animating_; 126 bool is_using_lcd_text_; 127 // A sanity state check to make sure UpdateTilePriorities only gets called 128 // after a CalculateContentsScale/ManageTilings. 129 bool should_update_tile_priorities_; 130 131 friend class PictureLayer; 132 DISALLOW_COPY_AND_ASSIGN(PictureLayerImpl); 133 }; 134 135 } // namespace cc 136 137 #endif // CC_LAYERS_PICTURE_LAYER_IMPL_H_ 138