| OLD | NEW |
| (Empty) |
| 1 // Copyright 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 #include "config.h" | |
| 6 | |
| 7 #include "CCDrawQuad.h" | |
| 8 | |
| 9 #include "CCCheckerboardDrawQuad.h" | |
| 10 #include "CCDebugBorderDrawQuad.h" | |
| 11 #include "CCGeometryTestUtils.h" | |
| 12 #include "CCIOSurfaceDrawQuad.h" | |
| 13 #include "CCRenderPassDrawQuad.h" | |
| 14 #include "CCSolidColorDrawQuad.h" | |
| 15 #include "CCStreamVideoDrawQuad.h" | |
| 16 #include "CCTextureDrawQuad.h" | |
| 17 #include "CCTileDrawQuad.h" | |
| 18 #include "CCYUVVideoDrawQuad.h" | |
| 19 #include "testing/gtest/include/gtest/gtest.h" | |
| 20 #include <public/WebTransformationMatrix.h> | |
| 21 | |
| 22 using WebKit::WebTransformationMatrix; | |
| 23 | |
| 24 using namespace cc; | |
| 25 | |
| 26 namespace { | |
| 27 | |
| 28 TEST(CCDrawQuadTest, copySharedQuadState) | |
| 29 { | |
| 30 WebTransformationMatrix quadTransform(1, 0.5, 0, 1, 0.5, 0); | |
| 31 IntRect visibleContentRect(10, 12, 14, 16); | |
| 32 IntRect clippedRectInTarget(19, 21, 23, 25); | |
| 33 float opacity = 0.25; | |
| 34 bool opaque = true; | |
| 35 int id = 3; | |
| 36 | |
| 37 scoped_ptr<CCSharedQuadState> state(CCSharedQuadState::create(quadTransform,
visibleContentRect, clippedRectInTarget, opacity, opaque)); | |
| 38 state->id = id; | |
| 39 | |
| 40 scoped_ptr<CCSharedQuadState> copy(state->copy()); | |
| 41 EXPECT_EQ(id, copy->id); | |
| 42 EXPECT_EQ(quadTransform, copy->quadTransform); | |
| 43 EXPECT_RECT_EQ(visibleContentRect, copy->visibleContentRect); | |
| 44 EXPECT_RECT_EQ(clippedRectInTarget, copy->clippedRectInTarget); | |
| 45 EXPECT_EQ(opacity, copy->opacity); | |
| 46 EXPECT_EQ(opaque, copy->opaque); | |
| 47 } | |
| 48 | |
| 49 scoped_ptr<CCSharedQuadState> createSharedQuadState() | |
| 50 { | |
| 51 WebTransformationMatrix quadTransform(1, 0.5, 0, 1, 0.5, 0); | |
| 52 IntRect visibleContentRect(10, 12, 14, 16); | |
| 53 IntRect clippedRectInTarget(19, 21, 23, 25); | |
| 54 float opacity = 1; | |
| 55 bool opaque = false; | |
| 56 int id = 3; | |
| 57 | |
| 58 scoped_ptr<CCSharedQuadState> state(CCSharedQuadState::create(quadTransform,
visibleContentRect, clippedRectInTarget, opacity, opaque)); | |
| 59 state->id = id; | |
| 60 return state.Pass(); | |
| 61 } | |
| 62 | |
| 63 void compareDrawQuad(CCDrawQuad* quad, CCDrawQuad* copy, CCSharedQuadState* copy
SharedState) | |
| 64 { | |
| 65 EXPECT_EQ(quad->size(), copy->size()); | |
| 66 EXPECT_EQ(quad->material(), copy->material()); | |
| 67 EXPECT_EQ(quad->isDebugQuad(), copy->isDebugQuad()); | |
| 68 EXPECT_RECT_EQ(quad->quadRect(), copy->quadRect()); | |
| 69 EXPECT_RECT_EQ(quad->quadVisibleRect(), copy->quadVisibleRect()); | |
| 70 EXPECT_EQ(quad->opaqueRect(), copy->opaqueRect()); | |
| 71 EXPECT_EQ(quad->needsBlending(), copy->needsBlending()); | |
| 72 | |
| 73 EXPECT_EQ(copySharedState, copy->sharedQuadState()); | |
| 74 EXPECT_EQ(copySharedState->id, copy->sharedQuadStateId()); | |
| 75 | |
| 76 EXPECT_EQ(quad->sharedQuadStateId(), quad->sharedQuadState()->id); | |
| 77 EXPECT_EQ(copy->sharedQuadStateId(), copy->sharedQuadState()->id); | |
| 78 } | |
| 79 | |
| 80 #define CREATE_SHARED_STATE() \ | |
| 81 scoped_ptr<CCSharedQuadState> sharedState(createSharedQuadState()); \ | |
| 82 scoped_ptr<CCSharedQuadState> copySharedState(sharedState->copy()); \ | |
| 83 copySharedState->id = 5; | |
| 84 | |
| 85 #define QUAD_DATA \ | |
| 86 IntRect quadRect(30, 40, 50, 60); \ | |
| 87 IntRect quadVisibleRect(40, 50, 30, 20); \ | |
| 88 | |
| 89 #define SETUP_AND_COPY_QUAD(Type, quad) \ | |
| 90 quad->setQuadVisibleRect(quadVisibleRect); \ | |
| 91 scoped_ptr<CCDrawQuad> copy(quad->copy(copySharedState.get())); \ | |
| 92 compareDrawQuad(quad.get(), copy.get(), copySharedState.get()); \ | |
| 93 const Type* copyQuad = Type::materialCast(copy.get()); | |
| 94 | |
| 95 #define SETUP_AND_COPY_QUAD_1(Type, quad, a) \ | |
| 96 quad->setQuadVisibleRect(quadVisibleRect); \ | |
| 97 scoped_ptr<CCDrawQuad> copy(quad->copy(copySharedState.get(), a)); \ | |
| 98 compareDrawQuad(quad.get(), copy.get(), copySharedState.get()); \ | |
| 99 const Type* copyQuad = Type::materialCast(copy.get()); | |
| 100 | |
| 101 #define CREATE_QUAD_0(Type) \ | |
| 102 QUAD_DATA \ | |
| 103 scoped_ptr<Type> quad(Type::create(sharedState.get(), quadRect)); \ | |
| 104 SETUP_AND_COPY_QUAD(Type, quad); \ | |
| 105 UNUSED_PARAM(copyQuad); | |
| 106 | |
| 107 #define CREATE_QUAD_1(Type, a) \ | |
| 108 QUAD_DATA \ | |
| 109 scoped_ptr<Type> quad(Type::create(sharedState.get(), quadRect, a)); \ | |
| 110 SETUP_AND_COPY_QUAD(Type, quad); | |
| 111 | |
| 112 #define CREATE_QUAD_2(Type, a, b) \ | |
| 113 QUAD_DATA \ | |
| 114 scoped_ptr<Type> quad(Type::create(sharedState.get(), quadRect, a, b)); \ | |
| 115 SETUP_AND_COPY_QUAD(Type, quad); | |
| 116 | |
| 117 #define CREATE_QUAD_3(Type, a, b, c) \ | |
| 118 QUAD_DATA \ | |
| 119 scoped_ptr<Type> quad(Type::create(sharedState.get(), quadRect, a, b, c)); \ | |
| 120 SETUP_AND_COPY_QUAD(Type, quad); | |
| 121 | |
| 122 #define CREATE_QUAD_4(Type, a, b, c, d) \ | |
| 123 QUAD_DATA \ | |
| 124 scoped_ptr<Type> quad(Type::create(sharedState.get(), quadRect, a, b, c, d))
; \ | |
| 125 SETUP_AND_COPY_QUAD(Type, quad); | |
| 126 | |
| 127 #define CREATE_QUAD_5(Type, a, b, c, d, e) \ | |
| 128 QUAD_DATA \ | |
| 129 scoped_ptr<Type> quad(Type::create(sharedState.get(), quadRect, a, b, c, d,
e)); \ | |
| 130 SETUP_AND_COPY_QUAD(Type, quad); | |
| 131 | |
| 132 #define CREATE_QUAD_6(Type, a, b, c, d, e, f) \ | |
| 133 QUAD_DATA \ | |
| 134 scoped_ptr<Type> quad(Type::create(sharedState.get(), quadRect, a, b, c, d,
e, f)); \ | |
| 135 SETUP_AND_COPY_QUAD(Type, quad); | |
| 136 | |
| 137 #define CREATE_QUAD_7(Type, a, b, c, d, e, f, g) \ | |
| 138 QUAD_DATA \ | |
| 139 scoped_ptr<Type> quad(Type::create(sharedState.get(), quadRect, a, b, c, d,
e, f, g)); \ | |
| 140 SETUP_AND_COPY_QUAD(Type, quad); | |
| 141 | |
| 142 #define CREATE_QUAD_8(Type, a, b, c, d, e, f, g, h) \ | |
| 143 QUAD_DATA \ | |
| 144 scoped_ptr<Type> quad(Type::create(sharedState.get(), quadRect, a, b, c, d,
e, f, g, h)); \ | |
| 145 SETUP_AND_COPY_QUAD(Type, quad); | |
| 146 | |
| 147 #define CREATE_QUAD_8_1(Type, a, b, c, d, e, f, g, h, copyA) \ | |
| 148 QUAD_DATA \ | |
| 149 scoped_ptr<Type> quad(Type::create(sharedState.get(), quadRect, a, b, c, d,
e, f, g, h)); \ | |
| 150 SETUP_AND_COPY_QUAD_1(Type, quad, copyA); | |
| 151 | |
| 152 #define CREATE_QUAD_9(Type, a, b, c, d, e, f, g, h, i) \ | |
| 153 QUAD_DATA \ | |
| 154 scoped_ptr<Type> quad(Type::create(sharedState.get(), quadRect, a, b, c, d,
e, f, g, h, i)); \ | |
| 155 SETUP_AND_COPY_QUAD(Type, quad); | |
| 156 | |
| 157 #define CREATE_QUAD_10(Type, a, b, c, d, e, f, g, h, i, j) \ | |
| 158 QUAD_DATA \ | |
| 159 scoped_ptr<Type> quad(Type::create(sharedState.get(), quadRect, a, b, c, d,
e, f, g, h, i, j)); \ | |
| 160 SETUP_AND_COPY_QUAD(Type, quad); | |
| 161 | |
| 162 TEST(CCDrawQuadTest, copyCheckerboardDrawQuad) | |
| 163 { | |
| 164 SkColor color = 0xfabb0011; | |
| 165 CREATE_SHARED_STATE(); | |
| 166 CREATE_QUAD_1(CCCheckerboardDrawQuad, color); | |
| 167 EXPECT_EQ(color, copyQuad->color()); | |
| 168 } | |
| 169 | |
| 170 TEST(CCDrawQuadTest, copyDebugBorderDrawQuad) | |
| 171 { | |
| 172 SkColor color = 0xfabb0011; | |
| 173 int width = 99; | |
| 174 CREATE_SHARED_STATE(); | |
| 175 CREATE_QUAD_2(CCDebugBorderDrawQuad, color, width); | |
| 176 EXPECT_EQ(color, copyQuad->color()); | |
| 177 EXPECT_EQ(width, copyQuad->width()); | |
| 178 } | |
| 179 | |
| 180 TEST(CCDrawQuadTest, copyIOSurfaceDrawQuad) | |
| 181 { | |
| 182 IntSize size(58, 95); | |
| 183 unsigned textureId = 72; | |
| 184 CCIOSurfaceDrawQuad::Orientation orientation = CCIOSurfaceDrawQuad::Unflippe
d; | |
| 185 | |
| 186 CREATE_SHARED_STATE(); | |
| 187 CREATE_QUAD_3(CCIOSurfaceDrawQuad, size, textureId, orientation); | |
| 188 EXPECT_EQ(size, copyQuad->ioSurfaceSize()); | |
| 189 EXPECT_EQ(textureId, copyQuad->ioSurfaceTextureId()); | |
| 190 EXPECT_EQ(orientation, copyQuad->orientation()); | |
| 191 } | |
| 192 | |
| 193 TEST(CCDrawQuadTest, copyRenderPassDrawQuad) | |
| 194 { | |
| 195 CCRenderPass::Id renderPassId(22, 64); | |
| 196 bool isReplica = true; | |
| 197 CCResourceProvider::ResourceId maskResourceId = 78; | |
| 198 IntRect contentsChangedSinceLastFrame(42, 11, 74, 24); | |
| 199 float maskTexCoordScaleX = 33; | |
| 200 float maskTexCoordScaleY = 19; | |
| 201 float maskTexCoordOffsetX = -45; | |
| 202 float maskTexCoordOffsetY = -21; | |
| 203 | |
| 204 CCRenderPass::Id copiedRenderPassId(235, 11); | |
| 205 | |
| 206 CREATE_SHARED_STATE(); | |
| 207 CREATE_QUAD_8_1(CCRenderPassDrawQuad, renderPassId, isReplica, maskResourceI
d, contentsChangedSinceLastFrame, maskTexCoordScaleX, maskTexCoordScaleY, maskTe
xCoordOffsetX, maskTexCoordOffsetY, copiedRenderPassId); | |
| 208 EXPECT_EQ(copiedRenderPassId, copyQuad->renderPassId()); | |
| 209 EXPECT_EQ(isReplica, copyQuad->isReplica()); | |
| 210 EXPECT_EQ(maskResourceId, copyQuad->maskResourceId()); | |
| 211 EXPECT_RECT_EQ(contentsChangedSinceLastFrame, copyQuad->contentsChangedSince
LastFrame()); | |
| 212 EXPECT_EQ(maskTexCoordScaleX, copyQuad->maskTexCoordScaleX()); | |
| 213 EXPECT_EQ(maskTexCoordScaleY, copyQuad->maskTexCoordScaleY()); | |
| 214 EXPECT_EQ(maskTexCoordOffsetX, copyQuad->maskTexCoordOffsetX()); | |
| 215 EXPECT_EQ(maskTexCoordOffsetY, copyQuad->maskTexCoordOffsetY()); | |
| 216 } | |
| 217 | |
| 218 TEST(CCDrawQuadTest, copySolidColorDrawQuad) | |
| 219 { | |
| 220 SkColor color = 0x49494949; | |
| 221 | |
| 222 CREATE_SHARED_STATE(); | |
| 223 CREATE_QUAD_1(CCSolidColorDrawQuad, color); | |
| 224 EXPECT_EQ(color, copyQuad->color()); | |
| 225 } | |
| 226 | |
| 227 TEST(CCDrawQuadTest, copyStreamVideoDrawQuad) | |
| 228 { | |
| 229 unsigned textureId = 64; | |
| 230 WebTransformationMatrix matrix(0.5, 1, 0.25, 0.75, 0, 1); | |
| 231 | |
| 232 CREATE_SHARED_STATE(); | |
| 233 CREATE_QUAD_2(CCStreamVideoDrawQuad, textureId, matrix); | |
| 234 EXPECT_EQ(textureId, copyQuad->textureId()); | |
| 235 EXPECT_EQ(matrix, copyQuad->matrix()); | |
| 236 } | |
| 237 | |
| 238 TEST(CCDrawQuadTest, copyTextureDrawQuad) | |
| 239 { | |
| 240 unsigned resourceId = 82; | |
| 241 bool premultipliedAlpha = true; | |
| 242 FloatRect uvRect(0.5, 224, -51, 36); | |
| 243 bool flipped = true; | |
| 244 | |
| 245 CREATE_SHARED_STATE(); | |
| 246 CREATE_QUAD_4(CCTextureDrawQuad, resourceId, premultipliedAlpha, uvRect, fli
pped); | |
| 247 EXPECT_EQ(resourceId, copyQuad->resourceId()); | |
| 248 EXPECT_EQ(premultipliedAlpha, copyQuad->premultipliedAlpha()); | |
| 249 EXPECT_EQ(uvRect, copyQuad->uvRect()); | |
| 250 EXPECT_EQ(flipped, copyQuad->flipped()); | |
| 251 } | |
| 252 | |
| 253 TEST(CCDrawQuadTest, copyTileDrawQuad) | |
| 254 { | |
| 255 IntRect opaqueRect(33, 44, 22, 33); | |
| 256 unsigned resourceId = 104; | |
| 257 IntPoint textureOffset(-31, 47); | |
| 258 IntSize textureSize(85, 32); | |
| 259 GC3Dint textureFilter = 82; | |
| 260 bool swizzleContents = true; | |
| 261 bool leftEdgeAA = true; | |
| 262 bool topEdgeAA = true; | |
| 263 bool rightEdgeAA = false; | |
| 264 bool bottomEdgeAA = true; | |
| 265 | |
| 266 CREATE_SHARED_STATE(); | |
| 267 CREATE_QUAD_10(CCTileDrawQuad, opaqueRect, resourceId, textureOffset, textur
eSize, textureFilter, swizzleContents, leftEdgeAA, topEdgeAA, rightEdgeAA, botto
mEdgeAA); | |
| 268 EXPECT_RECT_EQ(opaqueRect, copyQuad->opaqueRect()); | |
| 269 EXPECT_EQ(resourceId, copyQuad->resourceId()); | |
| 270 EXPECT_EQ(textureOffset, copyQuad->textureOffset()); | |
| 271 EXPECT_EQ(textureSize, copyQuad->textureSize()); | |
| 272 EXPECT_EQ(textureFilter, copyQuad->textureFilter()); | |
| 273 EXPECT_EQ(swizzleContents, copyQuad->swizzleContents()); | |
| 274 EXPECT_EQ(leftEdgeAA, copyQuad->leftEdgeAA()); | |
| 275 EXPECT_EQ(topEdgeAA, copyQuad->topEdgeAA()); | |
| 276 EXPECT_EQ(rightEdgeAA, copyQuad->rightEdgeAA()); | |
| 277 EXPECT_EQ(bottomEdgeAA, copyQuad->bottomEdgeAA()); | |
| 278 } | |
| 279 | |
| 280 TEST(CCDrawQuadTest, copyYUVVideoDrawQuad) | |
| 281 { | |
| 282 CCVideoLayerImpl::FramePlane yPlane; | |
| 283 yPlane.resourceId = 45; | |
| 284 yPlane.size = IntSize(34, 23); | |
| 285 yPlane.format = 8; | |
| 286 yPlane.visibleSize = IntSize(623, 235); | |
| 287 CCVideoLayerImpl::FramePlane uPlane; | |
| 288 uPlane.resourceId = 532; | |
| 289 uPlane.size = IntSize(134, 16); | |
| 290 uPlane.format = 2; | |
| 291 uPlane.visibleSize = IntSize(126, 27); | |
| 292 CCVideoLayerImpl::FramePlane vPlane; | |
| 293 vPlane.resourceId = 4; | |
| 294 vPlane.size = IntSize(456, 486); | |
| 295 vPlane.format = 46; | |
| 296 vPlane.visibleSize = IntSize(19, 45); | |
| 297 | |
| 298 CREATE_SHARED_STATE(); | |
| 299 CREATE_QUAD_3(CCYUVVideoDrawQuad, yPlane, uPlane, vPlane); | |
| 300 EXPECT_EQ(yPlane.resourceId, copyQuad->yPlane().resourceId); | |
| 301 EXPECT_EQ(yPlane.size, copyQuad->yPlane().size); | |
| 302 EXPECT_EQ(yPlane.format, copyQuad->yPlane().format); | |
| 303 EXPECT_EQ(yPlane.visibleSize, copyQuad->yPlane().visibleSize); | |
| 304 EXPECT_EQ(uPlane.resourceId, copyQuad->uPlane().resourceId); | |
| 305 EXPECT_EQ(uPlane.size, copyQuad->uPlane().size); | |
| 306 EXPECT_EQ(uPlane.format, copyQuad->uPlane().format); | |
| 307 EXPECT_EQ(uPlane.visibleSize, copyQuad->uPlane().visibleSize); | |
| 308 EXPECT_EQ(vPlane.resourceId, copyQuad->vPlane().resourceId); | |
| 309 EXPECT_EQ(vPlane.size, copyQuad->vPlane().size); | |
| 310 EXPECT_EQ(vPlane.format, copyQuad->vPlane().format); | |
| 311 EXPECT_EQ(vPlane.visibleSize, copyQuad->vPlane().visibleSize); | |
| 312 } | |
| 313 | |
| 314 } // namespace | |
| OLD | NEW |