Chromium Code Reviews| Index: sync/engine/throttled_data_type_tracker.cc |
| diff --git a/sync/engine/throttled_data_type_tracker.cc b/sync/engine/throttled_data_type_tracker.cc |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..9689a575ffbbfebd6007f2f5573aaea95984afb6 |
| --- /dev/null |
| +++ b/sync/engine/throttled_data_type_tracker.cc |
| @@ -0,0 +1,72 @@ |
| +// Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| +// Use of this source code is governed by a BSD-style license that can be |
| +// found in the LICENSE file. |
| + |
| +#include "sync/engine/throttled_data_type_tracker.h" |
|
tim (not reviewing)
2012/06/11 18:53:46
nit - usually have a newline following the header
rlarocque
2012/06/11 23:28:51
Done.
|
| +#include "sync/internal_api/all_status.h" |
| +#include "sync/syncable/model_type.h" |
| + |
| +namespace browser_sync { |
| + |
| +ThrottledDataTypeTracker::ThrottledDataTypeTracker(AllStatus *allstatus) |
| + : allstatus_(allstatus) { |
| + allstatus_->SetThrottledTypes(syncable::ModelTypeSet()); |
| +} |
| + |
| +ThrottledDataTypeTracker::ThrottledDataTypeTracker() |
| + : allstatus_(NULL) { } |
| + |
| +ThrottledDataTypeTracker::~ThrottledDataTypeTracker() { } |
| + |
| +void ThrottledDataTypeTracker::SetUnthrottleTime(syncable::ModelTypeSet types, |
| + const base::TimeTicks& time) { |
|
tim (not reviewing)
2012/06/11 18:53:46
nit - indent
rlarocque
2012/06/11 23:28:51
Done.
|
| + for (syncable::ModelTypeSet::Iterator it = types.First(); |
| + it.Good(); it.Inc()) { |
| + unthrottle_times_[it.Get()] = time; |
| + } |
| + |
| + DVLOG(2) |
| + << "Throttling types: " << ModelTypeSetToString(types) |
| + << ", throttled list is now: " |
| + << ModelTypeSetToString(GetThrottledTypes()); |
| + if (allstatus_) { |
| + allstatus_->SetThrottledTypes(GetThrottledTypes()); |
| + } |
| +} |
| + |
| +void ThrottledDataTypeTracker::PruneUnthrottledTypes( |
| + const base::TimeTicks& time) { |
| + bool modified = false; |
| + |
| + UnthrottleTimes::iterator it = unthrottle_times_.begin(); |
| + while (it != unthrottle_times_.end()) { |
| + if (it->second <= time) { |
| + // Delete and increment the iterator. |
| + UnthrottleTimes::iterator iterator_to_delete = it; |
| + ++it; |
| + unthrottle_times_.erase(iterator_to_delete); |
| + modified = true; |
| + } else { |
| + // Just increment the iterator. |
| + ++it; |
| + } |
| + } |
| + |
| + DVLOG_IF(2, modified) |
| + << "Remaining throttled types: " |
| + << ModelTypeSetToString(GetThrottledTypes()); |
| + if (modified && allstatus_) { |
| + allstatus_->SetThrottledTypes(GetThrottledTypes()); |
| + } |
| +} |
| + |
| +syncable::ModelTypeSet ThrottledDataTypeTracker::GetThrottledTypes() const { |
| + syncable::ModelTypeSet types; |
| + for (UnthrottleTimes::const_iterator it = unthrottle_times_.begin(); |
| + it != unthrottle_times_.end(); ++it) { |
| + types.Put(it->first); |
| + } |
| + return types; |
| +} |
| + |
| +} // namespace browser_sync |