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