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