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_H_ 6 #define CC_LAYERS_PICTURE_LAYER_H_ 7 8 #include "cc/base/invalidation_region.h" 9 #include "cc/debug/devtools_instrumentation.h" 10 #include "cc/debug/micro_benchmark_controller.h" 11 #include "cc/layers/layer.h" 12 #include "cc/resources/picture_pile.h" 13 #include "cc/trees/occlusion_tracker.h" 14 15 namespace cc { 16 17 class ContentLayerClient; 18 class ResourceUpdateQueue; 19 20 class CC_EXPORT PictureLayer : public Layer { 21 public: 22 static scoped_refptr<PictureLayer> Create(ContentLayerClient* client); 23 ClearClient()24 void ClearClient() { client_ = NULL; } 25 26 // Layer interface. 27 virtual bool DrawsContent() const OVERRIDE; 28 virtual scoped_ptr<LayerImpl> CreateLayerImpl( 29 LayerTreeImpl* tree_impl) OVERRIDE; 30 virtual void SetLayerTreeHost(LayerTreeHost* host) OVERRIDE; 31 virtual void PushPropertiesTo(LayerImpl* layer) OVERRIDE; 32 virtual void SetNeedsDisplayRect(const gfx::RectF& layer_rect) OVERRIDE; 33 virtual bool Update( 34 ResourceUpdateQueue* queue, 35 const OcclusionTracker* occlusion) OVERRIDE; 36 virtual void SetIsMask(bool is_mask) OVERRIDE; 37 virtual bool SupportsLCDText() const OVERRIDE; 38 virtual skia::RefPtr<SkPicture> GetPicture() const OVERRIDE; 39 40 virtual void RunMicroBenchmark(MicroBenchmark* benchmark) OVERRIDE; 41 client()42 ContentLayerClient* client() { return client_; } 43 44 protected: 45 explicit PictureLayer(ContentLayerClient* client); 46 virtual ~PictureLayer(); 47 48 private: 49 ContentLayerClient* client_; 50 scoped_refptr<PicturePile> pile_; 51 devtools_instrumentation:: 52 ScopedLayerObjectTracker instrumentation_object_tracker_; 53 // Invalidation to use the next time update is called. 54 InvalidationRegion pending_invalidation_; 55 // Invalidation from the last time update was called. 56 Region pile_invalidation_; 57 gfx::Rect last_updated_visible_content_rect_; 58 bool is_mask_; 59 60 int update_source_frame_number_; 61 62 DISALLOW_COPY_AND_ASSIGN(PictureLayer); 63 }; 64 65 } // namespace cc 66 67 #endif // CC_LAYERS_PICTURE_LAYER_H_ 68