Changeset 195871 in webkit
- Timestamp:
- Jan 29, 2016 5:29:33 PM (8 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r195863 r195871 1 2016-01-29 Antti Koivisto <antti@apple.com> 2 3 Tab suspension code shouldn't use page cache cacheability logic 4 https://bugs.webkit.org/show_bug.cgi?id=153680 5 6 Reviewed by Andreas Kling. 7 8 Most of PageCache::canCache() is unnecessary for tab suspension. 9 10 Also improve robustness. 11 12 * page/Page.cpp: 13 (WebCore::Page::setPageActivityState): 14 (WebCore::Page::setIsVisible): 15 (WebCore::Page::setIsVisibleInternal): 16 (WebCore::Page::setIsPrerender): 17 (WebCore::Page::canTabSuspend): 18 19 Include visibility test here. 20 21 Instead of calling PageCache::canCache() just check for each frame that 22 - that the document is loaded 23 - that active DOM objects allow suspension 24 25 (WebCore::Page::setIsTabSuspended): 26 (WebCore::Page::setTabSuspensionEnabled): 27 (WebCore::Page::updateTabSuspensionState): 28 29 Refactor for robustness. 30 31 (WebCore::Page::tabSuspensionTimerFired): 32 33 Call canTabSuspend, the result might have changed. 34 35 (WebCore::Page::scheduleTabSuspension): Deleted. 36 * page/Page.h: 37 1 38 2016-01-29 Ryosuke Niwa <rniwa@webkit.org> 2 39 -
trunk/Source/WebCore/page/Page.cpp
r195790 r195871 1306 1306 chrome().client().setPageActivityState(activityState); 1307 1307 1308 if (activityState == PageActivityState::NoFlags && !isVisible()) 1309 scheduleTabSuspension(true); 1310 else 1311 scheduleTabSuspension(false); 1308 updateTabSuspensionState(); 1312 1309 } 1313 1310 … … 1362 1359 } 1363 1360 1364 scheduleTabSuspension(!isVisible);1361 updateTabSuspensionState(); 1365 1362 } 1366 1363 … … 1868 1865 if (m_isPrerender) 1869 1866 return false; 1867 if (isVisible()) 1868 return false; 1870 1869 if (m_pageThrottler.activityState() != PageActivityState::NoFlags) 1871 1870 return false; 1872 // FIXME: PageCache::canCache does a bunch of checks that are not needed for the tab suspension case. There should be a specific check. 1873 if (!PageCache::singleton().canCache(*this)) 1874 return false; 1871 1872 for (Frame* frame = &mainFrame(); frame; frame = frame->tree().traverseNext()) { 1873 if (frame->loader().state() == FrameStateProvisional) 1874 return false; 1875 if (frame->loader().isLoading()) 1876 return false; 1877 if (!frame->document() || !frame->document()->canSuspendActiveDOMObjectsForDocumentSuspension(nullptr)) 1878 return false; 1879 } 1875 1880 1876 1881 return true; … … 1879 1884 void Page::setIsTabSuspended(bool shouldSuspend) 1880 1885 { 1886 if (m_isTabSuspended == shouldSuspend) 1887 return; 1888 m_isTabSuspended = shouldSuspend; 1889 1881 1890 for (Frame* frame = &mainFrame(); frame; frame = frame->tree().traverseNext()) { 1882 1891 if (auto* document = frame->document()) { … … 1894 1903 } 1895 1904 1896 void Page::scheduleTabSuspension(bool shouldSuspend) 1897 { 1898 if (m_shouldTabSuspend == shouldSuspend) 1899 return; 1900 1901 if (shouldSuspend && canTabSuspend()) { 1902 m_shouldTabSuspend = shouldSuspend; 1905 void Page::updateTabSuspensionState() 1906 { 1907 if (canTabSuspend()) { 1903 1908 m_tabSuspensionTimer.startOneShot(0); 1904 } else { 1905 m_tabSuspensionTimer.stop(); 1906 if (!shouldSuspend) { 1907 m_shouldTabSuspend = shouldSuspend; 1908 setIsTabSuspended(false); 1909 } 1910 } 1909 return; 1910 } 1911 m_tabSuspensionTimer.stop(); 1912 setIsTabSuspended(false); 1911 1913 } 1912 1914 1913 1915 void Page::tabSuspensionTimerFired() 1914 1916 { 1915 setIsTabSuspended( true);1917 setIsTabSuspended(canTabSuspend()); 1916 1918 } 1917 1919 -
trunk/Source/WebCore/page/Page.h
r195644 r195871 522 522 void setTimerThrottlingEnabled(bool); 523 523 bool canTabSuspend(); 524 void scheduleTabSuspension(bool);524 void updateTabSuspensionState(); 525 525 void tabSuspensionTimerFired(); 526 526 … … 664 664 665 665 bool m_isClosing; 666 bool m_ shouldTabSuspend { false };666 bool m_isTabSuspended { false }; 667 667 Timer m_tabSuspensionTimer; 668 668
Note: See TracChangeset
for help on using the changeset viewer.