Title: [197734] releases/WebKitGTK/webkit-2.12/Source
Revision
197734
Author
[email protected]
Date
2016-03-07 23:58:07 -0800 (Mon, 07 Mar 2016)

Log Message

Merge r197409 - REGRESSION (r154616): Accelerated drawing is off during the initial load
<https://webkit.org/b/123812>

Reviewed by Tim Horton.

Source/WebCore:

Robustify the hey-the-Settings-changed callbacks in Page to handle document-less frames.
This is needed because now Settings are changed even before the main Frame has a Document.

* page/Page.cpp:
(WebCore::networkStateChanged):
(WebCore::Page::updateStyleForAllPagesAfterGlobalChangeInEnvironment):
(WebCore::Page::takeAnyMediaCanStartListener):
(WebCore::Page::setMediaVolume):
(WebCore::Page::setPageScaleFactor):
(WebCore::Page::invalidateStylesForAllLinks):
(WebCore::Page::invalidateStylesForLink):
(WebCore::Page::dnsPrefetchingStateChanged):
(WebCore::Page::storageBlockingStateChanged):
(WebCore::Page::setMuted):
(WebCore::Page::captionPreferencesChanged):
(WebCore::Page::setSessionID):
(WebCore::Page::setPlaybackTarget):
(WebCore::Page::playbackTargetAvailabilityDidChange):
(WebCore::Page::setShouldPlayToPlaybackTarget):
* page/Settings.cpp:
(WebCore::setImageLoadingSettings):

Source/WebKit2:

Load preferences before instantiating the first DrawingArea. This ensures that we do the
initial paint using accelerated drawing, and avoids allocating persistent data structures
only needed by the software rendering path.

* WebProcess/WebPage/WebPage.cpp:

Modified Paths

Diff

Modified: releases/WebKitGTK/webkit-2.12/Source/WebCore/ChangeLog (197733 => 197734)


--- releases/WebKitGTK/webkit-2.12/Source/WebCore/ChangeLog	2016-03-08 07:18:17 UTC (rev 197733)
+++ releases/WebKitGTK/webkit-2.12/Source/WebCore/ChangeLog	2016-03-08 07:58:07 UTC (rev 197734)
@@ -1,3 +1,32 @@
+2016-03-01  Andreas Kling  <[email protected]>
+
+        REGRESSION (r154616): Accelerated drawing is off during the initial load
+        <https://webkit.org/b/123812>
+
+        Reviewed by Tim Horton.
+
+        Robustify the hey-the-Settings-changed callbacks in Page to handle document-less frames.
+        This is needed because now Settings are changed even before the main Frame has a Document.
+
+        * page/Page.cpp:
+        (WebCore::networkStateChanged):
+        (WebCore::Page::updateStyleForAllPagesAfterGlobalChangeInEnvironment):
+        (WebCore::Page::takeAnyMediaCanStartListener):
+        (WebCore::Page::setMediaVolume):
+        (WebCore::Page::setPageScaleFactor):
+        (WebCore::Page::invalidateStylesForAllLinks):
+        (WebCore::Page::invalidateStylesForLink):
+        (WebCore::Page::dnsPrefetchingStateChanged):
+        (WebCore::Page::storageBlockingStateChanged):
+        (WebCore::Page::setMuted):
+        (WebCore::Page::captionPreferencesChanged):
+        (WebCore::Page::setSessionID):
+        (WebCore::Page::setPlaybackTarget):
+        (WebCore::Page::playbackTargetAvailabilityDidChange):
+        (WebCore::Page::setShouldPlayToPlaybackTarget):
+        * page/Settings.cpp:
+        (WebCore::setImageLoadingSettings):
+
 2016-03-01  Brady Eidson  <[email protected]>
 
         Modern IDB: Possible crash deallocating IDBDatabaseInfo/IDBObjectStoreInfo/IDBIndexInfo.

Modified: releases/WebKitGTK/webkit-2.12/Source/WebCore/page/Page.cpp (197733 => 197734)


--- releases/WebKitGTK/webkit-2.12/Source/WebCore/page/Page.cpp	2016-03-08 07:18:17 UTC (rev 197733)
+++ releases/WebKitGTK/webkit-2.12/Source/WebCore/page/Page.cpp	2016-03-08 07:58:07 UTC (rev 197734)
@@ -146,8 +146,11 @@
     }
 
     AtomicString eventName = isOnLine ? eventNames().onlineEvent : eventNames().offlineEvent;
-    for (auto& frame : frames)
+    for (auto& frame : frames) {
+        if (!frame->document())
+            continue;
         frame->document()->dispatchWindowEvent(Event::create(eventName, false, false));
+    }
 }
 
 static const ViewState::Flags PageInitialViewState = ViewState::IsVisible | ViewState::IsInWindow;
@@ -484,6 +487,8 @@
             // If a change in the global environment has occurred, we need to
             // make sure all the properties a recomputed, therefore we invalidate
             // the properties cache.
