Chromium Code Reviews| Index: content/browser/dom_storage/dom_storage_area.h |
| diff --git a/content/browser/dom_storage/dom_storage_area.h b/content/browser/dom_storage/dom_storage_area.h |
| index ca28be1aa144da7a55a984a3fdf2f1cdc96d50ed..53a7217893eac1a01c5ef86136da2d9cacea7e34 100644 |
| --- a/content/browser/dom_storage/dom_storage_area.h |
| +++ b/content/browser/dom_storage/dom_storage_area.h |
| @@ -95,11 +95,47 @@ class CONTENT_EXPORT DOMStorageArea |
| FRIEND_TEST_ALL_PREFIXES(DOMStorageContextImplTest, PersistentIds); |
| friend class base::RefCountedThreadSafe<DOMStorageArea>; |
| + class RateLimiter { |
|
cmumford
2015/02/03 00:45:24
Why not put the implementation of RateLimiter in t
michaeln
2015/02/03 19:59:15
because i wasn't done yet :)
|
| + public: |
| + RateLimiter(size_t desired_rate, base::TimeDelta time_quantum) |
| + : rate_(desired_rate), |
| + samples_(0), |
| + time_quantum_(time_quantum) { |
| + DCHECK(desired_rate > 0); |
|
cmumford
2015/02/03 00:45:24
Consider using DCHECK_GT instead of DCHECK(a > b)
michaeln
2015/02/03 19:59:15
Done.
|
| + } |
|
cmumford
2015/02/03 00:45:24
Indenting looks wrong - Reitveld issue?
|
| + |
| + void AddSamples(size_t samples) { samples_ += samples; } |
| + |
| + // Computes the total time needed to process the total samples seen |
| + // at the desired rate. |
| + base::TimeDelta ComputeTimeNeeded() { |
|
cmumford
2015/02/03 00:45:24
Should this be const?
michaeln
2015/02/03 19:59:14
Done.
|
| + return base::TimeDelta::FromInternalValue |
| + ((samples_ / rate_) * time_quantum_.ToInternalValue()); |
| + } |
| + |
| + // Given the elapsed time since the start of the rate limiting session, |
| + // computes the delay needed to mimic having processed the total samples |
| + // seen at the desired rate. |
| + base::TimeDelta ComputeDelayNeeded(const base::TimeDelta elapsed_time) { |
|
cmumford
2015/02/03 00:45:24
Should be a static method?
michaeln
2015/02/03 19:59:15
can't be, this uses the instance method ComputeTim
cmumford
2015/02/04 18:43:54
Then it can be const right?
|
| + base::TimeDelta time_needed = ComputeTimeNeeded(); |
| + if (time_needed > elapsed_time) |
| + return time_needed - elapsed_time; |
| + return base::TimeDelta(); |
| + } |
| + |
| + private: |
| + double rate_; |
| + double samples_; |
| + base::TimeDelta time_quantum_; |
| + }; |
| + |
| struct CommitBatch { |
| bool clear_all_first; |
| DOMStorageValuesMap changed_values; |
| + |
| CommitBatch(); |
| ~CommitBatch(); |
| + size_t GetDataSize(); |
|
cmumford
2015/02/03 00:45:24
const method.
michaeln
2015/02/03 19:59:14
Done.
|
| }; |
| ~DOMStorageArea(); |
| @@ -116,6 +152,7 @@ class CONTENT_EXPORT DOMStorageArea |
| void OnCommitTimer(); |
| void CommitChanges(const CommitBatch* commit_batch); |
| void OnCommitComplete(); |
| + base::TimeDelta ComputeCommitDelay(); |
|
cmumford
2015/02/03 00:45:24
const
michaeln
2015/02/03 19:59:14
Done.
|
| void ShutdownInCommitSequence(); |
| @@ -131,6 +168,9 @@ class CONTENT_EXPORT DOMStorageArea |
| bool is_shutdown_; |
| scoped_ptr<CommitBatch> commit_batch_; |
| int commit_batches_in_flight_; |
| + base::Time start_time_; |
| + RateLimiter data_rate_limiter_; |
| + RateLimiter commit_rate_limiter_; |
| }; |
| } // namespace content |