Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(60)

Side by Side Diff: ppapi/proxy/ppb_image_data_proxy.cc

Issue 5410001: Change trusted shared memory interface to match audio.... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 10 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « ppapi/proxy/ppb_image_data_proxy.h ('k') | ppapi/tests/test_buffer.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "ppapi/proxy/ppb_image_data_proxy.h" 5 #include "ppapi/proxy/ppb_image_data_proxy.h"
6 6
7 #include <string.h> // For memcpy 7 #include <string.h> // For memcpy
8 8
9 #include <vector> 9 #include <vector>
10 10
11 #include "base/logging.h" 11 #include "base/logging.h"
12 #include "build/build_config.h" 12 #include "build/build_config.h"
13 #include "ppapi/c/pp_completion_callback.h" 13 #include "ppapi/c/pp_completion_callback.h"
14 #include "ppapi/c/pp_errors.h"
14 #include "ppapi/c/pp_resource.h" 15 #include "ppapi/c/pp_resource.h"
15 #include "ppapi/c/ppb_image_data.h" 16 #include "ppapi/c/ppb_image_data.h"
16 #include "ppapi/c/trusted/ppb_image_data_trusted.h" 17 #include "ppapi/c/trusted/ppb_image_data_trusted.h"
17 #include "ppapi/proxy/plugin_dispatcher.h" 18 #include "ppapi/proxy/plugin_dispatcher.h"
18 #include "ppapi/proxy/plugin_resource.h" 19 #include "ppapi/proxy/plugin_resource.h"
19 #include "ppapi/proxy/ppapi_messages.h" 20 #include "ppapi/proxy/ppapi_messages.h"
20 21
21 #if defined(OS_LINUX) 22 #if defined(OS_LINUX)
22 #include <sys/shm.h> 23 #include <sys/shm.h>
23 #endif 24 #endif
24 25
25 namespace pp { 26 namespace pp {
26 namespace proxy { 27 namespace proxy {
27 28
28 class ImageData : public PluginResource { 29 class ImageData : public PluginResource {
29 public: 30 public:
30 ImageData(const PP_ImageDataDesc& desc, uint64_t memory_handle); 31 ImageData(const PP_ImageDataDesc& desc, int memory_handle);
31 virtual ~ImageData(); 32 virtual ~ImageData();
32 33
33 // Resource overrides. 34 // Resource overrides.
34 virtual ImageData* AsImageData() { return this; } 35 virtual ImageData* AsImageData() { return this; }
35 36
36 void* Map(); 37 void* Map();
37 void Unmap(); 38 void Unmap();
38 39
39 const PP_ImageDataDesc& desc() const { return desc_; } 40 const PP_ImageDataDesc& desc() const { return desc_; }
40 41
41 private: 42 private:
42 PP_ImageDataDesc desc_; 43 PP_ImageDataDesc desc_;
43 uint64_t memory_handle_; 44 int memory_handle_;
44 45
45 void* mapped_data_; 46 void* mapped_data_;
46 47
47 DISALLOW_COPY_AND_ASSIGN(ImageData); 48 DISALLOW_COPY_AND_ASSIGN(ImageData);
48 }; 49 };
49 50
50 ImageData::ImageData(const PP_ImageDataDesc& desc, 51 ImageData::ImageData(const PP_ImageDataDesc& desc,
51 uint64_t memory_handle) 52 int memory_handle)
52 : desc_(desc), 53 : desc_(desc),
53 memory_handle_(memory_handle), 54 memory_handle_(memory_handle),
54 mapped_data_(NULL) { 55 mapped_data_(NULL) {
55 } 56 }
56 57
57 ImageData::~ImageData() { 58 ImageData::~ImageData() {
58 Unmap(); 59 Unmap();
59 } 60 }
60 61
61 void* ImageData::Map() { 62 void* ImageData::Map() {
62 #if defined(OS_LINUX) 63 #if defined(OS_LINUX)
63 // On linux, the memory handle is a SysV shared memory segment. 64 // On linux, the memory handle is a SysV shared memory segment.
64 int shmkey = static_cast<int>(memory_handle_); 65 int shmkey = memory_handle_;
65 void* address = shmat(shmkey, NULL, 0); 66 void* address = shmat(shmkey, NULL, 0);
66 // Mark for deletion in case we crash so the kernel will clean it up. 67 // Mark for deletion in case we crash so the kernel will clean it up.
67 shmctl(shmkey, IPC_RMID, 0); 68 shmctl(shmkey, IPC_RMID, 0);
68 if (address == (void*)-1) 69 if (address == (void*)-1)
69 return NULL; 70 return NULL;
70 mapped_data_ = address; 71 mapped_data_ = address;
71 return address; 72 return address;
72 #else 73 #else
73 NOTIMPLEMENTED(); 74 NOTIMPLEMENTED();
74 return NULL; 75 return NULL;
(...skipping 28 matching lines...) Expand all
103 &supported)); 104 &supported));
104 return supported; 105 return supported;
105 } 106 }
106 107
107 PP_Resource Create(PP_Module module_id, 108 PP_Resource Create(PP_Module module_id,
108 PP_ImageDataFormat format, 109 PP_ImageDataFormat format,
109 const PP_Size* size, 110 const PP_Size* size,
110 PP_Bool init_to_zero) { 111 PP_Bool init_to_zero) {
111 PP_Resource result = 0; 112 PP_Resource result = 0;
112 std::string image_data_desc; 113 std::string image_data_desc;
113 uint64_t shm_handle = -1; 114 int shm_handle = -1;
114 PluginDispatcher::Get()->Send( 115 PluginDispatcher::Get()->Send(
115 new PpapiHostMsg_PPBImageData_Create( 116 new PpapiHostMsg_PPBImageData_Create(
116 INTERFACE_ID_PPB_IMAGE_DATA, module_id, format, *size, init_to_zero, 117 INTERFACE_ID_PPB_IMAGE_DATA, module_id, format, *size, init_to_zero,
117 &result, &image_data_desc, &shm_handle)); 118 &result, &image_data_desc, &shm_handle));
118 119
119 if (result && image_data_desc.size() == sizeof(PP_ImageDataDesc)) { 120 if (result && image_data_desc.size() == sizeof(PP_ImageDataDesc)) {
120 // We serialize the PP_ImageDataDesc just by copying to a string. 121 // We serialize the PP_ImageDataDesc just by copying to a string.
121 PP_ImageDataDesc desc; 122 PP_ImageDataDesc desc;
122 memcpy(&desc, image_data_desc.data(), sizeof(PP_ImageDataDesc)); 123 memcpy(&desc, image_data_desc.data(), sizeof(PP_ImageDataDesc));
123 124
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
203 *result = ppb_image_data_target()->IsImageDataFormatSupported( 204 *result = ppb_image_data_target()->IsImageDataFormatSupported(
204 static_cast<PP_ImageDataFormat>(format)); 205 static_cast<PP_ImageDataFormat>(format));
205 } 206 }
206 207
207 void PPB_ImageData_Proxy::OnMsgCreate(PP_Module module, 208 void PPB_ImageData_Proxy::OnMsgCreate(PP_Module module,
208 int32_t format, 209 int32_t format,
209 const PP_Size& size, 210 const PP_Size& size,
210 PP_Bool init_to_zero, 211 PP_Bool init_to_zero,
211 PP_Resource* result, 212 PP_Resource* result,
212 std::string* image_data_desc, 213 std::string* image_data_desc,
213 uint64_t* result_shm_handle) { 214 int* result_shm_handle) {
214 *result = ppb_image_data_target()->Create( 215 *result = ppb_image_data_target()->Create(
215 module, static_cast<PP_ImageDataFormat>(format), &size, init_to_zero); 216 module, static_cast<PP_ImageDataFormat>(format), &size, init_to_zero);
216 *result_shm_handle = 0; 217 *result_shm_handle = 0;
217 if (*result) { 218 if (*result) {
218 // The ImageDesc is just serialized as a string. 219 // The ImageDesc is just serialized as a string.
219 PP_ImageDataDesc desc; 220 PP_ImageDataDesc desc;
220 if (ppb_image_data_target()->Describe(*result, &desc)) { 221 if (ppb_image_data_target()->Describe(*result, &desc)) {
221 image_data_desc->resize(sizeof(PP_ImageDataDesc)); 222 image_data_desc->resize(sizeof(PP_ImageDataDesc));
222 memcpy(&(*image_data_desc)[0], &desc, sizeof(PP_ImageDataDesc)); 223 memcpy(&(*image_data_desc)[0], &desc, sizeof(PP_ImageDataDesc));
223 } 224 }
224 225
225 // Get the shared memory handle. 226 // Get the shared memory handle.
226 const PPB_ImageDataTrusted* trusted = 227 const PPB_ImageDataTrusted* trusted =
227 reinterpret_cast<const PPB_ImageDataTrusted*>( 228 reinterpret_cast<const PPB_ImageDataTrusted*>(
228 dispatcher()->GetLocalInterface(PPB_IMAGEDATA_TRUSTED_INTERFACE)); 229 dispatcher()->GetLocalInterface(PPB_IMAGEDATA_TRUSTED_INTERFACE));
229 uint32_t byte_count = 0; 230 uint32_t byte_count = 0;
230 if (trusted) 231 if (trusted) {
231 *result_shm_handle = trusted->GetNativeMemoryHandle(*result, &byte_count); 232 int32_t handle;
233 if (trusted->GetSharedMemory(*result, &handle, &byte_count) == PP_OK)
234 *result_shm_handle = static_cast<int>(handle);
235 }
232 } 236 }
233 } 237 }
234 238
235 } // namespace proxy 239 } // namespace proxy
236 } // namespace pp 240 } // namespace pp
OLDNEW
« no previous file with comments | « ppapi/proxy/ppb_image_data_proxy.h ('k') | ppapi/tests/test_buffer.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698