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<Layer>* occlusion) OVERRIDE; 30 virtual void PushPropertiesTo(LayerImpl* impl) OVERRIDE; 31 32 // Called by the DelegatedFrameProvider when a new frame is available to be 33 // picked up. 34 void ProviderHasNewFrame(); 35 36 protected: 37 DelegatedRendererLayer( 38 const scoped_refptr<DelegatedFrameProvider>& frame_provider); 39 virtual ~DelegatedRendererLayer(); 40 41 private: 42 scoped_refptr<DelegatedFrameProvider> frame_provider_; 43 44 bool should_collect_new_frame_; 45 46 DelegatedFrameData* frame_data_; 47 gfx::RectF frame_damage_; 48 49 scoped_refptr<BlockingTaskRunner> main_thread_runner_; 50 base::WeakPtrFactory<DelegatedRendererLayer> weak_ptrs_; 51 52 DISALLOW_COPY_AND_ASSIGN(DelegatedRendererLayer); 53 }; 54 55 } // namespace cc 56 57 #endif // CC_LAYERS_DELEGATED_RENDERER_LAYER_H_ 58