| 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..ee186a992e2139e02f591f43f77832503d2f0a06 | 
| --- /dev/null | 
| +++ b/cc/layers/delegated_frame_provider.h | 
| @@ -0,0 +1,62 @@ | 
| +// 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 "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: | 
| +  explicit DelegatedFrameProvider( | 
| +      DelegatedFrameResourceCollection* resource_collection, | 
| +      scoped_ptr<DelegatedFrameData> frame); | 
| +  ~DelegatedFrameProvider(); | 
| + | 
| +  void SetObserver(DelegatedRendererLayer* observer); | 
| +  bool IsObserver(DelegatedRendererLayer* observer) const; | 
| + | 
| +  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: | 
| +  DelegatedFrameResourceCollection* resource_collection_; | 
| +  DelegatedRendererLayer* frame_observer_; | 
| + | 
| +  scoped_ptr<DelegatedFrameData> frame_; | 
| +  gfx::RectF damage_; | 
| +  bool own_frame_resources_; | 
| + | 
| +  gfx::Size frame_size_; | 
| + | 
| +  DISALLOW_COPY_AND_ASSIGN(DelegatedFrameProvider); | 
| +}; | 
| + | 
| +}  // namespace cc | 
| + | 
| +#endif  // CC_LAYERS_DELEGATED_FRAME_PROVIDER_H_ | 
|  |