Chromium Code Reviews| Index: content/browser/streams/stream_registry.cc |
| diff --git a/content/browser/streams/stream_registry.cc b/content/browser/streams/stream_registry.cc |
| index 39d24b39f5f7b505484a472b67a2a490892a3151..e2750d4f3ac3a2aba892a53fb98694606f6ddd1c 100644 |
| --- a/content/browser/streams/stream_registry.cc |
| +++ b/content/browser/streams/stream_registry.cc |
| @@ -8,7 +8,15 @@ |
| namespace content { |
| -StreamRegistry::StreamRegistry() { |
| +namespace { |
| +// The maximum size of memory each StreamRegistry instance is allowed to use |
| +// for its Stream instances. |
| +const uint64 kDefaultMaxMemoryUsage = 1024 * 1024 * 1024U; // 1GiB |
| +} |
| + |
| +StreamRegistry::StreamRegistry() |
| + : total_memory_usage_(0), |
| + max_memory_usage_(kDefaultMaxMemoryUsage) { |
| } |
| StreamRegistry::~StreamRegistry() { |
| @@ -42,7 +50,33 @@ bool StreamRegistry::CloneStream(const GURL& url, const GURL& src_url) { |
| void StreamRegistry::UnregisterStream(const GURL& url) { |
| DCHECK(CalledOnValidThread()); |
| + |
| + StreamMap::iterator iter = streams_.find(url); |
| + if (iter == streams_.end()) |
| + return; |
| + |
| + total_memory_usage_ -= iter->second->last_total_buffered_bytes(); |
|
kinuko
2013/08/14 09:32:23
Can we DCHECK this doesn't make total_memory_usage
tyoshino (SeeGerritForStatus)
2013/08/15 04:15:33
Done.
|
| streams_.erase(url); |
| } |
| +bool StreamRegistry::CanIncreaseMemoryUsage( |
| + const GURL& url, size_t last_size, size_t new_size) { |
| + DCHECK(CalledOnValidThread()); |
| + |
| + StreamMap::iterator iter = streams_.find(url); |
| + // A Stream must be registered with its parent registry to get memory. |
| + if (iter == streams_.end()) |
| + return false; |
| + |
| + DCHECK_LE(last_size, total_memory_usage_); |
| + size_t usage_of_others = total_memory_usage_ - last_size; |
| + |
| + if (std::numeric_limits<size_t>::max() - usage_of_others < new_size || |
| + max_memory_usage_ < usage_of_others + new_size) |
| + return false; |
| + |
| + total_memory_usage_ = usage_of_others + new_size; |
| + return true; |
| +} |
| + |
| } // namespace content |