diff options
Diffstat (limited to 'Source/WebKit2/NetworkProcess/NetworkResourceLoadScheduler.h')
-rw-r--r-- | Source/WebKit2/NetworkProcess/NetworkResourceLoadScheduler.h | 62 |
1 files changed, 30 insertions, 32 deletions
diff --git a/Source/WebKit2/NetworkProcess/NetworkResourceLoadScheduler.h b/Source/WebKit2/NetworkProcess/NetworkResourceLoadScheduler.h index 85a19cd24..dfe710268 100644 --- a/Source/WebKit2/NetworkProcess/NetworkResourceLoadScheduler.h +++ b/Source/WebKit2/NetworkProcess/NetworkResourceLoadScheduler.h @@ -26,20 +26,22 @@ #ifndef NetworkResourceLoadScheduler_h #define NetworkResourceLoadScheduler_h -#include "NetworkResourceLoader.h" -#include <WebCore/ResourceLoaderOptions.h> -#include <WebCore/ResourceRequest.h> +#include <WebCore/ResourceLoadPriority.h> #include <WebCore/Timer.h> +#include <wtf/HashMap.h> #include <wtf/HashSet.h> +#include <wtf/text/StringHash.h> #if ENABLE(NETWORK_PROCESS) +namespace WebCore { +class KURL; +} + namespace WebKit { class HostRecord; -class NetworkResourceLoadParameters; -class NetworkConnectionToWebProcess; -typedef uint64_t ResourceLoadIdentifier; +class SchedulableLoader; class NetworkResourceLoadScheduler { WTF_MAKE_NONCOPYABLE(NetworkResourceLoadScheduler); WTF_MAKE_FAST_ALLOCATED; @@ -47,24 +49,23 @@ class NetworkResourceLoadScheduler { public: NetworkResourceLoadScheduler(); - // Adds the request to the queue for its host and create a unique identifier for it. - ResourceLoadIdentifier scheduleResourceLoad(const NetworkResourceLoadParameters&, NetworkConnectionToWebProcess*); - - // Creates a unique identifier for an already-in-progress load. - ResourceLoadIdentifier addLoadInProgress(const WebCore::KURL&); + // Adds the request to the queue for its host. + void scheduleLoader(PassRefPtr<SchedulableLoader>); // Called by the WebProcess when a ResourceLoader is being cleaned up. - void removeLoadIdentifier(ResourceLoadIdentifier); + void removeLoader(SchedulableLoader*); // Called within the NetworkProcess on a background thread when a resource load has finished. - void scheduleRemoveLoadIdentifier(ResourceLoadIdentifier); + void scheduleRemoveLoader(SchedulableLoader*); - void receivedRedirect(ResourceLoadIdentifier, const WebCore::KURL& redirectURL); + void receivedRedirect(SchedulableLoader*, const WebCore::KURL& redirectURL); void servePendingRequests(WebCore::ResourceLoadPriority = WebCore::ResourceLoadPriorityVeryLow); - void suspendPendingRequests(); - void resumePendingRequests(); - - NetworkResourceLoader* networkResourceLoaderForIdentifier(ResourceLoadIdentifier); + + // For NetworkProcess statistics reporting. + uint64_t hostsPendingCount() const; + uint64_t loadsPendingCount() const; + uint64_t hostsActiveCount() const; + uint64_t loadsActiveCount() const; private: enum CreateHostPolicy { @@ -77,30 +78,27 @@ private: void scheduleServePendingRequests(); void requestTimerFired(WebCore::Timer<NetworkResourceLoadScheduler>*); - void servePendingRequestsForHost(HostRecord*, WebCore::ResourceLoadPriority); + void platformInitializeMaximumHTTPConnectionCountPerHost(); - unsigned platformInitializeMaximumHTTPConnectionCountPerHost(); + static void removeScheduledLoaders(void* context); + void removeScheduledLoaders(); - static void removeScheduledLoadIdentifiers(void* context); - void removeScheduledLoadIdentifiers(); - - HashMap<ResourceLoadIdentifier, RefPtr<NetworkResourceLoader> > m_resourceLoaders; - - typedef HashMap<String, HostRecord*, StringHash> HostMap; + typedef HashMap<String, RefPtr<HostRecord>, StringHash> HostMap; HostMap m_hosts; - typedef HashMap<ResourceLoadIdentifier, HostRecord*> IdentifierHostMap; - IdentifierHostMap m_identifiers; + typedef HashSet<RefPtr<SchedulableLoader>> SchedulableLoaderSet; + SchedulableLoaderSet m_loaders; - HostRecord* m_nonHTTPProtocolHost; + RefPtr<HostRecord> m_nonHTTPProtocolHost; - unsigned m_suspendPendingRequestsCount; bool m_isSerialLoadingEnabled; WebCore::Timer<NetworkResourceLoadScheduler> m_requestTimer; - Mutex m_identifiersToRemoveMutex; - HashSet<ResourceLoadIdentifier> m_identifiersToRemove; + Mutex m_loadersToRemoveMutex; + Vector<RefPtr<SchedulableLoader>> m_loadersToRemove; + + unsigned m_maxRequestsInFlightPerHost; }; } // namespace WebKit |