Changeset 106300 in webkit
- Timestamp:
- Jan 30, 2012 4:29:02 PM (12 years ago)
- Location:
- trunk
- Files:
-
- 3 deleted
- 18 edited
- 1 moved
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r106299 r106300 1 2012-01-30 Dana Jansens <danakj@chromium.org> 2 3 [chromium] Use region reported painted opaque for draw culling 4 https://bugs.webkit.org/show_bug.cgi?id=76015 5 6 Reviewed by James Robinson. 7 8 * platform/chromium-linux/compositing/iframes/iframe-in-composited-layer-expected.png: 9 * platform/chromium-mac-leopard/fast/repaint/block-selection-gap-in-composited-layer-expected.png: Removed. 10 * platform/chromium-mac-snowleopard/fast/repaint/block-selection-gap-in-composited-layer-expected.png: Removed. 11 * platform/chromium-win/fast/repaint/block-selection-gap-in-composited-layer-expected.png: Removed. 12 * platform/chromium/fast/repaint/block-selection-gap-in-composited-layer-expected.png: Renamed from LayoutTests/platform/chromium-linux/fast/repaint/block-selection-gap-in-composited-layer-expected.png. 13 * platform/chromium/test_expectations.txt: 14 1 15 2012-01-30 Shadi Khalek <shadi@chromium.org> 2 16 -
trunk/LayoutTests/platform/chromium/test_expectations.txt
r106299 r106300 4009 4009 BUG_CARYCLARK MAC : fast/dom/blur-contenteditable.html = IMAGE 4010 4010 4011 // May fail if these platforms differ from Linux. Remove this or rebaseline them once the bug lands. 4012 BUGWK76015 WIN MAC : fast/repaint/block-selection-gap-in-composited-layer.html = IMAGE 4013 4011 4014 // Need to implement file name logging. 4012 4015 BUGWK76572 : http/tests/download = FAIL -
trunk/Source/WebCore/ChangeLog
r106298 r106300 1 2012-01-30 Dana Jansens <danakj@chromium.org> 2 3 [chromium] Use region reported painted opaque for draw culling 4 https://bugs.webkit.org/show_bug.cgi?id=76015 5 6 Reviewed by James Robinson. 7 8 New unit tests in CCTiledLayerImplTest.cpp, CCQuadCullerTest.cpp, CCLayerTreeHostImplTest.cpp 9 10 * platform/graphics/chromium/LayerChromium.cpp: 11 (WebCore::LayerChromium::setOpaque): 12 * platform/graphics/chromium/TiledLayerChromium.cpp: 13 (UpdatableTile): 14 (WebCore::TiledLayerChromium::pushPropertiesTo): 15 (WebCore::TiledLayerChromium::prepareToUpdateTiles): 16 * platform/graphics/chromium/cc/CCDrawQuad.cpp: 17 (WebCore::CCDrawQuad::opaqueRect): 18 (WebCore): 19 * platform/graphics/chromium/cc/CCDrawQuad.h: 20 (CCDrawQuad): 21 (WebCore::CCDrawQuad::needsBlending): 22 * platform/graphics/chromium/cc/CCQuadCuller.cpp: 23 (WebCore::CCQuadCuller::cullOccludedQuads): 24 * platform/graphics/chromium/cc/CCSolidColorDrawQuad.cpp: 25 (WebCore::CCSolidColorDrawQuad::CCSolidColorDrawQuad): 26 * platform/graphics/chromium/cc/CCTileDrawQuad.cpp: 27 (WebCore::CCTileDrawQuad::create): 28 (WebCore::CCTileDrawQuad::CCTileDrawQuad): 29 * platform/graphics/chromium/cc/CCTileDrawQuad.h: 30 (CCTileDrawQuad): 31 * platform/graphics/chromium/cc/CCTiledLayerImpl.cpp: 32 (DrawableTile): 33 (WebCore::DrawableTile::opaqueRect): 34 (WebCore::DrawableTile::setOpaqueRect): 35 (WebCore::CCTiledLayerImpl::appendQuads): 36 (WebCore::CCTiledLayerImpl::pushTileProperties): 37 * platform/graphics/chromium/cc/CCTiledLayerImpl.h: 38 (CCTiledLayerImpl): 39 1 40 2012-01-30 Ryosuke Niwa <rniwa@webkit.org> 2 41 -
trunk/Source/WebCore/platform/graphics/chromium/LayerChromium.cpp
r106289 r106300 327 327 return; 328 328 m_opaque = opaque; 329 setNeeds Commit();329 setNeedsDisplay(); 330 330 } 331 331 -
trunk/Source/WebCore/platform/graphics/chromium/TiledLayerChromium.cpp
r106289 r106300 68 68 IntRect m_dirtyRect; 69 69 IntRect m_updateRect; 70 IntRect m_opaqueRect; 70 71 private: 71 72 OwnPtr<LayerTextureUpdater::Texture> m_texture; … … 274 275 continue; 275 276 276 tiledLayer-> syncTextureId(i, j, tile->managedTexture()->textureId());277 tiledLayer->pushTileProperties(i, j, tile->managedTexture()->textureId(), tile->m_opaqueRect); 277 278 } 278 279 } … … 422 423 // so we grab a local reference here to hold the updater alive until the paint completes. 423 424 RefPtr<LayerTextureUpdater> protector(textureUpdater()); 424 IntRect opaqueRect; // FIXME: unused. remove this and store in the layer to pass to impl for draw culling425 textureUpdater()->prepareToUpdate(m_paintRect, m_tiler->tileSize(), m_tiler->hasBorderTexels(), contentsScale(), & opaqueRect);425 IntRect paintedOpaqueRect; 426 textureUpdater()->prepareToUpdate(m_paintRect, m_tiler->tileSize(), m_tiler->hasBorderTexels(), contentsScale(), &paintedOpaqueRect); 426 427 for (int j = top; j <= bottom; ++j) { 427 428 for (int i = left; i <= right; ++i) { … … 431 432 if (!tile) 432 433 CRASH(); 434 435 IntRect tileRect = m_tiler->tileBounds(i, j); 436 437 // Save what was painted opaque in the tile. If everything painted in the tile was opaque, and the area is a subset of an 438 // already opaque area, keep the old area. 439 IntRect tilePaintedRect = intersection(tileRect, m_paintRect); 440 IntRect tilePaintedOpaqueRect = intersection(tileRect, paintedOpaqueRect); 441 if (tilePaintedOpaqueRect != tilePaintedRect || !tile->m_opaqueRect.contains(tilePaintedOpaqueRect)) 442 tile->m_opaqueRect = tilePaintedOpaqueRect; 433 443 434 444 // Use m_updateRect as copyAndClearDirty above moved the existing dirty rect to m_updateRect. … … 437 447 continue; 438 448 449 // sourceRect starts as a full-sized tile with border texels included. 439 450 IntRect sourceRect = m_tiler->tileRect(tile); 440 451 sourceRect.intersect(dirtyRect); -
trunk/Source/WebCore/platform/graphics/chromium/cc/CCDrawQuad.cpp
r106076 r106300 51 51 } 52 52 53 IntRect CCDrawQuad::opaqueRect() const 54 { 55 if (opacity() != 1) 56 return IntRect(); 57 if (m_sharedQuadState->isOpaque() && m_quadOpaque) 58 return m_quadRect; 59 return m_opaqueRect; 60 } 61 53 62 void CCDrawQuad::setQuadVisibleRect(const IntRect& quadVisibleRect) 54 63 { -
trunk/Source/WebCore/platform/graphics/chromium/cc/CCDrawQuad.h
r106076 r106300 52 52 const IntRect& clipRect() const { return m_sharedQuadState->clipRect(); } 53 53 float opacity() const { return m_sharedQuadState->opacity(); } 54 // For the purposes of culling, are the contents of this quadopaque?55 bool drawsOpaque() const { return m_sharedQuadState->isOpaque() && m_quadOpaque && opacity() == 1; }56 bool needsBlending() const { return !m_sharedQuadState->isOpaque() || m_needsBlending || opacity() != 1; }54 // For the purposes of culling, what part of the contents of this quad are opaque? 55 IntRect opaqueRect() const; 56 bool needsBlending() const { return m_needsBlending || opaqueRect() != m_quadRect; } 57 57 bool isLayerAxisAlignedIntRect() const { return m_sharedQuadState->isLayerAxisAlignedIntRect(); } 58 58 … … 97 97 bool m_quadOpaque; 98 98 bool m_needsBlending; 99 100 // Be default, this rect is empty. It is used when the shared quad state and above 101 // variables determine that the quad is not fully opaque but may be partially opaque. 102 IntRect m_opaqueRect; 99 103 }; 100 104 -
trunk/Source/WebCore/platform/graphics/chromium/cc/CCQuadCuller.cpp
r106076 r106300 114 114 115 115 // When adding rect to opaque region, deflate it to stay conservative. 116 if (keepQuad && drawQuad->drawsOpaque() && drawQuad->isLayerAxisAlignedIntRect()) 117 opaqueCoverageThusFar.unite(Region(enclosedIntRect(floatTransformedRect))); 116 if (keepQuad && drawQuad->isLayerAxisAlignedIntRect()) { 117 FloatRect floatOpaqueRect = drawQuad->quadTransform().mapRect(FloatRect(drawQuad->opaqueRect())); 118 opaqueCoverageThusFar.unite(Region(enclosedIntRect(floatOpaqueRect))); 119 } 118 120 119 121 if (keepQuad) -
trunk/Source/WebCore/platform/graphics/chromium/cc/CCSolidColorDrawQuad.cpp
r105371 r106300 39 39 , m_color(color) 40 40 { 41 if (m_color. alpha() != 1)41 if (m_color.hasAlpha()) 42 42 m_quadOpaque = false; 43 else 44 m_opaqueRect = quadRect; 43 45 } 44 46 -
trunk/Source/WebCore/platform/graphics/chromium/cc/CCTileDrawQuad.cpp
r105371 r106300 30 30 namespace WebCore { 31 31 32 PassOwnPtr<CCTileDrawQuad> CCTileDrawQuad::create(const CCSharedQuadState* sharedQuadState, const IntRect& quadRect, Platform3DObject textureId, const IntPoint& textureOffset, const IntSize& textureSize, GC3Dint textureFilter, bool swizzleContents, bool leftEdgeAA, bool topEdgeAA, bool rightEdgeAA, bool bottomEdgeAA)32 PassOwnPtr<CCTileDrawQuad> CCTileDrawQuad::create(const CCSharedQuadState* sharedQuadState, const IntRect& quadRect, const IntRect& opaqueRect, Platform3DObject textureId, const IntPoint& textureOffset, const IntSize& textureSize, GC3Dint textureFilter, bool swizzleContents, bool leftEdgeAA, bool topEdgeAA, bool rightEdgeAA, bool bottomEdgeAA) 33 33 { 34 return adoptPtr(new CCTileDrawQuad(sharedQuadState, quadRect, textureId, textureOffset, textureSize, textureFilter, swizzleContents, leftEdgeAA, topEdgeAA, rightEdgeAA, bottomEdgeAA));34 return adoptPtr(new CCTileDrawQuad(sharedQuadState, quadRect, opaqueRect, textureId, textureOffset, textureSize, textureFilter, swizzleContents, leftEdgeAA, topEdgeAA, rightEdgeAA, bottomEdgeAA)); 35 35 } 36 36 37 CCTileDrawQuad::CCTileDrawQuad(const CCSharedQuadState* sharedQuadState, const IntRect& quadRect, Platform3DObject textureId, const IntPoint& textureOffset, const IntSize& textureSize, GC3Dint textureFilter, bool swizzleContents, bool leftEdgeAA, bool topEdgeAA, bool rightEdgeAA, bool bottomEdgeAA)37 CCTileDrawQuad::CCTileDrawQuad(const CCSharedQuadState* sharedQuadState, const IntRect& quadRect, const IntRect& opaqueRect, Platform3DObject textureId, const IntPoint& textureOffset, const IntSize& textureSize, GC3Dint textureFilter, bool swizzleContents, bool leftEdgeAA, bool topEdgeAA, bool rightEdgeAA, bool bottomEdgeAA) 38 38 : CCDrawQuad(sharedQuadState, CCDrawQuad::TiledContent, quadRect) 39 39 , m_textureId(textureId) … … 49 49 if (isAntialiased()) 50 50 m_needsBlending = true; 51 m_opaqueRect = opaqueRect; 51 52 } 52 53 -
trunk/Source/WebCore/platform/graphics/chromium/cc/CCTileDrawQuad.h
r105371 r106300 36 36 WTF_MAKE_NONCOPYABLE(CCTileDrawQuad); 37 37 public: 38 static PassOwnPtr<CCTileDrawQuad> create(const CCSharedQuadState*, const IntRect& quadRect, Platform3DObject textureId, const IntPoint& textureOffset, const IntSize& textureSize, GC3Dint textureFilter, bool swizzleContents, bool leftEdgeAA, bool topEdgeAA, bool rightEdgeAA, bool bottomEdgeAA);38 static PassOwnPtr<CCTileDrawQuad> create(const CCSharedQuadState*, const IntRect& quadRect, const IntRect& opaqueRect, Platform3DObject textureId, const IntPoint& textureOffset, const IntSize& textureSize, GC3Dint textureFilter, bool swizzleContents, bool leftEdgeAA, bool topEdgeAA, bool rightEdgeAA, bool bottomEdgeAA); 39 39 40 40 Platform3DObject textureId() const { return m_textureId; } … … 52 52 53 53 private: 54 CCTileDrawQuad(const CCSharedQuadState*, const IntRect& quadRect, Platform3DObject textureId, const IntPoint& textureOffset, const IntSize& textureSize, GC3Dint textureFilter, bool swizzleContents, bool leftEdgeAA, bool topEdgeAA, bool rightEdgeAA, bool bottomEdgeAA);54 CCTileDrawQuad(const CCSharedQuadState*, const IntRect& quadRect, const IntRect& opaqueRect, Platform3DObject textureId, const IntPoint& textureOffset, const IntSize& textureSize, GC3Dint textureFilter, bool swizzleContents, bool leftEdgeAA, bool topEdgeAA, bool rightEdgeAA, bool bottomEdgeAA); 55 55 56 56 Platform3DObject m_textureId; -
trunk/Source/WebCore/platform/graphics/chromium/cc/CCTiledLayerImpl.cpp
r106160 r106300 52 52 Platform3DObject textureId() const { return m_textureId; } 53 53 void setTextureId(Platform3DObject textureId) { m_textureId = textureId; } 54 55 const IntRect& opaqueRect() const { return m_opaqueRect; } 56 void setOpaqueRect(const IntRect& opaqueRect) { m_opaqueRect = opaqueRect; } 57 54 58 private: 55 59 Platform3DObject m_textureId; 60 IntRect m_opaqueRect; 56 61 }; 57 62 … … 149 154 } 150 155 156 IntRect tileOpaqueRect = tile->opaqueRect(); 157 tileOpaqueRect.intersect(layerRect); 158 151 159 // Keep track of how the top left has moved, so the texture can be 152 160 // offset the same amount. … … 165 173 166 174 const GC3Dint textureFilter = m_tiler->hasBorderTexels() ? GraphicsContext3D::LINEAR : GraphicsContext3D::NEAREST; 167 quadList.append(CCTileDrawQuad::create(sharedQuadState, tileRect, tile ->textureId(), textureOffset, textureSize, textureFilter, contentsSwizzled(), leftEdgeAA, topEdgeAA, rightEdgeAA, bottomEdgeAA));175 quadList.append(CCTileDrawQuad::create(sharedQuadState, tileRect, tileOpaqueRect, tile->textureId(), textureOffset, textureSize, textureFilter, contentsSwizzled(), leftEdgeAA, topEdgeAA, rightEdgeAA, bottomEdgeAA)); 168 176 169 177 if (hasDebugBorders()) { … … 184 192 } 185 193 186 void CCTiledLayerImpl:: syncTextureId(int i, int j, Platform3DObject textureId)194 void CCTiledLayerImpl::pushTileProperties(int i, int j, Platform3DObject textureId, const IntRect& opaqueRect) 187 195 { 188 196 DrawableTile* tile = tileAt(i, j); … … 190 198 tile = createTile(i, j); 191 199 tile->setTextureId(textureId); 192 } 193 194 } 200 tile->setOpaqueRect(opaqueRect); 201 } 202 203 } // namespace WebCore 195 204 196 205 #endif // USE(ACCELERATED_COMPOSITING) -
trunk/Source/WebCore/platform/graphics/chromium/cc/CCTiledLayerImpl.h
r105371 r106300 52 52 void setSkipsDraw(bool skipsDraw) { m_skipsDraw = skipsDraw; } 53 53 void setTilingData(const CCLayerTilingData& tiler); 54 void syncTextureId(int, int, Platform3DObject textureId);54 void pushTileProperties(int, int, Platform3DObject textureId, const IntRect& opaqueRect); 55 55 56 56 void setContentsSwizzled(bool contentsSwizzled) { m_contentsSwizzled = contentsSwizzled; } -
trunk/Source/WebKit/chromium/ChangeLog
r106289 r106300 1 2012-01-30 Dana Jansens <danakj@chromium.org> 2 3 [chromium] Use region reported painted opaque for draw culling 4 https://bugs.webkit.org/show_bug.cgi?id=76015 5 6 Reviewed by James Robinson. 7 8 * tests/CCLayerTreeHostImplTest.cpp: 9 (WebKit::BlendStateCheckLayer::appendQuads): 10 (WebKit::BlendStateCheckLayer::setOpaqueColor): 11 (BlendStateCheckLayer): 12 (WebKit::BlendStateCheckLayer::BlendStateCheckLayer): 13 (WebKit::TEST_F): 14 * tests/CCQuadCullerTest.cpp: 15 (WebCore::MakeTileQuad): 16 (WebCore::setQuads): 17 (WebCore::TEST): 18 (WebCore): 19 * tests/CCTiledLayerImplTest.cpp: 20 (CCLayerTestCommon::createLayer): 21 (CCLayerTestCommon::TEST): 22 (CCLayerTestCommon::getQuads): 23 (CCLayerTestCommon::coverageVisibleRectOnTileBoundaries): 24 (CCLayerTestCommon::coverageVisibleRectIntersectsTiles): 25 (CCLayerTestCommon::coverageVisibleRectIntersectsBounds): 26 (CCLayerTestCommon): 27 1 28 2012-01-30 Adrienne Walker <enne@google.com> 2 29 -
trunk/Source/WebKit/chromium/tests/CCLayerTreeHostImplTest.cpp
r105566 r106300 308 308 { 309 309 m_quadsAppended = true; 310 311 OwnPtr<CCDrawQuad> testBlendingDrawQuad = CCSolidColorDrawQuad::create(sharedQuadState, IntRect(5, 5, 5, 5), Color::white); 310 311 Color color = m_opaqueColor ? Color::white : Color(0, 0, 0, 0); 312 OwnPtr<CCDrawQuad> testBlendingDrawQuad = CCSolidColorDrawQuad::create(sharedQuadState, IntRect(5, 5, 5, 5), color); 312 313 EXPECT_EQ(m_blend, testBlendingDrawQuad->needsBlending()); 313 314 EXPECT_EQ(m_hasRenderSurface, !!renderSurface()); … … 322 323 323 324 bool quadsAppended() const { return m_quadsAppended; } 325 326 void setOpaqueColor(bool opaqueColor) { m_opaqueColor = opaqueColor; } 324 327 325 328 private: … … 329 332 , m_hasRenderSurface(false) 330 333 , m_quadsAppended(false) 334 , m_opaqueColor(true) 331 335 { 332 336 setAnchorPoint(FloatPoint(0, 0)); … … 338 342 bool m_hasRenderSurface; 339 343 bool m_quadsAppended; 344 bool m_opaqueColor; 340 345 }; 341 346 … … 359 364 // Opaque layer, drawn without blending. 360 365 layer1->setOpaque(true); 366 layer1->setOpaqueColor(true); 361 367 layer1->setExpectation(false, false); 362 368 m_hostImpl->drawLayers(); 363 369 EXPECT_TRUE(layer1->quadsAppended()); 364 370 365 // Layer with translucent content, drawn withblending.371 // Layer with translucent content, but solid color is opaque, so drawn without blending. 366 372 layer1->setOpaque(false); 373 layer1->setOpaqueColor(true); 374 layer1->setExpectation(false, false); 375 m_hostImpl->drawLayers(); 376 EXPECT_TRUE(layer1->quadsAppended()); 377 378 // Layer with translucent content and painting, so drawn with blending. 379 layer1->setOpaque(false); 380 layer1->setOpaqueColor(false); 367 381 layer1->setExpectation(true, false); 368 382 m_hostImpl->drawLayers(); … … 371 385 // Layer with translucent opacity, drawn with blending. 372 386 layer1->setOpaque(true); 387 layer1->setOpaqueColor(true); 373 388 layer1->setOpacity(0.5); 374 389 layer1->setExpectation(true, false); … … 376 391 EXPECT_TRUE(layer1->quadsAppended()); 377 392 393 // Layer with translucent opacity and painting, drawn with blending. 394 layer1->setOpaque(true); 395 layer1->setOpaqueColor(false); 396 layer1->setOpacity(0.5); 397 layer1->setExpectation(true, false); 398 m_hostImpl->drawLayers(); 399 EXPECT_TRUE(layer1->quadsAppended()); 400 378 401 RefPtr<BlendStateCheckLayer> layer2 = BlendStateCheckLayer::create(2); 379 402 layer1->addChild(layer2); … … 381 404 // 2 opaque layers, drawn without blending. 382 405 layer1->setOpaque(true); 406 layer1->setOpaqueColor(true); 383 407 layer1->setOpacity(1); 384 408 layer1->setExpectation(false, false); 385 409 layer2->setOpaque(true); 410 layer2->setOpaqueColor(true); 386 411 layer2->setOpacity(1); 387 412 layer2->setExpectation(false, false); … … 393 418 // Child layer with opaque content, drawn without blending. 394 419 layer1->setOpaque(false); 420 layer1->setOpaqueColor(false); 395 421 layer1->setExpectation(true, false); 422 layer2->setExpectation(false, false); 423 m_hostImpl->drawLayers(); 424 EXPECT_TRUE(layer1->quadsAppended()); 425 EXPECT_TRUE(layer2->quadsAppended()); 426 427 // Parent layer with translucent content but opaque painting, drawn without blending. 428 // Child layer with opaque content, drawn without blending. 429 layer1->setOpaque(false); 430 layer1->setOpaqueColor(true); 431 layer1->setExpectation(false, false); 396 432 layer2->setExpectation(false, false); 397 433 m_hostImpl->drawLayers(); … … 405 441 // carries the inherited opacity). 406 442 layer1->setOpaque(true); 443 layer1->setOpaqueColor(true); 407 444 layer1->setOpacity(0.5); 408 445 layer1->setExpectation(false, true); … … 415 452 // layer1 not culled. 416 453 layer1->setOpaque(true); 454 layer1->setOpaqueColor(true); 417 455 layer1->setOpacity(1); 418 456 layer1->setExpectation(false, false); 419 457 layer2->setOpaque(true); 458 layer2->setOpaqueColor(true); 420 459 layer2->setOpacity(0.5); 421 460 layer2->setExpectation(true, false); … … 429 468 layer1->setExpectation(false, false); 430 469 layer2->setOpaque(false); 470 layer2->setOpaqueColor(false); 431 471 layer2->setOpacity(1); 432 472 layer2->setExpectation(true, false); 473 m_hostImpl->drawLayers(); 474 EXPECT_TRUE(layer1->quadsAppended()); 475 EXPECT_TRUE(layer2->quadsAppended()); 476 477 // And when the layer says its not opaque but is painted opaque, it is not blended. 478 layer1->setOpaque(true); 479 layer1->setOpacity(1); 480 layer1->setExpectation(false, false); 481 layer2->setOpaque(false); 482 layer2->setOpaqueColor(true); 483 layer2->setOpacity(1); 484 layer2->setExpectation(false, false); 433 485 m_hostImpl->drawLayers(); 434 486 EXPECT_TRUE(layer1->quadsAppended()); -
trunk/Source/WebKit/chromium/tests/CCQuadCullerTest.cpp
r106076 r106300 38 38 }; 39 39 40 static PassOwnPtr<CCDrawQuad> MakeTileQuad(CCSharedQuadState* state, const IntRect& rect )41 { 42 return CCTileDrawQuad::create(state, rect, 1, IntPoint(1, 1), IntSize(100, 100), 0, false, false, false, false, false);43 } 44 45 void setQuads(CCSharedQuadState* rootState, CCSharedQuadState* childState, CCQuadList& quadList )40 static PassOwnPtr<CCDrawQuad> MakeTileQuad(CCSharedQuadState* state, const IntRect& rect, const IntRect& opaqueRect = IntRect()) 41 { 42 return CCTileDrawQuad::create(state, rect, intersection(rect, opaqueRect), 1, IntPoint(1, 1), IntSize(100, 100), 0, false, false, false, false, false); 43 } 44 45 void setQuads(CCSharedQuadState* rootState, CCSharedQuadState* childState, CCQuadList& quadList, const IntRect& opaqueRect = IntRect()) 46 46 { 47 47 quadList.clear(); 48 48 49 quadList.append(MakeTileQuad(rootState, IntRect(IntPoint(), IntSize(100, 100)) ));50 quadList.append(MakeTileQuad(rootState, IntRect(IntPoint(100, 0), IntSize(100, 100)) ));51 quadList.append(MakeTileQuad(rootState, IntRect(IntPoint(200, 0), IntSize(100, 100)) ));52 quadList.append(MakeTileQuad(rootState, IntRect(IntPoint(0, 100), IntSize(100, 100)) ));53 quadList.append(MakeTileQuad(rootState, IntRect(IntPoint(100, 100), IntSize(100, 100)) ));54 quadList.append(MakeTileQuad(rootState, IntRect(IntPoint(200, 100), IntSize(100, 100)) ));55 quadList.append(MakeTileQuad(rootState, IntRect(IntPoint(0, 200), IntSize(100, 100)) ));56 quadList.append(MakeTileQuad(rootState, IntRect(IntPoint(100, 200), IntSize(100, 100)) ));57 quadList.append(MakeTileQuad(rootState, IntRect(IntPoint(200, 200), IntSize(100, 100)) ));58 59 quadList.append(MakeTileQuad(childState, IntRect(IntPoint(), IntSize(100, 100)) ));60 quadList.append(MakeTileQuad(childState, IntRect(IntPoint(100, 0), IntSize(100, 100)) ));61 quadList.append(MakeTileQuad(childState, IntRect(IntPoint(0, 100), IntSize(100, 100)) ));62 quadList.append(MakeTileQuad(childState, IntRect(IntPoint(100, 100), IntSize(100, 100)) ));49 quadList.append(MakeTileQuad(rootState, IntRect(IntPoint(), IntSize(100, 100)), opaqueRect)); 50 quadList.append(MakeTileQuad(rootState, IntRect(IntPoint(100, 0), IntSize(100, 100)), opaqueRect)); 51 quadList.append(MakeTileQuad(rootState, IntRect(IntPoint(200, 0), IntSize(100, 100)), opaqueRect)); 52 quadList.append(MakeTileQuad(rootState, IntRect(IntPoint(0, 100), IntSize(100, 100)), opaqueRect)); 53 quadList.append(MakeTileQuad(rootState, IntRect(IntPoint(100, 100), IntSize(100, 100)), opaqueRect)); 54 quadList.append(MakeTileQuad(rootState, IntRect(IntPoint(200, 100), IntSize(100, 100)), opaqueRect)); 55 quadList.append(MakeTileQuad(rootState, IntRect(IntPoint(0, 200), IntSize(100, 100)), opaqueRect)); 56 quadList.append(MakeTileQuad(rootState, IntRect(IntPoint(100, 200), IntSize(100, 100)), opaqueRect)); 57 quadList.append(MakeTileQuad(rootState, IntRect(IntPoint(200, 200), IntSize(100, 100)), opaqueRect)); 58 59 quadList.append(MakeTileQuad(childState, IntRect(IntPoint(), IntSize(100, 100)), opaqueRect)); 60 quadList.append(MakeTileQuad(childState, IntRect(IntPoint(100, 0), IntSize(100, 100)), opaqueRect)); 61 quadList.append(MakeTileQuad(childState, IntRect(IntPoint(0, 100), IntSize(100, 100)), opaqueRect)); 62 quadList.append(MakeTileQuad(childState, IntRect(IntPoint(100, 100), IntSize(100, 100)), opaqueRect)); 63 63 } 64 64 … … 201 201 } 202 202 203 TEST(CCQuadCullerTest, verifyCullSubRegion) 204 { 205 DECLARE_AND_INITIALIZE_TEST_QUADS 206 207 childTransform.translate(50, 50); 208 209 OwnPtr<CCSharedQuadState> rootState = CCSharedQuadState::create(TransformationMatrix(), TransformationMatrix(), rootRect, IntRect(), 1.0, true); 210 OwnPtr<CCSharedQuadState> childState = CCSharedQuadState::create(childTransform, TransformationMatrix(), childRect, IntRect(), 1.0, false); 211 IntRect childOpaqueRect(childRect.x() + childRect.width() / 4, childRect.y() + childRect.height() / 4, childRect.width() / 2, childRect.height() / 2); 212 213 setQuads(rootState.get(), childState.get(), quadList, childOpaqueRect); 214 EXPECT_EQ(quadList.size(), 13u); 215 CCQuadCuller::cullOccludedQuads(quadList); 216 EXPECT_EQ(quadList.size(), 12u); 217 } 218 219 TEST(CCQuadCullerTest, verifyCullSubRegion2) 220 { 221 DECLARE_AND_INITIALIZE_TEST_QUADS 222 223 childTransform.translate(50, 10); 224 225 OwnPtr<CCSharedQuadState> rootState = CCSharedQuadState::create(TransformationMatrix(), TransformationMatrix(), rootRect, IntRect(), 1.0, true); 226 OwnPtr<CCSharedQuadState> childState = CCSharedQuadState::create(childTransform, TransformationMatrix(), childRect, IntRect(), 1.0, false); 227 IntRect childOpaqueRect(childRect.x() + childRect.width() / 4, childRect.y() + childRect.height() / 4, childRect.width() / 2, childRect.height() * 3 / 4); 228 229 setQuads(rootState.get(), childState.get(), quadList, childOpaqueRect); 230 EXPECT_EQ(quadList.size(), 13u); 231 CCQuadCuller::cullOccludedQuads(quadList); 232 EXPECT_EQ(quadList.size(), 12u); 233 } 234 235 TEST(CCQuadCullerTest, verifyCullSubRegionCheckOvercull) 236 { 237 DECLARE_AND_INITIALIZE_TEST_QUADS 238 239 childTransform.translate(50, 49); 240 241 OwnPtr<CCSharedQuadState> rootState = CCSharedQuadState::create(TransformationMatrix(), TransformationMatrix(), rootRect, IntRect(), 1.0, true); 242 OwnPtr<CCSharedQuadState> childState = CCSharedQuadState::create(childTransform, TransformationMatrix(), childRect, IntRect(), 1.0, false); 243 IntRect childOpaqueRect(childRect.x() + childRect.width() / 4, childRect.y() + childRect.height() / 4, childRect.width() / 2, childRect.height() / 2); 244 245 setQuads(rootState.get(), childState.get(), quadList, childOpaqueRect); 246 EXPECT_EQ(quadList.size(), 13u); 247 CCQuadCuller::cullOccludedQuads(quadList); 248 EXPECT_EQ(quadList.size(), 13u); 249 } 250 203 251 TEST(CCQuadCullerTest, verifyNonAxisAlignedQuadsDontOcclude) 204 252 { -
trunk/Source/WebKit/chromium/tests/CCTiledLayerImplTest.cpp
r105634 r106300 48 48 layer->setSkipsDraw(false); 49 49 layer->setVisibleLayerRect(IntRect(IntPoint(), layerSize)); 50 layer->setDrawOpacity(1); 50 51 51 52 int textureId = 1; 52 53 for (int i = 0; i < tiler->numTilesX(); ++i) 53 54 for (int j = 0; j < tiler->numTilesY(); ++j) 54 layer-> syncTextureId(i, j, static_cast<Platform3DObject>(textureId++));55 layer->pushTileProperties(i, j, static_cast<Platform3DObject>(textureId++), IntRect(0, 0, 1, 1)); 55 56 56 57 return layer.release(); … … 136 137 for (int i = 0; i < numTilesX; ++i) 137 138 for (int j = 0; j < numTilesY; ++j) 138 layer-> syncTextureId(i, j, static_cast<Platform3DObject>(0));139 layer->pushTileProperties(i, j, static_cast<Platform3DObject>(0), IntRect()); 139 140 140 141 // All checkerboarding … … 148 149 } 149 150 150 static voidgetQuads(CCQuadList& quads, IntSize tileSize, const IntSize& layerSize, CCLayerTilingData::BorderTexelOption borderTexelOption, const IntRect& visibleLayerRect)151 static PassOwnPtr<CCSharedQuadState> getQuads(CCQuadList& quads, IntSize tileSize, const IntSize& layerSize, CCLayerTilingData::BorderTexelOption borderTexelOption, const IntRect& visibleLayerRect) 151 152 { 152 153 RefPtr<CCTiledLayerImpl> layer = createLayer(tileSize, layerSize, borderTexelOption); … … 156 157 OwnPtr<CCSharedQuadState> sharedQuadState = layer->createSharedQuadState(); 157 158 layer->appendQuads(quads, sharedQuadState.get()); 159 return sharedQuadState.release(); // The shared data must be owned as long as the quad list exists. 158 160 } 159 161 … … 175 177 IntSize layerSize(1000, 1000); 176 178 CCQuadList quads; 177 getQuads(quads, IntSize(100, 100), layerSize, borders, IntRect(IntPoint(), layerSize)); 179 OwnPtr<CCSharedQuadState> sharedState; 180 sharedState = getQuads(quads, IntSize(100, 100), layerSize, borders, IntRect(IntPoint(), layerSize)); 178 181 verifyQuadsExactlyCoverRect(quads, IntRect(IntPoint(), layerSize)); 179 182 } … … 191 194 IntSize layerSize(250, 250); 192 195 CCQuadList quads; 193 getQuads(quads, IntSize(50, 50), IntSize(250, 250), CCLayerTilingData::NoBorderTexels, visibleLayerRect); 196 OwnPtr<CCSharedQuadState> sharedState; 197 sharedState = getQuads(quads, IntSize(50, 50), IntSize(250, 250), CCLayerTilingData::NoBorderTexels, visibleLayerRect); 194 198 verifyQuadsExactlyCoverRect(quads, visibleLayerRect); 195 199 } … … 203 207 IntRect visibleLayerRect(IntPoint(), layerSize); 204 208 CCQuadList quads; 205 getQuads(quads, IntSize(100, 100), layerSize, CCLayerTilingData::NoBorderTexels, visibleLayerRect); 209 OwnPtr<CCSharedQuadState> sharedState; 210 sharedState = getQuads(quads, IntSize(100, 100), layerSize, CCLayerTilingData::NoBorderTexels, visibleLayerRect); 206 211 verifyQuadsExactlyCoverRect(quads, visibleLayerRect); 207 212 } … … 215 220 IntSize layerSize(250, 250); 216 221 CCQuadList quads; 217 getQuads(quads, tileSize, layerSize, CCLayerTilingData::NoBorderTexels, IntRect(IntPoint(), layerSize)); 222 OwnPtr<CCSharedQuadState> sharedState; 223 sharedState = getQuads(quads, tileSize, layerSize, CCLayerTilingData::NoBorderTexels, IntRect(IntPoint(), layerSize)); 218 224 219 225 for (size_t i = 0; i < quads.size(); ++i) { … … 224 230 EXPECT_EQ(quad->textureOffset(), IntPoint()) << quadString << i; 225 231 EXPECT_EQ(quad->textureSize(), tileSize) << quadString << i; 232 EXPECT_EQ(IntRect(0, 0, 1, 1), quad->opaqueRect()) << quadString << i; 233 } 234 } 235 236 TEST(CCTiledLayerImplTest, tileOpaqueRectForLayerNoBorders) 237 { 238 DebugScopedSetImplThread scopedImplThread; 239 240 IntSize tileSize(50, 50); 241 IntSize layerSize(250, 250); 242 CCQuadList quads; 243 OwnPtr<CCSharedQuadState> sharedState; 244 sharedState = getQuads(quads, tileSize, layerSize, CCLayerTilingData::NoBorderTexels, IntRect(IntPoint(), layerSize)); 245 246 for (size_t i = 0; i < quads.size(); ++i) { 247 ASSERT_EQ(quads[i]->material(), CCDrawQuad::TiledContent) << quadString << i; 248 CCTileDrawQuad* quad = static_cast<CCTileDrawQuad*>(quads[i].get()); 249 250 EXPECT_EQ(IntRect(0, 0, 1, 1), quad->opaqueRect()) << quadString << i; 226 251 } 227 252 }
Note: See TracChangeset
for help on using the changeset viewer.