Chromium Code Reviews| Index: chrome/browser/sync/internal_api/sync_manager.cc |
| diff --git a/chrome/browser/sync/internal_api/sync_manager.cc b/chrome/browser/sync/internal_api/sync_manager.cc |
| index ea7a238646cbee46d64fcd208d9a1c5233253471..03a2382d8c40dece6ca0b0fb7436267167fdd478 100644 |
| --- a/chrome/browser/sync/internal_api/sync_manager.cc |
| +++ b/chrome/browser/sync/internal_api/sync_manager.cc |
| @@ -17,6 +17,7 @@ |
| #include "chrome/browser/sync/engine/all_status.h" |
| #include "chrome/browser/sync/engine/net/server_connection_manager.h" |
| #include "chrome/browser/sync/engine/nigori_util.h" |
| +#include "chrome/browser/sync/engine/polling_constants.h" |
| #include "chrome/browser/sync/engine/syncapi_internal.h" |
| #include "chrome/browser/sync/engine/syncer_types.h" |
| #include "chrome/browser/sync/engine/sync_scheduler.h" |
| @@ -114,6 +115,9 @@ GetUpdatesCallerInfo::GetUpdatesSource GetSourceFromReason( |
| namespace sync_api { |
| +const int SyncManager::kDefaultNudgeDelayMilliseconds = 200; |
|
tim (not reviewing)
2011/12/16 02:52:10
seems like these should go along with the other co
|
| +const int SyncManager::kPreferencesNudgeDelayMilliseconds = 2000; |
| + |
| ////////////////////////////////////////////////////////////////////////// |
| // SyncManager's implementation: SyncManager::SyncInternal |
| class SyncManager::SyncInternal |
| @@ -124,8 +128,6 @@ class SyncManager::SyncInternal |
| public SyncEngineEventListener, |
| public ServerConnectionEventListener, |
| public syncable::DirectoryChangeDelegate { |
| - static const int kDefaultNudgeDelayMilliseconds; |
| - static const int kPreferencesNudgeDelayMilliseconds; |
| public: |
| explicit SyncInternal(const std::string& name) |
| : name_(name), |
| @@ -282,7 +284,7 @@ class SyncManager::SyncInternal |
| SyncAPIServerConnectionManager* connection_manager() { |
| return connection_manager_.get(); |
| } |
| - SyncScheduler* scheduler() { return scheduler_.get(); } |
| + SyncScheduler* scheduler() const { return scheduler_.get(); } |
| UserShare* GetUserShare() { |
| DCHECK(initialized_); |
| return &share_; |
| @@ -302,6 +304,8 @@ class SyncManager::SyncInternal |
| const tracked_objects::Location& nudge_location, |
| const ModelType& type); |
| + TimeDelta GetNudgeDelayTimeDelta(const ModelType& model_type); |
| + |
| // See SyncManager::Shutdown* for information. |
| void StopSyncingForShutdown(const base::Closure& callback); |
| void ShutdownOnSyncThread(); |
| @@ -549,8 +553,81 @@ class SyncManager::SyncInternal |
| MessageLoop* const created_on_loop_; |
| }; |
| -const int SyncManager::SyncInternal::kDefaultNudgeDelayMilliseconds = 200; |
| -const int SyncManager::SyncInternal::kPreferencesNudgeDelayMilliseconds = 2000; |
| + |
| +// A class to calculate nudge delays for types. |
| +class NudgeStrategy { |
| + public: |
| + static TimeDelta GetNudgeDelayTimeDelta(const ModelType& model_type, |
| + SyncManager::SyncInternal* core) { |
| + NudgeDelayStrategy delay_type = GetNudgeDelayStrategy(model_type); |
| + return GetNudgeDelayTimeDeltaFromType(delay_type, |
| + model_type, |
| + core); |
| + } |
| + |
| + private: |
| + // Possible types of nudge delay for datatypes. |
| + // Note: These are just hints. If a sync happens then all dirty entries |
| + // would be committed as part of the sync. |
| + enum NudgeDelayStrategy { |
| + // Sync right away. |
| + IMMEDIATE, |
| + |
| + // Sync this change while syncing another change. |
| + ACCOMPANY_ONLY, |
|
tim (not reviewing)
2011/12/16 02:52:10
Based on the fact that we actually _will_ sync it
|
| + |
| + // The datatype does not use one of the predefined wait times but defines |
| + // its own wait time logic for nudge. |
| + CUSTOM, |
| + }; |
| + |
| + static NudgeDelayStrategy GetNudgeDelayStrategy(const ModelType& type) { |
| + switch (type) { |
| + case syncable::AUTOFILL: |
| + case syncable::AUTOFILL_PROFILE: |
| + return ACCOMPANY_ONLY; |
| + case syncable::PREFERENCES: |
| + case syncable::SESSIONS: |
| + return CUSTOM; |
| + default: |
| + return IMMEDIATE; |
| + } |
| + } |
| + |
| + static TimeDelta GetNudgeDelayTimeDeltaFromType( |
| + const NudgeDelayStrategy& delay_type, const ModelType& model_type, |
| + const SyncManager::SyncInternal* core) { |
| + CHECK(core); |
| + TimeDelta delay = TimeDelta::FromMilliseconds( |
| + SyncManager::kDefaultNudgeDelayMilliseconds); |
| + switch (delay_type) { |
| + case IMMEDIATE: |
| + delay = TimeDelta::FromMilliseconds( |
| + SyncManager::kDefaultNudgeDelayMilliseconds); |
| + break; |
| + case ACCOMPANY_ONLY: |
| + delay = TimeDelta::FromSeconds( |
| + browser_sync::kDefaultShortPollIntervalSeconds); |
| + break; |
| + case CUSTOM: |
| + switch (model_type) { |
| + case syncable::PREFERENCES: |
| + delay = TimeDelta::FromMilliseconds( |
| + SyncManager::kPreferencesNudgeDelayMilliseconds); |
| + break; |
| + case syncable::SESSIONS: |
| + delay = core->scheduler()->sessions_commit_delay(); |
| + break; |
| + default: |
| + NOTREACHED(); |
| + } |
| + break; |
| + default: |
| + NOTREACHED(); |
| + } |
| + return delay; |
| + } |
| +}; |
| SyncManager::ChangeDelegate::~ChangeDelegate() {} |
| @@ -1544,6 +1621,11 @@ void SyncManager::SyncInternal::RequestNudge( |
| ModelTypeSet(), location); |
| } |
| +TimeDelta SyncManager::SyncInternal::GetNudgeDelayTimeDelta( |
| + const ModelType& model_type) { |
| + return NudgeStrategy::GetNudgeDelayTimeDelta(model_type, this); |
| +} |
| + |
| void SyncManager::SyncInternal::RequestNudgeForDataType( |
| const tracked_objects::Location& nudge_location, |
| const ModelType& type) { |
| @@ -1551,20 +1633,10 @@ void SyncManager::SyncInternal::RequestNudgeForDataType( |
| NOTREACHED(); |
| return; |
| } |
| - base::TimeDelta nudge_delay; |
| - switch (type) { |
| - case syncable::PREFERENCES: |
| - nudge_delay = |
| - TimeDelta::FromMilliseconds(kPreferencesNudgeDelayMilliseconds); |
| - break; |
| - case syncable::SESSIONS: |
| - nudge_delay = scheduler()->sessions_commit_delay(); |
| - break; |
| - default: |
| - nudge_delay = |
| - TimeDelta::FromMilliseconds(kDefaultNudgeDelayMilliseconds); |
| - break; |
| - } |
| + |
| + base::TimeDelta nudge_delay = NudgeStrategy::GetNudgeDelayTimeDelta(type, |
| + this); |
| + syncable::ModelTypeSet types(type); |
| scheduler()->ScheduleNudge(nudge_delay, |
| browser_sync::NUDGE_SOURCE_LOCAL, |
| ModelTypeSet(type), |
| @@ -1986,6 +2058,11 @@ void SyncManager::RefreshEncryption() { |
| data_->RefreshEncryption(); |
| } |
| +TimeDelta SyncManager::GetNudgeDelayTimeDelta( |
| + const ModelType& model_type) { |
| + return data_->GetNudgeDelayTimeDelta(model_type); |
| +} |
| + |
| syncable::ModelTypeSet SyncManager::GetEncryptedDataTypesForTest() const { |
| ReadTransaction trans(FROM_HERE, GetUserShare()); |
| return GetEncryptedTypes(&trans); |