Chromium Code Reviews| Index: ppapi/proxy/ppb_image_data_proxy.h |
| diff --git a/ppapi/proxy/ppb_image_data_proxy.h b/ppapi/proxy/ppb_image_data_proxy.h |
| index 2f2cd60a6831dc596e448454509b3a64e80b41cb..d7a6bd28e293957945c51e987b7f12b80bd7c0a2 100644 |
| --- a/ppapi/proxy/ppb_image_data_proxy.h |
| +++ b/ppapi/proxy/ppb_image_data_proxy.h |
| @@ -31,26 +31,14 @@ namespace proxy { |
| class SerializedHandle; |
| -// The proxied image data resource. Unlike most resources, this needs to be |
| -// public in the header since a number of other resources need to access it. |
| +// ImageData is an abstract base class for image data resources. Unlike most |
| +// resources, ImageData must be public in the header since a number of other |
| +// resources need to access it. |
| class PPAPI_PROXY_EXPORT ImageData |
| : public ppapi::Resource, |
| public NON_EXPORTED_BASE(ppapi::thunk::PPB_ImageData_API), |
| public ppapi::PPB_ImageData_Shared { |
| public: |
| -#if !defined(OS_NACL) |
| - ImageData(const ppapi::HostResource& resource, |
| - const PP_ImageDataDesc& desc, |
| - ImageHandle handle); |
| -#else |
| - // In NaCl, we only allow creating an ImageData using a SharedMemoryHandle. |
| - // ImageHandle can differ by host platform. We need something that is |
| - // more consistent across platforms for NaCl, so that we can communicate to |
| - // the host OS in a consistent way. |
| - ImageData(const ppapi::HostResource& resource, |
| - const PP_ImageDataDesc& desc, |
| - const base::SharedMemoryHandle& handle); |
| -#endif |
| virtual ~ImageData(); |
| // Resource overrides. |
| @@ -60,42 +48,79 @@ class PPAPI_PROXY_EXPORT ImageData |
| // PPB_ImageData API. |
| virtual PP_Bool Describe(PP_ImageDataDesc* desc) OVERRIDE; |
| - virtual void* Map() OVERRIDE; |
| - virtual void Unmap() OVERRIDE; |
| virtual int32_t GetSharedMemory(int* handle, uint32_t* byte_count) OVERRIDE; |
| - virtual SkCanvas* GetPlatformCanvas() OVERRIDE; |
| - virtual SkCanvas* GetCanvas() OVERRIDE; |
| virtual void SetIsCandidateForReuse() OVERRIDE; |
| const PP_ImageDataDesc& desc() const { return desc_; } |
| - // Prepares this image data to be recycled to the plugin. The contents will be |
| - // cleared if zero_contents is set. |
| + // Prepares this image data to be recycled to the plugin. Clears the contents |
| + // if zero_contents is true. |
| void RecycleToPlugin(bool zero_contents); |
| + protected: |
| + ImageData(const ppapi::HostResource& resource, |
| + const PP_ImageDataDesc& desc); |
| + |
| + PP_ImageDataDesc desc_; |
| + |
| + // Set to true when this ImageData is a good candidate for reuse. |
| + bool is_candidate_for_reuse_; |
| + |
| + DISALLOW_COPY_AND_ASSIGN(ImageData); |
| +}; |
| + |
| +// PlatformImageData is a full featured image data resource which can access |
| +// the underlying platform-specific canvas and ImageHandle. This can't be used |
| +// by NaCl apps. |
| #if !defined(OS_NACL) |
| +class PPAPI_PROXY_EXPORT PlatformImageData : public ImageData { |
| + public: |
| + PlatformImageData(const ppapi::HostResource& resource, |
| + const PP_ImageDataDesc& desc, |
| + ImageHandle handle); |
| + virtual ~PlatformImageData(); |
| + |
| + // PPB_ImageData API. |
| + virtual void* Map() OVERRIDE; |
| + virtual void Unmap() OVERRIDE; |
| + virtual SkCanvas* GetPlatformCanvas() OVERRIDE; |
| + virtual SkCanvas* GetCanvas() OVERRIDE; |
| + |
| static ImageHandle NullHandle(); |
| static ImageHandle HandleFromInt(int32_t i); |
| -#endif |
| private: |
| - PP_ImageDataDesc desc_; |
| - |
| -#if defined(OS_NACL) |
| - base::SharedMemory shm_; |
| - uint32 size_; |
| - int map_count_; |
| -#else |
| scoped_ptr<TransportDIB> transport_dib_; |
| // Null when the image isn't mapped. |
| scoped_ptr<SkCanvas> mapped_canvas_; |
| -#endif |
| - // Set to true when this ImageData is a good candidate for reuse. |
| - bool is_candidate_for_reuse_; |
| + DISALLOW_COPY_AND_ASSIGN(PlatformImageData); |
| +}; |
| +#endif // !defined(OS_NACL) |
| - DISALLOW_COPY_AND_ASSIGN(ImageData); |
| +// SimpleImageData is a simple, platform independent image data resource which |
|
dmichael (off chromium)
2013/06/10 18:07:29
teeny nit: I would hyphenate platform-independent.
bbudge
2013/06/10 23:28:37
Done.
|
| +// can be used by NaCl. It can also be used by trusted apps when access to the |
| +// platform canvas isn't needed. |
| +class PPAPI_PROXY_EXPORT SimpleImageData : public ImageData { |
| + public: |
| + SimpleImageData(const ppapi::HostResource& resource, |
| + const PP_ImageDataDesc& desc, |
| + const base::SharedMemoryHandle& handle); |
| + virtual ~SimpleImageData(); |
| + |
| + // PPB_ImageData API. |
| + virtual void* Map() OVERRIDE; |
| + virtual void Unmap() OVERRIDE; |
| + virtual SkCanvas* GetPlatformCanvas() OVERRIDE; |
| + virtual SkCanvas* GetCanvas() OVERRIDE; |
| + |
| + private: |
| + base::SharedMemory shm_; |
| + uint32 size_; |
| + int map_count_; |
| + |
| + DISALLOW_COPY_AND_ASSIGN(SimpleImageData); |
| }; |
| class PPB_ImageData_Proxy : public InterfaceProxy { |
| @@ -106,7 +131,8 @@ class PPB_ImageData_Proxy : public InterfaceProxy { |
| static PP_Resource CreateProxyResource(PP_Instance instance, |
| PP_ImageDataFormat format, |
| const PP_Size& size, |
| - PP_Bool init_to_zero); |
| + PP_Bool init_to_zero, |
| + PP_Bool platform); |
| // InterfaceProxy implementation. |
| virtual bool OnMessageReceived(const IPC::Message& msg); |
| @@ -115,6 +141,8 @@ class PPB_ImageData_Proxy : public InterfaceProxy { |
| // This can only be called on the host side of the proxy. |
| // On failure, will return invalid resource (0). On success it will return a |
| // valid resource and the out params will be written. |
| + // |platform| determines whether a PlatformImageData or SimpleImageData is |
| + // created. |
| // |desc| contains the result of Describe. |
| // |image_handle| and |byte_count| contain the result of GetSharedMemory. |
| // NOTE: if |init_to_zero| is false, you should write over the entire image |
| @@ -124,7 +152,7 @@ class PPB_ImageData_Proxy : public InterfaceProxy { |
| PP_ImageDataFormat format, |
| const PP_Size& size, |
| bool init_to_zero, |
| - bool is_nacl_plugin, |
| + bool platform, |
|
dmichael (off chromium)
2013/06/10 18:07:29
suggestion: you could use an enum for this, to mak
bbudge
2013/06/10 23:28:37
Done. Moved the one in PPB_ImageData_Impl to PPB_I
|
| PP_ImageDataDesc* desc, |
| IPC::PlatformFileForTransit* image_handle, |
| uint32_t* byte_count); |
| @@ -133,20 +161,22 @@ class PPB_ImageData_Proxy : public InterfaceProxy { |
| private: |
| // Plugin->Host message handlers. |
| - void OnHostMsgCreate(PP_Instance instance, |
| - int32_t format, |
| - const PP_Size& size, |
| - PP_Bool init_to_zero, |
| - HostResource* result, |
| - std::string* image_data_desc, |
| - ImageHandle* result_image_handle); |
| - void OnHostMsgCreateNaCl(PP_Instance instance, |
| - int32_t format, |
| - const PP_Size& size, |
| - PP_Bool init_to_zero, |
| - HostResource* result, |
| - std::string* image_data_desc, |
| - ppapi::proxy::SerializedHandle* result_image_handle); |
| + void OnHostMsgCreatePlatform( |
| + PP_Instance instance, |
| + int32_t format, |
| + const PP_Size& size, |
| + PP_Bool init_to_zero, |
| + HostResource* result, |
| + PP_ImageDataDesc* desc, |
| + ImageHandle* result_image_handle); |
| + void OnHostMsgCreateSimple( |
| + PP_Instance instance, |
| + int32_t format, |
| + const PP_Size& size, |
| + PP_Bool init_to_zero, |
| + HostResource* result, |
| + PP_ImageDataDesc* desc, |
| + ppapi::proxy::SerializedHandle* result_image_handle); |
| // Host->Plugin message handlers. |
| void OnPluginMsgNotifyUnusedImageData(const HostResource& old_image_data); |