Title: [103080] trunk/Source/WebCore
Revision
103080
Author
an...@apple.com
Date
2011-12-16 10:39:47 -0800 (Fri, 16 Dec 2011)

Log Message

https://bugs.webkit.org/show_bug.cgi?id=74677
Count ResourceLoadScheduler suspends/resumes

Reviewed by Andreas Kling.

Using boolean is not robust when there are multiple clients calling suspendPendingRequests/resumePendingRequests.
        
Increment and decrement suspend count instead of just setting/unsetting a boolean.

* loader/ResourceLoadScheduler.cpp:
(WebCore::ResourceLoadScheduler::ResourceLoadScheduler):
(WebCore::ResourceLoadScheduler::servePendingRequests):
(WebCore::ResourceLoadScheduler::suspendPendingRequests):
(WebCore::ResourceLoadScheduler::resumePendingRequests):
* loader/ResourceLoadScheduler.h:
(WebCore::ResourceLoadScheduler::isSuspendingPendingRequests):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (103079 => 103080)


--- trunk/Source/WebCore/ChangeLog	2011-12-16 18:27:13 UTC (rev 103079)
+++ trunk/Source/WebCore/ChangeLog	2011-12-16 18:39:47 UTC (rev 103080)
@@ -1,3 +1,22 @@
+2011-12-15  Antti Koivisto  <an...@apple.com>
+
+        https://bugs.webkit.org/show_bug.cgi?id=74677
+        Count ResourceLoadScheduler suspends/resumes
+
+        Reviewed by Andreas Kling.
+
+        Using boolean is not robust when there are multiple clients calling suspendPendingRequests/resumePendingRequests.
+        
+        Increment and decrement suspend count instead of just setting/unsetting a boolean.
+
+        * loader/ResourceLoadScheduler.cpp:
+        (WebCore::ResourceLoadScheduler::ResourceLoadScheduler):
+        (WebCore::ResourceLoadScheduler::servePendingRequests):
+        (WebCore::ResourceLoadScheduler::suspendPendingRequests):
+        (WebCore::ResourceLoadScheduler::resumePendingRequests):
+        * loader/ResourceLoadScheduler.h:
+        (WebCore::ResourceLoadScheduler::isSuspendingPendingRequests):
+
 2011-12-16  Adam Klein  <ad...@chromium.org>
 
         Improve performance of ChildListMutationScope when no MutationObservers are present

Modified: trunk/Source/WebCore/loader/ResourceLoadScheduler.cpp (103079 => 103080)


--- trunk/Source/WebCore/loader/ResourceLoadScheduler.cpp	2011-12-16 18:27:13 UTC (rev 103079)
+++ trunk/Source/WebCore/loader/ResourceLoadScheduler.cpp	2011-12-16 18:39:47 UTC (rev 103080)
@@ -77,7 +77,7 @@
 ResourceLoadScheduler::ResourceLoadScheduler()
     : m_nonHTTPProtocolHost(new HostInformation(String(), maxRequestsInFlightForNonHTTPProtocols))
     , m_requestTimer(this, &ResourceLoadScheduler::requestTimerFired)
-    , m_isSuspendingPendingRequests(false)
+    , m_suspendPendingRequestsCount(0)
     , m_isSerialLoadingEnabled(false)
 {
 #if REQUEST_MANAGEMENT_ENABLED
@@ -162,8 +162,8 @@
 
 void ResourceLoadScheduler::servePendingRequests(ResourceLoadPriority minimumPriority)
 {
-    LOG(ResourceLoading, "ResourceLoadScheduler::servePendingRequests. m_isSuspendingPendingRequests=%d", m_isSuspendingPendingRequests); 
-    if (m_isSuspendingPendingRequests)
+    LOG(ResourceLoading, "ResourceLoadScheduler::servePendingRequests. m_suspendPendingRequestsCount=%d", m_suspendPendingRequestsCount); 
+    if (isSuspendingPendingRequests())
         return;
 
     m_requestTimer.stop();
@@ -213,14 +213,15 @@
 
 void ResourceLoadScheduler::suspendPendingRequests()
 {
-    ASSERT(!m_isSuspendingPendingRequests);
-    m_isSuspendingPendingRequests = true;
+    ++m_suspendPendingRequestsCount;
 }
 
 void ResourceLoadScheduler::resumePendingRequests()
 {
-    ASSERT(m_isSuspendingPendingRequests);
-    m_isSuspendingPendingRequests = false;
+    ASSERT(m_suspendPendingRequestsCount);
+    --m_suspendPendingRequestsCount;
+    if (m_suspendPendingRequestsCount)
+        return;
     if (!m_hosts.isEmpty() || m_nonHTTPProtocolHost->hasRequests())
         scheduleServePendingRequests();
 }

Modified: trunk/Source/WebCore/loader/ResourceLoadScheduler.h (103079 => 103080)


--- trunk/Source/WebCore/loader/ResourceLoadScheduler.h	2011-12-16 18:27:13 UTC (rev 103079)
+++ trunk/Source/WebCore/loader/ResourceLoadScheduler.h	2011-12-16 18:39:47 UTC (rev 103080)
@@ -58,6 +58,7 @@
     void crossOriginRedirectReceived(ResourceLoader*, const KURL& redirectURL);
     
     void servePendingRequests(ResourceLoadPriority minimumPriority = ResourceLoadPriorityVeryLow);
+    bool isSuspendingPendingRequests() const { return !!m_suspendPendingRequestsCount; }
     void suspendPendingRequests();
     void resumePendingRequests();
     
@@ -110,7 +111,7 @@
         
     Timer<ResourceLoadScheduler> m_requestTimer;
 
-    bool m_isSuspendingPendingRequests;
+    unsigned m_suspendPendingRequestsCount;
     bool m_isSerialLoadingEnabled;
 };
 
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to