+            if (!frame->document())
+                continue;
             if (StyleResolver* styleResolver = frame->document()->styleResolverIfExists())
                 styleResolver->invalidateMatchedPropertiesCache();
             frame->document()->scheduleForcedStyleRecalc();
@@ -547,6 +552,8 @@
 inline MediaCanStartListener* Page::takeAnyMediaCanStartListener()
 {
     for (Frame* frame = &mainFrame(); frame; frame = frame->tree().traverseNext()) {
+        if (!frame->document())
+            continue;
         if (MediaCanStartListener* listener = frame->document()->takeAnyMediaCanStartListener())
             return listener;
     }
@@ -769,6 +776,8 @@
 
     m_mediaVolume = volume;
     for (Frame* frame = &mainFrame(); frame; frame = frame->tree().traverseNext()) {
+        if (!frame->document())
+            continue;
         frame->document()->mediaVolumeDidChange();
     }
 }
@@ -801,8 +810,11 @@
         }
 #if ENABLE(MEDIA_CONTROLS_SCRIPT)
         if (inStableState) {
-            for (Frame* frame = &mainFrame(); frame; frame = frame->tree().traverseNext())
+            for (Frame* frame = &mainFrame(); frame; frame = frame->tree().traverseNext()) {
+                if (!frame->document())
+                    continue;
                 frame->document()->pageScaleFactorChangedAndStable();
+            }
         }
 #endif
         return;
@@ -839,8 +851,11 @@
 
 #if ENABLE(MEDIA_CONTROLS_SCRIPT)
     if (inStableState) {
-        for (Frame* frame = &mainFrame(); frame; frame = frame->tree().traverseNext())
+        for (Frame* frame = &mainFrame(); frame; frame = frame->tree().traverseNext()) {
+            if (!frame->document())
+                continue;
             frame->document()->pageScaleFactorChangedAndStable();
+        }
     }
 #else
     UNUSED_PARAM(inStableState);
@@ -1099,14 +1114,20 @@
 
 void Page::invalidateStylesForAllLinks()
 {
-    for (Frame* frame = m_mainFrame.get(); frame; frame = frame->tree().traverseNext())
+    for (Frame* frame = m_mainFrame.get(); frame; frame = frame->tree().traverseNext()) {
+        if (!frame->document())
+            continue;
         frame->document()->visitedLinkState().invalidateStyleForAllLinks();
+    }
 }
 
 void Page::invalidateStylesForLink(LinkHash linkHash)
 {
-    for (Frame* frame = m_mainFrame.get(); frame; frame = frame->tree().traverseNext())
+    for (Frame* frame = m_mainFrame.get(); frame; frame = frame->tree().traverseNext()) {
+        if (!frame->document())
+            continue;
         frame->document()->visitedLinkState().invalidateStyleForLink(linkHash);
+    }
 }
 
 void Page::setDebugger(JSC::Debugger* debugger)
@@ -1188,8 +1209,11 @@
 
 void Page::dnsPrefetchingStateChanged()
 {
-    for (Frame* frame = &mainFrame(); frame; frame = frame->tree().traverseNext())
+    for (Frame* frame = &mainFrame(); frame; frame = frame->tree().traverseNext()) {
+        if (!frame->document())
+            continue;
         frame->document()->initDNSPrefetch();
+    }
 }
 
 Vector<Ref<PluginViewBase>> Page::pluginViews()
@@ -1212,8 +1236,11 @@
 
 void Page::storageBlockingStateChanged()
 {
-    for (Frame* frame = &mainFrame(); frame; frame = frame->tree().traverseNext())
+    for (Frame* frame = &mainFrame(); frame; frame = frame->tree().traverseNext()) {
+        if (!frame->document())
+            continue;
         frame->document()->storageBlockingStateDidChange();
+    }
 
     // Collect the PluginViews in to a vector to ensure that action the plug-in takes
     // from below storageBlockingStateChanged does not affect their lifetime.
@@ -1252,8 +1279,11 @@
 
     m_muted = muted;
 
-    for (Frame* frame = &mainFrame(); frame; frame = frame->tree().traverseNext())
+    for (Frame* frame = &mainFrame(); frame; frame = frame->tree().traverseNext()) {
+        if (!frame->document())
+            continue;
         frame->document()->pageMutedStateDidChange();
+    }
 }
 
 #if ENABLE(MEDIA_SESSION)
@@ -1681,8 +1711,11 @@
 #if ENABLE(VIDEO_TRACK)
 void Page::captionPreferencesChanged()
 {
-    for (Frame* frame = &mainFrame(); frame; frame = frame->tree().traverseNext())
+    for (Frame* frame = &mainFrame(); frame; frame = frame->tree().traverseNext()) {
+        if (!frame->document())
+            continue;
         frame->document()->captionPreferencesChanged();
+    }
 }
 #endif
 
@@ -1764,8 +1797,11 @@
     if (!privateBrowsingStateChanged)
         return;
 
