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/proxy_completion_callback_factory.h"
     16 #include "ppapi/shared_impl/ppb_graphics_3d_shared.h"
     17 #include "ppapi/shared_impl/resource.h"
     18 #include "ppapi/utility/completion_callback_factory.h"
     19 
     20 namespace ppapi {
     21 
     22 class HostResource;
     23 
     24 namespace proxy {
     25 
     26 class SerializedHandle;
     27 class PpapiCommandBufferProxy;
     28 
     29 class Graphics3D : public PPB_Graphics3D_Shared {
     30  public:
     31   explicit Graphics3D(const HostResource& resource);
     32   virtual ~Graphics3D();
     33 
     34   bool Init(gpu::gles2::GLES2Implementation* share_gles2);
     35 
     36   // Graphics3DTrusted API. These are not implemented in the proxy.
     37   virtual PP_Bool SetGetBuffer(int32_t shm_id) OVERRIDE;
     38   virtual gpu::CommandBuffer::State GetState() OVERRIDE;
     39   virtual PP_Bool Flush(int32_t put_offset) OVERRIDE;
     40   virtual gpu::CommandBuffer::State FlushSync(int32_t put_offset) OVERRIDE;
     41   virtual int32_t CreateTransferBuffer(uint32_t size) OVERRIDE;
     42   virtual PP_Bool DestroyTransferBuffer(int32_t id) OVERRIDE;
     43   virtual PP_Bool GetTransferBuffer(int32_t id,
     44                                     int* shm_handle,
     45                                     uint32_t* shm_size) OVERRIDE;
     46   virtual gpu::CommandBuffer::State FlushSyncFast(
     47       int32_t put_offset,
     48       int32_t last_known_get) OVERRIDE;
     49   virtual uint32_t InsertSyncPoint() OVERRIDE;
     50 
     51  private:
     52   // PPB_Graphics3D_Shared overrides.
     53   virtual gpu::CommandBuffer* GetCommandBuffer() OVERRIDE;
     54   virtual gpu::GpuControl* GetGpuControl() OVERRIDE;
     55   virtual int32 DoSwapBuffers() OVERRIDE;
     56 
     57   scoped_ptr<PpapiCommandBufferProxy> command_buffer_;
     58 
     59   DISALLOW_COPY_AND_ASSIGN(Graphics3D);
     60 };
     61 
     62 class PPB_Graphics3D_Proxy : public InterfaceProxy {
     63  public:
     64   PPB_Graphics3D_Proxy(Dispatcher* dispatcher);
     65   virtual ~PPB_Graphics3D_Proxy();
     66 
     67   static PP_Resource CreateProxyResource(
     68       PP_Instance instance,
     69       PP_Resource share_context,
     70       const int32_t* attrib_list);
     71 
     72   // InterfaceProxy implementation.
     73   virtual bool OnMessageReceived(const IPC::Message& msg);
     74 
     75   static const ApiID kApiID = API_ID_PPB_GRAPHICS_3D;
     76 
     77  private:
     78   void OnMsgCreate(PP_Instance instance,
     79                    HostResource share_context,
     80                    const std::vector<int32_t>& attribs,
     81                    HostResource* result);
     82   void OnMsgSetGetBuffer(const HostResource& context,
     83                          int32 id);
     84   void OnMsgGetState(const HostResource& context,
     85                      gpu::CommandBuffer::State* state,
     86                      bool* success);
     87   void OnMsgFlush(const HostResource& context,
     88                   int32 put_offset,
     89                   int32 last_known_get,
     90                   gpu::CommandBuffer::State* state,
     91                   bool* success);
     92   void OnMsgAsyncFlush(const HostResource& context,
     93                        int32 put_offset);
     94   void OnMsgCreateTransferBuffer(const HostResource& context,
     95                                  uint32 size,
     96                                  int32* id);
     97   void OnMsgDestroyTransferBuffer(const HostResource& context,
     98                                   int32 id);
     99   void OnMsgGetTransferBuffer(const HostResource& context,
    100                               int32 id,
    101                               ppapi::proxy::SerializedHandle* transfer_buffer);
    102   void OnMsgSwapBuffers(const HostResource& context);
    103   void OnMsgInsertSyncPoint(const HostResource& context, uint32* sync_point);
    104   // Renderer->plugin message handlers.
    105   void OnMsgSwapBuffersACK(const HostResource& context,
    106                            int32_t pp_error);
    107 
    108   void SendSwapBuffersACKToPlugin(int32_t result,
    109                                   const HostResource& context);
    110 
    111   ProxyCompletionCallbackFactory<PPB_Graphics3D_Proxy> callback_factory_;
    112 
    113   DISALLOW_COPY_AND_ASSIGN(PPB_Graphics3D_Proxy);
    114 };
    115 
    116 }  // namespace proxy
    117 }  // namespace ppapi
    118 
    119 #endif  // PPAPI_PROXY_PPB_GRAPHICS_3D_PROXY_H_
    120 
    121