Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "content/browser/streams/stream_registry.h" | 5 #include "content/browser/streams/stream_registry.h" |
| 6 | 6 |
| 7 #include "content/browser/streams/stream.h" | 7 #include "content/browser/streams/stream.h" |
| 8 | 8 |
| 9 namespace content { | 9 namespace content { |
| 10 | 10 |
| 11 StreamRegistry::StreamRegistry() { | 11 namespace { |
| 12 // The maximum size of memory each StreamRegistry instance is allowed to use | |
| 13 // for its Stream instances. | |
| 14 const uint64 kDefaultMaxMemoryUsage = 1024 * 1024 * 1024U; // 1GiB | |
| 15 } | |
| 16 | |
| 17 StreamRegistry::StreamRegistry() | |
| 18 : total_memory_usage_(0), | |
| 19 max_memory_usage_(kDefaultMaxMemoryUsage) { | |
| 12 } | 20 } |
| 13 | 21 |
| 14 StreamRegistry::~StreamRegistry() { | 22 StreamRegistry::~StreamRegistry() { |
| 15 } | 23 } |
| 16 | 24 |
| 17 void StreamRegistry::RegisterStream(scoped_refptr<Stream> stream) { | 25 void StreamRegistry::RegisterStream(scoped_refptr<Stream> stream) { |
| 18 DCHECK(CalledOnValidThread()); | 26 DCHECK(CalledOnValidThread()); |
| 19 DCHECK(stream.get()); | 27 DCHECK(stream.get()); |
| 20 DCHECK(!stream->url().is_empty()); | 28 DCHECK(!stream->url().is_empty()); |
| 21 streams_[stream->url()] = stream; | 29 streams_[stream->url()] = stream; |
| (...skipping 13 matching lines...) Expand all Loading... | |
| 35 scoped_refptr<Stream> stream(GetStream(src_url)); | 43 scoped_refptr<Stream> stream(GetStream(src_url)); |
| 36 if (stream.get()) { | 44 if (stream.get()) { |
| 37 streams_[url] = stream; | 45 streams_[url] = stream; |
| 38 return true; | 46 return true; |
| 39 } | 47 } |
| 40 return false; | 48 return false; |
| 41 } | 49 } |
| 42 | 50 |
| 43 void StreamRegistry::UnregisterStream(const GURL& url) { | 51 void StreamRegistry::UnregisterStream(const GURL& url) { |
| 44 DCHECK(CalledOnValidThread()); | 52 DCHECK(CalledOnValidThread()); |
| 53 | |
| 54 StreamMap::iterator iter = streams_.find(url); | |
| 55 if (iter == streams_.end()) | |
| 56 return; | |
| 57 | |
| 58 total_memory_usage_ -= iter->second->last_total_buffered_bytes(); | |
| 45 streams_.erase(url); | 59 streams_.erase(url); |
| 46 } | 60 } |
| 47 | 61 |
| 62 bool StreamRegistry::CanIncreaseMemoryUsage( | |
| 63 const GURL& url, size_t last_size, size_t new_size) { | |
| 64 DCHECK(CalledOnValidThread()); | |
| 65 | |
| 66 StreamMap::iterator iter = streams_.find(url); | |
| 67 // A Stream must be registered with its parent registry to get memory. | |
| 68 if (iter == streams_.end()) | |
| 69 return false; | |
| 70 | |
| 71 DCHECK_LE(last_size, total_memory_usage_); | |
| 72 size_t usage_of_others = total_memory_usage_ - last_size; | |
|
kinuko
2013/08/14 09:32:23
nit: using iter->second->last_total_buffered_bytes
tyoshino (SeeGerritForStatus)
2013/08/15 04:15:33
I wondered if either way is better. OK, I'll do so
| |
| 73 | |
| 74 if (std::numeric_limits<size_t>::max() - usage_of_others < new_size || | |
| 75 max_memory_usage_ < usage_of_others + new_size) | |
| 76 return false; | |
| 77 | |
| 78 total_memory_usage_ = usage_of_others + new_size; | |
| 79 return true; | |
| 80 } | |
| 81 | |
| 48 } // namespace content | 82 } // namespace content |
| OLD | NEW |