picture_layer_impl.h revision f2477e01787aa58f445919b809d89e252beef54f
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 20namespace cc { 21 22struct AppendQuadsData; 23class QuadSink; 24class MicroBenchmarkImpl; 25 26class 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 DidLoseOutputSurface() 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(PictureLayerTiling* tiling, 57 gfx::Rect content_rect) OVERRIDE; 58 virtual void UpdatePile(Tile* tile) OVERRIDE; 59 virtual gfx::Size CalculateTileSize( 60 gfx::Size content_bounds) const OVERRIDE; 61 virtual const Region* GetInvalidation() OVERRIDE; 62 virtual const PictureLayerTiling* GetTwinTiling( 63 const PictureLayerTiling* tiling) OVERRIDE; 64 65 // PushPropertiesTo active tree => pending tree. 66 void SyncTiling(const PictureLayerTiling* tiling); 67 68 // Mask-related functions 69 void SetIsMask(bool is_mask); 70 virtual ResourceProvider::ResourceId ContentsResourceId() const OVERRIDE; 71 72 virtual size_t GPUMemoryUsageInBytes() const OVERRIDE; 73 74 virtual void RunMicroBenchmark(MicroBenchmarkImpl* benchmark) OVERRIDE; 75 76 protected: 77 PictureLayerImpl(LayerTreeImpl* tree_impl, int id); 78 PictureLayerTiling* AddTiling(float contents_scale); 79 void RemoveTiling(float contents_scale); 80 void RemoveAllTilings(); 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 RecalculateRasterScales( 86 bool animating_transform_to_screen); 87 void CleanUpTilingsOnActiveLayer( 88 std::vector<PictureLayerTiling*> used_tilings); 89 float MinimumContentsScale() const; 90 float SnappedContentsScale(float new_contents_scale); 91 void UpdateLCDTextStatus(bool new_status); 92 void ResetRasterScale(); 93 void MarkVisibleResourcesAsRequired() const; 94 void DoPostCommitInitializationIfNeeded() { 95 if (needs_post_commit_initialization_) 96 DoPostCommitInitialization(); 97 } 98 void DoPostCommitInitialization(); 99 100 bool CanHaveTilings() const; 101 bool CanHaveTilingWithScale(float contents_scale) const; 102 void SanityCheckTilingState() const; 103 104 virtual void GetDebugBorderProperties( 105 SkColor* color, float* width) const OVERRIDE; 106 virtual void AsValueInto(base::DictionaryValue* dict) const OVERRIDE; 107 108 PictureLayerImpl* twin_layer_; 109 110 scoped_ptr<PictureLayerTilingSet> tilings_; 111 scoped_refptr<PicturePileImpl> pile_; 112 Region invalidation_; 113 114 gfx::Transform last_screen_space_transform_; 115 gfx::Size last_bounds_; 116 float last_content_scale_; 117 bool is_mask_; 118 119 float ideal_page_scale_; 120 float ideal_device_scale_; 121 float ideal_source_scale_; 122 float ideal_contents_scale_; 123 124 float raster_page_scale_; 125 float raster_device_scale_; 126 float raster_source_scale_; 127 float raster_contents_scale_; 128 float low_res_raster_contents_scale_; 129 130 bool raster_source_scale_was_animating_; 131 bool is_using_lcd_text_; 132 bool needs_post_commit_initialization_; 133 // A sanity state check to make sure UpdateTilePriorities only gets called 134 // after a CalculateContentsScale/ManageTilings. 135 bool should_update_tile_priorities_; 136 137 friend class PictureLayer; 138 DISALLOW_COPY_AND_ASSIGN(PictureLayerImpl); 139}; 140 141} // namespace cc 142 143#endif // CC_LAYERS_PICTURE_LAYER_IMPL_H_ 144