Changeset 109304 in webkit
- Timestamp:
- Feb 29, 2012 8:33:03 PM (12 years ago)
- Location:
- trunk/Source
- Files:
-
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r109301 r109304 1 2012-02-29 W. James MacLean <wjmaclean@chromium.org> 2 3 [chromium] Estimate pixel count for frame rate control 4 https://bugs.webkit.org/show_bug.cgi?id=74982 5 6 Reviewed by James Robinson. 7 8 Value checks added to unit tests. 9 10 Adds mechanism to compute and collect statistics on pixel overdraw for selected frames. 11 12 * platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp: 13 (WebCore::CCLayerTreeHostImpl::optimizeRenderPasses): 14 * platform/graphics/chromium/cc/CCQuadCuller.cpp: 15 (WebCore::wedgeProduct): 16 (WebCore): 17 (WebCore::quadArea): 18 (WebCore::CCQuadCuller::cullOccludedQuads): 19 * platform/graphics/chromium/cc/CCQuadCuller.h: 20 (CCQuadCuller): 21 * platform/graphics/chromium/cc/CCRenderPass.cpp: 22 (WebCore::CCRenderPass::optimizeQuads): 23 * platform/graphics/chromium/cc/CCRenderPass.h: 24 (CCOverdrawCounts): 25 (WebCore): 26 (CCRenderPass): 27 1 28 2012-02-29 Jason Liu <jason.liu@torchmobile.com.cn> 2 29 -
trunk/Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp
r108937 r109304 235 235 bool haveDamageRect = layerRendererCapabilities().usingPartialSwap; 236 236 237 // FIXME: compute overdraw metrics only occasionally, not every frame. 238 CCOverdrawCounts overdrawCounts; 237 239 for (unsigned i = 0; i < passes.size(); ++i) { 238 240 FloatRect damageRect = passes[i]->targetSurface()->damageTracker()->currentDamageRect(); 239 passes[i]->optimizeQuads(haveDamageRect, damageRect); 240 } 241 passes[i]->optimizeQuads(haveDamageRect, damageRect, &overdrawCounts); 242 } 243 244 float normalization = 1000.f / (m_layerRenderer->viewportWidth() * m_layerRenderer->viewportHeight()); 245 PlatformSupport::histogramCustomCounts("Renderer4.pixelOverdrawOpaque", static_cast<int>(normalization * overdrawCounts.m_pixelsDrawnOpaque), 100, 1000000, 50); 246 PlatformSupport::histogramCustomCounts("Renderer4.pixelOverdrawTransparent", static_cast<int>(normalization * overdrawCounts.m_pixelsDrawnTransparent), 100, 1000000, 50); 247 PlatformSupport::histogramCustomCounts("Renderer4.pixelOverdrawCulled", static_cast<int>(normalization * overdrawCounts.m_pixelsCulled), 100, 1000000, 50); 241 248 } 242 249 -
trunk/Source/WebCore/platform/graphics/chromium/cc/CCQuadCuller.cpp
r108764 r109304 76 76 } 77 77 78 void CCQuadCuller::cullOccludedQuads(CCQuadList& quadList, bool haveDamageRect, const FloatRect& damageRect) 78 static float wedgeProduct(const FloatPoint& p1, const FloatPoint& p2) 79 { 80 return p1.x() * p2.y() - p1.y() * p2.x(); 81 } 82 83 // Computes area of quads that are possibly non-rectangular. Can 84 // be easily extended to polygons. 85 static float quadArea(const FloatQuad& quad) 86 { 87 return fabs(0.5 * (wedgeProduct(quad.p1(), quad.p2()) + 88 wedgeProduct(quad.p2(), quad.p3()) + 89 wedgeProduct(quad.p3(), quad.p4()) + 90 wedgeProduct(quad.p4(), quad.p1()))); 91 } 92 93 void CCQuadCuller::cullOccludedQuads(CCQuadList& quadList, bool haveDamageRect, const FloatRect& damageRect, CCOverdrawCounts* overdrawMetrics) 79 94 { 80 95 if (!quadList.size()) … … 97 112 IntRect transformedVisibleQuadRect = rectSubtractRegion(opaqueCoverageThusFar, transformedQuadRect); 98 113 bool keepQuad = !transformedVisibleQuadRect.isEmpty(); 99 if (!keepQuad)100 continue;101 114 102 115 // See if we can reduce the number of pixels to draw by reducing the size of the draw 103 116 // quad - we do this by changing its visible rect. 104 if (transformedVisibleQuadRect != transformedQuadRect && drawQuad->isLayerAxisAlignedIntRect()) 105 drawQuad->setQuadVisibleRect(drawQuad->quadTransform().inverse().mapRect(transformedVisibleQuadRect)); 117 bool didReduceQuadSize = false; 118 if (keepQuad) { 119 if (transformedVisibleQuadRect != transformedQuadRect && drawQuad->isLayerAxisAlignedIntRect()) { 120 drawQuad->setQuadVisibleRect(drawQuad->quadTransform().inverse().mapRect(transformedVisibleQuadRect)); 121 didReduceQuadSize = true; 122 } 106 123 107 // When adding rect to opaque region, deflate it to stay conservative. 108 if (drawQuad->isLayerAxisAlignedIntRect() && !drawQuad->opaqueRect().isEmpty()) { 109 FloatRect floatOpaqueRect = drawQuad->quadTransform().mapRect(FloatRect(drawQuad->opaqueRect())); 110 opaqueCoverageThusFar.unite(Region(enclosedIntRect(floatOpaqueRect))); 124 // When adding rect to opaque region, deflate it to stay conservative. 125 if (drawQuad->isLayerAxisAlignedIntRect() && !drawQuad->opaqueRect().isEmpty()) { 126 FloatRect floatOpaqueRect = drawQuad->quadTransform().mapRect(FloatRect(drawQuad->opaqueRect())); 127 opaqueCoverageThusFar.unite(Region(enclosedIntRect(floatOpaqueRect))); 128 } 129 130 culledList.append(quadList[i].release()); 111 131 } 112 132 113 culledList.append(quadList[i].release()); 133 if (overdrawMetrics) { 134 TRACE_EVENT("CCQuadCuller::cullOccludedQuads_OverdrawMetrics", 0, 0); 135 // We compute the area of the transformed quad, as this should be in pixels. 136 float area = quadArea(drawQuad->quadTransform().mapQuad(FloatQuad(drawQuad->quadRect()))); 137 if (keepQuad) { 138 if (didReduceQuadSize) { 139 float visibleQuadRectArea = quadArea(drawQuad->quadTransform().mapQuad(FloatQuad(drawQuad->quadVisibleRect()))); 140 overdrawMetrics->m_pixelsCulled += area - visibleQuadRectArea; 141 area = visibleQuadRectArea; 142 } 143 IntRect visibleOpaqueRect(drawQuad->quadVisibleRect()); 144 visibleOpaqueRect.intersect(drawQuad->opaqueRect()); 145 FloatQuad visibleOpaqueQuad = drawQuad->quadTransform().mapQuad(FloatQuad(visibleOpaqueRect)); 146 float opaqueArea = quadArea(visibleOpaqueQuad); 147 overdrawMetrics->m_pixelsDrawnOpaque += opaqueArea; 148 overdrawMetrics->m_pixelsDrawnTransparent += area - opaqueArea; 149 } else 150 overdrawMetrics->m_pixelsCulled += area; 151 } 114 152 } 115 153 quadList.clear(); // Release anything that remains. -
trunk/Source/WebCore/platform/graphics/chromium/cc/CCQuadCuller.h
r108458 r109304 33 33 class CCQuadCuller { 34 34 public: 35 static void cullOccludedQuads(CCQuadList&, bool haveDamageRect, const FloatRect& damageRect); 35 // Passing 0 for CCOverdrawCounts* is valid, and disable the extra computation 36 // done to estimate over draw statistics. 37 static void cullOccludedQuads(CCQuadList&, bool haveDamageRect, const FloatRect& damageRect, CCOverdrawCounts*); 36 38 37 39 private: -
trunk/Source/WebCore/platform/graphics/chromium/cc/CCRenderPass.cpp
r108458 r109304 66 66 } 67 67 68 void CCRenderPass::optimizeQuads(bool haveDamageRect, const FloatRect& damageRect )68 void CCRenderPass::optimizeQuads(bool haveDamageRect, const FloatRect& damageRect, CCOverdrawCounts* overdraw) 69 69 { 70 CCQuadCuller::cullOccludedQuads(m_quadList, haveDamageRect, damageRect );70 CCQuadCuller::cullOccludedQuads(m_quadList, haveDamageRect, damageRect, overdraw); 71 71 } 72 72 -
trunk/Source/WebCore/platform/graphics/chromium/cc/CCRenderPass.h
r108458 r109304 39 39 typedef Vector<OwnPtr<CCDrawQuad> > CCQuadList; 40 40 41 struct CCOverdrawCounts { 42 // Count of pixels that are opaque (and thus occlude). Ideally this is no more 43 // than wiewport width x height. 44 float m_pixelsDrawnOpaque; 45 // Count of pixels that are possibly transparent, and cannot occlude. 46 float m_pixelsDrawnTransparent; 47 // Count of pixels not drawn as they are occluded by somthing opaque. 48 float m_pixelsCulled; 49 }; 50 41 51 class CCRenderPass { 42 52 WTF_MAKE_NONCOPYABLE(CCRenderPass); … … 47 57 void appendQuadsForRenderSurfaceLayer(CCLayerImpl*); 48 58 49 void optimizeQuads(bool haveDamageRect, const FloatRect& damageRect); 59 // Passing in 0 for CCOverdrawCounts is valid, and disables performing overdraw calculations. 60 void optimizeQuads(bool haveDamageRect, const FloatRect& damageRect, CCOverdrawCounts*); 50 61 51 62 const CCQuadList& quadList() const { return m_quadList; } -
trunk/Source/WebKit/chromium/ChangeLog
r109300 r109304 1 2012-02-29 W. James MacLean <wjmaclean@chromium.org> 2 3 [chromium] Estimate pixel count for frame rate control 4 https://bugs.webkit.org/show_bug.cgi?id=74982 5 6 Reviewed by James Robinson. 7 8 Adds mechanism to compute and collect statistics on pixel overdraw for selected frames. 9 10 * tests/CCQuadCullerTest.cpp: 11 (WebCore): 12 (WebCore::TEST): 13 1 14 2012-02-29 James Simonsen <simonjam@chromium.org> 2 15 -
trunk/Source/WebKit/chromium/tests/CCQuadCullerTest.cpp
r108458 r109304 65 65 #define DECLARE_AND_INITIALIZE_TEST_QUADS \ 66 66 CCQuadList quadList; \ 67 CCOverdrawCounts overdraw = {0, 0, 0}; \ 67 68 TransformationMatrix childTransform; \ 68 69 IntSize rootSize = IntSize(300, 300); \ … … 80 81 setQuads(rootState.get(), childState.get(), quadList); 81 82 EXPECT_EQ(quadList.size(), 13u); 82 CCQuadCuller::cullOccludedQuads(quadList, false, IntRect() );83 CCQuadCuller::cullOccludedQuads(quadList, false, IntRect(), &overdraw); 83 84 EXPECT_EQ(quadList.size(), 9u); 85 EXPECT_NEAR(overdraw.m_pixelsDrawnOpaque, 90000, 1); 86 EXPECT_NEAR(overdraw.m_pixelsDrawnTransparent, 0, 1); 87 EXPECT_NEAR(overdraw.m_pixelsCulled, 40000, 1); 84 88 } 85 89 … … 93 97 setQuads(rootState.get(), childState.get(), quadList); 94 98 EXPECT_EQ(quadList.size(), 13u); 95 CCQuadCuller::cullOccludedQuads(quadList, false, IntRect()); 96 EXPECT_EQ(quadList.size(), 13u); 99 CCQuadCuller::cullOccludedQuads(quadList, false, IntRect(), &overdraw); 100 EXPECT_EQ(quadList.size(), 13u); 101 EXPECT_NEAR(overdraw.m_pixelsDrawnOpaque, 90000, 1); 102 EXPECT_NEAR(overdraw.m_pixelsDrawnTransparent, 40000, 1); 103 EXPECT_NEAR(overdraw.m_pixelsCulled, 0, 1); 97 104 } 98 105 … … 106 113 setQuads(rootState.get(), childState.get(), quadList); 107 114 EXPECT_EQ(quadList.size(), 13u); 108 CCQuadCuller::cullOccludedQuads(quadList, false, IntRect()); 109 EXPECT_EQ(quadList.size(), 13u); 115 CCQuadCuller::cullOccludedQuads(quadList, false, IntRect(), &overdraw); 116 EXPECT_EQ(quadList.size(), 13u); 117 EXPECT_NEAR(overdraw.m_pixelsDrawnOpaque, 90000, 1); 118 EXPECT_NEAR(overdraw.m_pixelsDrawnTransparent, 40000, 1); 119 EXPECT_NEAR(overdraw.m_pixelsCulled, 0, 1); 110 120 } 111 121 … … 121 131 setQuads(rootState.get(), childState.get(), quadList); 122 132 EXPECT_EQ(quadList.size(), 13u); 123 CCQuadCuller::cullOccludedQuads(quadList, false, IntRect() );133 CCQuadCuller::cullOccludedQuads(quadList, false, IntRect(), &overdraw); 124 134 EXPECT_EQ(quadList.size(), 12u); 125 135 … … 138 148 EXPECT_EQ(quadVisibleRect6.height(), 50); 139 149 EXPECT_EQ(quadVisibleRect6.y(), 250); 150 151 EXPECT_NEAR(overdraw.m_pixelsDrawnOpaque, 100000, 1); 152 EXPECT_NEAR(overdraw.m_pixelsDrawnTransparent, 0, 1); 153 EXPECT_NEAR(overdraw.m_pixelsCulled, 30000, 1); 140 154 } 141 155 … … 159 173 160 174 EXPECT_EQ(quadList.size(), 2u); 161 CCQuadCuller::cullOccludedQuads(quadList, false, IntRect() );175 CCQuadCuller::cullOccludedQuads(quadList, false, IntRect(), &overdraw); 162 176 EXPECT_EQ(quadList.size(), 2u); 177 178 EXPECT_NEAR(overdraw.m_pixelsDrawnOpaque, 20363, 1); 179 EXPECT_NEAR(overdraw.m_pixelsDrawnTransparent, 0, 1); 180 EXPECT_NEAR(overdraw.m_pixelsCulled, 0, 1); 163 181 } 164 182 … … 182 200 183 201 EXPECT_EQ(quadList.size(), 2u); 184 CCQuadCuller::cullOccludedQuads(quadList, false, IntRect() );202 CCQuadCuller::cullOccludedQuads(quadList, false, IntRect(), &overdraw); 185 203 EXPECT_EQ(quadList.size(), 2u); 204 205 EXPECT_NEAR(overdraw.m_pixelsDrawnOpaque, 19643, 1); 206 EXPECT_NEAR(overdraw.m_pixelsDrawnTransparent, 0, 1); 207 EXPECT_NEAR(overdraw.m_pixelsCulled, 0, 1); 186 208 } 187 209 … … 197 219 setQuads(rootState.get(), childState.get(), quadList); 198 220 EXPECT_EQ(quadList.size(), 13u); 199 CCQuadCuller::cullOccludedQuads(quadList, false, IntRect() );221 CCQuadCuller::cullOccludedQuads(quadList, false, IntRect(), &overdraw); 200 222 EXPECT_EQ(quadList.size(), 9u); 223 EXPECT_NEAR(overdraw.m_pixelsDrawnOpaque, 90000, 1); 224 EXPECT_NEAR(overdraw.m_pixelsDrawnTransparent, 0, 1); 225 EXPECT_NEAR(overdraw.m_pixelsCulled, 40000, 1); 201 226 } 202 227 … … 213 238 setQuads(rootState.get(), childState.get(), quadList, childOpaqueRect); 214 239 EXPECT_EQ(quadList.size(), 13u); 215 CCQuadCuller::cullOccludedQuads(quadList, false, IntRect() );240 CCQuadCuller::cullOccludedQuads(quadList, false, IntRect(), &overdraw); 216 241 EXPECT_EQ(quadList.size(), 12u); 242 EXPECT_NEAR(overdraw.m_pixelsDrawnOpaque, 90000, 1); 243 EXPECT_NEAR(overdraw.m_pixelsDrawnTransparent, 30000, 1); 244 EXPECT_NEAR(overdraw.m_pixelsCulled, 10000, 1); 217 245 } 218 246 … … 229 257 setQuads(rootState.get(), childState.get(), quadList, childOpaqueRect); 230 258 EXPECT_EQ(quadList.size(), 13u); 231 CCQuadCuller::cullOccludedQuads(quadList, false, IntRect() );259 CCQuadCuller::cullOccludedQuads(quadList, false, IntRect(), &overdraw); 232 260 EXPECT_EQ(quadList.size(), 12u); 261 EXPECT_NEAR(overdraw.m_pixelsDrawnOpaque, 90000, 1); 262 EXPECT_NEAR(overdraw.m_pixelsDrawnTransparent, 25000, 1); 263 EXPECT_NEAR(overdraw.m_pixelsCulled, 15000, 1); 233 264 } 234 265 … … 245 276 setQuads(rootState.get(), childState.get(), quadList, childOpaqueRect); 246 277 EXPECT_EQ(quadList.size(), 13u); 247 CCQuadCuller::cullOccludedQuads(quadList, false, IntRect() );278 CCQuadCuller::cullOccludedQuads(quadList, false, IntRect(), &overdraw); 248 279 EXPECT_EQ(quadList.size(), 13u); 249 280 } … … 261 292 setQuads(rootState.get(), childState.get(), quadList); 262 293 EXPECT_EQ(quadList.size(), 13u); 263 CCQuadCuller::cullOccludedQuads(quadList, false, IntRect()); 264 EXPECT_EQ(quadList.size(), 13u); 294 CCQuadCuller::cullOccludedQuads(quadList, false, IntRect(), &overdraw); 295 EXPECT_EQ(quadList.size(), 13u); 296 EXPECT_NEAR(overdraw.m_pixelsDrawnOpaque, 130000, 1); 297 EXPECT_NEAR(overdraw.m_pixelsDrawnTransparent, 0, 1); 298 EXPECT_NEAR(overdraw.m_pixelsCulled, 0, 1); 265 299 } 266 300 … … 283 317 setQuads(rootState.get(), childState.get(), quadList); 284 318 EXPECT_EQ(quadList.size(), 13u); 285 CCQuadCuller::cullOccludedQuads(quadList, false, IntRect() );319 CCQuadCuller::cullOccludedQuads(quadList, false, IntRect(), &overdraw); 286 320 EXPECT_EQ(quadList.size(), 12u); 287 } 288 289 TEST(CCQuadCullerTest, veriftyCullOutsideScissorOverTile) 290 { 291 DECLARE_AND_INITIALIZE_TEST_QUADS 292 293 OwnPtr<CCSharedQuadState> rootState = CCSharedQuadState::create(TransformationMatrix(), TransformationMatrix(), rootRect, IntRect(), 1.0, true); 294 OwnPtr<CCSharedQuadState> childState = CCSharedQuadState::create(childTransform, TransformationMatrix(), childRect, IntRect(), 1.0, true); 295 296 setQuads(rootState.get(), childState.get(), quadList); 297 EXPECT_EQ(quadList.size(), 13u); 298 CCQuadCuller::cullOccludedQuads(quadList, true, IntRect(200, 100, 100, 100)); 321 EXPECT_NEAR(overdraw.m_pixelsDrawnOpaque, 120000, 1); 322 EXPECT_NEAR(overdraw.m_pixelsDrawnTransparent, 0, 1); 323 EXPECT_NEAR(overdraw.m_pixelsCulled, 10000, 1); 324 } 325 326 TEST(CCQuadCullerTest, verifyCullOutsideScissorOverTile) 327 { 328 DECLARE_AND_INITIALIZE_TEST_QUADS 329 330 OwnPtr<CCSharedQuadState> rootState = CCSharedQuadState::create(TransformationMatrix(), TransformationMatrix(), rootRect, IntRect(), 1.0, true); 331 OwnPtr<CCSharedQuadState> childState = CCSharedQuadState::create(childTransform, TransformationMatrix(), childRect, IntRect(), 1.0, true); 332 333 setQuads(rootState.get(), childState.get(), quadList); 334 EXPECT_EQ(quadList.size(), 13u); 335 CCQuadCuller::cullOccludedQuads(quadList, true, IntRect(200, 100, 100, 100), &overdraw); 299 336 EXPECT_EQ(quadList.size(), 1u); 300 } 301 302 TEST(CCQuadCullerTest, veriftyCullOutsideScissorOverCulledTile) 303 { 304 DECLARE_AND_INITIALIZE_TEST_QUADS 305 306 OwnPtr<CCSharedQuadState> rootState = CCSharedQuadState::create(TransformationMatrix(), TransformationMatrix(), rootRect, IntRect(), 1.0, true); 307 OwnPtr<CCSharedQuadState> childState = CCSharedQuadState::create(childTransform, TransformationMatrix(), childRect, IntRect(), 1.0, true); 308 309 setQuads(rootState.get(), childState.get(), quadList); 310 EXPECT_EQ(quadList.size(), 13u); 311 CCQuadCuller::cullOccludedQuads(quadList, true, IntRect(100, 100, 100, 100)); 337 EXPECT_NEAR(overdraw.m_pixelsDrawnOpaque, 10000, 1); 338 EXPECT_NEAR(overdraw.m_pixelsDrawnTransparent, 0, 1); 339 EXPECT_NEAR(overdraw.m_pixelsCulled, 120000, 1); 340 } 341 342 TEST(CCQuadCullerTest, verifyCullOutsideScissorOverCulledTile) 343 { 344 DECLARE_AND_INITIALIZE_TEST_QUADS 345 346 OwnPtr<CCSharedQuadState> rootState = CCSharedQuadState::create(TransformationMatrix(), TransformationMatrix(), rootRect, IntRect(), 1.0, true); 347 OwnPtr<CCSharedQuadState> childState = CCSharedQuadState::create(childTransform, TransformationMatrix(), childRect, IntRect(), 1.0, true); 348 349 setQuads(rootState.get(), childState.get(), quadList); 350 EXPECT_EQ(quadList.size(), 13u); 351 CCQuadCuller::cullOccludedQuads(quadList, true, IntRect(100, 100, 100, 100), &overdraw); 312 352 EXPECT_EQ(quadList.size(), 1u); 313 353 } 314 354 315 TEST(CCQuadCullerTest, verif tyCullOutsideScissorOverPartialTiles)316 { 317 DECLARE_AND_INITIALIZE_TEST_QUADS 318 319 OwnPtr<CCSharedQuadState> rootState = CCSharedQuadState::create(TransformationMatrix(), TransformationMatrix(), rootRect, IntRect(), 1.0, true); 320 OwnPtr<CCSharedQuadState> childState = CCSharedQuadState::create(childTransform, TransformationMatrix(), childRect, IntRect(), 1.0, true); 321 322 setQuads(rootState.get(), childState.get(), quadList); 323 EXPECT_EQ(quadList.size(), 13u); 324 CCQuadCuller::cullOccludedQuads(quadList, true, IntRect(50, 50, 200, 200) );355 TEST(CCQuadCullerTest, verifyCullOutsideScissorOverPartialTiles) 356 { 357 DECLARE_AND_INITIALIZE_TEST_QUADS 358 359 OwnPtr<CCSharedQuadState> rootState = CCSharedQuadState::create(TransformationMatrix(), TransformationMatrix(), rootRect, IntRect(), 1.0, true); 360 OwnPtr<CCSharedQuadState> childState = CCSharedQuadState::create(childTransform, TransformationMatrix(), childRect, IntRect(), 1.0, true); 361 362 setQuads(rootState.get(), childState.get(), quadList); 363 EXPECT_EQ(quadList.size(), 13u); 364 CCQuadCuller::cullOccludedQuads(quadList, true, IntRect(50, 50, 200, 200), &overdraw); 325 365 EXPECT_EQ(quadList.size(), 9u); 326 366 } 327 367 328 TEST(CCQuadCullerTest, verif tyCullOutsideScissorOverNoTiles)329 { 330 DECLARE_AND_INITIALIZE_TEST_QUADS 331 332 OwnPtr<CCSharedQuadState> rootState = CCSharedQuadState::create(TransformationMatrix(), TransformationMatrix(), rootRect, IntRect(), 1.0, true); 333 OwnPtr<CCSharedQuadState> childState = CCSharedQuadState::create(childTransform, TransformationMatrix(), childRect, IntRect(), 1.0, true); 334 335 setQuads(rootState.get(), childState.get(), quadList); 336 EXPECT_EQ(quadList.size(), 13u); 337 CCQuadCuller::cullOccludedQuads(quadList, true, IntRect(500, 500, 100, 100) );368 TEST(CCQuadCullerTest, verifyCullOutsideScissorOverNoTiles) 369 { 370 DECLARE_AND_INITIALIZE_TEST_QUADS 371 372 OwnPtr<CCSharedQuadState> rootState = CCSharedQuadState::create(TransformationMatrix(), TransformationMatrix(), rootRect, IntRect(), 1.0, true); 373 OwnPtr<CCSharedQuadState> childState = CCSharedQuadState::create(childTransform, TransformationMatrix(), childRect, IntRect(), 1.0, true); 374 375 setQuads(rootState.get(), childState.get(), quadList); 376 EXPECT_EQ(quadList.size(), 13u); 377 CCQuadCuller::cullOccludedQuads(quadList, true, IntRect(500, 500, 100, 100), &overdraw); 338 378 EXPECT_EQ(quadList.size(), 0u); 379 EXPECT_NEAR(overdraw.m_pixelsDrawnOpaque, 0, 1); 380 EXPECT_NEAR(overdraw.m_pixelsDrawnTransparent, 0, 1); 381 EXPECT_NEAR(overdraw.m_pixelsCulled, 130000, 1); 339 382 } 340 383
Note: See TracChangeset
for help on using the changeset viewer.