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 // IPC Messages sent between compositor instances. 6 7 #include "cc/output/begin_frame_args.h" 8 #include "cc/output/compositor_frame.h" 9 #include "cc/output/compositor_frame_ack.h" 10 #include "cc/output/filter_operation.h" 11 #include "cc/output/viewport_selection_bound.h" 12 #include "cc/quads/checkerboard_draw_quad.h" 13 #include "cc/quads/debug_border_draw_quad.h" 14 #include "cc/quads/draw_quad.h" 15 #include "cc/quads/io_surface_draw_quad.h" 16 #include "cc/quads/picture_draw_quad.h" 17 #include "cc/quads/render_pass.h" 18 #include "cc/quads/render_pass_draw_quad.h" 19 #include "cc/quads/shared_quad_state.h" 20 #include "cc/quads/solid_color_draw_quad.h" 21 #include "cc/quads/stream_video_draw_quad.h" 22 #include "cc/quads/surface_draw_quad.h" 23 #include "cc/quads/texture_draw_quad.h" 24 #include "cc/quads/tile_draw_quad.h" 25 #include "cc/quads/yuv_video_draw_quad.h" 26 #include "cc/resources/resource_format.h" 27 #include "cc/resources/returned_resource.h" 28 #include "cc/resources/transferable_resource.h" 29 #include "cc/surfaces/surface_id.h" 30 #include "content/common/content_export.h" 31 #include "gpu/ipc/gpu_command_buffer_traits.h" 32 #include "ipc/ipc_message_macros.h" 33 #include "ui/gfx/ipc/gfx_param_traits.h" 34 35 #ifndef CONTENT_COMMON_CC_MESSAGES_H_ 36 #define CONTENT_COMMON_CC_MESSAGES_H_ 37 38 namespace gfx { 39 class Transform; 40 } 41 42 namespace cc { 43 class FilterOperations; 44 } 45 46 namespace IPC { 47 48 template <> 49 struct ParamTraits<cc::FilterOperation> { 50 typedef cc::FilterOperation param_type; 51 static void Write(Message* m, const param_type& p); 52 static bool Read(const Message* m, PickleIterator* iter, param_type* r); 53 static void Log(const param_type& p, std::string* l); 54 }; 55 56 template <> 57 struct ParamTraits<cc::FilterOperations> { 58 typedef cc::FilterOperations param_type; 59 static void Write(Message* m, const param_type& p); 60 static bool Read(const Message* m, PickleIterator* iter, param_type* r); 61 static void Log(const param_type& p, std::string* l); 62 }; 63 64 template <> 65 struct ParamTraits<skia::RefPtr<SkImageFilter> > { 66 typedef skia::RefPtr<SkImageFilter> param_type; 67 static void Write(Message* m, const param_type& p); 68 static bool Read(const Message* m, PickleIterator* iter, param_type* r); 69 static void Log(const param_type& p, std::string* l); 70 }; 71 72 template <> 73 struct ParamTraits<gfx::Transform> { 74 typedef gfx::Transform param_type; 75 static void Write(Message* m, const param_type& p); 76 static bool Read(const Message* m, PickleIterator* iter, param_type* r); 77 static void Log(const param_type& p, std::string* l); 78 }; 79 80 template <> 81 struct CONTENT_EXPORT ParamTraits<cc::RenderPass> { 82 typedef cc::RenderPass param_type; 83 static void Write(Message* m, const param_type& p); 84 static bool Read(const Message* m, PickleIterator* iter, param_type* r); 85 static void Log(const param_type& p, std::string* l); 86 }; 87 88 template<> 89 struct CONTENT_EXPORT ParamTraits<cc::CompositorFrame> { 90 typedef cc::CompositorFrame param_type; 91 static void Write(Message* m, const param_type& p); 92 static bool Read(const Message* m, PickleIterator* iter, param_type* p); 93 static void Log(const param_type& p, std::string* l); 94 }; 95 96 template<> 97 struct CONTENT_EXPORT ParamTraits<cc::CompositorFrameAck> { 98 typedef cc::CompositorFrameAck param_type; 99 static void Write(Message* m, const param_type& p); 100 static bool Read(const Message* m, PickleIterator* iter, param_type* p); 101 static void Log(const param_type& p, std::string* l); 102 }; 103 104 template<> 105 struct CONTENT_EXPORT ParamTraits<cc::DelegatedFrameData> { 106 typedef cc::DelegatedFrameData param_type; 107 static void Write(Message* m, const param_type& p); 108 static bool Read(const Message* m, PickleIterator* iter, param_type* p); 109 static void Log(const param_type& p, std::string* l); 110 }; 111 112 template <> 113 struct CONTENT_EXPORT ParamTraits<cc::SoftwareFrameData> { 114 typedef cc::SoftwareFrameData param_type; 115 static void Write(Message* m, const param_type& p); 116 static bool Read(const Message* m, PickleIterator* iter, param_type* p); 117 static void Log(const param_type& p, std::string* l); 118 }; 119 120 } // namespace IPC 121 122 #endif // CONTENT_COMMON_CC_MESSAGES_H_ 123 124 // Multiply-included message file, hence no include guard. 125 126 #define IPC_MESSAGE_START CCMsgStart 127 #undef IPC_MESSAGE_EXPORT 128 #define IPC_MESSAGE_EXPORT CONTENT_EXPORT 129 130 IPC_ENUM_TRAITS_MAX_VALUE(cc::DrawQuad::Material, cc::DrawQuad::MATERIAL_LAST) 131 IPC_ENUM_TRAITS_MAX_VALUE(cc::IOSurfaceDrawQuad::Orientation, 132 cc::IOSurfaceDrawQuad::ORIENTATION_LAST) 133 IPC_ENUM_TRAITS_MAX_VALUE(cc::FilterOperation::FilterType, 134 cc::FilterOperation::FILTER_TYPE_LAST ) 135 IPC_ENUM_TRAITS_MAX_VALUE(cc::ResourceFormat, cc::RESOURCE_FORMAT_MAX) 136 IPC_ENUM_TRAITS_MAX_VALUE(cc::SelectionBoundType, cc::SELECTION_BOUND_TYPE_LAST) 137 IPC_ENUM_TRAITS_MAX_VALUE(SkXfermode::Mode, SkXfermode::kLastMode) 138 IPC_ENUM_TRAITS_MAX_VALUE(cc::YUVVideoDrawQuad::ColorSpace, 139 cc::YUVVideoDrawQuad::COLOR_SPACE_LAST) 140 141 IPC_STRUCT_TRAITS_BEGIN(cc::RenderPassId) 142 IPC_STRUCT_TRAITS_MEMBER(layer_id) 143 IPC_STRUCT_TRAITS_MEMBER(index) 144 IPC_STRUCT_TRAITS_END() 145 146 IPC_STRUCT_TRAITS_BEGIN(cc::SurfaceId) 147 IPC_STRUCT_TRAITS_MEMBER(id) 148 IPC_STRUCT_TRAITS_END() 149 150 IPC_STRUCT_TRAITS_BEGIN(cc::DrawQuad) 151 IPC_STRUCT_TRAITS_MEMBER(material) 152 IPC_STRUCT_TRAITS_MEMBER(rect) 153 IPC_STRUCT_TRAITS_MEMBER(opaque_rect) 154 IPC_STRUCT_TRAITS_MEMBER(visible_rect) 155 IPC_STRUCT_TRAITS_MEMBER(needs_blending) 156 IPC_STRUCT_TRAITS_END() 157 158 IPC_STRUCT_TRAITS_BEGIN(cc::CheckerboardDrawQuad) 159 IPC_STRUCT_TRAITS_PARENT(cc::DrawQuad) 160 IPC_STRUCT_TRAITS_MEMBER(color) 161 IPC_STRUCT_TRAITS_END() 162 163 IPC_STRUCT_TRAITS_BEGIN(cc::DebugBorderDrawQuad) 164 IPC_STRUCT_TRAITS_PARENT(cc::DrawQuad) 165 IPC_STRUCT_TRAITS_MEMBER(color) 166 IPC_STRUCT_TRAITS_MEMBER(width) 167 IPC_STRUCT_TRAITS_END() 168 169 IPC_STRUCT_TRAITS_BEGIN(cc::IOSurfaceDrawQuad) 170 IPC_STRUCT_TRAITS_PARENT(cc::DrawQuad) 171 IPC_STRUCT_TRAITS_MEMBER(io_surface_size) 172 IPC_STRUCT_TRAITS_MEMBER(io_surface_resource_id) 173 IPC_STRUCT_TRAITS_MEMBER(orientation) 174 IPC_STRUCT_TRAITS_END() 175 176 IPC_STRUCT_TRAITS_BEGIN(cc::RenderPassDrawQuad) 177 IPC_STRUCT_TRAITS_PARENT(cc::DrawQuad) 178 IPC_STRUCT_TRAITS_MEMBER(render_pass_id) 179 IPC_STRUCT_TRAITS_MEMBER(mask_resource_id) 180 IPC_STRUCT_TRAITS_MEMBER(mask_uv_rect) 181 IPC_STRUCT_TRAITS_MEMBER(filters) 182 IPC_STRUCT_TRAITS_MEMBER(filters_scale) 183 IPC_STRUCT_TRAITS_MEMBER(background_filters) 184 IPC_STRUCT_TRAITS_END() 185 186 IPC_STRUCT_TRAITS_BEGIN(cc::SolidColorDrawQuad) 187 IPC_STRUCT_TRAITS_PARENT(cc::DrawQuad) 188 IPC_STRUCT_TRAITS_MEMBER(color) 189 IPC_STRUCT_TRAITS_MEMBER(force_anti_aliasing_off) 190 IPC_STRUCT_TRAITS_END() 191 192 IPC_STRUCT_TRAITS_BEGIN(cc::StreamVideoDrawQuad) 193 IPC_STRUCT_TRAITS_PARENT(cc::DrawQuad) 194 IPC_STRUCT_TRAITS_MEMBER(resource_id) 195 IPC_STRUCT_TRAITS_MEMBER(matrix) 196 IPC_STRUCT_TRAITS_END() 197 198 IPC_STRUCT_TRAITS_BEGIN(cc::SurfaceDrawQuad) 199 IPC_STRUCT_TRAITS_PARENT(cc::DrawQuad) 200 IPC_STRUCT_TRAITS_MEMBER(surface_id) 201 IPC_STRUCT_TRAITS_END() 202 203 IPC_STRUCT_TRAITS_BEGIN(cc::TextureDrawQuad) 204 IPC_STRUCT_TRAITS_PARENT(cc::DrawQuad) 205 IPC_STRUCT_TRAITS_MEMBER(resource_id) 206 IPC_STRUCT_TRAITS_MEMBER(premultiplied_alpha) 207 IPC_STRUCT_TRAITS_MEMBER(uv_top_left) 208 IPC_STRUCT_TRAITS_MEMBER(uv_bottom_right) 209 IPC_STRUCT_TRAITS_MEMBER(background_color) 210 IPC_STRUCT_TRAITS_MEMBER(vertex_opacity[0]) 211 IPC_STRUCT_TRAITS_MEMBER(vertex_opacity[1]) 212 IPC_STRUCT_TRAITS_MEMBER(vertex_opacity[2]) 213 IPC_STRUCT_TRAITS_MEMBER(vertex_opacity[3]) 214 IPC_STRUCT_TRAITS_MEMBER(flipped) 215 IPC_STRUCT_TRAITS_END() 216 217 IPC_STRUCT_TRAITS_BEGIN(cc::TileDrawQuad) 218 IPC_STRUCT_TRAITS_PARENT(cc::DrawQuad) 219 IPC_STRUCT_TRAITS_MEMBER(resource_id) 220 IPC_STRUCT_TRAITS_MEMBER(tex_coord_rect) 221 IPC_STRUCT_TRAITS_MEMBER(texture_size) 222 IPC_STRUCT_TRAITS_MEMBER(swizzle_contents) 223 IPC_STRUCT_TRAITS_END() 224 225 IPC_STRUCT_TRAITS_BEGIN(cc::YUVVideoDrawQuad) 226 IPC_STRUCT_TRAITS_PARENT(cc::DrawQuad) 227 IPC_STRUCT_TRAITS_MEMBER(tex_coord_rect) 228 IPC_STRUCT_TRAITS_MEMBER(y_plane_resource_id) 229 IPC_STRUCT_TRAITS_MEMBER(u_plane_resource_id) 230 IPC_STRUCT_TRAITS_MEMBER(v_plane_resource_id) 231 IPC_STRUCT_TRAITS_MEMBER(a_plane_resource_id) 232 IPC_STRUCT_TRAITS_MEMBER(color_space) 233 IPC_STRUCT_TRAITS_END() 234 235 IPC_STRUCT_TRAITS_BEGIN(cc::SharedQuadState) 236 IPC_STRUCT_TRAITS_MEMBER(content_to_target_transform) 237 IPC_STRUCT_TRAITS_MEMBER(content_bounds) 238 IPC_STRUCT_TRAITS_MEMBER(visible_content_rect) 239 IPC_STRUCT_TRAITS_MEMBER(clip_rect) 240 IPC_STRUCT_TRAITS_MEMBER(is_clipped) 241 IPC_STRUCT_TRAITS_MEMBER(opacity) 242 IPC_STRUCT_TRAITS_MEMBER(blend_mode) 243 IPC_STRUCT_TRAITS_MEMBER(sorting_context_id) 244 IPC_STRUCT_TRAITS_END() 245 246 IPC_STRUCT_TRAITS_BEGIN(cc::TransferableResource) 247 IPC_STRUCT_TRAITS_MEMBER(id) 248 IPC_STRUCT_TRAITS_MEMBER(format) 249 IPC_STRUCT_TRAITS_MEMBER(filter) 250 IPC_STRUCT_TRAITS_MEMBER(size) 251 IPC_STRUCT_TRAITS_MEMBER(mailbox_holder) 252 IPC_STRUCT_TRAITS_MEMBER(is_repeated) 253 IPC_STRUCT_TRAITS_MEMBER(is_software) 254 IPC_STRUCT_TRAITS_MEMBER(allow_overlay) 255 IPC_STRUCT_TRAITS_END() 256 257 IPC_STRUCT_TRAITS_BEGIN(cc::ReturnedResource) 258 IPC_STRUCT_TRAITS_MEMBER(id) 259 IPC_STRUCT_TRAITS_MEMBER(sync_point) 260 IPC_STRUCT_TRAITS_MEMBER(count) 261 IPC_STRUCT_TRAITS_MEMBER(lost) 262 IPC_STRUCT_TRAITS_END() 263 264 IPC_STRUCT_TRAITS_BEGIN(cc::ViewportSelectionBound) 265 IPC_STRUCT_TRAITS_MEMBER(type) 266 IPC_STRUCT_TRAITS_MEMBER(edge_top) 267 IPC_STRUCT_TRAITS_MEMBER(edge_bottom) 268 IPC_STRUCT_TRAITS_MEMBER(visible) 269 IPC_STRUCT_TRAITS_END() 270 271 IPC_STRUCT_TRAITS_BEGIN(cc::BeginFrameArgs) 272 IPC_STRUCT_TRAITS_MEMBER(frame_time) 273 IPC_STRUCT_TRAITS_MEMBER(deadline) 274 IPC_STRUCT_TRAITS_MEMBER(interval) 275 IPC_STRUCT_TRAITS_END() 276 277 IPC_STRUCT_TRAITS_BEGIN(cc::CompositorFrameMetadata) 278 IPC_STRUCT_TRAITS_MEMBER(device_scale_factor) 279 IPC_STRUCT_TRAITS_MEMBER(root_scroll_offset) 280 IPC_STRUCT_TRAITS_MEMBER(page_scale_factor) 281 IPC_STRUCT_TRAITS_MEMBER(scrollable_viewport_size) 282 IPC_STRUCT_TRAITS_MEMBER(root_layer_size) 283 IPC_STRUCT_TRAITS_MEMBER(min_page_scale_factor) 284 IPC_STRUCT_TRAITS_MEMBER(max_page_scale_factor) 285 IPC_STRUCT_TRAITS_MEMBER(location_bar_offset) 286 IPC_STRUCT_TRAITS_MEMBER(location_bar_content_translation) 287 IPC_STRUCT_TRAITS_MEMBER(selection_start) 288 IPC_STRUCT_TRAITS_MEMBER(selection_end) 289 IPC_STRUCT_TRAITS_MEMBER(latency_info) 290 IPC_STRUCT_TRAITS_END() 291 292 IPC_STRUCT_TRAITS_BEGIN(cc::GLFrameData) 293 IPC_STRUCT_TRAITS_MEMBER(mailbox) 294 IPC_STRUCT_TRAITS_MEMBER(sync_point) 295 IPC_STRUCT_TRAITS_MEMBER(size) 296 IPC_STRUCT_TRAITS_MEMBER(sub_buffer_rect) 297 IPC_STRUCT_TRAITS_END() 298