summaryrefslogtreecommitdiff
path: root/Source/WebKit2/NetworkProcess/NetworkResourceLoadScheduler.h
diff options
context:
space:
mode:
Diffstat (limited to 'Source/WebKit2/NetworkProcess/NetworkResourceLoadScheduler.h')
-rw-r--r--Source/WebKit2/NetworkProcess/NetworkResourceLoadScheduler.h62
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