Home | History | Annotate | Download | only in layers
      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