| OLD | NEW |
| (Empty) |
| 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 <map> | |
| 9 #include <string> | |
| 10 #include <vector> | |
| 11 | |
| 12 #include "cc/base/cc_export.h" | |
| 13 #include "cc/base/scoped_ptr_vector.h" | |
| 14 #include "cc/layers/layer_impl.h" | |
| 15 #include "cc/resources/picture_layer_tiling.h" | |
| 16 #include "cc/resources/picture_layer_tiling_set.h" | |
| 17 #include "cc/resources/picture_pile_impl.h" | |
| 18 #include "cc/resources/tiling_set_eviction_queue.h" | |
| 19 #include "skia/ext/refptr.h" | |
| 20 #include "third_party/skia/include/core/SkPicture.h" | |
| 21 | |
| 22 namespace cc { | |
| 23 | |
| 24 struct AppendQuadsData; | |
| 25 class MicroBenchmarkImpl; | |
| 26 class Tile; | |
| 27 | |
| 28 class CC_EXPORT PictureLayerImpl | |
| 29 : public LayerImpl, | |
| 30 NON_EXPORTED_BASE(public PictureLayerTilingClient) { | |
| 31 public: | |
| 32 struct CC_EXPORT Pair { | |
| 33 Pair(); | |
| 34 Pair(PictureLayerImpl* active_layer, PictureLayerImpl* pending_layer); | |
| 35 ~Pair(); | |
| 36 | |
| 37 PictureLayerImpl* active; | |
| 38 PictureLayerImpl* pending; | |
| 39 }; | |
| 40 | |
| 41 static scoped_ptr<PictureLayerImpl> Create( | |
| 42 LayerTreeImpl* tree_impl, | |
| 43 int id, | |
| 44 bool is_mask, | |
| 45 scoped_refptr<SyncedScrollOffset> scroll_offset) { | |
| 46 return make_scoped_ptr( | |
| 47 new PictureLayerImpl(tree_impl, id, is_mask, scroll_offset)); | |
| 48 } | |
| 49 ~PictureLayerImpl() override; | |
| 50 | |
| 51 bool is_mask() const { return is_mask_; } | |
| 52 | |
| 53 // LayerImpl overrides. | |
| 54 const char* LayerTypeAsString() const override; | |
| 55 scoped_ptr<LayerImpl> CreateLayerImpl(LayerTreeImpl* tree_impl) override; | |
| 56 void PushPropertiesTo(LayerImpl* layer) override; | |
| 57 void AppendQuads(RenderPass* render_pass, | |
| 58 AppendQuadsData* append_quads_data) override; | |
| 59 void NotifyTileStateChanged(const Tile* tile) override; | |
| 60 void DidBeginTracing() override; | |
| 61 void ReleaseResources() override; | |
| 62 void RecreateResources() override; | |
| 63 skia::RefPtr<SkPicture> GetPicture() override; | |
| 64 Region GetInvalidationRegion() override; | |
| 65 | |
| 66 // PictureLayerTilingClient overrides. | |
| 67 scoped_refptr<Tile> CreateTile(float contents_scale, | |
| 68 const gfx::Rect& content_rect) override; | |
| 69 gfx::Size CalculateTileSize(const gfx::Size& content_bounds) const override; | |
| 70 const Region* GetPendingInvalidation() override; | |
| 71 const PictureLayerTiling* GetPendingOrActiveTwinTiling( | |
| 72 const PictureLayerTiling* tiling) const override; | |
| 73 PictureLayerTiling* GetRecycledTwinTiling( | |
| 74 const PictureLayerTiling* tiling) override; | |
| 75 TilePriority::PriorityBin GetMaxTilePriorityBin() const override; | |
| 76 WhichTree GetTree() const override; | |
| 77 bool RequiresHighResToDraw() const override; | |
| 78 gfx::Rect GetEnclosingRectInTargetSpace() const override; | |
| 79 | |
| 80 void set_gpu_raster_max_texture_size(gfx::Size gpu_raster_max_texture_size) { | |
| 81 gpu_raster_max_texture_size_ = gpu_raster_max_texture_size; | |
| 82 } | |
| 83 void UpdateRasterSource(scoped_refptr<RasterSource> raster_source, | |
| 84 Region* new_invalidation, | |
| 85 const PictureLayerTilingSet* pending_set); | |
| 86 bool UpdateTiles(bool resourceless_software_draw); | |
| 87 void UpdateCanUseLCDTextAfterCommit(); | |
| 88 bool RasterSourceUsesLCDText() const; | |
| 89 | |
| 90 // Mask-related functions. | |
| 91 void GetContentsResourceId(ResourceProvider::ResourceId* resource_id, | |
| 92 gfx::Size* resource_size) const override; | |
| 93 | |
| 94 void SetNearestNeighbor(bool nearest_neighbor); | |
| 95 | |
| 96 size_t GPUMemoryUsageInBytes() const override; | |
| 97 | |
| 98 void RunMicroBenchmark(MicroBenchmarkImpl* benchmark) override; | |
| 99 | |
| 100 bool CanHaveTilings() const; | |
| 101 | |
| 102 PictureLayerTilingSet* picture_layer_tiling_set() { return tilings_.get(); } | |
| 103 | |
| 104 // Functions used by tile manager. | |
| 105 PictureLayerImpl* GetPendingOrActiveTwinLayer() const; | |
| 106 bool IsOnActiveOrPendingTree() const; | |
| 107 // Virtual for testing. | |
| 108 virtual bool HasValidTilePriorities() const; | |
| 109 | |
| 110 // Used for benchmarking | |
| 111 RasterSource* GetRasterSource() const { return raster_source_.get(); } | |
| 112 | |
| 113 protected: | |
| 114 friend class LayerRasterTileIterator; | |
| 115 using TileRequirementCheck = bool (PictureLayerTiling::*)(const Tile*) const; | |
| 116 | |
| 117 PictureLayerImpl(LayerTreeImpl* tree_impl, | |
| 118 int id, | |
| 119 bool is_mask, | |
| 120 scoped_refptr<SyncedScrollOffset> scroll_offset); | |
| 121 PictureLayerTiling* AddTiling(float contents_scale); | |
| 122 void RemoveAllTilings(); | |
| 123 void AddTilingsForRasterScale(); | |
| 124 virtual bool ShouldAdjustRasterScale() const; | |
| 125 virtual void RecalculateRasterScales(); | |
| 126 void CleanUpTilingsOnActiveLayer( | |
| 127 const std::vector<PictureLayerTiling*>& used_tilings); | |
| 128 float MinimumContentsScale() const; | |
| 129 float MaximumContentsScale() const; | |
| 130 void ResetRasterScale(); | |
| 131 void UpdateViewportRectForTilePriorityInContentSpace(); | |
| 132 PictureLayerImpl* GetRecycledTwinLayer() const; | |
| 133 | |
| 134 void SanityCheckTilingState() const; | |
| 135 bool ShouldAdjustRasterScaleDuringScaleAnimations() const; | |
| 136 | |
| 137 void GetDebugBorderProperties(SkColor* color, float* width) const override; | |
| 138 void GetAllTilesAndPrioritiesForTracing( | |
| 139 std::map<const Tile*, TilePriority>* tile_map) const override; | |
| 140 void AsValueInto(base::trace_event::TracedValue* dict) const override; | |
| 141 | |
| 142 virtual void UpdateIdealScales(); | |
| 143 float MaximumTilingContentsScale() const; | |
| 144 scoped_ptr<PictureLayerTilingSet> CreatePictureLayerTilingSet(); | |
| 145 | |
| 146 PictureLayerImpl* twin_layer_; | |
| 147 | |
| 148 scoped_ptr<PictureLayerTilingSet> tilings_; | |
| 149 scoped_refptr<RasterSource> raster_source_; | |
| 150 Region invalidation_; | |
| 151 | |
| 152 float ideal_page_scale_; | |
| 153 float ideal_device_scale_; | |
| 154 float ideal_source_scale_; | |
| 155 float ideal_contents_scale_; | |
| 156 | |
| 157 float raster_page_scale_; | |
| 158 float raster_device_scale_; | |
| 159 float raster_source_scale_; | |
| 160 float raster_contents_scale_; | |
| 161 float low_res_raster_contents_scale_; | |
| 162 | |
| 163 bool raster_source_scale_is_fixed_; | |
| 164 bool was_screen_space_transform_animating_; | |
| 165 bool only_used_low_res_last_append_quads_; | |
| 166 const bool is_mask_; | |
| 167 | |
| 168 bool nearest_neighbor_; | |
| 169 | |
| 170 // Any draw properties derived from |transform|, |viewport|, and |clip| | |
| 171 // parameters in LayerTreeHostImpl::SetExternalDrawConstraints are not valid | |
| 172 // for prioritizing tiles during resourceless software draws. This is because | |
| 173 // resourceless software draws can have wildly different transforms/viewports | |
| 174 // from regular draws. Save a copy of the required draw properties of the last | |
| 175 // frame that has a valid viewport for prioritizing tiles. | |
| 176 gfx::Rect visible_rect_for_tile_priority_; | |
| 177 gfx::Rect viewport_rect_for_tile_priority_in_content_space_; | |
| 178 | |
| 179 gfx::Size gpu_raster_max_texture_size_; | |
| 180 | |
| 181 // List of tilings that were used last time we appended quads. This can be | |
| 182 // used as an optimization not to remove tilings if they are still being | |
| 183 // drawn. Note that accessing this vector should only be done in the context | |
| 184 // of comparing pointers, since objects pointed to are not guaranteed to | |
| 185 // exist. | |
| 186 std::vector<PictureLayerTiling*> last_append_quads_tilings_; | |
| 187 | |
| 188 DISALLOW_COPY_AND_ASSIGN(PictureLayerImpl); | |
| 189 }; | |
| 190 | |
| 191 } // namespace cc | |
| 192 | |
| 193 #endif // CC_LAYERS_PICTURE_LAYER_IMPL_H_ | |
| OLD | NEW |