• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2013 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_OUTPUT_COPY_OUTPUT_RESULT_H_
6 #define CC_OUTPUT_COPY_OUTPUT_RESULT_H_
7 
8 #include "base/memory/scoped_ptr.h"
9 #include "cc/base/cc_export.h"
10 #include "cc/resources/single_release_callback.h"
11 #include "cc/resources/texture_mailbox.h"
12 #include "ui/gfx/size.h"
13 
14 class SkBitmap;
15 
16 namespace cc {
17 class TextureMailbox;
18 
19 class CC_EXPORT CopyOutputResult {
20  public:
CreateEmptyResult()21   static scoped_ptr<CopyOutputResult> CreateEmptyResult() {
22     return make_scoped_ptr(new CopyOutputResult);
23   }
CreateBitmapResult(scoped_ptr<SkBitmap> bitmap)24   static scoped_ptr<CopyOutputResult> CreateBitmapResult(
25       scoped_ptr<SkBitmap> bitmap) {
26     return make_scoped_ptr(new CopyOutputResult(bitmap.Pass()));
27   }
CreateTextureResult(const gfx::Size & size,const TextureMailbox & texture_mailbox,scoped_ptr<SingleReleaseCallback> release_callback)28   static scoped_ptr<CopyOutputResult> CreateTextureResult(
29       const gfx::Size& size,
30       const TextureMailbox& texture_mailbox,
31       scoped_ptr<SingleReleaseCallback> release_callback) {
32     return make_scoped_ptr(
33         new CopyOutputResult(size, texture_mailbox, release_callback.Pass()));
34   }
35 
36   ~CopyOutputResult();
37 
IsEmpty()38   bool IsEmpty() const { return !HasBitmap() && !HasTexture(); }
HasBitmap()39   bool HasBitmap() const { return !!bitmap_; }
HasTexture()40   bool HasTexture() const { return texture_mailbox_.IsValid(); }
41 
size()42   gfx::Size size() const { return size_; }
43   scoped_ptr<SkBitmap> TakeBitmap();
44   void TakeTexture(TextureMailbox* texture_mailbox,
45                    scoped_ptr<SingleReleaseCallback>* release_callback);
46 
47  private:
48   CopyOutputResult();
49   explicit CopyOutputResult(scoped_ptr<SkBitmap> bitmap);
50   explicit CopyOutputResult(const gfx::Size& size,
51                             const TextureMailbox& texture_mailbox,
52                             scoped_ptr<SingleReleaseCallback> release_callback);
53 
54   gfx::Size size_;
55   scoped_ptr<SkBitmap> bitmap_;
56   TextureMailbox texture_mailbox_;
57   scoped_ptr<SingleReleaseCallback> release_callback_;
58 };
59 
60 }  // namespace cc
61 
62 #endif  // CC_OUTPUT_COPY_OUTPUT_RESULT_H_
63