| Index: cc/ipc/cc_render_pass_traits.cc
|
| diff --git a/cc/ipc/cc_render_pass_traits.cc b/cc/ipc/cc_render_pass_traits.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..fcfd8f378bedc67afeaf67e506e81355a755054c
|
| --- /dev/null
|
| +++ b/cc/ipc/cc_render_pass_traits.cc
|
| @@ -0,0 +1,392 @@
|
| +// Copyright (c) 2012 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#include "cc/ipc/cc_render_pass_traits.h"
|
| +
|
| +#include "content/common/cc_messages.h"
|
| +#include "cc/compositor_frame.h"
|
| +#include "cc/ipc/cc_param_traits.h"
|
| +
|
| +#undef LOG
|
| +#include "config.h"
|
| +
|
| +#include "cc/CCCheckerboardDrawQuad.h"
|
| +#include "cc/CCDebugBorderDrawQuad.h"
|
| +#include "cc/CCRenderPass.h"
|
| +#include "cc/CCRenderPassDrawQuad.h"
|
| +#include "cc/CCResourceProvider.h"
|
| +#include "cc/CCSolidColorDrawQuad.h"
|
| +#include "cc/CCTextureDrawQuad.h"
|
| +#include "cc/CCTileDrawQuad.h"
|
| +#include "cc/CCYUVVideoDrawQuad.h"
|
| +
|
| +namespace IPC {
|
| +
|
| +void ParamTraits<cc::IntRect>::Write(Message* m, const param_type& p) {
|
| + WriteParam(m, p.location());
|
| + WriteParam(m, p.size());
|
| +}
|
| +
|
| +bool ParamTraits<cc::IntRect>::Read(const Message* m,
|
| + PickleIterator* iter,
|
| + param_type* p) {
|
| + WebCore::IntPoint location;
|
| + WebCore::IntSize size;
|
| + if (!ReadParam(m, iter, &location) || !ReadParam(m, iter, &size))
|
| + return false;
|
| + p->setLocation(location);
|
| + p->setSize(size);
|
| + return true;
|
| +}
|
| +
|
| +void ParamTraits<cc::IntRect>::Log(const param_type& p, std::string* l) {
|
| + // TODO
|
| +}
|
| +
|
| +void ParamTraits<WebCore::IntPoint>::Write(Message* m, const param_type& p) {
|
| + WriteParam(m, p.x());
|
| + WriteParam(m, p.y());
|
| +}
|
| +
|
| +bool ParamTraits<WebCore::IntPoint>::Read(const Message* m,
|
| + PickleIterator* iter,
|
| + param_type* p) {
|
| + int x;
|
| + int y;
|
| + if (!ReadParam(m, iter, &x) || !ReadParam(m, iter, &y))
|
| + return false;
|
| + p->setX(x);
|
| + p->setY(y);
|
| + return true;
|
| +}
|
| +
|
| +void ParamTraits<WebCore::IntPoint>::Log(const param_type& p, std::string* l) {
|
| + // TODO
|
| +}
|
| +
|
| +void ParamTraits<WebCore::IntSize>::Write(Message* m, const param_type& p) {
|
| + WriteParam(m, p.width());
|
| + WriteParam(m, p.height());
|
| +}
|
| +
|
| +bool ParamTraits<WebCore::IntSize>::Read(const Message* m,
|
| + PickleIterator* iter,
|
| + param_type* p) {
|
| + int width;
|
| + int height;
|
| + if (!ReadParam(m, iter, &width) || !ReadParam(m, iter, &height))
|
| + return false;
|
| + p->setWidth(width);
|
| + p->setHeight(height);
|
| + return true;
|
| +}
|
| +
|
| +void ParamTraits<WebCore::IntSize>::Log(const param_type& p, std::string* l) {
|
| + // TODO
|
| +}
|
| +
|
| +void ParamTraits<cc::FloatRect>::Write(Message* m, const param_type& p) {
|
| + WriteParam(m, p.location());
|
| + WriteParam(m, p.size());
|
| +}
|
| +
|
| +bool ParamTraits<cc::FloatRect>::Read(const Message* m,
|
| + PickleIterator* iter,
|
| + param_type* p) {
|
| + WebCore::FloatPoint location;
|
| + WebCore::FloatSize size;
|
| + if (!ReadParam(m, iter, &location) || !ReadParam(m, iter, &size))
|
| + return false;
|
| + p->setLocation(location);
|
| + p->setSize(size);
|
| + return true;
|
| +}
|
| +
|
| +void ParamTraits<cc::FloatRect>::Log(const param_type& p, std::string* l) {
|
| + // TODO
|
| +}
|
| +
|
| +void ParamTraits<WebCore::FloatPoint>::Write(Message* m, const param_type& p) {
|
| + WriteParam(m, p.x());
|
| + WriteParam(m, p.y());
|
| +}
|
| +
|
| +bool ParamTraits<WebCore::FloatPoint>::Read(const Message* m,
|
| + PickleIterator* iter,
|
| + param_type* p) {
|
| + float x;
|
| + float y;
|
| + if (!ReadParam(m, iter, &x) || !ReadParam(m, iter, &y))
|
| + return false;
|
| + p->setX(x);
|
| + p->setY(y);
|
| + return true;
|
| +}
|
| +
|
| +void ParamTraits<WebCore::FloatPoint>::Log(const param_type& p, std::string* l) {
|
| + // TODO
|
| +}
|
| +
|
| +void ParamTraits<WebCore::FloatSize>::Write(Message* m, const param_type& p) {
|
| + WriteParam(m, p.width());
|
| + WriteParam(m, p.height());
|
| +}
|
| +
|
| +bool ParamTraits<WebCore::FloatSize>::Read(const Message* m,
|
| + PickleIterator* iter,
|
| + param_type* p) {
|
| + float width;
|
| + float height;
|
| + if (!ReadParam(m, iter, &width) || !ReadParam(m, iter, &height))
|
| + return false;
|
| + p->setWidth(width);
|
| + p->setHeight(height);
|
| + return true;
|
| +}
|
| +
|
| +void ParamTraits<WebCore::FloatSize>::Log(const param_type& p, std::string* l) {
|
| + // TODO
|
| +}
|
| +
|
| +template<>
|
| +struct ParamTraits<cc::CCDrawQuad> {
|
| + static void WriteDrawQuad(Message* m, const cc::CCDrawQuad* p);
|
| + static cc::CCDrawQuad* ReadDrawQuad(const Message* m, PickleIterator* iter, const cc::CCSharedQuadStateList&);
|
| +};
|
| +
|
| +void ParamTraits<cc::CCDrawQuad>::WriteDrawQuad(Message* m, const cc::CCDrawQuad* quad) {
|
| + m->WriteUInt32(quad->m_material);
|
| + WriteParam(m, quad->m_sharedQuadStateId);
|
| + WriteParam(m, quad->m_quadRect);
|
| + WriteParam(m, quad->m_quadVisibleRect);
|
| + WriteParam(m, quad->m_quadOpaque);
|
| + WriteParam(m, quad->m_needsBlending);
|
| + WriteParam(m, quad->m_opaqueRect);
|
| + switch (quad->material()) {
|
| + case cc::CCDrawQuad::Invalid:
|
| + NOTREACHED();
|
| + break;
|
| + case cc::CCDrawQuad::Checkerboard:
|
| + WriteParam(m, cc::CCCheckerboardDrawQuad::materialCast(quad)->color());
|
| + break;
|
| + case cc::CCDrawQuad::SolidColor:
|
| + WriteParam(m, cc::CCSolidColorDrawQuad::materialCast(quad)->color());
|
| + break;
|
| + case cc::CCDrawQuad::TiledContent: {
|
| + const cc::CCTileDrawQuad* tileQuad = cc::CCTileDrawQuad::materialCast(quad);
|
| + WriteParam(m, tileQuad->resourceId());
|
| + WriteParam<WebCore::IntPoint>(m, tileQuad->textureOffset());
|
| + WriteParam<WebCore::IntSize>(m, tileQuad->textureSize());
|
| + WriteParam(m, tileQuad->textureFilter());
|
| + WriteParam(m, tileQuad->swizzleContents());
|
| + WriteParam(m, tileQuad->leftEdgeAA());
|
| + WriteParam(m, tileQuad->topEdgeAA());
|
| + WriteParam(m, tileQuad->rightEdgeAA());
|
| + WriteParam(m, tileQuad->bottomEdgeAA());
|
| + break;
|
| + }
|
| + case cc::CCDrawQuad::TextureContent: {
|
| + const cc::CCTextureDrawQuad* textureQuad = cc::CCTextureDrawQuad::materialCast(quad);
|
| + WriteParam(m, textureQuad->resourceId());
|
| + WriteParam(m, textureQuad->uvRect());
|
| + WriteParam(m, textureQuad->premultipliedAlpha());
|
| + WriteParam(m, textureQuad->flipped());
|
| + break;
|
| + }
|
| + case cc::CCDrawQuad::DebugBorder:
|
| + case cc::CCDrawQuad::YUVVideoContent:
|
| + case cc::CCDrawQuad::RenderPass:
|
| + case cc::CCDrawQuad::IOSurfaceContent:
|
| + case cc::CCDrawQuad::StreamVideoContent:
|
| + // TODO
|
| + break;
|
| + }
|
| +}
|
| +
|
| +cc::CCDrawQuad* ParamTraits<cc::CCDrawQuad>::ReadDrawQuad(
|
| + const Message* m,
|
| + PickleIterator* iter,
|
| + const cc::CCSharedQuadStateList& sharedQuadList) {
|
| + unsigned material;
|
| + int sharedQuadStateId;
|
| + cc::IntRect quadRect;
|
| + cc::IntRect quadVisibleRect;
|
| + bool quadOpaque;
|
| + bool needsBlending;
|
| + cc::IntRect opaqueRect;
|
| + if (!m->ReadUInt32(iter, &material) ||
|
| + !ReadParam(m, iter, &sharedQuadStateId) ||
|
| + !ReadParam(m, iter, &quadRect) ||
|
| + !ReadParam(m, iter, &quadVisibleRect) ||
|
| + !ReadParam(m, iter, &quadOpaque) ||
|
| + !ReadParam(m, iter, &needsBlending) ||
|
| + !ReadParam(m, iter, &opaqueRect))
|
| + return NULL;
|
| + scoped_ptr<cc::CCDrawQuad> quad;
|
| + const cc::CCSharedQuadState* state = NULL;
|
| + for (cc::CCSharedQuadStateList::const_iterator it = sharedQuadList.begin(); it != sharedQuadList.end(); ++it) {
|
| + if ((*it)->id == sharedQuadStateId)
|
| + state = *it;
|
| + }
|
| + if (!state)
|
| + return NULL;
|
| +
|
| + switch (material) {
|
| + case cc::CCDrawQuad::Checkerboard:
|
| + SkColor color;
|
| + if (!ReadParam(m, iter, &color))
|
| + return NULL;
|
| + quad = cc::CCCheckerboardDrawQuad::create(state, quadRect, color).Pass();
|
| + break;
|
| + case cc::CCDrawQuad::SolidColor: {
|
| + SkColor color;
|
| + if (!ReadParam(m, iter, &color))
|
| + return NULL;
|
| + quad = cc::CCSolidColorDrawQuad::create(state, quadRect, color).Pass();
|
| + break;
|
| + }
|
| + case cc::CCDrawQuad::TiledContent: {
|
| + unsigned resourceId;
|
| + WebCore::IntPoint textureOffset;
|
| + WebCore::IntSize textureSize;
|
| + WebKit::WGC3Dint textureFilter;
|
| + bool swizzleContents;
|
| + bool leftEdgeAA;
|
| + bool topEdgeAA;
|
| + bool rightEdgeAA;
|
| + bool bottomEdgeAA;
|
| +
|
| + if (!ReadParam(m, iter, &resourceId) ||
|
| + !ReadParam(m, iter, &textureOffset) ||
|
| + !ReadParam(m, iter, &textureSize) ||
|
| + !ReadParam(m, iter, &textureFilter) ||
|
| + !ReadParam(m, iter, &swizzleContents) ||
|
| + !ReadParam(m, iter, &leftEdgeAA) ||
|
| + !ReadParam(m, iter, &topEdgeAA) ||
|
| + !ReadParam(m, iter, &rightEdgeAA) ||
|
| + !ReadParam(m, iter, &bottomEdgeAA))
|
| + return NULL;
|
| + quad = cc::CCTileDrawQuad::create(state, quadRect, opaqueRect, resourceId, textureOffset, textureSize, textureFilter, swizzleContents, leftEdgeAA, topEdgeAA, rightEdgeAA, bottomEdgeAA).Pass();
|
| + break;
|
| + }
|
| + case cc::CCDrawQuad::TextureContent: {
|
| + unsigned resourceId;
|
| + cc::FloatRect uvRect;
|
| + bool premultipliedAlpha;
|
| + bool flipped;
|
| + if (!ReadParam(m, iter, &resourceId) ||
|
| + !ReadParam(m, iter, &uvRect) ||
|
| + !ReadParam(m, iter, &premultipliedAlpha) ||
|
| + !ReadParam(m, iter, &flipped))
|
| + return NULL;
|
| + quad = cc::CCTextureDrawQuad::create(state, quadRect, resourceId, premultipliedAlpha, uvRect, flipped).Pass();
|
| + break;
|
| + }
|
| + case cc::CCDrawQuad::DebugBorder:
|
| + case cc::CCDrawQuad::YUVVideoContent:
|
| + case cc::CCDrawQuad::RenderPass:
|
| + case cc::CCDrawQuad::IOSurfaceContent:
|
| + case cc::CCDrawQuad::StreamVideoContent:
|
| + // TODO
|
| + quad = cc::CCCheckerboardDrawQuad::create(state, quadRect, SK_ColorYELLOW).Pass();
|
| + break;
|
| + case cc::CCDrawQuad::Invalid:
|
| + default:
|
| + NOTREACHED();
|
| + return NULL;
|
| + }
|
| + quad->m_quadVisibleRect = quadVisibleRect;
|
| + quad->m_quadOpaque = quadOpaque;
|
| + quad->m_needsBlending = needsBlending;
|
| + quad->m_opaqueRect = opaqueRect;
|
| + return quad.release();
|
| +}
|
| +
|
| +void ParamTraits<cc::CCSharedQuadState>::Write(Message* m, const param_type& p) {
|
| + WriteParam(m, p.id);
|
| + WriteParam(m, p.quadTransform);
|
| + WriteParam(m, p.visibleContentRect);
|
| + WriteParam(m, p.clippedRectInTarget);
|
| + WriteParam(m, p.opacity);
|
| + WriteParam(m, p.opaque);
|
| +}
|
| +
|
| +bool ParamTraits<cc::CCSharedQuadState>::Read(const Message* m,
|
| + PickleIterator* iter,
|
| + param_type* p) {
|
| + return ReadParam(m, iter, &p->id) &&
|
| + ReadParam(m, iter, &p->quadTransform) &&
|
| + ReadParam(m, iter, &p->visibleContentRect) &&
|
| + ReadParam(m, iter, &p->clippedRectInTarget) &&
|
| + ReadParam(m, iter, &p->opacity) &&
|
| + ReadParam(m, iter, &p->opaque);
|
| +}
|
| +
|
| +void ParamTraits<cc::CCSharedQuadState>::Log(const param_type& p, std::string* l) {
|
| + // TODO
|
| +}
|
| +
|
| +void ParamTraits<cc::CCRenderPass>::Write(Message* m, const param_type& p) {
|
| + WriteParam(m, p.m_id.layerId);
|
| + WriteParam(m, p.m_id.index);
|
| + WriteParam(m, p.m_sharedQuadStateList.size());
|
| + WriteParam(m, p.m_quadList.size());
|
| + WriteParam(m, p.m_transformToRootTarget);
|
| + WriteParam(m, p.m_outputRect);
|
| + WriteParam(m, p.m_damageRect);
|
| + WriteParam(m, p.m_hasTransparentBackground);
|
| + WriteParam(m, p.m_hasOcclusionFromOutsideTargetSurface);
|
| + for (size_t i = 0; i < p.m_sharedQuadStateList.size(); ++i)
|
| + WriteParam(m, *p.m_sharedQuadStateList[i]);
|
| + for (size_t i = 0; i < p.m_quadList.size(); ++i)
|
| + ParamTraits<cc::CCDrawQuad>::WriteDrawQuad(m, p.m_quadList[i]);
|
| + // TODO m_filters, m_backgroundFilters
|
| +}
|
| +
|
| +bool ParamTraits<cc::CCRenderPass>::Read(const Message* m,
|
| + PickleIterator* iter,
|
| + param_type* p) {
|
| + size_t sharedQuadStateListSize;
|
| + size_t quadListSize;
|
| + if (!ReadParam(m, iter, &p->m_id.layerId) ||
|
| + !ReadParam(m, iter, &p->m_id.index) ||
|
| + !ReadParam(m, iter, &sharedQuadStateListSize) ||
|
| + !ReadParam(m, iter, &quadListSize) ||
|
| + !ReadParam(m, iter, &p->m_transformToRootTarget) ||
|
| + !ReadParam(m, iter, &p->m_outputRect) ||
|
| + !ReadParam(m, iter, &p->m_damageRect) ||
|
| + !ReadParam(m, iter, &p->m_hasTransparentBackground) ||
|
| + !ReadParam(m, iter, &p->m_hasOcclusionFromOutsideTargetSurface))
|
| + return false;
|
| + for (size_t i = 0; i < sharedQuadStateListSize; ++i) {
|
| + scoped_ptr<cc::CCSharedQuadState> state(cc::CCSharedQuadState::create(WebKit::WebTransformationMatrix(), cc::IntRect(), cc::IntRect(), 1.f, true));
|
| + if (!ReadParam(m, iter, state.get()))
|
| + return false;
|
| + p->m_sharedQuadStateList.append(state.Pass());
|
| + }
|
| + for (size_t i = 0; i < quadListSize; ++i) {
|
| + scoped_ptr<cc::CCDrawQuad> quad(ParamTraits<cc::CCDrawQuad>::ReadDrawQuad(m, iter, p->m_sharedQuadStateList));
|
| + if (!quad.get())
|
| + return false;
|
| + p->m_quadList.append(quad.Pass());
|
| + }
|
| + // TODO m_filters, m_backgroundFilters
|
| + return true;
|
| +}
|
| +
|
| +cc::CCRenderPass* ParamTraits<cc::CCRenderPass>::ReadRenderPass(const Message* m,
|
| + PickleIterator* iter) {
|
| + cc::CCRenderPass::Id id(1, 1);
|
| + scoped_ptr<cc::CCRenderPass> render_pass(cc::CCRenderPass::create(id, cc::IntRect(), WebKit::WebTransformationMatrix()));
|
| + if (!Read(m, iter, render_pass.get())) {
|
| + return NULL;
|
| + }
|
| + return render_pass.release();
|
| +}
|
| +
|
| +void ParamTraits<cc::CCRenderPass>::Log(const param_type& p, std::string* l) {
|
| + // TODO
|
| +}
|
| +
|
| +} // namespace IPC
|
|
|