Home | History | Annotate | Download | only in proxy
      1 // Copyright 2014 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 PPAPI_PROXY_COMPOSITOR_RESOURCE_H_
      6 #define PPAPI_PROXY_COMPOSITOR_RESOURCE_H_
      7 
      8 #include <map>
      9 
     10 #include "ppapi/proxy/compositor_layer_resource.h"
     11 #include "ppapi/proxy/plugin_resource.h"
     12 #include "ppapi/proxy/ppapi_proxy_export.h"
     13 #include "ppapi/shared_impl/proxy_lock.h"
     14 #include "ppapi/thunk/ppb_compositor_api.h"
     15 
     16 namespace ppapi {
     17 namespace proxy {
     18 
     19 class PPAPI_PROXY_EXPORT CompositorResource
     20     : public PluginResource,
     21       public thunk::PPB_Compositor_API {
     22  public:
     23   CompositorResource(Connection connection,
     24                      PP_Instance instance);
     25 
     26   bool IsInProgress() const;
     27 
     28   int32_t GenerateResourceId() const;
     29 
     30  private:
     31   virtual ~CompositorResource();
     32 
     33   // Resource overrides:
     34   virtual thunk::PPB_Compositor_API* AsPPB_Compositor_API() OVERRIDE;
     35 
     36   // PluginResource overrides:
     37   virtual void OnReplyReceived(const ResourceMessageReplyParams& params,
     38                                const IPC::Message& msg) OVERRIDE;
     39 
     40   // thunk::PPB_Compositor_API overrides:
     41   virtual PP_Resource AddLayer() OVERRIDE;
     42   virtual int32_t CommitLayers(
     43       const scoped_refptr<TrackedCallback>& callback) OVERRIDE;
     44   virtual int32_t ResetLayers() OVERRIDE;
     45 
     46   // IPC msg handlers:
     47   void OnPluginMsgCommitLayersReply(const ResourceMessageReplyParams& params);
     48   void OnPluginMsgReleaseResource(
     49       const ResourceMessageReplyParams& params,
     50       int32_t id,
     51       uint32_t sync_point,
     52       bool is_lost);
     53 
     54   void ResetLayersInternal(bool is_aborted);
     55 
     56   // Callback for CommitLayers().
     57   scoped_refptr<TrackedCallback> commit_callback_;
     58 
     59   // True if layers_ has been reset by ResetLayers().
     60   bool layer_reset_;
     61 
     62   // Layer stack.
     63   typedef std::vector<scoped_refptr<CompositorLayerResource> > LayerList;
     64   LayerList layers_;
     65 
     66   // Release callback map for texture and image.
     67   typedef CompositorLayerResource::ReleaseCallback ReleaseCallback;
     68   typedef std::map<int32_t, ReleaseCallback> ReleaseCallbackMap;
     69   ReleaseCallbackMap release_callback_map_;
     70 
     71   // The last resource id for texture or image.
     72   mutable int32_t last_resource_id_;
     73 
     74   DISALLOW_COPY_AND_ASSIGN(CompositorResource);
     75 };
     76 
     77 }  // namespace proxy
     78 }  // namespace ppapi
     79 
     80 #endif  // PPAPI_PROXY_COMPOSITOR_RESOURCE_H_
     81