| Index: components/sync/engine_impl/cycle/nudge_tracker.cc
|
| diff --git a/components/sync/engine_impl/cycle/nudge_tracker.cc b/components/sync/engine_impl/cycle/nudge_tracker.cc
|
| index cef95f2379a827f22735c7b445a76e35c802db94..0e988002ed96ee148642da15ef90f542a67c66ba 100644
|
| --- a/components/sync/engine_impl/cycle/nudge_tracker.cc
|
| +++ b/components/sync/engine_impl/cycle/nudge_tracker.cc
|
| @@ -189,10 +189,18 @@ void NudgeTracker::SetTypesThrottledUntil(ModelTypeSet types,
|
| }
|
| }
|
|
|
| -void NudgeTracker::UpdateTypeThrottlingState(base::TimeTicks now) {
|
| +void NudgeTracker::SetTypeBackedOff(ModelType type,
|
| + base::TimeDelta length,
|
| + base::TimeTicks now) {
|
| + TypeTrackerMap::const_iterator tracker_it = type_trackers_.find(type);
|
| + DCHECK(tracker_it != type_trackers_.end());
|
| + tracker_it->second->BackoffType(length, now);
|
| +}
|
| +
|
| +void NudgeTracker::UpdateTypeThrottlingAndBackoffState(base::TimeTicks now) {
|
| for (TypeTrackerMap::const_iterator it = type_trackers_.begin();
|
| it != type_trackers_.end(); ++it) {
|
| - it->second->UpdateThrottleState(now);
|
| + it->second->UpdateThrottleOrBackoffState(now);
|
| }
|
| }
|
|
|
| @@ -206,11 +214,26 @@ bool NudgeTracker::IsAnyTypeThrottled() const {
|
| return false;
|
| }
|
|
|
| +bool NudgeTracker::IsAnyTypeBackedOff() const {
|
| + for (TypeTrackerMap::const_iterator it = type_trackers_.begin();
|
| + it != type_trackers_.end(); ++it) {
|
| + if (it->second->IsBackedOff()) {
|
| + return true;
|
| + }
|
| + }
|
| + return false;
|
| +}
|
| +
|
| bool NudgeTracker::IsTypeThrottled(ModelType type) const {
|
| DCHECK(type_trackers_.find(type) != type_trackers_.end());
|
| return type_trackers_.find(type)->second->IsThrottled();
|
| }
|
|
|
| +bool NudgeTracker::IsTypeBackedOff(ModelType type) const {
|
| + DCHECK(type_trackers_.find(type) != type_trackers_.end());
|
| + return type_trackers_.find(type)->second->IsBackedOff();
|
| +}
|
| +
|
| base::TimeDelta NudgeTracker::GetTimeUntilNextUnthrottle(
|
| base::TimeTicks now) const {
|
| DCHECK(IsAnyTypeThrottled()) << "This function requires a pending unthrottle";
|
| @@ -229,6 +252,34 @@ base::TimeDelta NudgeTracker::GetTimeUntilNextUnthrottle(
|
| return time_until_next_unthrottle;
|
| }
|
|
|
| +base::TimeDelta NudgeTracker::GetTimeUntilNextUnbackoff(
|
| + base::TimeTicks now) const {
|
| + DCHECK(IsAnyTypeBackedOff()) << "This function requires a pending unbackoff";
|
| +
|
| + // Return min of GetTimeUntilUnbackoff() values for all IsThrottled() types.
|
| + base::TimeDelta time_until_next_unbackoff = base::TimeDelta::Max();
|
| + for (TypeTrackerMap::const_iterator it = type_trackers_.begin();
|
| + it != type_trackers_.end(); ++it) {
|
| + if (it->second->IsBackedOff()) {
|
| + time_until_next_unbackoff = std::min(
|
| + time_until_next_unbackoff, it->second->GetTimeUntilUnbackoff(now));
|
| + }
|
| + }
|
| + DCHECK(!time_until_next_unbackoff.is_max());
|
| +
|
| + return time_until_next_unbackoff;
|
| +}
|
| +
|
| +base::TimeDelta NudgeTracker::GetTypeLastBackoffInterval(ModelType type) const {
|
| + TypeTrackerMap::const_iterator tracker_it = type_trackers_.find(type);
|
| + if (tracker_it != type_trackers_.end()) {
|
| + NOTREACHED();
|
| + return base::TimeDelta::FromSeconds(0);
|
| + }
|
| +
|
| + return tracker_it->second->GetLastUnbackoffInterval();
|
| +}
|
| +
|
| ModelTypeSet NudgeTracker::GetThrottledTypes() const {
|
| ModelTypeSet result;
|
| for (TypeTrackerMap::const_iterator it = type_trackers_.begin();
|
| @@ -240,6 +291,17 @@ ModelTypeSet NudgeTracker::GetThrottledTypes() const {
|
| return result;
|
| }
|
|
|
| +ModelTypeSet NudgeTracker::GetBackedOffTypes() const {
|
| + ModelTypeSet result;
|
| + for (TypeTrackerMap::const_iterator it = type_trackers_.begin();
|
| + it != type_trackers_.end(); ++it) {
|
| + if (it->second->IsBackedOff()) {
|
| + result.Put(it->first);
|
| + }
|
| + }
|
| + return result;
|
| +}
|
| +
|
| ModelTypeSet NudgeTracker::GetNudgedTypes() const {
|
| ModelTypeSet result;
|
| for (TypeTrackerMap::const_iterator it = type_trackers_.begin();
|
|
|