Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(748)

Side by Side Diff: components/sync/sessions_impl/nudge_tracker.cc

Issue 2130453004: [Sync] Move //sync to //components/sync. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase. Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 "sync/sessions/nudge_tracker.h" 5 #include "components/sync/sessions_impl/nudge_tracker.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include <utility> 9 #include <utility>
10 10
11 #include "base/memory/ptr_util.h" 11 #include "base/memory/ptr_util.h"
12 #include "sync/internal_api/public/engine/polling_constants.h" 12 #include "components/sync/engine/polling_constants.h"
13 #include "sync/protocol/sync.pb.h" 13 #include "components/sync/protocol/sync.pb.h"
14 14
15 namespace syncer { 15 namespace syncer {
16 namespace sessions { 16 namespace sessions {
17 17
18 namespace { 18 namespace {
19 19
20 // Delays for syncer nudges. 20 // Delays for syncer nudges.
21 const int kDefaultNudgeDelayMilliseconds = 200; 21 const int kDefaultNudgeDelayMilliseconds = 200;
22 const int kSlowNudgeDelayMilliseconds = 2000; 22 const int kSlowNudgeDelayMilliseconds = 2000;
23 const int kDefaultSessionsCommitDelaySeconds = 10; 23 const int kDefaultSessionsCommitDelaySeconds = 10;
24 const int kSyncRefreshDelayMilliseconds = 500; 24 const int kSyncRefreshDelayMilliseconds = 500;
25 const int kSyncSchedulerDelayMilliseconds = 250; 25 const int kSyncSchedulerDelayMilliseconds = 250;
26 26
27 base::TimeDelta GetDefaultDelayForType(ModelType model_type, 27 base::TimeDelta GetDefaultDelayForType(ModelType model_type,
28 base::TimeDelta minimum_delay) { 28 base::TimeDelta minimum_delay) {
29 switch (model_type) { 29 switch (model_type) {
30 case AUTOFILL: 30 case AUTOFILL:
31 // Accompany types rely on nudges from other types, and hence have long 31 // Accompany types rely on nudges from other types, and hence have long
32 // nudge delays. 32 // nudge delays.
33 return base::TimeDelta::FromSeconds(kDefaultShortPollIntervalSeconds); 33 return base::TimeDelta::FromSeconds(kDefaultShortPollIntervalSeconds);
34 case BOOKMARKS: 34 case BOOKMARKS:
35 case PREFERENCES: 35 case PREFERENCES:
36 // Types with sometimes automatic changes get longer delays to allow more 36 // Types with sometimes automatic changes get longer delays to allow more
37 // coalescing. 37 // coalescing.
38 return base::TimeDelta::FromMilliseconds(kSlowNudgeDelayMilliseconds); 38 return base::TimeDelta::FromMilliseconds(kSlowNudgeDelayMilliseconds);
39 case SESSIONS: 39 case SESSIONS:
40 case FAVICON_IMAGES: 40 case FAVICON_IMAGES:
41 case FAVICON_TRACKING: 41 case FAVICON_TRACKING:
42 // Types with navigation triggered changes get longer delays to allow more 42 // Types with navigation triggered changes get longer delays to allow more
43 // coalescing. 43 // coalescing.
44 return base::TimeDelta::FromSeconds(kDefaultSessionsCommitDelaySeconds); 44 return base::TimeDelta::FromSeconds(kDefaultSessionsCommitDelaySeconds);
45 default: 45 default:
46 return minimum_delay; 46 return minimum_delay;
47 } 47 }
48 } 48 }
49 49
50 } // namespace 50 } // namespace
51 51
52 size_t NudgeTracker::kDefaultMaxPayloadsPerType = 10; 52 size_t NudgeTracker::kDefaultMaxPayloadsPerType = 10;
53 53
54 NudgeTracker::NudgeTracker() 54 NudgeTracker::NudgeTracker()
55 : invalidations_enabled_(false), 55 : invalidations_enabled_(false),
56 invalidations_out_of_sync_(true), 56 invalidations_out_of_sync_(true),
57 minimum_local_nudge_delay_( 57 minimum_local_nudge_delay_(
58 base::TimeDelta::FromMilliseconds(kDefaultNudgeDelayMilliseconds)), 58 base::TimeDelta::FromMilliseconds(kDefaultNudgeDelayMilliseconds)),
59 local_refresh_nudge_delay_( 59 local_refresh_nudge_delay_(
60 base::TimeDelta::FromMilliseconds(kSyncRefreshDelayMilliseconds)), 60 base::TimeDelta::FromMilliseconds(kSyncRefreshDelayMilliseconds)),
61 remote_invalidation_nudge_delay_( 61 remote_invalidation_nudge_delay_(
62 base::TimeDelta::FromMilliseconds(kSyncSchedulerDelayMilliseconds)) { 62 base::TimeDelta::FromMilliseconds(kSyncSchedulerDelayMilliseconds)) {
63 ModelTypeSet protocol_types = ProtocolTypes(); 63 ModelTypeSet protocol_types = ProtocolTypes();
64 // Default initialize all the type trackers. 64 // Default initialize all the type trackers.
65 for (ModelTypeSet::Iterator it = protocol_types.First(); it.Good(); 65 for (ModelTypeSet::Iterator it = protocol_types.First(); it.Good();
66 it.Inc()) { 66 it.Inc()) {
67 type_trackers_.insert( 67 type_trackers_.insert(
68 std::make_pair(it.Get(), base::WrapUnique(new DataTypeTracker()))); 68 std::make_pair(it.Get(), base::WrapUnique(new DataTypeTracker())));
69 } 69 }
70 } 70 }
71 71
72 NudgeTracker::~NudgeTracker() { } 72 NudgeTracker::~NudgeTracker() {}
73 73
74 bool NudgeTracker::IsSyncRequired() const { 74 bool NudgeTracker::IsSyncRequired() const {
75 if (IsRetryRequired()) 75 if (IsRetryRequired())
76 return true; 76 return true;
77 77
78 for (TypeTrackerMap::const_iterator it = type_trackers_.begin(); 78 for (TypeTrackerMap::const_iterator it = type_trackers_.begin();
79 it != type_trackers_.end(); ++it) { 79 it != type_trackers_.end(); ++it) {
80 if (it->second->IsSyncRequired()) { 80 if (it->second->IsSyncRequired()) {
81 return true; 81 return true;
82 } 82 }
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
132 for (ModelTypeSet::Iterator type_it = types.First(); type_it.Good(); 132 for (ModelTypeSet::Iterator type_it = types.First(); type_it.Good();
133 type_it.Inc()) { 133 type_it.Inc()) {
134 TypeTrackerMap::const_iterator tracker_it = 134 TypeTrackerMap::const_iterator tracker_it =
135 type_trackers_.find(type_it.Get()); 135 type_trackers_.find(type_it.Get());
136 DCHECK(tracker_it != type_trackers_.end()); 136 DCHECK(tracker_it != type_trackers_.end());
137 137
138 // Only if the type tracker has a valid delay (non-zero) that is shorter 138 // Only if the type tracker has a valid delay (non-zero) that is shorter
139 // than the calculated delay do we update the calculated delay. 139 // than the calculated delay do we update the calculated delay.
140 base::TimeDelta type_delay = tracker_it->second->RecordLocalChange(); 140 base::TimeDelta type_delay = tracker_it->second->RecordLocalChange();
141 if (type_delay.is_zero()) { 141 if (type_delay.is_zero()) {
142 type_delay = GetDefaultDelayForType(type_it.Get(), 142 type_delay =
143 minimum_local_nudge_delay_); 143 GetDefaultDelayForType(type_it.Get(), minimum_local_nudge_delay_);
144 } 144 }
145 if (type_delay < delay) 145 if (type_delay < delay)
146 delay = type_delay; 146 delay = type_delay;
147 } 147 }
148 return delay; 148 return delay;
149 } 149 }
150 150
151 base::TimeDelta NudgeTracker::RecordLocalRefreshRequest(ModelTypeSet types) { 151 base::TimeDelta NudgeTracker::RecordLocalRefreshRequest(ModelTypeSet types) {
152 for (ModelTypeSet::Iterator it = types.First(); it.Good(); it.Inc()) { 152 for (ModelTypeSet::Iterator it = types.First(); it.Good(); it.Inc()) {
153 TypeTrackerMap::const_iterator tracker_it = type_trackers_.find(it.Get()); 153 TypeTrackerMap::const_iterator tracker_it = type_trackers_.find(it.Get());
(...skipping 27 matching lines...) Expand all
181 181
182 void NudgeTracker::OnInvalidationsEnabled() { 182 void NudgeTracker::OnInvalidationsEnabled() {
183 invalidations_enabled_ = true; 183 invalidations_enabled_ = true;
184 } 184 }
185 185
186 void NudgeTracker::OnInvalidationsDisabled() { 186 void NudgeTracker::OnInvalidationsDisabled() {
187 invalidations_enabled_ = false; 187 invalidations_enabled_ = false;
188 invalidations_out_of_sync_ = true; 188 invalidations_out_of_sync_ = true;
189 } 189 }
190 190
191 void NudgeTracker::SetTypesThrottledUntil( 191 void NudgeTracker::SetTypesThrottledUntil(ModelTypeSet types,
192 ModelTypeSet types, 192 base::TimeDelta length,
193 base::TimeDelta length, 193 base::TimeTicks now) {
194 base::TimeTicks now) {
195 for (ModelTypeSet::Iterator it = types.First(); it.Good(); it.Inc()) { 194 for (ModelTypeSet::Iterator it = types.First(); it.Good(); it.Inc()) {
196 TypeTrackerMap::const_iterator tracker_it = type_trackers_.find(it.Get()); 195 TypeTrackerMap::const_iterator tracker_it = type_trackers_.find(it.Get());
197 tracker_it->second->ThrottleType(length, now); 196 tracker_it->second->ThrottleType(length, now);
198 } 197 }
199 } 198 }
200 199
201 void NudgeTracker::UpdateTypeThrottlingState(base::TimeTicks now) { 200 void NudgeTracker::UpdateTypeThrottlingState(base::TimeTicks now) {
202 for (TypeTrackerMap::const_iterator it = type_trackers_.begin(); 201 for (TypeTrackerMap::const_iterator it = type_trackers_.begin();
203 it != type_trackers_.end(); ++it) { 202 it != type_trackers_.end(); ++it) {
204 it->second->UpdateThrottleState(now); 203 it->second->UpdateThrottleState(now);
(...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after
331 return sync_pb::GetUpdatesCallerInfo::DATATYPE_REFRESH; 330 return sync_pb::GetUpdatesCallerInfo::DATATYPE_REFRESH;
332 } else if (has_commit_pending) { 331 } else if (has_commit_pending) {
333 return sync_pb::GetUpdatesCallerInfo::LOCAL; 332 return sync_pb::GetUpdatesCallerInfo::LOCAL;
334 } else if (has_retry) { 333 } else if (has_retry) {
335 return sync_pb::GetUpdatesCallerInfo::RETRY; 334 return sync_pb::GetUpdatesCallerInfo::RETRY;
336 } else { 335 } else {
337 return sync_pb::GetUpdatesCallerInfo::UNKNOWN; 336 return sync_pb::GetUpdatesCallerInfo::UNKNOWN;
338 } 337 }
339 } 338 }
340 339
341 void NudgeTracker::FillProtoMessage( 340 void NudgeTracker::FillProtoMessage(ModelType type,
342 ModelType type, 341 sync_pb::GetUpdateTriggers* msg) const {
343 sync_pb::GetUpdateTriggers* msg) const {
344 DCHECK(type_trackers_.find(type) != type_trackers_.end()); 342 DCHECK(type_trackers_.find(type) != type_trackers_.end());
345 343
346 // Fill what we can from the global data. 344 // Fill what we can from the global data.
347 msg->set_invalidations_out_of_sync(invalidations_out_of_sync_); 345 msg->set_invalidations_out_of_sync(invalidations_out_of_sync_);
348 346
349 // Delegate the type-specific work to the DataTypeTracker class. 347 // Delegate the type-specific work to the DataTypeTracker class.
350 type_trackers_.find(type)->second->FillGetUpdatesTriggersMessage(msg); 348 type_trackers_.find(type)->second->FillGetUpdatesTriggersMessage(msg);
351 } 349 }
352 350
353 void NudgeTracker::SetSyncCycleStartTime(base::TimeTicks now) { 351 void NudgeTracker::SetSyncCycleStartTime(base::TimeTicks now) {
(...skipping 27 matching lines...) Expand all
381 } 379 }
382 380
383 void NudgeTracker::SetNextRetryTime(base::TimeTicks retry_time) { 381 void NudgeTracker::SetNextRetryTime(base::TimeTicks retry_time) {
384 next_retry_time_ = retry_time; 382 next_retry_time_ = retry_time;
385 } 383 }
386 384
387 void NudgeTracker::OnReceivedCustomNudgeDelays( 385 void NudgeTracker::OnReceivedCustomNudgeDelays(
388 const std::map<ModelType, base::TimeDelta>& delay_map) { 386 const std::map<ModelType, base::TimeDelta>& delay_map) {
389 for (std::map<ModelType, base::TimeDelta>::const_iterator iter = 387 for (std::map<ModelType, base::TimeDelta>::const_iterator iter =
390 delay_map.begin(); 388 delay_map.begin();
391 iter != delay_map.end(); 389 iter != delay_map.end(); ++iter) {
392 ++iter) {
393 ModelType type = iter->first; 390 ModelType type = iter->first;
394 DCHECK(syncer::ProtocolTypes().Has(type)); 391 DCHECK(syncer::ProtocolTypes().Has(type));
395 TypeTrackerMap::const_iterator type_iter = type_trackers_.find(type); 392 TypeTrackerMap::const_iterator type_iter = type_trackers_.find(type);
396 if (type_iter == type_trackers_.end()) 393 if (type_iter == type_trackers_.end())
397 continue; 394 continue;
398 395
399 if (iter->second > minimum_local_nudge_delay_) { 396 if (iter->second > minimum_local_nudge_delay_) {
400 type_iter->second->UpdateLocalNudgeDelay(iter->second); 397 type_iter->second->UpdateLocalNudgeDelay(iter->second);
401 } else { 398 } else {
402 type_iter->second->UpdateLocalNudgeDelay( 399 type_iter->second->UpdateLocalNudgeDelay(
403 GetDefaultDelayForType(type, 400 GetDefaultDelayForType(type, minimum_local_nudge_delay_));
404 minimum_local_nudge_delay_));
405 } 401 }
406 } 402 }
407 } 403 }
408 404
409 void NudgeTracker::SetDefaultNudgeDelay(base::TimeDelta nudge_delay) { 405 void NudgeTracker::SetDefaultNudgeDelay(base::TimeDelta nudge_delay) {
410 minimum_local_nudge_delay_ = nudge_delay; 406 minimum_local_nudge_delay_ = nudge_delay;
411 } 407 }
412 408
413 } // namespace sessions 409 } // namespace sessions
414 } // namespace syncer 410 } // namespace syncer
OLDNEW
« no previous file with comments | « components/sync/sessions_impl/nudge_tracker.h ('k') | components/sync/sessions_impl/nudge_tracker_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698