| Index: cc/layers/delegated_frame_provider.h | 
| diff --git a/cc/layers/delegated_frame_provider.h b/cc/layers/delegated_frame_provider.h | 
| new file mode 100644 | 
| index 0000000000000000000000000000000000000000..88e7b870e80680eae415569ac5f48810175f27b4 | 
| --- /dev/null | 
| +++ b/cc/layers/delegated_frame_provider.h | 
| @@ -0,0 +1,76 @@ | 
| +// Copyright 2013 The Chromium Authors. All rights reserved. | 
| +// Use of this source code is governed by a BSD-style license that can be | 
| +// found in the LICENSE file. | 
| + | 
| +#ifndef CC_LAYERS_DELEGATED_FRAME_PROVIDER_H_ | 
| +#define CC_LAYERS_DELEGATED_FRAME_PROVIDER_H_ | 
| + | 
| +#include <vector> | 
| + | 
| +#include "base/memory/ref_counted.h" | 
| +#include "base/memory/scoped_ptr.h" | 
| +#include "cc/base/cc_export.h" | 
| +#include "cc/resources/return_callback.h" | 
| +#include "cc/resources/returned_resource.h" | 
| +#include "ui/gfx/rect_f.h" | 
| +#include "ui/gfx/size.h" | 
| + | 
| +namespace cc { | 
| +class DelegatedFrameData; | 
| +class DelegatedFrameResourceCollection; | 
| +class DelegatedRendererLayer; | 
| + | 
| +// Only one observing layer has ownership of the DelegatedFrameProvider. Only | 
| +// the active observer should call GetFrameDataAndRefResources(). All frames | 
| +// provided by a single DelegatedFrameProvider must have the same size. A new | 
| +// provider must be used for frames of a different size. | 
| +class CC_EXPORT DelegatedFrameProvider | 
| +    : public base::RefCounted<DelegatedFrameProvider> { | 
| + public: | 
| +  explicit DelegatedFrameProvider( | 
| +      const scoped_refptr<DelegatedFrameResourceCollection>& | 
| +          resource_collection, | 
| +      scoped_ptr<DelegatedFrameData> frame); | 
| + | 
| +  void AddObserver(DelegatedRendererLayer* layer); | 
| +  void RemoveObserver(DelegatedRendererLayer* layer); | 
| + | 
| +  void SetFrameData(scoped_ptr<DelegatedFrameData> frame); | 
| + | 
| +  // The DelegatedFrameData returned here must be displayed in order to not | 
| +  // lose track of damage. | 
| +  DelegatedFrameData* GetFrameDataAndRefResources( | 
| +      DelegatedRendererLayer* observer, | 
| +      gfx::RectF* damage); | 
| + | 
| +  ReturnCallback GetReturnResourcesCallbackForImplThread(); | 
| +  void ReturnUnusedResources(const ReturnedResourceArray& unused); | 
| + | 
| +  gfx::Size frame_size() const { return frame_size_; } | 
| + | 
| + private: | 
| +  friend class base::RefCounted<DelegatedFrameProvider>; | 
| +  ~DelegatedFrameProvider(); | 
| + | 
| +  scoped_refptr<DelegatedFrameResourceCollection> resource_collection_; | 
| + | 
| +  scoped_ptr<DelegatedFrameData> frame_; | 
| +  bool own_frame_resources_; | 
| + | 
| +  struct Observer { | 
| +    DelegatedRendererLayer* layer; | 
| +    gfx::RectF damage; | 
| + | 
| +    Observer(DelegatedRendererLayer* layer, const gfx::RectF& damage) | 
| +        : layer(layer), damage(damage) {} | 
| +  }; | 
| +  std::vector<Observer> observers_; | 
| + | 
| +  gfx::Size frame_size_; | 
| + | 
| +  DISALLOW_COPY_AND_ASSIGN(DelegatedFrameProvider); | 
| +}; | 
| + | 
| +}  // namespace cc | 
| + | 
| +#endif  // CC_LAYERS_DELEGATED_FRAME_PROVIDER_H_ | 
|  |