Home | History | Annotate | Download | only in output
      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 
     25   static scoped_ptr<CopyOutputRequest> CreateEmptyRequest() {
     26     return make_scoped_ptr(new CopyOutputRequest);
     27   }
     28   static scoped_ptr<CopyOutputRequest> CreateRequest(
     29       const CopyOutputRequestCallback& result_callback) {
     30     return make_scoped_ptr(new CopyOutputRequest(false, result_callback));
     31   }
     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 
     42   bool IsEmpty() const { return result_callback_.is_null(); }
     43 
     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.
     49   void set_area(const gfx::Rect& area) {
     50     has_area_ = true;
     51     area_ = area;
     52   }
     53   bool has_area() const { return has_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);
     60   bool has_texture_mailbox() const { return has_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