Changeset 187054 in webkit
- Timestamp:
- Jul 20, 2015 7:00:56 PM (9 years ago)
- Location:
- trunk/Source/WebKit2
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebKit2/ChangeLog
r187050 r187054 1 2015-07-20 Simon Fraser <simon.fraser@apple.com> 2 3 Facebook in tiled fullscreen is slow 4 https://bugs.webkit.org/show_bug.cgi?id=147134 5 rdar://problem/21823349 6 7 Reviewed by Tim Horton. 8 9 TiledCoreAnimationDrawingArea::scaleViewToFitDocumentIfNeeded() could cause a page to toggle 10 between two fixed layout sizes differing by a pixel, because of rounding. This would cause 11 lots of extra layouts and painting. 12 13 This happened because the the fixed layout size was computed using ceil(m_webPage.size().width() / viewScale) 14 15 * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm: 16 (WebKit::TiledCoreAnimationDrawingArea::scaleViewToFitDocumentIfNeeded): 17 1 18 2015-07-20 Wenson Hsieh <wenson_hsieh@apple.com> 2 19 -
trunk/Source/WebKit2/WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm
r187001 r187054 284 284 285 285 int viewWidth = m_webPage.size().width(); 286 bool documentWidthChangedOrInvalidated = m_webPage.mainFrame()->view()->needsLayout() || (m_lastDocumentSizeForScaleToFit.width() != m_webPage.mainFrameView()->renderView()->unscaledDocumentRect().width()); 286 int documentWidth = m_webPage.mainFrameView()->renderView()->unscaledDocumentRect().width(); 287 288 bool documentWidthChanged = m_lastDocumentSizeForScaleToFit.width() != documentWidth; 287 289 bool viewWidthChanged = m_lastViewSizeForScaleToFit.width() != viewWidth; 288 290 289 if (!documentWidthChanged OrInvalidated&& !viewWidthChanged)291 if (!documentWidthChanged && !viewWidthChanged) 290 292 return; 291 293 … … 296 298 // Our current understanding of the document width is still up to date, and we're in scaling mode. 297 299 // Update the viewScale without doing an extra layout to re-determine the document width. 298 if (m_isScalingViewToFitDocument && !documentWidthChangedOrInvalidated) { 300 if (m_isScalingViewToFitDocument && !documentWidthChanged) { 301 m_lastViewSizeForScaleToFit = m_webPage.size(); 299 302 float viewScale = (float)viewWidth / (float)m_lastDocumentSizeForScaleToFit.width(); 300 m_lastViewSizeForScaleToFit = m_webPage.size(); 301 viewScale = std::max(viewScale, minimumViewScale); 303 if (viewScale < minimumViewScale) { 304 viewScale = minimumViewScale; 305 documentWidth = std::ceil(viewWidth / viewScale); 306 } 307 IntSize fixedLayoutSize(documentWidth, std::ceil((m_webPage.size().height() - m_webPage.corePage()->topContentInset()) / viewScale)); 308 m_webPage.setFixedLayoutSize(fixedLayoutSize); 302 309 m_webPage.scaleView(viewScale); 303 304 IntSize fixedLayoutSize(std::ceil(m_webPage.size().width() / viewScale), std::ceil((m_webPage.size().height() - m_webPage.corePage()->topContentInset()) / viewScale));305 m_webPage.setFixedLayoutSize(fixedLayoutSize);306 310 return; 307 311 } … … 315 319 m_lastDocumentSizeForScaleToFit = documentSize; 316 320 317 intdocumentWidth = documentSize.width();321 documentWidth = documentSize.width(); 318 322 319 323 float viewScale = 1; … … 326 330 m_webPage.setUseFixedLayout(true); 327 331 viewScale = (float)viewWidth / (float)documentWidth; 328 viewScale = std::max(viewScale, minimumViewScale); 329 IntSize fixedLayoutSize(std::ceil(m_webPage.size().width() / viewScale), std::ceil((m_webPage.size().height() - m_webPage.corePage()->topContentInset()) / viewScale)); 332 if (viewScale < minimumViewScale) { 333 viewScale = minimumViewScale; 334 documentWidth = std::ceil(viewWidth / viewScale); 335 } 336 IntSize fixedLayoutSize(documentWidth, std::ceil((m_webPage.size().height() - m_webPage.corePage()->topContentInset()) / viewScale)); 330 337 m_webPage.setFixedLayoutSize(fixedLayoutSize); 331 338 }
Note: See TracChangeset
for help on using the changeset viewer.