Changeset 149369 in webkit
- Timestamp:
- Apr 30, 2013 7:39:56 AM (11 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r149368 r149369 1 2013-04-30 Noam Rosenthal <noam@webkit.org> 2 3 [Texmap] Avoid using overlap/non-overlap region in cases where the overhead is bigger than the gain 4 https://bugs.webkit.org/show_bug.cgi?id=115226 5 6 Reviewed by Allan Sandfeld Jensen. 7 8 When there are several fragmeneted overlap regions, or when the overlap region is bigger than the 9 non-overlap region, it's more efficient to have a single intermediate surface rather than split 10 the rendering to overlap/non-overlap. 11 12 Covered by tests in compositing/overlap-blending. 13 14 * platform/graphics/texmap/TextureMapperLayer.cpp: 15 (WebCore::TextureMapperLayer::shouldBlend): 16 Readability fix. 17 18 (WebCore::TextureMapperLayer::paintUsingOverlapRegions): 19 Consolidate to one overlap rect when one of the following occurs: 20 - The overlap region's area is larger than the non-overlap region area. 21 - There are many fragmented overlap regions and no non-overlap regions. 22 1 23 2013-04-30 Christophe Dumez <ch.dumez@sisa.samsung.com> 2 24 -
trunk/Source/WebCore/platform/graphics/texmap/TextureMapperLayer.cpp
r149365 r149369 198 198 return false; 199 199 200 #if ENABLE(CSS_FILTERS) 201 if (m_currentFilters.size()) 202 return true; 203 #endif 204 return m_currentOpacity < 1 || m_state.maskLayer || (m_state.replicaLayer && m_state.replicaLayer->m_state.maskLayer); 200 return m_currentOpacity < 1 201 || hasFilters() 202 || m_state.maskLayer 203 || (m_state.replicaLayer && m_state.replicaLayer->m_state.maskLayer); 205 204 } 206 205 … … 335 334 } 336 335 336 // Having both overlap and non-overlap regions carries some overhead. Avoid it if the overlap area 337 // is big anyway. 338 if (overlapRegion.bounds().size().area() > nonOverlapRegion.bounds().size().area()) { 339 overlapRegion.unite(nonOverlapRegion); 340 nonOverlapRegion = Region(); 341 } 342 337 343 nonOverlapRegion.translate(options.offset); 338 344 Vector<IntRect> rects = nonOverlapRegion.rects(); 345 339 346 for (size_t i = 0; i < rects.size(); ++i) { 340 347 IntRect rect = rects[i]; … … 348 355 349 356 rects = overlapRegion.rects(); 357 static const size_t OverlapRegionConsolidationThreshold = 4; 358 if (nonOverlapRegion.isEmpty() && rects.size() > OverlapRegionConsolidationThreshold) { 359 rects.clear(); 360 rects.append(overlapRegion.bounds()); 361 } 362 350 363 IntSize maxTextureSize = options.textureMapper->maxTextureSize(); 351 364 IntRect adjustedClipBounds(options.textureMapper->clipBounds());
Note: See TracChangeset
for help on using the changeset viewer.