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_DELEGATED_RENDERER_LAYER_H_ 6 #define CC_LAYERS_DELEGATED_RENDERER_LAYER_H_ 7 8 #include "base/containers/hash_tables.h" 9 #include "base/memory/ref_counted.h" 10 #include "base/memory/weak_ptr.h" 11 #include "base/synchronization/lock.h" 12 #include "cc/base/cc_export.h" 13 #include "cc/layers/delegated_frame_provider.h" 14 #include "cc/layers/layer.h" 15 #include "cc/resources/returned_resource.h" 16 17 namespace cc { 18 class BlockingTaskRunner; 19 20 class CC_EXPORT DelegatedRendererLayer : public Layer { 21 public: 22 static scoped_refptr<DelegatedRendererLayer> Create( 23 const scoped_refptr<DelegatedFrameProvider>& frame_provider); 24 25 virtual scoped_ptr<LayerImpl> CreateLayerImpl(LayerTreeImpl* tree_impl) 26 OVERRIDE; 27 virtual void SetLayerTreeHost(LayerTreeHost* host) OVERRIDE; 28 virtual bool Update(ResourceUpdateQueue* queue, 29 const OcclusionTracker* occlusion) OVERRIDE; 30 virtual void PushPropertiesTo(LayerImpl* impl) OVERRIDE; 31 32 // Set the size at which the frame should be displayed, with the origin at the 33 // layer's origin. This must always contain at least the layer's bounds. A 34 // value of (0, 0) implies that the frame should be displayed to fit exactly 35 // in the layer's bounds. 36 void SetDisplaySize(gfx::Size size); 37 38 // Called by the DelegatedFrameProvider when a new frame is available to be 39 // picked up. 40 void ProviderHasNewFrame(); 41 42 protected: 43 DelegatedRendererLayer( 44 const scoped_refptr<DelegatedFrameProvider>& frame_provider); 45 virtual ~DelegatedRendererLayer(); 46 47 private: 48 scoped_refptr<DelegatedFrameProvider> frame_provider_; 49 50 bool should_collect_new_frame_; 51 52 DelegatedFrameData* frame_data_; 53 gfx::RectF frame_damage_; 54 55 gfx::Size display_size_; 56 57 scoped_refptr<BlockingTaskRunner> main_thread_runner_; 58 base::WeakPtrFactory<DelegatedRendererLayer> weak_ptrs_; 59 60 DISALLOW_COPY_AND_ASSIGN(DelegatedRendererLayer); 61 }; 62 63 } // namespace cc 64 65 #endif // CC_LAYERS_DELEGATED_RENDERER_LAYER_H_ 66