Upstream version 10.39.225.0
[platform/framework/web/crosswalk.git] / src / content / common / gpu / gpu_messages.h
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 // Multiply-included message file, hence no include guard here, but see below
6 // for a much smaller-than-usual include guard section.
7
8 #include <string>
9 #include <vector>
10
11 #include "base/memory/shared_memory.h"
12 #include "content/common/content_export.h"
13 #include "content/common/gpu/gpu_memory_uma_stats.h"
14 #include "content/common/gpu/gpu_process_launch_causes.h"
15 #include "content/common/gpu/gpu_result_codes.h"
16 #include "content/public/common/common_param_traits.h"
17 #include "content/public/common/gpu_memory_stats.h"
18 #include "gpu/command_buffer/common/capabilities.h"
19 #include "gpu/command_buffer/common/command_buffer.h"
20 #include "gpu/command_buffer/common/constants.h"
21 #include "gpu/command_buffer/common/gpu_memory_allocation.h"
22 #include "gpu/command_buffer/common/mailbox.h"
23 #include "gpu/config/gpu_info.h"
24 #include "gpu/ipc/gpu_command_buffer_traits.h"
25 #include "ipc/ipc_channel_handle.h"
26 #include "ipc/ipc_message_macros.h"
27 #include "media/base/video_frame.h"
28 #include "media/video/video_decode_accelerator.h"
29 #include "media/video/video_encode_accelerator.h"
30 #include "ui/events/latency_info.h"
31 #include "ui/gfx/gpu_memory_buffer.h"
32 #include "ui/gfx/native_widget_types.h"
33 #include "ui/gfx/size.h"
34 #include "ui/gl/gpu_preference.h"
35
36 #if defined(OS_ANDROID)
37 #include "content/common/android/surface_texture_peer.h"
38 #endif
39
40 #undef IPC_MESSAGE_EXPORT
41 #define IPC_MESSAGE_EXPORT CONTENT_EXPORT
42
43 #define IPC_MESSAGE_START GpuMsgStart
44
45 IPC_ENUM_TRAITS_MAX_VALUE(content::CauseForGpuLaunch,
46                           content::CAUSE_FOR_GPU_LAUNCH_MAX_ENUM - 1)
47 IPC_ENUM_TRAITS_MAX_VALUE(content::CreateCommandBufferResult,
48                           content::CREATE_COMMAND_BUFFER_RESULT_LAST)
49 IPC_ENUM_TRAITS_MAX_VALUE(gfx::GpuPreference,
50                           gfx::GpuPreferenceLast)
51 IPC_ENUM_TRAITS_MAX_VALUE(gfx::SurfaceType,
52                           gfx::SURFACE_TYPE_LAST)
53 IPC_ENUM_TRAITS_MAX_VALUE(gpu::MemoryAllocation::PriorityCutoff,
54                           gpu::MemoryAllocation::CUTOFF_LAST)
55 IPC_ENUM_TRAITS_MAX_VALUE(gpu::error::ContextLostReason,
56                           gpu::error::kContextLostReasonLast)
57 IPC_ENUM_TRAITS_MAX_VALUE(media::VideoEncodeAccelerator::Error,
58                           media::VideoEncodeAccelerator::kErrorMax)
59 IPC_ENUM_TRAITS_MAX_VALUE(media::VideoFrame::Format,
60                           media::VideoFrame::FORMAT_MAX)
61 IPC_ENUM_TRAITS_MIN_MAX_VALUE(media::VideoCodecProfile,
62                               media::VIDEO_CODEC_PROFILE_MIN,
63                               media::VIDEO_CODEC_PROFILE_MAX)
64 IPC_ENUM_TRAITS_MIN_MAX_VALUE(gpu::CollectInfoResult,
65                               gpu::kCollectInfoNone,
66                               gpu::kCollectInfoFatalFailure)
67
68 IPC_STRUCT_BEGIN(GPUCreateCommandBufferConfig)
69   IPC_STRUCT_MEMBER(int32, share_group_id)
70   IPC_STRUCT_MEMBER(std::vector<int>, attribs)
71   IPC_STRUCT_MEMBER(GURL, active_url)
72   IPC_STRUCT_MEMBER(gfx::GpuPreference, gpu_preference)
73 IPC_STRUCT_END()
74
75 IPC_STRUCT_BEGIN(GpuHostMsg_AcceleratedSurfaceBuffersSwapped_Params)
76   IPC_STRUCT_MEMBER(int32, surface_id)
77   IPC_STRUCT_MEMBER(uint64, surface_handle)
78   IPC_STRUCT_MEMBER(int32, route_id)
79   IPC_STRUCT_MEMBER(gpu::Mailbox, mailbox)
80   IPC_STRUCT_MEMBER(gfx::Size, size)
81   IPC_STRUCT_MEMBER(float, scale_factor)
82   IPC_STRUCT_MEMBER(std::vector<ui::LatencyInfo>, latency_info)
83 IPC_STRUCT_END()
84
85 IPC_STRUCT_BEGIN(GpuHostMsg_AcceleratedSurfacePostSubBuffer_Params)
86   IPC_STRUCT_MEMBER(int32, surface_id)
87   IPC_STRUCT_MEMBER(uint64, surface_handle)
88   IPC_STRUCT_MEMBER(int32, route_id)
89   IPC_STRUCT_MEMBER(int, x)
90   IPC_STRUCT_MEMBER(int, y)
91   IPC_STRUCT_MEMBER(int, width)
92   IPC_STRUCT_MEMBER(int, height)
93   IPC_STRUCT_MEMBER(gpu::Mailbox, mailbox)
94   IPC_STRUCT_MEMBER(gfx::Size, surface_size)
95   IPC_STRUCT_MEMBER(float, surface_scale_factor)
96   IPC_STRUCT_MEMBER(std::vector<ui::LatencyInfo>, latency_info)
97 IPC_STRUCT_END()
98
99 IPC_STRUCT_BEGIN(GpuHostMsg_AcceleratedSurfaceRelease_Params)
100   IPC_STRUCT_MEMBER(int32, surface_id)
101 IPC_STRUCT_END()
102
103 IPC_STRUCT_BEGIN(AcceleratedSurfaceMsg_BufferPresented_Params)
104   IPC_STRUCT_MEMBER(gpu::Mailbox, mailbox)
105   IPC_STRUCT_MEMBER(uint32, sync_point)
106 #if defined(OS_MACOSX)
107   IPC_STRUCT_MEMBER(int32, renderer_id)
108 #endif
109 #if defined(OS_WIN)
110   IPC_STRUCT_MEMBER(base::TimeTicks, vsync_timebase)
111   IPC_STRUCT_MEMBER(base::TimeDelta, vsync_interval)
112 #endif
113 IPC_STRUCT_END()
114
115 IPC_STRUCT_BEGIN(GPUCommandBufferConsoleMessage)
116   IPC_STRUCT_MEMBER(int32, id)
117   IPC_STRUCT_MEMBER(std::string, message)
118 IPC_STRUCT_END()
119
120 #if defined(OS_ANDROID)
121 IPC_STRUCT_BEGIN(GpuStreamTextureMsg_MatrixChanged_Params)
122   IPC_STRUCT_MEMBER(float, m00)
123   IPC_STRUCT_MEMBER(float, m01)
124   IPC_STRUCT_MEMBER(float, m02)
125   IPC_STRUCT_MEMBER(float, m03)
126   IPC_STRUCT_MEMBER(float, m10)
127   IPC_STRUCT_MEMBER(float, m11)
128   IPC_STRUCT_MEMBER(float, m12)
129   IPC_STRUCT_MEMBER(float, m13)
130   IPC_STRUCT_MEMBER(float, m20)
131   IPC_STRUCT_MEMBER(float, m21)
132   IPC_STRUCT_MEMBER(float, m22)
133   IPC_STRUCT_MEMBER(float, m23)
134   IPC_STRUCT_MEMBER(float, m30)
135   IPC_STRUCT_MEMBER(float, m31)
136   IPC_STRUCT_MEMBER(float, m32)
137   IPC_STRUCT_MEMBER(float, m33)
138 IPC_STRUCT_END()
139 #endif
140
141   IPC_STRUCT_TRAITS_BEGIN(gpu::DxDiagNode)
142   IPC_STRUCT_TRAITS_MEMBER(values)
143   IPC_STRUCT_TRAITS_MEMBER(children)
144 IPC_STRUCT_TRAITS_END()
145
146 IPC_STRUCT_TRAITS_BEGIN(gpu::GpuPerformanceStats)
147   IPC_STRUCT_TRAITS_MEMBER(graphics)
148   IPC_STRUCT_TRAITS_MEMBER(gaming)
149   IPC_STRUCT_TRAITS_MEMBER(overall)
150 IPC_STRUCT_TRAITS_END()
151
152 IPC_STRUCT_TRAITS_BEGIN(gpu::GPUInfo::GPUDevice)
153   IPC_STRUCT_TRAITS_MEMBER(vendor_id)
154   IPC_STRUCT_TRAITS_MEMBER(device_id)
155   IPC_STRUCT_TRAITS_MEMBER(active)
156   IPC_STRUCT_TRAITS_MEMBER(vendor_string)
157   IPC_STRUCT_TRAITS_MEMBER(device_string)
158 IPC_STRUCT_TRAITS_END()
159
160 IPC_STRUCT_TRAITS_BEGIN(media::VideoEncodeAccelerator::SupportedProfile)
161   IPC_STRUCT_TRAITS_MEMBER(profile)
162   IPC_STRUCT_TRAITS_MEMBER(max_resolution)
163   IPC_STRUCT_TRAITS_MEMBER(max_framerate_numerator)
164   IPC_STRUCT_TRAITS_MEMBER(max_framerate_denominator)
165 IPC_STRUCT_TRAITS_END()
166
167 IPC_STRUCT_TRAITS_BEGIN(gpu::GPUInfo)
168   IPC_STRUCT_TRAITS_MEMBER(initialization_time)
169   IPC_STRUCT_TRAITS_MEMBER(optimus)
170   IPC_STRUCT_TRAITS_MEMBER(amd_switchable)
171   IPC_STRUCT_TRAITS_MEMBER(lenovo_dcute)
172   IPC_STRUCT_TRAITS_MEMBER(gpu)
173   IPC_STRUCT_TRAITS_MEMBER(secondary_gpus)
174   IPC_STRUCT_TRAITS_MEMBER(adapter_luid)
175   IPC_STRUCT_TRAITS_MEMBER(driver_vendor)
176   IPC_STRUCT_TRAITS_MEMBER(driver_version)
177   IPC_STRUCT_TRAITS_MEMBER(driver_date)
178   IPC_STRUCT_TRAITS_MEMBER(pixel_shader_version)
179   IPC_STRUCT_TRAITS_MEMBER(vertex_shader_version)
180   IPC_STRUCT_TRAITS_MEMBER(machine_model_name)
181   IPC_STRUCT_TRAITS_MEMBER(machine_model_version)
182   IPC_STRUCT_TRAITS_MEMBER(gl_version)
183   IPC_STRUCT_TRAITS_MEMBER(gl_vendor)
184   IPC_STRUCT_TRAITS_MEMBER(gl_renderer)
185   IPC_STRUCT_TRAITS_MEMBER(gl_extensions)
186   IPC_STRUCT_TRAITS_MEMBER(gl_ws_vendor)
187   IPC_STRUCT_TRAITS_MEMBER(gl_ws_version)
188   IPC_STRUCT_TRAITS_MEMBER(gl_ws_extensions)
189   IPC_STRUCT_TRAITS_MEMBER(gl_reset_notification_strategy)
190   IPC_STRUCT_TRAITS_MEMBER(can_lose_context)
191   IPC_STRUCT_TRAITS_MEMBER(performance_stats)
192   IPC_STRUCT_TRAITS_MEMBER(software_rendering)
193   IPC_STRUCT_TRAITS_MEMBER(direct_rendering)
194   IPC_STRUCT_TRAITS_MEMBER(sandboxed)
195   IPC_STRUCT_TRAITS_MEMBER(process_crash_count)
196   IPC_STRUCT_TRAITS_MEMBER(basic_info_state)
197   IPC_STRUCT_TRAITS_MEMBER(context_info_state)
198 #if defined(OS_WIN)
199   IPC_STRUCT_TRAITS_MEMBER(dx_diagnostics_info_state)
200   IPC_STRUCT_TRAITS_MEMBER(dx_diagnostics)
201 #endif
202   IPC_STRUCT_TRAITS_MEMBER(video_encode_accelerator_supported_profiles)
203 IPC_STRUCT_TRAITS_END()
204
205 IPC_STRUCT_TRAITS_BEGIN(gpu::Capabilities)
206   IPC_STRUCT_TRAITS_MEMBER(post_sub_buffer)
207   IPC_STRUCT_TRAITS_MEMBER(egl_image_external)
208   IPC_STRUCT_TRAITS_MEMBER(texture_format_bgra8888)
209   IPC_STRUCT_TRAITS_MEMBER(texture_format_etc1)
210   IPC_STRUCT_TRAITS_MEMBER(texture_format_etc1_npot)
211   IPC_STRUCT_TRAITS_MEMBER(texture_rectangle)
212   IPC_STRUCT_TRAITS_MEMBER(iosurface)
213   IPC_STRUCT_TRAITS_MEMBER(texture_usage)
214   IPC_STRUCT_TRAITS_MEMBER(texture_storage)
215   IPC_STRUCT_TRAITS_MEMBER(discard_framebuffer)
216   IPC_STRUCT_TRAITS_MEMBER(sync_query)
217   IPC_STRUCT_TRAITS_MEMBER(map_image)
218 IPC_STRUCT_TRAITS_END()
219
220 IPC_STRUCT_TRAITS_BEGIN(content::GPUVideoMemoryUsageStats::ProcessStats)
221   IPC_STRUCT_TRAITS_MEMBER(video_memory)
222   IPC_STRUCT_TRAITS_MEMBER(has_duplicates)
223 IPC_STRUCT_TRAITS_END()
224
225 IPC_STRUCT_TRAITS_BEGIN(content::GPUVideoMemoryUsageStats)
226   IPC_STRUCT_TRAITS_MEMBER(process_map)
227   IPC_STRUCT_TRAITS_MEMBER(bytes_allocated)
228   IPC_STRUCT_TRAITS_MEMBER(bytes_allocated_historical_max)
229 IPC_STRUCT_TRAITS_END()
230
231 IPC_STRUCT_TRAITS_BEGIN(content::GPUMemoryUmaStats)
232   IPC_STRUCT_TRAITS_MEMBER(bytes_allocated_current)
233   IPC_STRUCT_TRAITS_MEMBER(bytes_allocated_max)
234   IPC_STRUCT_TRAITS_MEMBER(bytes_limit)
235 IPC_STRUCT_TRAITS_END()
236
237 IPC_STRUCT_TRAITS_BEGIN(gpu::MemoryAllocation)
238   IPC_STRUCT_TRAITS_MEMBER(bytes_limit_when_visible)
239   IPC_STRUCT_TRAITS_MEMBER(priority_cutoff_when_visible)
240 IPC_STRUCT_TRAITS_END()
241
242 IPC_STRUCT_TRAITS_BEGIN(gfx::GLSurfaceHandle)
243   IPC_STRUCT_TRAITS_MEMBER(handle)
244   IPC_STRUCT_TRAITS_MEMBER(transport_type)
245   IPC_STRUCT_TRAITS_MEMBER(parent_client_id)
246 IPC_STRUCT_TRAITS_END()
247
248 //------------------------------------------------------------------------------
249 // GPU Messages
250 // These are messages from the browser to the GPU process.
251
252 // Tells the GPU process to initialize itself. The browser explicitly
253 // requests this be done so that we are guaranteed that the channel is set
254 // up between the browser and GPU process before doing any work that might
255 // potentially crash the GPU process. Detection of the child process
256 // exiting abruptly is predicated on having the IPC channel set up.
257 IPC_MESSAGE_CONTROL0(GpuMsg_Initialize)
258
259 // Tells the GPU process to create a new channel for communication with a
260 // given client.  The channel name is returned in a
261 // GpuHostMsg_ChannelEstablished message.  The client ID is passed so that
262 // the GPU process reuses an existing channel to that process if it exists.
263 // This ID is a unique opaque identifier generated by the browser process.
264 IPC_MESSAGE_CONTROL3(GpuMsg_EstablishChannel,
265                      int /* client_id */,
266                      bool /* share_context */,
267                      bool /* allow_future_sync_points */)
268
269 // Tells the GPU process to close the channel identified by IPC channel
270 // handle.  If no channel can be identified, do nothing.
271 IPC_MESSAGE_CONTROL1(GpuMsg_CloseChannel,
272                      IPC::ChannelHandle /* channel_handle */)
273
274 // Tells the GPU process to create a new command buffer that renders directly
275 // to a native view. A corresponding GpuCommandBufferStub is created.
276 IPC_MESSAGE_CONTROL5(GpuMsg_CreateViewCommandBuffer,
277                      gfx::GLSurfaceHandle, /* compositing_surface */
278                      int32, /* surface_id */
279                      int32, /* client_id */
280                      GPUCreateCommandBufferConfig, /* init_params */
281                      int32 /* route_id */)
282
283 // Tells the GPU process to create a new gpu memory buffer for |handle|.
284 IPC_MESSAGE_CONTROL4(GpuMsg_CreateGpuMemoryBuffer,
285                      gfx::GpuMemoryBufferHandle, /* handle */
286                      gfx::Size, /* size */
287                      unsigned, /* internalformat */
288                      unsigned /* usage */)
289
290 // Tells the GPU process to destroy buffer.
291 IPC_MESSAGE_CONTROL2(GpuMsg_DestroyGpuMemoryBuffer,
292                      gfx::GpuMemoryBufferHandle, /* handle */
293                      int32 /* sync_point */)
294
295 // Tells the GPU process to create a context for collecting graphics card
296 // information.
297 IPC_MESSAGE_CONTROL0(GpuMsg_CollectGraphicsInfo)
298
299 // Tells the GPU process to report video_memory information for the task manager
300 IPC_MESSAGE_CONTROL0(GpuMsg_GetVideoMemoryUsageStats)
301
302 // Tells the GPU process that the browser process has handled the swap
303 // buffers or post sub-buffer request. A non-zero sync point means
304 // that we should wait for the sync point. The surface_handle identifies
305 // that buffer that has finished presented, i.e. the buffer being returned.
306 IPC_MESSAGE_ROUTED1(AcceleratedSurfaceMsg_BufferPresented,
307                     AcceleratedSurfaceMsg_BufferPresented_Params)
308
309 // Tells the GPU process to wake up the GPU because we're about to draw.
310 IPC_MESSAGE_ROUTED0(AcceleratedSurfaceMsg_WakeUpGpu)
311
312 // Tells the GPU process to remove all contexts.
313 IPC_MESSAGE_CONTROL0(GpuMsg_Clean)
314
315 // Tells the GPU process to crash.
316 IPC_MESSAGE_CONTROL0(GpuMsg_Crash)
317
318 // Tells the GPU process to hang.
319 IPC_MESSAGE_CONTROL0(GpuMsg_Hang)
320
321 // Tells the GPU process to disable the watchdog thread.
322 IPC_MESSAGE_CONTROL0(GpuMsg_DisableWatchdog)
323
324 //------------------------------------------------------------------------------
325 // GPU Host Messages
326 // These are messages to the browser.
327
328 // A renderer sends this when it wants to create a connection to the GPU
329 // process. The browser will create the GPU process if necessary, and will
330 // return a handle to the channel via a GpuChannelEstablished message.
331 IPC_SYNC_MESSAGE_CONTROL1_3(GpuHostMsg_EstablishGpuChannel,
332                             content::CauseForGpuLaunch,
333                             int /* client id */,
334                             IPC::ChannelHandle /* handle to channel */,
335                             gpu::GPUInfo /* stats about GPU process*/)
336
337 // A renderer sends this to the browser process when it wants to
338 // create a GL context associated with the given view_id.
339 IPC_SYNC_MESSAGE_CONTROL3_1(GpuHostMsg_CreateViewCommandBuffer,
340                             int32, /* surface_id */
341                             GPUCreateCommandBufferConfig, /* init_params */
342                             int32, /* route_id */
343                             content::CreateCommandBufferResult /* result */)
344
345 // Response from GPU to a GputMsg_Initialize message.
346 IPC_MESSAGE_CONTROL2(GpuHostMsg_Initialized,
347                      bool /* result */,
348                      ::gpu::GPUInfo /* gpu_info */)
349
350 // Response from GPU to a GpuHostMsg_EstablishChannel message.
351 IPC_MESSAGE_CONTROL1(GpuHostMsg_ChannelEstablished,
352                      IPC::ChannelHandle /* channel_handle */)
353
354 // Message from GPU to notify to destroy the channel.
355 IPC_MESSAGE_CONTROL1(GpuHostMsg_DestroyChannel,
356                      int32 /* client_id */)
357
358 // Message to cache the given shader information.
359 IPC_MESSAGE_CONTROL3(GpuHostMsg_CacheShader,
360                      int32 /* client_id */,
361                      std::string /* key */,
362                      std::string /* shader */)
363
364 // Message to the GPU that a shader was loaded from disk.
365 IPC_MESSAGE_CONTROL1(GpuMsg_LoadedShader,
366                      std::string /* encoded shader */)
367
368 // Respond from GPU to a GpuMsg_CreateViewCommandBuffer message.
369 IPC_MESSAGE_CONTROL1(GpuHostMsg_CommandBufferCreated,
370                      content::CreateCommandBufferResult /* result */)
371
372 // Request from GPU to free the browser resources associated with the
373 // command buffer.
374 IPC_MESSAGE_CONTROL1(GpuHostMsg_DestroyCommandBuffer,
375                      int32 /* surface_id */)
376
377 // Response from GPU to a GpuMsg_CreateGpuMemoryBuffer message.
378 IPC_MESSAGE_CONTROL1(GpuHostMsg_GpuMemoryBufferCreated,
379                      gfx::GpuMemoryBufferHandle /* handle */)
380
381 // Response from GPU to a GpuMsg_CollectGraphicsInfo.
382 IPC_MESSAGE_CONTROL1(GpuHostMsg_GraphicsInfoCollected,
383                      gpu::GPUInfo /* GPU logging stats */)
384
385 // Response from GPU to a GpuMsg_GetVideoMemory.
386 IPC_MESSAGE_CONTROL1(GpuHostMsg_VideoMemoryUsageStats,
387                      content::GPUVideoMemoryUsageStats /* GPU memory stats */)
388
389 // Message from GPU to add a GPU log message to the about:gpu page.
390 IPC_MESSAGE_CONTROL3(GpuHostMsg_OnLogMessage,
391                      int /*severity*/,
392                      std::string /* header */,
393                      std::string /* message */)
394
395 // Tells the browser that a new accelerated surface was initialized.
396 IPC_MESSAGE_CONTROL2(GpuHostMsg_AcceleratedSurfaceInitialized,
397                      int32 /* surface_id */,
398                      int32 /* route_id */)
399
400 // Tells the browser that a frame with the specific latency info was drawn to
401 // the screen
402 IPC_MESSAGE_CONTROL1(GpuHostMsg_FrameDrawn,
403                      std::vector<ui::LatencyInfo> /* latency_info */)
404
405 // Same as above with a rect of the part of the surface that changed.
406 IPC_MESSAGE_CONTROL1(GpuHostMsg_AcceleratedSurfaceBuffersSwapped,
407                      GpuHostMsg_AcceleratedSurfaceBuffersSwapped_Params)
408
409 // This message notifies the browser process that the renderer
410 // swapped a portion of the buffers associated with the given "window", which
411 // should cause the browser to redraw the compositor's contents.
412 IPC_MESSAGE_CONTROL1(GpuHostMsg_AcceleratedSurfacePostSubBuffer,
413                      GpuHostMsg_AcceleratedSurfacePostSubBuffer_Params)
414
415 // Tells the browser to release whatever resources are associated with
416 // the given surface. The browser must send an ACK once this operation
417 // is complete.
418 IPC_MESSAGE_CONTROL1(GpuHostMsg_AcceleratedSurfaceRelease,
419                      GpuHostMsg_AcceleratedSurfaceRelease_Params)
420
421 // Tells the browser to release resources for the given surface until the next
422 // time swap buffers or post sub buffer is sent.
423 IPC_MESSAGE_CONTROL1(GpuHostMsg_AcceleratedSurfaceSuspend,
424                      int32 /* surface_id */)
425
426 // Tells the browser about updated parameters for vsync alignment.
427 IPC_MESSAGE_CONTROL3(GpuHostMsg_UpdateVSyncParameters,
428                      int32 /* surface_id */,
429                      base::TimeTicks /* timebase */,
430                      base::TimeDelta /* interval */)
431
432 IPC_MESSAGE_CONTROL1(GpuHostMsg_DidCreateOffscreenContext,
433                      GURL /* url */)
434
435 IPC_MESSAGE_CONTROL3(GpuHostMsg_DidLoseContext,
436                      bool /* offscreen */,
437                      gpu::error::ContextLostReason /* reason */,
438                      GURL /* url */)
439
440 IPC_MESSAGE_CONTROL1(GpuHostMsg_DidDestroyOffscreenContext,
441                      GURL /* url */)
442
443 // Tells the browser about GPU memory usage statistics for UMA logging.
444 IPC_MESSAGE_CONTROL1(GpuHostMsg_GpuMemoryUmaStats,
445                      content::GPUMemoryUmaStats /* GPU memory UMA stats */)
446
447 //------------------------------------------------------------------------------
448 // GPU Channel Messages
449 // These are messages from a renderer process to the GPU process.
450
451 // Tells the GPU process to create a new command buffer that renders to an
452 // offscreen frame buffer.
453 IPC_SYNC_MESSAGE_CONTROL3_1(GpuChannelMsg_CreateOffscreenCommandBuffer,
454                             gfx::Size, /* size */
455                             GPUCreateCommandBufferConfig, /* init_params */
456                             int32, /* route_id */
457                             bool /* succeeded */)
458
459 // The CommandBufferProxy sends this to the GpuCommandBufferStub in its
460 // destructor, so that the stub deletes the actual CommandBufferService
461 // object that it's hosting.
462 IPC_SYNC_MESSAGE_CONTROL1_0(GpuChannelMsg_DestroyCommandBuffer,
463                             int32 /* instance_id */)
464
465 // Sent by DevTools agent in the inspected renderer process to initiate GPU
466 // instrumentation events recording.
467 IPC_SYNC_MESSAGE_CONTROL1_1(GpuChannelMsg_DevToolsStartEventsRecording,
468                             int32, /* route_id */
469                             bool /* succeeded */)
470
471 // The message is sent when DevTools want to stop events recording.
472 IPC_MESSAGE_CONTROL0(GpuChannelMsg_DevToolsStopEventsRecording)
473
474 #if defined(OS_ANDROID)
475 //------------------------------------------------------------------------------
476 // Stream Texture Messages
477 // Tells the GPU process create and send the java surface texture object to
478 // the renderer process through the binder thread.
479 IPC_MESSAGE_ROUTED2(GpuStreamTextureMsg_EstablishPeer,
480                     int32, /* primary_id */
481                     int32  /* secondary_id */)
482
483 // Tells the GPU process to set the size of StreamTexture from the given
484 // stream Id.
485 IPC_MESSAGE_ROUTED1(GpuStreamTextureMsg_SetSize,
486                     gfx::Size /* size */)
487
488 // Tells the service-side instance to start sending frame available
489 // notifications.
490 IPC_MESSAGE_ROUTED0(GpuStreamTextureMsg_StartListening)
491
492 // Inform the renderer that a new frame is available.
493 IPC_MESSAGE_ROUTED0(GpuStreamTextureMsg_FrameAvailable)
494
495 // Inform the renderer process that the transform matrix has changed.
496 IPC_MESSAGE_ROUTED1(GpuStreamTextureMsg_MatrixChanged,
497                     GpuStreamTextureMsg_MatrixChanged_Params /* params */)
498 #endif
499
500 //------------------------------------------------------------------------------
501 // GPU Command Buffer Messages
502 // These are messages between a renderer process to the GPU process relating to
503 // a single OpenGL context.
504 // Initialize a command buffer with the given number of command entries.
505 // Returns the shared memory handle for the command buffer mapped to the
506 // calling process.
507 IPC_SYNC_MESSAGE_ROUTED1_2(GpuCommandBufferMsg_Initialize,
508                            base::SharedMemoryHandle /* shared_state */,
509                            bool /* result */,
510                            gpu::Capabilities /* capabilities */)
511
512 // Sets the shared memory buffer used for commands.
513 IPC_SYNC_MESSAGE_ROUTED1_0(GpuCommandBufferMsg_SetGetBuffer,
514                            int32 /* shm_id */)
515
516 // Produces the front buffer into a mailbox. This allows another context to draw
517 // the output of this context.
518 IPC_MESSAGE_ROUTED1(GpuCommandBufferMsg_ProduceFrontBuffer,
519                     gpu::Mailbox /* mailbox */)
520
521 // Wait until the token is in a specific range, inclusive.
522 IPC_SYNC_MESSAGE_ROUTED2_1(GpuCommandBufferMsg_WaitForTokenInRange,
523                            int32 /* start */,
524                            int32 /* end */,
525                            gpu::CommandBuffer::State /* state */)
526
527 // Wait until the get offset is in a specific range, inclusive.
528 IPC_SYNC_MESSAGE_ROUTED2_1(GpuCommandBufferMsg_WaitForGetOffsetInRange,
529                            int32 /* start */,
530                            int32 /* end */,
531                            gpu::CommandBuffer::State /* state */)
532
533 // Asynchronously synchronize the put and get offsets of both processes.
534 // Caller passes its current put offset. Current state (including get offset)
535 // is returned in shared memory. The input latency info for the current
536 // frame is also sent to the GPU process.
537 IPC_MESSAGE_ROUTED3(GpuCommandBufferMsg_AsyncFlush,
538                     int32 /* put_offset */,
539                     uint32 /* flush_count */,
540                     std::vector<ui::LatencyInfo> /* latency_info */)
541
542 // Asynchronously process any commands known to the GPU process. This is only
543 // used in the event that a channel is unscheduled and needs to be flushed
544 // again to process any commands issued subsequent to unscheduling. The GPU
545 // process actually sends it (deferred) to itself.
546 IPC_MESSAGE_ROUTED0(GpuCommandBufferMsg_Rescheduled)
547
548 // Sent by the GPU process to display messages in the console.
549 IPC_MESSAGE_ROUTED1(GpuCommandBufferMsg_ConsoleMsg,
550                     GPUCommandBufferConsoleMessage /* msg */)
551
552 // Register an existing shared memory transfer buffer. The id that can be
553 // used to identify the transfer buffer from a command buffer.
554 IPC_MESSAGE_ROUTED3(GpuCommandBufferMsg_RegisterTransferBuffer,
555                     int32 /* id */,
556                     base::SharedMemoryHandle /* transfer_buffer */,
557                     uint32 /* size */)
558
559 // Destroy a previously created transfer buffer.
560 IPC_MESSAGE_ROUTED1(GpuCommandBufferMsg_DestroyTransferBuffer,
561                     int32 /* id */)
562
563 // Create and initialize a hardware video decoder using the specified route_id.
564 // Created decoders should be freed with AcceleratedVideoDecoderMsg_Destroy when
565 // no longer needed.
566 IPC_SYNC_MESSAGE_ROUTED2_1(GpuCommandBufferMsg_CreateVideoDecoder,
567                            media::VideoCodecProfile /* profile */,
568                            int32, /* route_id */
569                            bool /* succeeded */)
570
571 // Create and initialize a hardware video encoder using the specified route_id.
572 // Created encoders should be freed with AcceleratedVideoEncoderMsg_Destroy when
573 // no longer needed.
574 IPC_SYNC_MESSAGE_ROUTED5_1(GpuCommandBufferMsg_CreateVideoEncoder,
575                            media::VideoFrame::Format /* input_format */,
576                            gfx::Size /* input_visible_size */,
577                            media::VideoCodecProfile /* output_profile */,
578                            uint32 /* initial_bitrate */,
579                            int32, /* route_id */
580                            bool /* succeeded */)
581
582 // Tells the proxy that there was an error and the command buffer had to be
583 // destroyed for some reason.
584 IPC_MESSAGE_ROUTED1(GpuCommandBufferMsg_Destroyed,
585                     gpu::error::ContextLostReason /* reason */)
586
587 // Request that the GPU process reply with the given message. Reply may be
588 // delayed.
589 IPC_MESSAGE_ROUTED1(GpuCommandBufferMsg_Echo,
590                     IPC::Message /* reply */)
591
592 // Response to a GpuChannelMsg_Echo message.
593 IPC_MESSAGE_ROUTED0(GpuCommandBufferMsg_EchoAck)
594
595 // Send to stub on surface visibility change.
596 IPC_MESSAGE_ROUTED1(GpuCommandBufferMsg_SetSurfaceVisible, bool /* visible */)
597
598 // Sent to proxy when the gpu memory manager changes its memory allocation.
599 IPC_MESSAGE_ROUTED1(GpuCommandBufferMsg_SetMemoryAllocation,
600                     gpu::MemoryAllocation /* allocation */)
601
602 // Sent to stub when proxy is assigned a memory allocation changed callback.
603 IPC_MESSAGE_ROUTED1(
604     GpuCommandBufferMsg_SetClientHasMemoryAllocationChangedCallback,
605     bool /* has_callback */)
606
607 // Inserts a sync point into the channel. This is handled on the IO thread, so
608 // can be expected to be reasonably fast, but the sync point is actually
609 // retired in order with respect to the other calls. The sync point is shared
610 // across channels.
611 IPC_SYNC_MESSAGE_ROUTED1_1(GpuCommandBufferMsg_InsertSyncPoint,
612                            bool /* retire */,
613                            uint32 /* sync_point */)
614
615 // Retires the sync point. Note: this message is not sent explicitly by the
616 // renderer, but is synthesized by the GPU process.
617 IPC_MESSAGE_ROUTED1(GpuCommandBufferMsg_RetireSyncPoint,
618                     uint32 /* sync_point */)
619
620 // Makes this command buffer signal when a sync point is reached, by sending
621 // back a GpuCommandBufferMsg_SignalSyncPointAck message with the same
622 // signal_id.
623 IPC_MESSAGE_ROUTED2(GpuCommandBufferMsg_SignalSyncPoint,
624                     uint32 /* sync_point */,
625                     uint32 /* signal_id */)
626
627 // Response to GpuCommandBufferMsg_SignalSyncPoint.
628 IPC_MESSAGE_ROUTED1(GpuCommandBufferMsg_SignalSyncPointAck,
629                     uint32 /* signal_id */)
630
631 // Makes this command buffer signal when a query is reached, by sending
632 // back a GpuCommandBufferMsg_SignalSyncPointAck message with the same
633 // signal_id.
634 IPC_MESSAGE_ROUTED2(GpuCommandBufferMsg_SignalQuery,
635                     uint32 /* query */,
636                     uint32 /* signal_id */)
637
638 // Register an existing gpu memory buffer. The id that can be
639 // used to identify the gpu memory buffer from a command buffer.
640 IPC_MESSAGE_ROUTED5(GpuCommandBufferMsg_RegisterGpuMemoryBuffer,
641                     int32 /* id */,
642                     gfx::GpuMemoryBufferHandle /* gpu_memory_buffer */,
643                     uint32 /* width */,
644                     uint32 /* height */,
645                     uint32 /* internalformat */)
646
647 // Unregister a previously registered gpu memory buffer.
648 IPC_MESSAGE_ROUTED1(GpuCommandBufferMsg_UnregisterGpuMemoryBuffer,
649                     int32 /* id */)
650
651 // Attaches an external image stream to the client texture.
652 IPC_SYNC_MESSAGE_ROUTED2_1(GpuCommandBufferMsg_CreateStreamTexture,
653                            uint32, /* client_texture_id */
654                            int32, /* stream_id */
655                            bool /* succeeded */)
656
657 //------------------------------------------------------------------------------
658 // Accelerated Video Decoder Messages
659 // These messages are sent from Renderer process to GPU process.
660
661 // Send input buffer for decoding.
662 IPC_MESSAGE_ROUTED3(AcceleratedVideoDecoderMsg_Decode,
663                     base::SharedMemoryHandle, /* input_buffer_handle */
664                     int32, /* bitstream_buffer_id */
665                     uint32) /* size */
666
667 // Sent from Renderer process to the GPU process to give the texture IDs for
668 // the textures the decoder will use for output.
669 IPC_MESSAGE_ROUTED2(AcceleratedVideoDecoderMsg_AssignPictureBuffers,
670                     std::vector<int32>,  /* Picture buffer ID */
671                     std::vector<uint32>) /* Texture ID */
672
673 // Send from Renderer process to the GPU process to recycle the given picture
674 // buffer for further decoding.
675 IPC_MESSAGE_ROUTED1(AcceleratedVideoDecoderMsg_ReusePictureBuffer,
676                     int32) /* Picture buffer ID */
677
678 // Send flush request to the decoder.
679 IPC_MESSAGE_ROUTED0(AcceleratedVideoDecoderMsg_Flush)
680
681 // Send reset request to the decoder.
682 IPC_MESSAGE_ROUTED0(AcceleratedVideoDecoderMsg_Reset)
683
684 // Send destroy request to the decoder.
685 IPC_MESSAGE_ROUTED0(AcceleratedVideoDecoderMsg_Destroy)
686
687 //------------------------------------------------------------------------------
688 // Accelerated Video Decoder Host Messages
689 // These messages are sent from GPU process to Renderer process.
690 // Inform AcceleratedVideoDecoderHost that AcceleratedVideoDecoder has been
691 // created.
692
693 // Accelerated video decoder has consumed input buffer from transfer buffer.
694 IPC_MESSAGE_ROUTED1(AcceleratedVideoDecoderHostMsg_BitstreamBufferProcessed,
695                     int32) /* Processed buffer ID */
696
697 // Allocate video frames for output of the hardware video decoder.
698 IPC_MESSAGE_ROUTED3(
699     AcceleratedVideoDecoderHostMsg_ProvidePictureBuffers,
700     int32, /* Number of video frames to generate */
701     gfx::Size, /* Requested size of buffer */
702     uint32 ) /* Texture target */
703
704 // Decoder reports that a picture is ready and buffer does not need to be passed
705 // back to the decoder.
706 IPC_MESSAGE_ROUTED1(AcceleratedVideoDecoderHostMsg_DismissPictureBuffer,
707                     int32) /* Picture buffer ID */
708
709 // Decoder reports that a picture is ready.
710 IPC_MESSAGE_ROUTED3(AcceleratedVideoDecoderHostMsg_PictureReady,
711                     int32,     /* Picture buffer ID */
712                     int32,     /* Bitstream buffer ID */
713                     gfx::Rect) /* Visible rectangle */
714
715 // Confirm decoder has been flushed.
716 IPC_MESSAGE_ROUTED0(AcceleratedVideoDecoderHostMsg_FlushDone)
717
718 // Confirm decoder has been reset.
719 IPC_MESSAGE_ROUTED0(AcceleratedVideoDecoderHostMsg_ResetDone)
720
721 // Video decoder has encountered an error.
722 IPC_MESSAGE_ROUTED1(AcceleratedVideoDecoderHostMsg_ErrorNotification,
723                     uint32) /* Error ID */
724
725 //------------------------------------------------------------------------------
726 // Accelerated Video Encoder Messages
727 // These messages are sent from the Renderer process to GPU process.
728
729 // Queue a input buffer to the encoder to encode. |frame_id| will be returned by
730 // AcceleratedVideoEncoderHostMsg_NotifyEncodeDone.
731 IPC_MESSAGE_ROUTED4(AcceleratedVideoEncoderMsg_Encode,
732                     int32 /* frame_id */,
733                     base::SharedMemoryHandle /* buffer_handle */,
734                     uint32 /* buffer_size */,
735                     bool /* force_keyframe */)
736
737 // Queue a buffer to the encoder for use in returning output.  |buffer_id| will
738 // be returned by AcceleratedVideoEncoderHostMsg_BitstreamBufferReady.
739 IPC_MESSAGE_ROUTED3(AcceleratedVideoEncoderMsg_UseOutputBitstreamBuffer,
740                     int32 /* buffer_id */,
741                     base::SharedMemoryHandle /* buffer_handle */,
742                     uint32 /* buffer_size */)
743
744 // Request a runtime encoding parameter change.
745 IPC_MESSAGE_ROUTED2(AcceleratedVideoEncoderMsg_RequestEncodingParametersChange,
746                     uint32 /* bitrate */,
747                     uint32 /* framerate */)
748
749 //------------------------------------------------------------------------------
750 // Accelerated Video Encoder Host Messages
751 // These messages are sent from GPU process to Renderer process.
752
753 // Notify renderer of the input/output buffer requirements of the encoder.
754 IPC_MESSAGE_ROUTED3(AcceleratedVideoEncoderHostMsg_RequireBitstreamBuffers,
755                     uint32 /* input_count */,
756                     gfx::Size /* input_coded_size */,
757                     uint32 /* output_buffer_size */)
758
759 // Notify the renderer that the encoder has finished using an input buffer.
760 // There is no congruent entry point in the media::VideoEncodeAccelerator
761 // interface, in VEA this same done condition is indicated by dropping the
762 // reference to the media::VideoFrame passed to VEA::Encode().
763 IPC_MESSAGE_ROUTED1(AcceleratedVideoEncoderHostMsg_NotifyInputDone,
764                     int32 /* frame_id */)
765
766 // Notify the renderer that an output buffer has been filled with encoded data.
767 IPC_MESSAGE_ROUTED3(AcceleratedVideoEncoderHostMsg_BitstreamBufferReady,
768                     int32 /* bitstream_buffer_id */,
769                     uint32 /* payload_size */,
770                     bool /* key_frame */)
771
772 // Report error condition.
773 IPC_MESSAGE_ROUTED1(AcceleratedVideoEncoderHostMsg_NotifyError,
774                     media::VideoEncodeAccelerator::Error /* error */)
775
776 // Send destroy request to the encoder.
777 IPC_MESSAGE_ROUTED0(AcceleratedVideoEncoderMsg_Destroy)