Title: [179584] trunk/Source
Revision
179584
Author
[email protected]
Date
2015-02-03 17:23:58 -0800 (Tue, 03 Feb 2015)

Log Message

Drop ResourceLoadPriorityUnresolved resource load priority and use Optional<> instead
https://bugs.webkit.org/show_bug.cgi?id=141186

Reviewed by Antti Koivisto.

Source/WebCore:

Drop ResourceLoadPriorityUnresolved resource load priority value and use
Optional<ResourceLoadPriority> when needed instead. If the Optional
doesn't have a value, then it means it is unresolved. Having
ResourceLoadPriorityUnresolved in ResourceLoadPriority was confusing
because this value is only valid in CachedResourceRequest, it is not
a valid value in CachedResource or in ResourceRequest. After this
refactoring, it now becomes more obvious.

Source/WebKit2:

Update code now that ResourceLoadPriorityUnresolved is not longer a
ResourceLoadPriority enum value.

* NetworkProcess/cache/NetworkCache.cpp:
(WebKit::NetworkCache::retrieve):
* WebProcess/Network/WebResourceLoadScheduler.cpp:
(WebKit::WebResourceLoadScheduler::scheduleLoad):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (179583 => 179584)


--- trunk/Source/WebCore/ChangeLog	2015-02-04 01:17:44 UTC (rev 179583)
+++ trunk/Source/WebCore/ChangeLog	2015-02-04 01:23:58 UTC (rev 179584)
@@ -1,5 +1,20 @@
 2015-02-03  Chris Dumez  <[email protected]>
 
+        Drop ResourceLoadPriorityUnresolved resource load priority and use Optional<> instead
+        https://bugs.webkit.org/show_bug.cgi?id=141186
+
+        Reviewed by Antti Koivisto.
+
+        Drop ResourceLoadPriorityUnresolved resource load priority value and use
+        Optional<ResourceLoadPriority> when needed instead. If the Optional
+        doesn't have a value, then it means it is unresolved. Having
+        ResourceLoadPriorityUnresolved in ResourceLoadPriority was confusing
+        because this value is only valid in CachedResourceRequest, it is not
+        a valid value in CachedResource or in ResourceRequest. After this
+        refactoring, it now becomes more obvious.
+
+2015-02-03  Chris Dumez  <[email protected]>
+
         REGRESSION(176609): Very high memory usage in Canvas/reuse.html performance test
         https://bugs.webkit.org/show_bug.cgi?id=139812
 

Modified: trunk/Source/WebCore/html/HTMLLinkElement.cpp (179583 => 179584)


--- trunk/Source/WebCore/html/HTMLLinkElement.cpp	2015-02-04 01:17:44 UTC (rev 179583)
+++ trunk/Source/WebCore/html/HTMLLinkElement.cpp	2015-02-04 01:23:58 UTC (rev 179584)
@@ -229,7 +229,9 @@
         addPendingSheet(isActive ? ActiveSheet : InactiveSheet);
 
         // Load stylesheets that are not needed for the rendering immediately with low priority.
-        ResourceLoadPriority priority = isActive ? ResourceLoadPriorityUnresolved : ResourceLoadPriorityVeryLow;
+        Optional<ResourceLoadPriority> priority;
+        if (!isActive)
+            priority = ResourceLoadPriorityVeryLow;
         CachedResourceRequest request(ResourceRequest(document().completeURL(url)), charset, priority);
         request.setInitiator(this);
         m_cachedSheet = document().cachedResourceLoader().requestCSSStyleSheet(request);

Modified: trunk/Source/WebCore/loader/LinkLoader.cpp (179583 => 179584)


