• 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_REQUEST_H_
6 #define CC_OUTPUT_COPY_OUTPUT_REQUEST_H_
7 
8 #include "base/callback.h"
9 #include "base/memory/scoped_ptr.h"
10 #include "cc/base/cc_export.h"
11 #include "cc/resources/single_release_callback.h"
12 #include "cc/resources/texture_mailbox.h"
13 #include "ui/gfx/rect.h"
14 
15 class SkBitmap;
16 
17 namespace cc {
18 class CopyOutputResult;
19 
20 class CC_EXPORT CopyOutputRequest {
21  public:
22   typedef base::Callback<void(scoped_ptr<CopyOutputResult> result)>
23       CopyOutputRequestCallback;
24 
CreateEmptyRequest()25   static scoped_ptr<CopyOutputRequest> CreateEmptyRequest() {
26     return make_scoped_ptr(new CopyOutputRequest);
27   }
CreateRequest(const CopyOutputRequestCallback & result_callback)28   static scoped_ptr<CopyOutputRequest> CreateRequest(
29       const CopyOutputRequestCallback& result_callback) {
30     return make_scoped_ptr(new CopyOutputRequest(false, result_callback));
31   }
CreateBitmapRequest(const CopyOutputRequestCallback & result_callback)32   static scoped_ptr<CopyOutputRequest> CreateBitmapRequest(
33       const CopyOutputRequestCallback& result_callback) {
34     return make_scoped_ptr(new CopyOutputRequest(true, result_callback));
35   }
36   static scoped_ptr<CopyOutputRequest> CreateRelayRequest(
37       const CopyOutputRequest& original_request,
38       const CopyOutputRequestCallback& result_callback);
39 
40   ~CopyOutputRequest();
41 
IsEmpty()42   bool IsEmpty() const { return result_callback_.is_null(); }
43 
force_bitmap_result()44   bool force_bitmap_result() const { return force_bitmap_result_; }
45 
46   // By default copy requests copy the entire layer's subtree output. If an
47   // area is given, then the intersection of this rect (in layer space) with
48   // the layer's subtree output will be returned.
set_area(const gfx::Rect & area)49   void set_area(const gfx::Rect& area) {
50     has_area_ = true;
51     area_ = area;
52   }
has_area()53   bool has_area() const { return has_area_; }
area()54   gfx::Rect area() const { return area_; }
55 
56   // By default copy requests create a new TextureMailbox to return contents
57   // in. This allows a client to provide a TextureMailbox, and the compositor
58   // will place the result inside the TextureMailbox.
59   void SetTextureMailbox(const TextureMailbox& texture_mailbox);
has_texture_mailbox()60   bool has_texture_mailbox() const { return has_texture_mailbox_; }
texture_mailbox()61   const TextureMailbox& texture_mailbox() const { return texture_mailbox_; }
62 
63   void SendEmptyResult();
64   void SendBitmapResult(scoped_ptr<SkBitmap> bitmap);
65   void SendTextureResult(const gfx::Size& size,
66                          const TextureMailbox& texture_mailbox,
67                          scoped_ptr<SingleReleaseCallback> release_callback);
68 
69   void SendResult(scoped_ptr<CopyOutputResult> result);
70 
71  private:
72   CopyOutputRequest();
73   CopyOutputRequest(bool force_bitmap_result,
74                     const CopyOutputRequestCallback& result_callback);
75 
76   bool force_bitmap_result_;
77   bool has_area_;
78   bool has_texture_mailbox_;
79   gfx::Rect area_;
80   TextureMailbox texture_mailbox_;
81   CopyOutputRequestCallback result_callback_;
82 };
83 
84 }  // namespace cc
85 
86 #endif  // CC_OUTPUT_COPY_OUTPUT_REQUEST_H_
87