Home | History | Annotate | Download | only in proxy
      1 // Copyright (c) 2012 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_PPB_GRAPHICS_3D_PROXY_H_
      6 #define PPAPI_PROXY_PPB_GRAPHICS_3D_PROXY_H_
      7 
      8 #include <vector>
      9 
     10 #include "base/memory/shared_memory.h"
     11 #include "gpu/command_buffer/common/command_buffer.h"
     12 #include "ppapi/c/pp_graphics_3d.h"
     13 #include "ppapi/c/pp_instance.h"
     14 #include "ppapi/proxy/interface_proxy.h"
     15 #include "ppapi/proxy/ppapi_proxy_export.h"
     16 #include "ppapi/proxy/proxy_completion_callback_factory.h"
     17 #include "ppapi/shared_impl/ppb_graphics_3d_shared.h"
     18 #include "ppapi/shared_impl/resource.h"
     19 #include "ppapi/utility/completion_callback_factory.h"
     20 
     21 namespace ppapi {
     22 
     23 class HostResource;
     24 
     25 namespace proxy {
     26 
     27 class SerializedHandle;
     28 class PpapiCommandBufferProxy;
     29 
     30 class PPAPI_PROXY_EXPORT Graphics3D : public PPB_Graphics3D_Shared {
     31  public:
     32   explicit Graphics3D(const HostResource& resource);
     33   virtual ~Graphics3D();
     34 
     35   bool Init(gpu::gles2::GLES2Implementation* share_gles2,
     36             const SerializedHandle& shared_state);
     37 
     38   // Graphics3DTrusted API. These are not implemented in the proxy.
     39   virtual PP_Bool SetGetBuffer(int32_t shm_id) OVERRIDE;
     40   virtual PP_Bool Flush(int32_t put_offset) OVERRIDE;
     41   virtual scoped_refptr<gpu::Buffer> CreateTransferBuffer(uint32_t size,
     42                                                           int32* id) OVERRIDE;
     43   virtual PP_Bool DestroyTransferBuffer(int32_t id) OVERRIDE;
     44   virtual gpu::CommandBuffer::State WaitForTokenInRange(int32_t start,
     45                                                         int32_t end) OVERRIDE;
     46   virtual gpu::CommandBuffer::State WaitForGetOffsetInRange(int32_t start,
     47                                                             int32_t end)
     48       OVERRIDE;
     49   virtual uint32_t InsertSyncPoint() OVERRIDE;
     50   virtual uint32_t InsertFutureSyncPoint() OVERRIDE;
     51   virtual void RetireSyncPoint(uint32_t sync_point) OVERRIDE;
     52 
     53  private:
     54   // PPB_Graphics3D_Shared overrides.
     55   virtual gpu::CommandBuffer* GetCommandBuffer() OVERRIDE;
     56   virtual gpu::GpuControl* GetGpuControl() OVERRIDE;
     57   virtual int32 DoSwapBuffers() OVERRIDE;
     58 
     59   scoped_ptr<PpapiCommandBufferProxy> command_buffer_;
     60 
     61   DISALLOW_COPY_AND_ASSIGN(Graphics3D);
     62 };
     63 
     64 class PPB_Graphics3D_Proxy : public InterfaceProxy {
     65  public:
     66   PPB_Graphics3D_Proxy(Dispatcher* dispatcher);
     67   virtual ~PPB_Graphics3D_Proxy();
     68 
     69   static PP_Resource CreateProxyResource(
     70       PP_Instance instance,
     71       PP_Resource share_context,
     72       const int32_t* attrib_list);
     73 
     74   // InterfaceProxy implementation.
     75   virtual bool OnMessageReceived(const IPC::Message& msg);
     76 
     77   static const ApiID kApiID = API_ID_PPB_GRAPHICS_3D;
     78 
     79  private:
     80   void OnMsgCreate(PP_Instance instance,
     81                    HostResource share_context,
     82                    const std::vector<int32_t>& attribs,
     83                    HostResource* result,
     84                    SerializedHandle* handle);
     85   void OnMsgSetGetBuffer(const HostResource& context,
     86                          int32 id);
     87   void OnMsgWaitForTokenInRange(const HostResource& context,
     88                                 int32 start,
     89                                 int32 end,
     90                                 gpu::CommandBuffer::State* state,
     91                                 bool* success);
     92   void OnMsgWaitForGetOffsetInRange(const HostResource& context,
     93                                     int32 start,
     94                                     int32 end,
     95                                     gpu::CommandBuffer::State* state,
     96                                     bool* success);
     97   void OnMsgAsyncFlush(const HostResource& context, int32 put_offset);
     98   void OnMsgCreateTransferBuffer(
     99       const HostResource& context,
    100       uint32 size,
    101       int32* id,
    102       ppapi::proxy::SerializedHandle* transfer_buffer);
    103   void OnMsgDestroyTransferBuffer(const HostResource& context,
    104                                   int32 id);
    105   void OnMsgSwapBuffers(const HostResource& context);
    106   void OnMsgInsertSyncPoint(const HostResource& context, uint32* sync_point);
    107   void OnMsgInsertFutureSyncPoint(const HostResource& context,
    108                                   uint32* sync_point);
    109   void OnMsgRetireSyncPoint(const HostResource& context, uint32 sync_point);
    110   // Renderer->plugin message handlers.
    111   void OnMsgSwapBuffersACK(const HostResource& context,
    112                            int32_t pp_error);
    113 
    114   void SendSwapBuffersACKToPlugin(int32_t result,
    115                                   const HostResource& context);
    116 
    117   ProxyCompletionCallbackFactory<PPB_Graphics3D_Proxy> callback_factory_;
    118 
    119   DISALLOW_COPY_AND_ASSIGN(PPB_Graphics3D_Proxy);
    120 };
    121 
    122 }  // namespace proxy
    123 }  // namespace ppapi
    124 
    125 #endif  // PPAPI_PROXY_PPB_GRAPHICS_3D_PROXY_H_
    126 
    127