|  | // 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_OUTPUT_COPY_OUTPUT_RESULT_H_ | 
|  | #define CC_OUTPUT_COPY_OUTPUT_RESULT_H_ | 
|  |  | 
|  | #include "base/memory/scoped_ptr.h" | 
|  | #include "cc/resources/single_release_callback.h" | 
|  | #include "cc/resources/texture_mailbox.h" | 
|  | #include "ui/gfx/geometry/size.h" | 
|  |  | 
|  | class SkBitmap; | 
|  |  | 
|  | namespace cc { | 
|  | class TextureMailbox; | 
|  |  | 
|  | class CopyOutputResult { | 
|  | public: | 
|  | static scoped_ptr<CopyOutputResult> CreateEmptyResult() { | 
|  | return make_scoped_ptr(new CopyOutputResult); | 
|  | } | 
|  | static scoped_ptr<CopyOutputResult> CreateBitmapResult( | 
|  | scoped_ptr<SkBitmap> bitmap) { | 
|  | return make_scoped_ptr(new CopyOutputResult(bitmap.Pass())); | 
|  | } | 
|  | static scoped_ptr<CopyOutputResult> CreateTextureResult( | 
|  | const gfx::Size& size, | 
|  | const TextureMailbox& texture_mailbox, | 
|  | scoped_ptr<SingleReleaseCallback> release_callback) { | 
|  | return make_scoped_ptr( | 
|  | new CopyOutputResult(size, texture_mailbox, release_callback.Pass())); | 
|  | } | 
|  |  | 
|  | ~CopyOutputResult(); | 
|  |  | 
|  | bool IsEmpty() const { return !HasBitmap() && !HasTexture(); } | 
|  | bool HasBitmap() const { return !!bitmap_; } | 
|  | bool HasTexture() const { return texture_mailbox_.IsValid(); } | 
|  |  | 
|  | gfx::Size size() const { return size_; } | 
|  | scoped_ptr<SkBitmap> TakeBitmap(); | 
|  | void TakeTexture(TextureMailbox* texture_mailbox, | 
|  | scoped_ptr<SingleReleaseCallback>* release_callback); | 
|  |  | 
|  | private: | 
|  | CopyOutputResult(); | 
|  | explicit CopyOutputResult(scoped_ptr<SkBitmap> bitmap); | 
|  | explicit CopyOutputResult(const gfx::Size& size, | 
|  | const TextureMailbox& texture_mailbox, | 
|  | scoped_ptr<SingleReleaseCallback> release_callback); | 
|  |  | 
|  | gfx::Size size_; | 
|  | scoped_ptr<SkBitmap> bitmap_; | 
|  | TextureMailbox texture_mailbox_; | 
|  | scoped_ptr<SingleReleaseCallback> release_callback_; | 
|  | }; | 
|  |  | 
|  | }  // namespace cc | 
|  |  | 
|  | #endif  // CC_OUTPUT_COPY_OUTPUT_RESULT_H_ |