--- trunk/Source/WebCore/loader/LinkLoader.cpp	2015-02-04 01:17:44 UTC (rev 179583)
+++ trunk/Source/WebCore/loader/LinkLoader.cpp	2015-02-04 01:23:58 UTC (rev 179584)
@@ -105,7 +105,7 @@
     if ((relAttribute.m_isLinkPrefetch || relAttribute.m_isLinkSubresource) && href.isValid() && document->frame()) {
         if (!m_client->shouldLoadLink())
             return false;
-        ResourceLoadPriority priority = ResourceLoadPriorityUnresolved;
+        Optional<ResourceLoadPriority> priority;
         CachedResource::Type type = CachedResource::LinkPrefetch;
         // We only make one request to the cachedresourcelodaer if multiple rel types are
         // specified, 

Modified: trunk/Source/WebCore/loader/ResourceLoadScheduler.cpp (179583 => 179584)


--- trunk/Source/WebCore/loader/ResourceLoadScheduler.cpp	2015-02-04 01:17:44 UTC (rev 179583)
+++ trunk/Source/WebCore/loader/ResourceLoadScheduler.cpp	2015-02-04 01:23:58 UTC (rev 179584)
@@ -163,7 +163,6 @@
 #endif
 
     ResourceLoadPriority priority = resourceLoader->request().priority();
-    ASSERT(priority != ResourceLoadPriorityUnresolved);
 
     bool hadRequests = host->hasRequests();
     host->schedule(resourceLoader, priority);

Modified: trunk/Source/WebCore/loader/cache/CachedResource.cpp (179583 => 179584)


--- trunk/Source/WebCore/loader/cache/CachedResource.cpp	2015-02-04 01:17:44 UTC (rev 179583)
+++ trunk/Source/WebCore/loader/cache/CachedResource.cpp	2015-02-04 01:23:58 UTC (rev 179584)
@@ -736,11 +736,12 @@
     return sizeof(CachedResource) + m_response.memoryUsage() + kAverageClientsHashMapSize + m_resourceRequest.url().string().length() * 2;
 }
 
-void CachedResource::setLoadPriority(ResourceLoadPriority loadPriority)
+void CachedResource::setLoadPriority(const Optional<ResourceLoadPriority>& loadPriority)
 {
-    if (loadPriority == ResourceLoadPriorityUnresolved)
-        loadPriority = defaultPriorityForResourceType(type());
-    m_loadPriority = loadPriority;
+    if (loadPriority)
+        m_loadPriority = loadPriority.value();
+    else
+        m_loadPriority = defaultPriorityForResourceType(type());
 }
 
 inline CachedResource::Callback::Callback(CachedResource& resource, CachedResourceClient& client)

Modified: trunk/Source/WebCore/loader/cache/CachedResource.h (179583 => 179584)


--- trunk/Source/WebCore/loader/cache/CachedResource.h	2015-02-04 01:17:44 UTC (rev 179583)
+++ trunk/Source/WebCore/loader/cache/CachedResource.h	2015-02-04 01:23:58 UTC (rev 179584)
@@ -117,7 +117,7 @@
     Type type() const { return static_cast<Type>(m_type); }
     
     ResourceLoadPriority loadPriority() const { return m_loadPriority; }
-    void setLoadPriority(ResourceLoadPriority);
+    void setLoadPriority(const Optional<ResourceLoadPriority>&);
 
     WEBCORE_EXPORT void addClient(CachedResourceClient*);
     WEBCORE_EXPORT void removeClient(CachedResourceClient*);

Modified: trunk/Source/WebCore/loader/cache/CachedResourceLoader.cpp (179583 => 179584)


