Index: net/http/http_server_properties_impl.cc |
diff --git a/net/http/http_server_properties_impl.cc b/net/http/http_server_properties_impl.cc |
index d4e1303b5dde9dc6c88d60ddba78a9f43f29f51e..b8a7ed1269bb183b8575d975b06ecddffcf94181 100644 |
--- a/net/http/http_server_properties_impl.cc |
+++ b/net/http/http_server_properties_impl.cc |
@@ -8,10 +8,18 @@ |
#include "base/memory/scoped_ptr.h" |
#include "base/stl_util.h" |
#include "base/stringprintf.h" |
+#include "net/http/http_pipelined_host_capability.h" |
namespace net { |
-HttpServerPropertiesImpl::HttpServerPropertiesImpl() { |
+// TODO(simonjam): Run experiments with different values of this to see what |
+// value is good at avoiding evictions without eating too much memory. Until |
+// then, this is just a bad guess. |
+static const int kDefaultNumHostsToRemember = 200; |
+ |
+HttpServerPropertiesImpl::HttpServerPropertiesImpl() |
+ : pipeline_capability_map_( |
+ new CachedPipelineCapabilityMap(kDefaultNumHostsToRemember)) { |
} |
HttpServerPropertiesImpl::~HttpServerPropertiesImpl() { |
@@ -48,6 +56,21 @@ void HttpServerPropertiesImpl::InitializeSpdySettingsServers( |
spdy_settings_map_.swap(*spdy_settings_map); |
} |
+void HttpServerPropertiesImpl::InitializePipelineCapabilities( |
+ const PipelineCapabilityMap* pipeline_capability_map) { |
+ PipelineCapabilityMap::const_iterator it; |
+ pipeline_capability_map_->Clear(); |
+ for (it = pipeline_capability_map->begin(); |
+ it != pipeline_capability_map->end(); ++it) { |
+ pipeline_capability_map_->Put(it->first, it->second); |
+ } |
+} |
+ |
+void HttpServerPropertiesImpl::SetNumPipelinedHostsToRemember(int max_size) { |
+ DCHECK(pipeline_capability_map_->empty()); |
+ pipeline_capability_map_.reset(new CachedPipelineCapabilityMap(max_size)); |
+} |
+ |
void HttpServerPropertiesImpl::GetSpdyServerList( |
base::ListValue* spdy_server_list) const { |
DCHECK(CalledOnValidThread()); |
@@ -94,6 +117,7 @@ void HttpServerPropertiesImpl::Clear() { |
spdy_servers_table_.clear(); |
alternate_protocol_map_.clear(); |
spdy_settings_map_.clear(); |
+ pipeline_capability_map_->Clear(); |
} |
bool HttpServerPropertiesImpl::SupportsSpdy( |
@@ -239,4 +263,41 @@ HttpServerPropertiesImpl::spdy_settings_map() const { |
return spdy_settings_map_; |
} |
+HttpPipelinedHostCapability HttpServerPropertiesImpl::GetPipelineCapability( |
+ const HostPortPair& origin) { |
+ HttpPipelinedHostCapability capability = PIPELINE_UNKNOWN; |
+ CachedPipelineCapabilityMap::const_iterator it = |
+ pipeline_capability_map_->Get(origin); |
+ if (it != pipeline_capability_map_->end()) { |
+ capability = it->second; |
+ } |
+ return capability; |
+} |
+ |
+void HttpServerPropertiesImpl::SetPipelineCapability( |
+ const HostPortPair& origin, |
+ HttpPipelinedHostCapability capability) { |
+ CachedPipelineCapabilityMap::iterator it = |
+ pipeline_capability_map_->Peek(origin); |
+ if (it == pipeline_capability_map_->end() || |
+ it->second != PIPELINE_INCAPABLE) { |
+ pipeline_capability_map_->Put(origin, capability); |
+ } |
+} |
+ |
+void HttpServerPropertiesImpl::ClearPipelineCapabilities() { |
+ pipeline_capability_map_->Clear(); |
+} |
+ |
+PipelineCapabilityMap |
+HttpServerPropertiesImpl::GetPipelineCapabilityMap() const { |
+ PipelineCapabilityMap result; |
+ CachedPipelineCapabilityMap::const_iterator it; |
+ for (it = pipeline_capability_map_->begin(); |
+ it != pipeline_capability_map_->end(); ++it) { |
+ result[it->first] = it->second; |
+ } |
+ return result; |
+} |
+ |
} // namespace net |