Home | History | Annotate | Download | only in common
      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