15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/common/cc_messages.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/output/compositor_frame.h" 8eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "cc/output/filter_operations.h" 96e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "cc/quads/largest_draw_quad.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/common/common_param_traits.h" 11c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch#include "third_party/skia/include/core/SkData.h" 12c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch#include "third_party/skia/include/core/SkFlattenableSerialization.h" 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/gfx/transform.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace IPC { 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochvoid ParamTraits<cc::FilterOperation>::Write( 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Message* m, const param_type& p) { 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WriteParam(m, p.type()); 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switch (p.type()) { 21eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch case cc::FilterOperation::GRAYSCALE: 22eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch case cc::FilterOperation::SEPIA: 23eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch case cc::FilterOperation::SATURATE: 24eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch case cc::FilterOperation::HUE_ROTATE: 25eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch case cc::FilterOperation::INVERT: 26eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch case cc::FilterOperation::BRIGHTNESS: 27eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch case cc::FilterOperation::SATURATING_BRIGHTNESS: 28eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch case cc::FilterOperation::CONTRAST: 29eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch case cc::FilterOperation::OPACITY: 30eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch case cc::FilterOperation::BLUR: 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WriteParam(m, p.amount()); 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 33eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch case cc::FilterOperation::DROP_SHADOW: 34eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch WriteParam(m, p.drop_shadow_offset()); 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WriteParam(m, p.amount()); 36eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch WriteParam(m, p.drop_shadow_color()); 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 38eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch case cc::FilterOperation::COLOR_MATRIX: 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (int i = 0; i < 20; ++i) 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WriteParam(m, p.matrix()[i]); 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 42eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch case cc::FilterOperation::ZOOM: 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WriteParam(m, p.amount()); 44eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch WriteParam(m, p.zoom_inset()); 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 4668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) case cc::FilterOperation::REFERENCE: 4768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) WriteParam(m, p.image_filter()); 4868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) break; 490529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch case cc::FilterOperation::ALPHA_THRESHOLD: 500529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch NOTREACHED(); 510529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch break; 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochbool ParamTraits<cc::FilterOperation>::Read( 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const Message* m, PickleIterator* iter, param_type* r) { 57eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch cc::FilterOperation::FilterType type; 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) float amount; 59eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch gfx::Point drop_shadow_offset; 60eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch SkColor drop_shadow_color; 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SkScalar matrix[20]; 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int zoom_inset; 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!ReadParam(m, iter, &type)) 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 66eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch r->set_type(type); 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool success = false; 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switch (type) { 70eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch case cc::FilterOperation::GRAYSCALE: 71eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch case cc::FilterOperation::SEPIA: 72eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch case cc::FilterOperation::SATURATE: 73eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch case cc::FilterOperation::HUE_ROTATE: 74eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch case cc::FilterOperation::INVERT: 75eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch case cc::FilterOperation::BRIGHTNESS: 76eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch case cc::FilterOperation::SATURATING_BRIGHTNESS: 77eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch case cc::FilterOperation::CONTRAST: 78eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch case cc::FilterOperation::OPACITY: 79eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch case cc::FilterOperation::BLUR: 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (ReadParam(m, iter, &amount)) { 81eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch r->set_amount(amount); 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) success = true; 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 85eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch case cc::FilterOperation::DROP_SHADOW: 86eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch if (ReadParam(m, iter, &drop_shadow_offset) && 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ReadParam(m, iter, &amount) && 88eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ReadParam(m, iter, &drop_shadow_color)) { 89eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch r->set_drop_shadow_offset(drop_shadow_offset); 90eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch r->set_amount(amount); 91eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch r->set_drop_shadow_color(drop_shadow_color); 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) success = true; 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 95eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch case cc::FilterOperation::COLOR_MATRIX: { 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int i; 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (i = 0; i < 20; ++i) { 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!ReadParam(m, iter, &matrix[i])) 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (i == 20) { 102eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch r->set_matrix(matrix); 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) success = true; 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 107eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch case cc::FilterOperation::ZOOM: 1082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (ReadParam(m, iter, &amount) && 1092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ReadParam(m, iter, &zoom_inset) && 1102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) amount >= 0.f && 1112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) zoom_inset >= 0) { 112eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch r->set_amount(amount); 113eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch r->set_zoom_inset(zoom_inset); 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) success = true; 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 11768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) case cc::FilterOperation::REFERENCE: { 11868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) skia::RefPtr<SkImageFilter> filter; 11968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) if (!ReadParam(m, iter, &filter)) { 12068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) success = false; 12168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) break; 12268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) } 12368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) r->set_image_filter(filter); 12468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) success = true; 12568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) break; 12668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) } 1270529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch case cc::FilterOperation::ALPHA_THRESHOLD: 1280529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch break; 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return success; 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 133eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochvoid ParamTraits<cc::FilterOperation>::Log( 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const param_type& p, std::string* l) { 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) l->append("("); 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LogParam(static_cast<unsigned>(p.type()), l); 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) l->append(", "); 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switch (p.type()) { 140eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch case cc::FilterOperation::GRAYSCALE: 141eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch case cc::FilterOperation::SEPIA: 142eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch case cc::FilterOperation::SATURATE: 143eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch case cc::FilterOperation::HUE_ROTATE: 144eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch case cc::FilterOperation::INVERT: 145eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch case cc::FilterOperation::BRIGHTNESS: 146eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch case cc::FilterOperation::SATURATING_BRIGHTNESS: 147eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch case cc::FilterOperation::CONTRAST: 148eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch case cc::FilterOperation::OPACITY: 149eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch case cc::FilterOperation::BLUR: 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LogParam(p.amount(), l); 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 152eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch case cc::FilterOperation::DROP_SHADOW: 153eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch LogParam(p.drop_shadow_offset(), l); 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) l->append(", "); 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LogParam(p.amount(), l); 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) l->append(", "); 157eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch LogParam(p.drop_shadow_color(), l); 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 159eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch case cc::FilterOperation::COLOR_MATRIX: 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (int i = 0; i < 20; ++i) { 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (i) 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) l->append(", "); 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LogParam(p.matrix()[i], l); 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 166eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch case cc::FilterOperation::ZOOM: 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LogParam(p.amount(), l); 1682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) l->append(", "); 169eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch LogParam(p.zoom_inset(), l); 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 17168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) case cc::FilterOperation::REFERENCE: 17268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) LogParam(p.image_filter(), l); 17368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) break; 1740529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch case cc::FilterOperation::ALPHA_THRESHOLD: 1750529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch NOTREACHED(); 1760529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch break; 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) l->append(")"); 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 181eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochvoid ParamTraits<cc::FilterOperations>::Write( 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Message* m, const param_type& p) { 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WriteParam(m, p.size()); 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (std::size_t i = 0; i < p.size(); ++i) { 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WriteParam(m, p.at(i)); 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 189eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochbool ParamTraits<cc::FilterOperations>::Read( 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const Message* m, PickleIterator* iter, param_type* r) { 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) size_t count; 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!ReadParam(m, iter, &count)) 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (std::size_t i = 0; i < count; ++i) { 196eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch cc::FilterOperation op = cc::FilterOperation::CreateEmptyFilter(); 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!ReadParam(m, iter, &op)) 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 199eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch r->Append(op); 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 204eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochvoid ParamTraits<cc::FilterOperations>::Log( 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const param_type& p, std::string* l) { 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) l->append("("); 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (std::size_t i = 0; i < p.size(); ++i) { 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (i) 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) l->append(", "); 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LogParam(p.at(i), l); 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) l->append(")"); 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 215c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdochvoid ParamTraits<skia::RefPtr<SkImageFilter> >::Write( 216c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch Message* m, const param_type& p) { 217c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch SkImageFilter* filter = p.get(); 218cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (filter) { 219f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) skia::RefPtr<SkData> data = 220f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) skia::AdoptRef(SkValidatingSerializeFlattenable(filter)); 221c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch m->WriteData(static_cast<const char*>(data->data()), data->size()); 222c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch } else { 223c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch m->WriteData(0, 0); 224c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch } 225c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch} 226c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch 227c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdochbool ParamTraits<skia::RefPtr<SkImageFilter> >::Read( 228c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch const Message* m, PickleIterator* iter, param_type* r) { 229c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch const char* data = 0; 230c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch int length = 0; 231c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch if (!m->ReadData(iter, &data, &length)) 232c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch return false; 233cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (length > 0) { 234f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) SkFlattenable* flattenable = SkValidatingDeserializeFlattenable( 235f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) data, length, SkImageFilter::GetFlattenableType()); 236c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch *r = skia::AdoptRef(static_cast<SkImageFilter*>(flattenable)); 237c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch } else { 238c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch r->clear(); 239c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch } 240c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch return true; 241c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch} 242c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch 243c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdochvoid ParamTraits<skia::RefPtr<SkImageFilter> >::Log( 244c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch const param_type& p, std::string* l) { 245c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch l->append("("); 246c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch LogParam(p.get() ? p->countInputs() : 0, l); 247c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch l->append(")"); 248c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch} 249c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch 2502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void ParamTraits<gfx::Transform>::Write( 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Message* m, const param_type& p) { 2521e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#ifdef SK_MSCALAR_IS_FLOAT 2531e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) float column_major_data[16]; 2541e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) p.matrix().asColMajorf(column_major_data); 2551e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#else 2561e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) double column_major_data[16]; 2571e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) p.matrix().asColMajord(column_major_data); 2581e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#endif 2591e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) m->WriteBytes(&column_major_data, sizeof(SkMScalar) * 16); 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool ParamTraits<gfx::Transform>::Read( 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const Message* m, PickleIterator* iter, param_type* r) { 2641e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) const char* column_major_data; 2651e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) if (!m->ReadBytes(iter, &column_major_data, sizeof(SkMScalar) * 16)) 2661e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) return false; 2671e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) r->matrix().setColMajor( 2681e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) reinterpret_cast<const SkMScalar*>(column_major_data)); 2691e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) return true; 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void ParamTraits<gfx::Transform>::Log( 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const param_type& p, std::string* l) { 2741e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#ifdef SK_MSCALAR_IS_FLOAT 2751e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) float row_major_data[16]; 2761e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) p.matrix().asRowMajorf(row_major_data); 2771e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#else 2781e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) double row_major_data[16]; 2791e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) p.matrix().asRowMajord(row_major_data); 2801e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#endif 2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) l->append("("); 2821e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) for (int i = 0; i < 16; ++i) { 2831e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) if (i > 0) 2841e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) l->append(", "); 2851e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) LogParam(row_major_data[i], l); 2861e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) } 2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) l->append(") "); 2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void ParamTraits<cc::RenderPass>::Write( 2912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Message* m, const param_type& p) { 2922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WriteParam(m, p.id); 2932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WriteParam(m, p.output_rect); 2942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WriteParam(m, p.damage_rect); 2952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WriteParam(m, p.transform_to_root_target); 2962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WriteParam(m, p.has_transparent_background); 2972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WriteParam(m, p.shared_quad_state_list.size()); 2982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WriteParam(m, p.quad_list.size()); 2992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) size_t shared_quad_state_index = 0; 301f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) size_t last_shared_quad_state_index = kuint32max; 3021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci for (cc::QuadList::ConstIterator iter = p.quad_list.begin(); 3031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci iter != p.quad_list.end(); 3041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ++iter) { 3051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const cc::DrawQuad* quad = &*iter; 3064e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) DCHECK(quad->rect.Contains(quad->visible_rect)) 3074e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) << quad->material << " rect: " << quad->rect.ToString() 3084e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) << " visible_rect: " << quad->visible_rect.ToString(); 3094e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) DCHECK(quad->opaque_rect.IsEmpty() || 3104e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) quad->rect.Contains(quad->opaque_rect)) 3114e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) << quad->material << " rect: " << quad->rect.ToString() 3124e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) << " opaque_rect: " << quad->opaque_rect.ToString(); 3132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) switch (quad->material) { 3152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case cc::DrawQuad::CHECKERBOARD: 3162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WriteParam(m, *cc::CheckerboardDrawQuad::MaterialCast(quad)); 3172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) break; 3182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case cc::DrawQuad::DEBUG_BORDER: 3192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WriteParam(m, *cc::DebugBorderDrawQuad::MaterialCast(quad)); 3202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) break; 3212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case cc::DrawQuad::IO_SURFACE_CONTENT: 3222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WriteParam(m, *cc::IOSurfaceDrawQuad::MaterialCast(quad)); 3232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) break; 324c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) case cc::DrawQuad::PICTURE_CONTENT: 325c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) NOTREACHED(); 326c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) break; 3272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case cc::DrawQuad::TEXTURE_CONTENT: 3282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WriteParam(m, *cc::TextureDrawQuad::MaterialCast(quad)); 3292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) break; 3302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case cc::DrawQuad::RENDER_PASS: 3312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WriteParam(m, *cc::RenderPassDrawQuad::MaterialCast(quad)); 3322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) break; 3332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case cc::DrawQuad::SOLID_COLOR: 3342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WriteParam(m, *cc::SolidColorDrawQuad::MaterialCast(quad)); 3352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) break; 3365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) case cc::DrawQuad::SURFACE_CONTENT: 3375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) WriteParam(m, *cc::SurfaceDrawQuad::MaterialCast(quad)); 3385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) break; 3392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case cc::DrawQuad::TILED_CONTENT: 3402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WriteParam(m, *cc::TileDrawQuad::MaterialCast(quad)); 3412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) break; 3422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case cc::DrawQuad::STREAM_VIDEO_CONTENT: 3432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WriteParam(m, *cc::StreamVideoDrawQuad::MaterialCast(quad)); 3442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) break; 3452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case cc::DrawQuad::YUV_VIDEO_CONTENT: 3462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WriteParam(m, *cc::YUVVideoDrawQuad::MaterialCast(quad)); 3472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) break; 3482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case cc::DrawQuad::INVALID: 3492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) break; 3502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 3512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const cc::ScopedPtrVector<cc::SharedQuadState>& sqs_list = 3532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) p.shared_quad_state_list; 3542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // This is an invalid index. 3562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) size_t bad_index = sqs_list.size(); 3572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Null shared quad states should not occur. 3592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK(quad->shared_quad_state); 3602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!quad->shared_quad_state) { 3612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WriteParam(m, bad_index); 3622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) continue; 3632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 3642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // SharedQuadStates should appear in the order they are used by DrawQuads. 3662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Find the SharedQuadState for this DrawQuad. 3672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) while (shared_quad_state_index < sqs_list.size() && 3682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) quad->shared_quad_state != sqs_list[shared_quad_state_index]) 3692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ++shared_quad_state_index; 3702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK_LT(shared_quad_state_index, sqs_list.size()); 3722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (shared_quad_state_index >= sqs_list.size()) { 3732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WriteParam(m, bad_index); 3742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) continue; 3752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 3762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WriteParam(m, shared_quad_state_index); 378f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if (shared_quad_state_index != last_shared_quad_state_index) { 379f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) WriteParam(m, *sqs_list[shared_quad_state_index]); 380f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) last_shared_quad_state_index = shared_quad_state_index; 381f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 3822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 3832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 3842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3851e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)static size_t ReserveSizeForRenderPassWrite(const cc::RenderPass& p) { 3861e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) size_t to_reserve = sizeof(cc::RenderPass); 3871e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 3881e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) to_reserve += p.shared_quad_state_list.size() * sizeof(cc::SharedQuadState); 3891e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 3901e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // The shared_quad_state_index for each quad. 3911e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) to_reserve += p.quad_list.size() * sizeof(size_t); 3921e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 3931e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // The largest quad type, verified by a unit test. 3946e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) to_reserve += p.quad_list.size() * sizeof(cc::kLargestDrawQuad); 3951e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) return to_reserve; 3961e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)} 3971e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 3981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccitemplate <typename QuadType> 3991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccistatic cc::DrawQuad* ReadDrawQuad(const Message* m, 4001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci PickleIterator* iter, 4011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci cc::RenderPass* render_pass) { 4021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci QuadType* quad = render_pass->CreateAndAppendDrawQuad<QuadType>(); 4031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (!ReadParam(m, iter, quad)) 4041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return NULL; 4051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return quad; 4062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 4072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool ParamTraits<cc::RenderPass>::Read( 4092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const Message* m, PickleIterator* iter, param_type* p) { 41003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) cc::RenderPassId id(-1, -1); 4112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Rect output_rect; 412c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch gfx::Rect damage_rect; 4132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Transform transform_to_root_target; 4142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool has_transparent_background; 4152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) size_t shared_quad_state_list_size; 4162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) size_t quad_list_size; 4172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!ReadParam(m, iter, &id) || 4192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) !ReadParam(m, iter, &output_rect) || 4202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) !ReadParam(m, iter, &damage_rect) || 4212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) !ReadParam(m, iter, &transform_to_root_target) || 4222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) !ReadParam(m, iter, &has_transparent_background) || 4232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) !ReadParam(m, iter, &shared_quad_state_list_size) || 4242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) !ReadParam(m, iter, &quad_list_size)) 4252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return false; 4262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) p->SetAll(id, 4282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) output_rect, 4292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) damage_rect, 4302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) transform_to_root_target, 431effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch has_transparent_background); 4322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 433f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) size_t last_shared_quad_state_index = kuint32max; 4342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) for (size_t i = 0; i < quad_list_size; ++i) { 4352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cc::DrawQuad::Material material; 4362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PickleIterator temp_iter = *iter; 4372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!ReadParam(m, &temp_iter, &material)) 4382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return false; 4392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci cc::DrawQuad* draw_quad = NULL; 4412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) switch (material) { 4422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case cc::DrawQuad::CHECKERBOARD: 4431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci draw_quad = ReadDrawQuad<cc::CheckerboardDrawQuad>(m, iter, p); 4442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) break; 4452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case cc::DrawQuad::DEBUG_BORDER: 4461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci draw_quad = ReadDrawQuad<cc::DebugBorderDrawQuad>(m, iter, p); 4472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) break; 4482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case cc::DrawQuad::IO_SURFACE_CONTENT: 4491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci draw_quad = ReadDrawQuad<cc::IOSurfaceDrawQuad>(m, iter, p); 4502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) break; 451c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) case cc::DrawQuad::PICTURE_CONTENT: 452c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) NOTREACHED(); 453c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return false; 4545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) case cc::DrawQuad::SURFACE_CONTENT: 4551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci draw_quad = ReadDrawQuad<cc::SurfaceDrawQuad>(m, iter, p); 4565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) break; 4572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case cc::DrawQuad::TEXTURE_CONTENT: 4581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci draw_quad = ReadDrawQuad<cc::TextureDrawQuad>(m, iter, p); 4592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) break; 4602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case cc::DrawQuad::RENDER_PASS: 4611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci draw_quad = ReadDrawQuad<cc::RenderPassDrawQuad>(m, iter, p); 4622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) break; 4632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case cc::DrawQuad::SOLID_COLOR: 4641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci draw_quad = ReadDrawQuad<cc::SolidColorDrawQuad>(m, iter, p); 4652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) break; 4662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case cc::DrawQuad::TILED_CONTENT: 4671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci draw_quad = ReadDrawQuad<cc::TileDrawQuad>(m, iter, p); 4682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) break; 4692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case cc::DrawQuad::STREAM_VIDEO_CONTENT: 4701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci draw_quad = ReadDrawQuad<cc::StreamVideoDrawQuad>(m, iter, p); 4712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) break; 4722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case cc::DrawQuad::YUV_VIDEO_CONTENT: 4731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci draw_quad = ReadDrawQuad<cc::YUVVideoDrawQuad>(m, iter, p); 4742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) break; 4752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case cc::DrawQuad::INVALID: 4762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) break; 4772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 4782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!draw_quad) 4792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return false; 4804e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) if (!draw_quad->rect.Contains(draw_quad->visible_rect)) { 4814e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) LOG(ERROR) << "Quad with invalid visible rect " << draw_quad->material 4824e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) << " rect: " << draw_quad->rect.ToString() 4834e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) << " visible_rect: " << draw_quad->visible_rect.ToString(); 4844e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) return false; 4854e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) } 4864e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) if (!draw_quad->opaque_rect.IsEmpty() && 4874e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) !draw_quad->rect.Contains(draw_quad->opaque_rect)) { 4884e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) LOG(ERROR) << "Quad with invalid opaque rect " << draw_quad->material 4894e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) << " rect: " << draw_quad->rect.ToString() 4904e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) << " opaque_rect: " << draw_quad->opaque_rect.ToString(); 4914e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) return false; 4924e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) } 4932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) size_t shared_quad_state_index; 495f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if (!ReadParam(m, iter, &shared_quad_state_index)) 496f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return false; 497f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if (shared_quad_state_index >= shared_quad_state_list_size) 4982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return false; 4992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // SharedQuadState indexes should be in ascending order. 500f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if (last_shared_quad_state_index != kuint32max && 501f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) shared_quad_state_index < last_shared_quad_state_index) 5022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return false; 5032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 504f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // If the quad has a new shared quad state, read it in. 505f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if (last_shared_quad_state_index != shared_quad_state_index) { 506010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) cc::SharedQuadState* state = p->CreateAndAppendSharedQuadState(); 507010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) if (!ReadParam(m, iter, state)) 508f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return false; 509f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) last_shared_quad_state_index = shared_quad_state_index; 510f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 5112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 512f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) draw_quad->shared_quad_state = p->shared_quad_state_list.back(); 5132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 5142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return true; 5162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 5172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void ParamTraits<cc::RenderPass>::Log( 5192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const param_type& p, std::string* l) { 5202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) l->append("RenderPass(("); 5212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LogParam(p.id, l); 5222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) l->append("), "); 5232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LogParam(p.output_rect, l); 5242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) l->append(", "); 5252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LogParam(p.damage_rect, l); 5262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) l->append(", "); 5272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LogParam(p.transform_to_root_target, l); 5282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) l->append(", "); 5292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LogParam(p.has_transparent_background, l); 5302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) l->append(", "); 5312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) l->append("["); 5332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) for (size_t i = 0; i < p.shared_quad_state_list.size(); ++i) { 5342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (i) 5352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) l->append(", "); 5362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LogParam(*p.shared_quad_state_list[i], l); 5372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 5382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) l->append("], ["); 5391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci for (cc::QuadList::ConstIterator iter = p.quad_list.begin(); 5401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci iter != p.quad_list.end(); 5411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ++iter) { 5421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (iter != p.quad_list.begin()) 5432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) l->append(", "); 5441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const cc::DrawQuad* quad = &*iter; 5452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) switch (quad->material) { 5462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case cc::DrawQuad::CHECKERBOARD: 5472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LogParam(*cc::CheckerboardDrawQuad::MaterialCast(quad), l); 5482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) break; 5492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case cc::DrawQuad::DEBUG_BORDER: 5502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LogParam(*cc::DebugBorderDrawQuad::MaterialCast(quad), l); 5512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) break; 5522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case cc::DrawQuad::IO_SURFACE_CONTENT: 5532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LogParam(*cc::IOSurfaceDrawQuad::MaterialCast(quad), l); 5542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) break; 555c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) case cc::DrawQuad::PICTURE_CONTENT: 556c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) NOTREACHED(); 557c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) break; 5582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case cc::DrawQuad::TEXTURE_CONTENT: 5592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LogParam(*cc::TextureDrawQuad::MaterialCast(quad), l); 5602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) break; 5612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case cc::DrawQuad::RENDER_PASS: 5622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LogParam(*cc::RenderPassDrawQuad::MaterialCast(quad), l); 5632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) break; 5642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case cc::DrawQuad::SOLID_COLOR: 5652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LogParam(*cc::SolidColorDrawQuad::MaterialCast(quad), l); 5662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) break; 5675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) case cc::DrawQuad::SURFACE_CONTENT: 5685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) LogParam(*cc::SurfaceDrawQuad::MaterialCast(quad), l); 5695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) break; 5702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case cc::DrawQuad::TILED_CONTENT: 5712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LogParam(*cc::TileDrawQuad::MaterialCast(quad), l); 5722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) break; 5732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case cc::DrawQuad::STREAM_VIDEO_CONTENT: 5742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LogParam(*cc::StreamVideoDrawQuad::MaterialCast(quad), l); 5752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) break; 5762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case cc::DrawQuad::YUV_VIDEO_CONTENT: 5772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LogParam(*cc::YUVVideoDrawQuad::MaterialCast(quad), l); 5782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) break; 5792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case cc::DrawQuad::INVALID: 5802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) break; 5812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 5822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 5832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) l->append("])"); 5842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 5852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace { 5872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) enum CompositorFrameType { 5882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NO_FRAME, 5892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DELEGATED_FRAME, 5902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GL_FRAME, 5912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SOFTWARE_FRAME, 5922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) }; 5932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 5942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void ParamTraits<cc::CompositorFrame>::Write(Message* m, 5962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const param_type& p) { 5972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WriteParam(m, p.metadata); 5982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (p.delegated_frame_data) { 5992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK(!p.gl_frame_data); 6002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK(!p.software_frame_data); 6012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WriteParam(m, static_cast<int>(DELEGATED_FRAME)); 6022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WriteParam(m, *p.delegated_frame_data); 6032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } else if (p.gl_frame_data) { 6042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK(!p.software_frame_data); 6052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WriteParam(m, static_cast<int>(GL_FRAME)); 6062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WriteParam(m, *p.gl_frame_data); 6072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } else if (p.software_frame_data) { 6082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WriteParam(m, static_cast<int>(SOFTWARE_FRAME)); 6092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WriteParam(m, *p.software_frame_data); 6102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } else { 6112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WriteParam(m, static_cast<int>(NO_FRAME)); 6122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 6132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 6142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool ParamTraits<cc::CompositorFrame>::Read(const Message* m, 6162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PickleIterator* iter, 6172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) param_type* p) { 6182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!ReadParam(m, iter, &p->metadata)) 6192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return false; 6202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int compositor_frame_type; 6222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!ReadParam(m, iter, &compositor_frame_type)) 6232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return false; 6242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) switch (compositor_frame_type) { 6262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case DELEGATED_FRAME: 6272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) p->delegated_frame_data.reset(new cc::DelegatedFrameData()); 6282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!ReadParam(m, iter, p->delegated_frame_data.get())) 6292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return false; 6302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) break; 6312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case GL_FRAME: 6322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) p->gl_frame_data.reset(new cc::GLFrameData()); 6332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!ReadParam(m, iter, p->gl_frame_data.get())) 6342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return false; 6352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) break; 6362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case SOFTWARE_FRAME: 6372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) p->software_frame_data.reset(new cc::SoftwareFrameData()); 6382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!ReadParam(m, iter, p->software_frame_data.get())) 6392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return false; 6402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) break; 6412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case NO_FRAME: 6422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) break; 6432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) default: 6442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return false; 6452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 6462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return true; 6472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 6482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void ParamTraits<cc::CompositorFrame>::Log(const param_type& p, 6502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string* l) { 6512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) l->append("CompositorFrame("); 6522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LogParam(p.metadata, l); 6532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) l->append(", "); 6542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (p.delegated_frame_data) 6552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LogParam(*p.delegated_frame_data, l); 6562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) else if (p.gl_frame_data) 6572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LogParam(*p.gl_frame_data, l); 6582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) else if (p.software_frame_data) 6592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LogParam(*p.software_frame_data, l); 6602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) l->append(")"); 6612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 6622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void ParamTraits<cc::CompositorFrameAck>::Write(Message* m, 6642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const param_type& p) { 6652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WriteParam(m, p.resources); 666868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) WriteParam(m, p.last_software_frame_id); 6672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (p.gl_frame_data) { 6682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WriteParam(m, static_cast<int>(GL_FRAME)); 6692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WriteParam(m, *p.gl_frame_data); 6702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } else { 6712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WriteParam(m, static_cast<int>(NO_FRAME)); 6722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 6732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 6742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool ParamTraits<cc::CompositorFrameAck>::Read(const Message* m, 6762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PickleIterator* iter, 6772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) param_type* p) { 6782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!ReadParam(m, iter, &p->resources)) 6792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return false; 6802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 681868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) if (!ReadParam(m, iter, &p->last_software_frame_id)) 6822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return false; 6832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int compositor_frame_type; 6852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!ReadParam(m, iter, &compositor_frame_type)) 6862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return false; 6872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) switch (compositor_frame_type) { 6892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case NO_FRAME: 6902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) break; 6912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case GL_FRAME: 6922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) p->gl_frame_data.reset(new cc::GLFrameData()); 6932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!ReadParam(m, iter, p->gl_frame_data.get())) 6942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return false; 6952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) break; 6962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) default: 6972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return false; 6982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 6992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return true; 7002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 7012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void ParamTraits<cc::CompositorFrameAck>::Log(const param_type& p, 7032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string* l) { 7042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) l->append("CompositorFrameAck("); 7052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LogParam(p.resources, l); 7062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) l->append(", "); 707868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) LogParam(p.last_software_frame_id, l); 7082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) l->append(", "); 7092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (p.gl_frame_data) 7102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LogParam(*p.gl_frame_data, l); 7112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) l->append(")"); 7122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 7132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void ParamTraits<cc::DelegatedFrameData>::Write(Message* m, 7152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const param_type& p) { 7164e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) DCHECK_NE(0u, p.render_pass_list.size()); 7171e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 71846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) size_t to_reserve = sizeof(p.device_scale_factor); 71946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) to_reserve += p.resource_list.size() * sizeof(cc::TransferableResource); 7201e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) for (size_t i = 0; i < p.render_pass_list.size(); ++i) { 7211e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) const cc::RenderPass* pass = p.render_pass_list[i]; 7221e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) to_reserve += ReserveSizeForRenderPassWrite(*pass); 7231e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) } 7241e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) m->Reserve(to_reserve); 7251e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 72646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) WriteParam(m, p.device_scale_factor); 7272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WriteParam(m, p.resource_list); 7282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WriteParam(m, p.render_pass_list.size()); 7292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) for (size_t i = 0; i < p.render_pass_list.size(); ++i) 7302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WriteParam(m, *p.render_pass_list[i]); 7312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 7322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool ParamTraits<cc::DelegatedFrameData>::Read(const Message* m, 7342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PickleIterator* iter, 7352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) param_type* p) { 73646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) if (!ReadParam(m, iter, &p->device_scale_factor)) 73746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) return false; 73846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 7392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const static size_t kMaxRenderPasses = 10000; 7402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) size_t num_render_passes; 7422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!ReadParam(m, iter, &p->resource_list) || 7432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) !ReadParam(m, iter, &num_render_passes) || 7444e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) num_render_passes > kMaxRenderPasses || num_render_passes == 0) 7452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return false; 7462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) for (size_t i = 0; i < num_render_passes; ++i) { 7472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<cc::RenderPass> render_pass = cc::RenderPass::Create(); 7482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!ReadParam(m, iter, render_pass.get())) 7492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return false; 7502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) p->render_pass_list.push_back(render_pass.Pass()); 7512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 7522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return true; 7532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 7542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void ParamTraits<cc::DelegatedFrameData>::Log(const param_type& p, 7562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string* l) { 7572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) l->append("DelegatedFrameData("); 75846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) LogParam(p.device_scale_factor, l); 7592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LogParam(p.resource_list, l); 7602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) l->append(", ["); 7612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) for (size_t i = 0; i < p.render_pass_list.size(); ++i) { 7622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (i) 7632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) l->append(", "); 7642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LogParam(*p.render_pass_list[i], l); 7652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 7662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) l->append("])"); 7672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 7682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 76923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)void ParamTraits<cc::SoftwareFrameData>::Write(Message* m, 77023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) const param_type& p) { 771c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch DCHECK(cc::SharedBitmap::VerifySizeInBytes(p.size)); 77223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 77323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) m->Reserve(sizeof(cc::SoftwareFrameData)); 77423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) WriteParam(m, p.id); 77523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) WriteParam(m, p.size); 77623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) WriteParam(m, p.damage_rect); 777c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch WriteParam(m, p.bitmap_id); 77823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)} 77923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 78023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)bool ParamTraits<cc::SoftwareFrameData>::Read(const Message* m, 78123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) PickleIterator* iter, 78223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) param_type* p) { 78323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) if (!ReadParam(m, iter, &p->id)) 78423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) return false; 785c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch if (!ReadParam(m, iter, &p->size) || 786c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch !cc::SharedBitmap::VerifySizeInBytes(p->size)) 78723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) return false; 78823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) if (!ReadParam(m, iter, &p->damage_rect)) 78923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) return false; 790c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch if (!ReadParam(m, iter, &p->bitmap_id)) 79123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) return false; 79223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) return true; 79323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)} 79423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 79523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)void ParamTraits<cc::SoftwareFrameData>::Log(const param_type& p, 79623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) std::string* l) { 79723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) l->append("SoftwareFrameData("); 79823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) LogParam(p.id, l); 79923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) l->append(", "); 80023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) LogParam(p.size, l); 80123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) l->append(", "); 80223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) LogParam(p.damage_rect, l); 80323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) l->append(", "); 804c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch LogParam(p.bitmap_id, l); 80523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) l->append(")"); 80623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)} 80723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 8085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace IPC 809