--- trunk/Source/WebCore/loader/cache/CachedResourceLoader.cpp	2015-02-04 01:17:44 UTC (rev 179583)
+++ trunk/Source/WebCore/loader/cache/CachedResourceLoader.cpp	2015-02-04 01:23:58 UTC (rev 179584)
@@ -452,7 +452,7 @@
 {
     URL url = ""
     
-    LOG(ResourceLoading, "CachedResourceLoader::requestResource '%s', charset '%s', priority=%d, forPreload=%u", url.stringCenterEllipsizedToLength().latin1().data(), request.charset().latin1().data(), request.priority(), request.forPreload());
+    LOG(ResourceLoading, "CachedResourceLoader::requestResource '%s', charset '%s', priority=%d, forPreload=%u", url.stringCenterEllipsizedToLength().latin1().data(), request.charset().latin1().data(), request.priority() ? request.priority().value() : -1, request.forPreload());
     
     // If only the fragment identifiers differ, it is the same resource.
     url = ""

Modified: trunk/Source/WebCore/loader/cache/CachedResourceRequest.cpp (179583 => 179584)


--- trunk/Source/WebCore/loader/cache/CachedResourceRequest.cpp	2015-02-04 01:17:44 UTC (rev 179583)
+++ trunk/Source/WebCore/loader/cache/CachedResourceRequest.cpp	2015-02-04 01:23:58 UTC (rev 179584)
@@ -32,7 +32,7 @@
 
 namespace WebCore {
 
-CachedResourceRequest::CachedResourceRequest(const ResourceRequest& resourceRequest, const String& charset, ResourceLoadPriority priority)
+CachedResourceRequest::CachedResourceRequest(const ResourceRequest& resourceRequest, const String& charset, Optional<ResourceLoadPriority> priority)
     : m_resourceRequest(resourceRequest)
     , m_charset(charset)
     , m_options(CachedResourceLoader::defaultCachedResourceOptions())
@@ -45,13 +45,12 @@
 CachedResourceRequest::CachedResourceRequest(const ResourceRequest& resourceRequest, const ResourceLoaderOptions& options)
     : m_resourceRequest(resourceRequest)
     , m_options(options)
-    , m_priority(ResourceLoadPriorityUnresolved)
     , m_forPreload(false)
     , m_defer(NoDefer)
 {
 }
 
-CachedResourceRequest::CachedResourceRequest(const ResourceRequest& resourceRequest, ResourceLoadPriority priority)
+CachedResourceRequest::CachedResourceRequest(const ResourceRequest& resourceRequest, Optional<ResourceLoadPriority> priority)
     : m_resourceRequest(resourceRequest)
     , m_options(CachedResourceLoader::defaultCachedResourceOptions())
     , m_priority(priority)

Modified: trunk/Source/WebCore/loader/cache/CachedResourceRequest.h (179583 => 179584)


--- trunk/Source/WebCore/loader/cache/CachedResourceRequest.h	2015-02-04 01:17:44 UTC (rev 179583)
+++ trunk/Source/WebCore/loader/cache/CachedResourceRequest.h	2015-02-04 01:23:58 UTC (rev 179584)
@@ -40,9 +40,9 @@
 public:
     enum DeferOption { NoDefer, DeferredByClient };
 
-    explicit CachedResourceRequest(const ResourceRequest&, const String& charset = String(), ResourceLoadPriority = ResourceLoadPriorityUnresolved);
+    explicit CachedResourceRequest(const ResourceRequest&, const String& charset = String(), Optional<ResourceLoadPriority> = Nullopt);
     CachedResourceRequest(const ResourceRequest&, const ResourceLoaderOptions&);
-    CachedResourceRequest(const ResourceRequest&, ResourceLoadPriority);
+    CachedResourceRequest(const ResourceRequest&, Optional<ResourceLoadPriority>);
     ~CachedResourceRequest();
 
     ResourceRequest& mutableResourceRequest() { return m_resourceRequest; }
@@ -51,8 +51,7 @@
     void setCharset(const String& charset) { m_charset = charset; }
     const ResourceLoaderOptions& options() const { return m_options; }
     void setOptions(const ResourceLoaderOptions& options) { m_options = options; }
-    void setPriority(ResourceLoadPriority priority) { m_priority = priority; }
-    ResourceLoadPriority priority() const { return m_priority; }
+    const Optional<ResourceLoadPriority>& priority() const { return m_priority; }
     bool forPreload() const { return m_forPreload; }
     void setForPreload(bool forPreload) { m_forPreload = forPreload; }
     DeferOption defer() const { return m_defer; }
@@ -65,7 +64,7 @@
     ResourceRequest m_resourceRequest;
     String m_charset;
     ResourceLoaderOptions m_options;
-    ResourceLoadPriority m_priority;
+    Optional<ResourceLoadPriority> m_priority;
     bool m_forPreload;
     DeferOption m_defer;
     RefPtr<Element> m_initiatorElement;

Modified: trunk/Source/WebCore/platform/network/ResourceLoadPriority.h (179583 => 179584)


--- trunk/Source/WebCore/platform/network/ResourceLoadPriority.h	2015-02-04 01:17:44 UTC (rev 179583)
+++ trunk/Source/WebCore/platform/network/ResourceLoadPriority.h	2015-02-04 01:23:58 UTC (rev 179584)
@@ -29,9 +29,7 @@
 namespace WebCore {
 
 enum ResourceLoadPriority {
-    // The unresolved priority is here for the convenience of the clients. It should not be passed to the ResourceLoadScheduler.
-    ResourceLoadPriorityUnresolved = -1,
-    ResourceLoadPriorityVeryLow = 0,
+    ResourceLoadPriorityVeryLow,
     ResourceLoadPriorityLow,
     ResourceLoadPriorityMedium,
     ResourceLoadPriorityHigh,

Modified: trunk/Source/WebCore/platform/network/ResourceRequestBase.cpp (179583 => 179584)


--- trunk/Source/WebCore/platform/network/ResourceRequestBase.cpp	2015-02-04 01:17:44 UTC (rev 179583)
+++ trunk/Source/WebCore/platform/network/ResourceRequestBase.cpp	2015-02-04 01:23:58 UTC (rev 179584)
@@ -437,7 +437,7 @@
 {
     updateResourceRequest();
 
-    return m_priority;
+    return static_cast<ResourceLoadPriority>(m_priority);
 }
 
 void ResourceRequestBase::setPriority(ResourceLoadPriority priority)
@@ -448,6 +448,7 @@
         return;
 
     m_priority = priority;
+    ASSERT(static_cast<ResourceLoadPriority>(m_priority) == priority); // Make sure it fits in the bitfield.
 
     if (url().protocolIsInHTTPFamily())
         m_platformRequestUpdated = false;

Modified: trunk/Source/WebCore/platform/network/ResourceRequestBase.h (179583 => 179584)


--- trunk/Source/WebCore/platform/network/ResourceRequestBase.h	2015-02-04 01:17:44 UTC (rev 179583)
+++ trunk/Source/WebCore/platform/network/ResourceRequestBase.h	2015-02-04 01:23:58 UTC (rev 179584)
@@ -214,16 +214,16 @@
         Vector<String> m_responseContentDispositionEncodingFallbackArray;
         RefPtr<FormData> m_httpBody;
         unsigned m_cachePolicy : 3;
-        bool m_allowCookies : 1;
-        mutable bool m_resourceRequestUpdated : 1;
-        mutable bool m_platformRequestUpdated : 1;
-        mutable bool m_resourceRequestBodyUpdated : 1;
-        mutable bool m_platformRequestBodyUpdated : 1;
-        bool m_reportUploadProgress : 1;
-        bool m_reportLoadTiming : 1;
-        bool m_reportRawHeaders : 1;
-        bool m_hiddenFromInspector : 1;
-        ResourceLoadPriority m_priority : 4; // not unsigned because ResourceLoadPriority has negative values
+        unsigned m_allowCookies : 1;
+        mutable unsigned m_resourceRequestUpdated : 1;
+        mutable unsigned m_platformRequestUpdated : 1;
+        mutable unsigned m_resourceRequestBodyUpdated : 1;
+        mutable unsigned m_platformRequestBodyUpdated : 1;
+        unsigned m_reportUploadProgress : 1;
+        unsigned m_reportLoadTiming : 1;
+        unsigned m_reportRawHeaders : 1;
+        unsigned m_hiddenFromInspector : 1;
+        unsigned m_priority : 4;
 
     private:
         const ResourceRequest& asResourceRequest() const;

Modified: trunk/Source/WebCore/platform/network/cf/ResourceRequestCFNet.cpp (179583 => 179584)


--- trunk/Source/WebCore/platform/network/cf/ResourceRequestCFNet.cpp	2015-02-04 01:17:44 UTC (rev 179583)
+++ trunk/Source/WebCore/platform/network/cf/ResourceRequestCFNet.cpp	2015-02-04 01:23:58 UTC (rev 179584)
@@ -158,7 +158,7 @@
         wkHTTPRequestEnablePipelining(cfRequest);
 
     if (resourcePrioritiesEnabled())
-        wkSetHTTPRequestPriority(cfRequest, toPlatformRequestPriority(m_priority));
+        wkSetHTTPRequestPriority(cfRequest, toPlatformRequestPriority(priority()));
 
 #if !PLATFORM(WIN)
     wkCFURLRequestAllowAllPostCaching(cfRequest);
@@ -274,11 +274,8 @@
     }
     m_allowCookies = CFURLRequestShouldHandleHTTPCookies(m_cfRequest.get());
 
-    if (resourcePrioritiesEnabled()) {
-        auto priority = toResourceLoadPriority(wkGetHTTPRequestPriority(m_cfRequest.get()));
-        if (priority > ResourceLoadPriorityUnresolved)
-            m_priority = priority;
-    }
+    if (resourcePrioritiesEnabled())
+        m_priority = toResourceLoadPriority(wkGetHTTPRequestPriority(m_cfRequest.get()));
 
     m_httpHeaderFields.clear();
     if (CFDictionaryRef headers = CFURLRequestCopyAllHTTPHeaderFields(m_cfRequest.get())) {

Modified: trunk/Source/WebCore/platform/network/cf/ResourceRequestCFNet.h (179583 => 179584)


--- trunk/Source/WebCore/platform/network/cf/ResourceRequestCFNet.h	2015-02-04 01:17:44 UTC (rev 179583)
+++ trunk/Source/WebCore/platform/network/cf/ResourceRequestCFNet.h	2015-02-04 01:23:58 UTC (rev 179584)
@@ -44,8 +44,6 @@
 inline ResourceLoadPriority toResourceLoadPriority(int priority)
 {
     switch (priority) {
-    case -1:
-        return ResourceLoadPriorityUnresolved;
     case 0:
         return ResourceLoadPriorityVeryLow;
     case 1:
@@ -65,8 +63,6 @@
 inline int toPlatformRequestPriority(ResourceLoadPriority priority)
 {
     switch (priority) {
-    case ResourceLoadPriorityUnresolved:
-        return -1;
     case ResourceLoadPriorityVeryLow:
         return 0;
     case ResourceLoadPriorityLow:

Modified: trunk/Source/WebCore/platform/network/cocoa/ResourceRequestCocoa.mm (179583 => 179584)


--- trunk/Source/WebCore/platform/network/cocoa/ResourceRequestCocoa.mm	2015-02-04 01:17:44 UTC (rev 179583)
+++ trunk/Source/WebCore/platform/network/cocoa/ResourceRequestCocoa.mm	2015-02-04 01:23:58 UTC (rev 179584)
@@ -78,11 +78,8 @@
         m_httpMethod = method;
     m_allowCookies = [m_nsRequest.get() HTTPShouldHandleCookies];
 
-    if (resourcePrioritiesEnabled()) {
-        auto priority = toResourceLoadPriority(wkGetHTTPRequestPriority([m_nsRequest.get() _CFURLRequest]));
-        if (priority > ResourceLoadPriorityUnresolved)
-            m_priority = priority;
-    }
+    if (resourcePrioritiesEnabled())
+        m_priority = toResourceLoadPriority(wkGetHTTPRequestPriority([m_nsRequest.get() _CFURLRequest]));
 
     m_httpHeaderFields.clear();
     [[m_nsRequest allHTTPHeaderFields] enumerateKeysAndObjectsUsingBlock: ^(NSString *name, NSString *value, BOOL *) {
@@ -145,7 +142,7 @@
         wkHTTPRequestEnablePipelining([nsRequest _CFURLRequest]);
 
     if (ResourceRequest::resourcePrioritiesEnabled())
-        wkSetHTTPRequestPriority([nsRequest _CFURLRequest], toPlatformRequestPriority(m_priority));
+        wkSetHTTPRequestPriority([nsRequest _CFURLRequest], toPlatformRequestPriority(priority()));
 
     [nsRequest setCachePolicy:(NSURLRequestCachePolicy)cachePolicy()];
     wkCFURLRequestAllowAllPostCaching([nsRequest _CFURLRequest]);

Modified: trunk/Source/WebCore/platform/network/soup/ResourceRequest.h (179583 => 179584)


--- trunk/Source/WebCore/platform/network/soup/ResourceRequest.h	2015-02-04 01:17:44 UTC (rev 179583)
+++ trunk/Source/WebCore/platform/network/soup/ResourceRequest.h	2015-02-04 01:23:58 UTC (rev 179584)
@@ -132,8 +132,6 @@
 inline SoupMessagePriority toSoupMessagePriority(ResourceLoadPriority priority)
 {
     switch (priority) {
-    case ResourceLoadPriorityUnresolved:
-        return SOUP_MESSAGE_PRIORITY_NORMAL;
     case ResourceLoadPriorityVeryLow:
         return SOUP_MESSAGE_PRIORITY_VERY_LOW;
     case ResourceLoadPriorityLow:

Modified: trunk/Source/WebKit2/ChangeLog (179583 => 179584)


--- trunk/Source/WebKit2/ChangeLog	2015-02-04 01:17:44 UTC (rev 179583)
+++ trunk/Source/WebKit2/ChangeLog	2015-02-04 01:23:58 UTC (rev 179584)
@@ -1,3 +1,18 @@
+2015-02-03  Chris Dumez  <[email protected]>
+
+        Drop ResourceLoadPriorityUnresolved resource load priority and use Optional<> instead
+        https://bugs.webkit.org/show_bug.cgi?id=141186
+
+        Reviewed by Antti Koivisto.
+
+        Update code now that ResourceLoadPriorityUnresolved is not longer a
+        ResourceLoadPriority enum value.
+
+        * NetworkProcess/cache/NetworkCache.cpp:
+        (WebKit::NetworkCache::retrieve):
+        * WebProcess/Network/WebResourceLoadScheduler.cpp:
+        (WebKit::WebResourceLoadScheduler::scheduleLoad):
+
 2015-02-03  Enrica Casucci  <[email protected]>
 
         [iOS] Add support for deleteFromInputWithFlags.

Modified: trunk/Source/WebKit2/NetworkProcess/cache/NetworkCache.cpp (179583 => 179584)


--- trunk/Source/WebKit2/NetworkProcess/cache/NetworkCache.cpp	2015-02-04 01:17:44 UTC (rev 179583)
+++ trunk/Source/WebKit2/NetworkProcess/cache/NetworkCache.cpp	2015-02-04 01:23:58 UTC (rev 179584)
@@ -218,7 +218,7 @@
 {
     ASSERT(isEnabled());
 
-    LOG(NetworkCache, "(NetworkProcess) retrieving %s priority %d", originalRequest.url().string().ascii().data(), originalRequest.priority());
+    LOG(NetworkCache, "(NetworkProcess) retrieving %s priority %u", originalRequest.url().string().ascii().data(), originalRequest.priority());
 
     if (!canRetrieve(originalRequest)) {
         completionHandler(nullptr);
@@ -249,7 +249,7 @@
 #if !LOG_DISABLED
         auto elapsedMS = std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::system_clock::now() - startTime).count();
 #endif
-        LOG(NetworkCache, "(NetworkProcess) retrieve complete success=%d priority=%d time=%lldms", success, capture->originalRequest.priority(), elapsedMS);
+        LOG(NetworkCache, "(NetworkProcess) retrieve complete success=%d priority=%u time=%lldms", success, capture->originalRequest.priority(), elapsedMS);
         capture->completionHandler(WTF::move(decodedEntry));
         return success;
     });

Modified: trunk/Source/WebKit2/WebProcess/Network/WebResourceLoadScheduler.cpp (179583 => 179584)


--- trunk/Source/WebKit2/WebProcess/Network/WebResourceLoadScheduler.cpp	2015-02-04 01:17:44 UTC (rev 179583)
+++ trunk/Source/WebKit2/WebProcess/Network/WebResourceLoadScheduler.cpp	2015-02-04 01:23:58 UTC (rev 179584)
@@ -150,7 +150,7 @@
     }
 #endif
 
-    LOG(NetworkScheduling, "(WebProcess) WebResourceLoadScheduler::scheduleLoad, url '%s' will be scheduled with the NetworkProcess with priority %i", resourceLoader->url().string().utf8().data(), resourceLoader->request().priority());
+    LOG(NetworkScheduling, "(WebProcess) WebResourceLoadScheduler::scheduleLoad, url '%s' will be scheduled with the NetworkProcess with priority %u", resourceLoader->url().string().utf8().data(), resourceLoader->request().priority());
 
     ContentSniffingPolicy contentSniffingPolicy = resourceLoader->shouldSniffContent() ? SniffContent : DoNotSniffContent;
     StoredCredentials allowStoredCredentials = resourceLoader->shouldUseCredentialStorage() ? AllowStoredCredentials : DoNotAllowStoredCredentials;
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to