-    for (Frame* frame = &mainFrame(); frame; frame = frame->tree().traverseNext())
+    for (Frame* frame = &mainFrame(); frame; frame = frame->tree().traverseNext()) {
+        if (!frame->document())
+            continue;
         frame->document()->privateBrowsingStateDidChange();
+    }
 
     // Collect the PluginViews in to a vector to ensure that action the plug-in takes
     // from below privateBrowsingStateChanged does not affect their lifetime.
@@ -1814,20 +1850,29 @@
 
 void Page::setPlaybackTarget(uint64_t contextId, Ref<MediaPlaybackTarget>&& target)
 {
-    for (Frame* frame = &mainFrame(); frame; frame = frame->tree().traverseNext())
+    for (Frame* frame = &mainFrame(); frame; frame = frame->tree().traverseNext()) {
+        if (!frame->document())
+            continue;
         frame->document()->setPlaybackTarget(contextId, target.copyRef());
+    }
 }
 
 void Page::playbackTargetAvailabilityDidChange(uint64_t contextId, bool available)
 {
-    for (Frame* frame = &mainFrame(); frame; frame = frame->tree().traverseNext())
+    for (Frame* frame = &mainFrame(); frame; frame = frame->tree().traverseNext()) {
+        if (!frame->document())
+            continue;
         frame->document()->playbackTargetAvailabilityDidChange(contextId, available);
+    }
 }
 
 void Page::setShouldPlayToPlaybackTarget(uint64_t clientId, bool shouldPlay)
 {
-    for (Frame* frame = &mainFrame(); frame; frame = frame->tree().traverseNext())
+    for (Frame* frame = &mainFrame(); frame; frame = frame->tree().traverseNext()) {
+        if (!frame->document())
+            continue;
         frame->document()->setShouldPlayToPlaybackTarget(clientId, shouldPlay);
+    }
 }
 #endif
 

Modified: releases/WebKitGTK/webkit-2.12/Source/WebCore/page/Settings.cpp (197733 => 197734)


--- releases/WebKitGTK/webkit-2.12/Source/WebCore/page/Settings.cpp	2016-03-08 07:18:17 UTC (rev 197733)
+++ releases/WebKitGTK/webkit-2.12/Source/WebCore/page/Settings.cpp	2016-03-08 07:58:07 UTC (rev 197734)
@@ -61,6 +61,8 @@
         return;
 
     for (Frame* frame = &page->mainFrame(); frame; frame = frame->tree().traverseNext()) {
+        if (!frame->document())
+            continue;
         frame->document()->cachedResourceLoader().setImagesEnabled(page->settings().areImagesEnabled());
         frame->document()->cachedResourceLoader().setAutoLoadImages(page->settings().loadsImagesAutomatically());
     }

Modified: releases/WebKitGTK/webkit-2.12/Source/WebKit2/ChangeLog (197733 => 197734)


--- releases/WebKitGTK/webkit-2.12/Source/WebKit2/ChangeLog	2016-03-08 07:18:17 UTC (rev 197733)
+++ releases/WebKitGTK/webkit-2.12/Source/WebKit2/ChangeLog	2016-03-08 07:58:07 UTC (rev 197734)
@@ -1,3 +1,16 @@
+2016-03-01  Andreas Kling  <[email protected]>
+
+        REGRESSION (r154616): Accelerated drawing is off during the initial load
+        <https://webkit.org/b/123812>
+
+        Reviewed by Tim Horton.
+
+        Load preferences before instantiating the first DrawingArea. This ensures that we do the
+        initial paint using accelerated drawing, and avoids allocating persistent data structures
+        only needed by the software rendering path.
+
+        * WebProcess/WebPage/WebPage.cpp:
+
 2016-03-01  Carlos Garcia Campos  <[email protected]>
 
         NetworkCache: Web process leaks resource buffer when using shareable reasources

Modified: releases/WebKitGTK/webkit-2.12/Source/WebKit2/WebProcess/WebPage/WebPage.cpp (197733 => 197734)


--- releases/WebKitGTK/webkit-2.12/Source/WebKit2/WebProcess/WebPage/WebPage.cpp	2016-03-08 07:18:17 UTC (rev 197733)
+++ releases/WebKitGTK/webkit-2.12/Source/WebKit2/WebProcess/WebPage/WebPage.cpp	2016-03-08 07:58:07 UTC (rev 197734)
@@ -402,6 +402,7 @@
 #endif
 
     m_page = std::make_unique<Page>(pageConfiguration);
+    updatePreferences(parameters.store);
 
     m_drawingArea = DrawingArea::create(*this, parameters);
     m_drawingArea->setPaintingEnabled(false);
@@ -449,7 +450,6 @@
     m_page->setTextAutosizingWidth(parameters.textAutosizingWidth);
 #endif
 
-    updatePreferences(parameters.store);
     platformInitialize();
 
     setUseFixedLayout(parameters.useFixedLayout);
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to