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

Unified Diff: chrome/browser/sync/internal_api/sync_manager.cc

Issue 8787006: Delay autofill commits to reduce client to server traffic. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: for commit. Created 9 years 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 side-by-side diff with in-line comments
Download patch
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 65d85e9385778ef561fa523f45b02307ab7ad660..b000d9a3188dd629f35cac816b6c74f1f757024b 100644
--- a/chrome/browser/sync/internal_api/sync_manager.cc
+++ b/chrome/browser/sync/internal_api/sync_manager.cc
@@ -19,6 +19,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"
@@ -120,6 +121,9 @@ GetUpdatesCallerInfo::GetUpdatesSource GetSourceFromReason(
namespace sync_api {
+const int SyncManager::kDefaultNudgeDelayMilliseconds = 200;
+const int SyncManager::kPreferencesNudgeDelayMilliseconds = 2000;
+
//////////////////////////////////////////////////////////////////////////
// SyncManager's implementation: SyncManager::SyncInternal
class SyncManager::SyncInternal
@@ -130,8 +134,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),
@@ -291,7 +293,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_;
@@ -311,6 +313,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();
@@ -563,8 +567,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,
+
+ // 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() {}
@@ -1621,6 +1698,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) {
@@ -1628,20 +1710,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),
@@ -2072,6 +2144,11 @@ void SyncManager::DoneRefreshNigori(const base::Closure& done_callback,
done_callback.Run();
}
+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);
« no previous file with comments | « chrome/browser/sync/internal_api/sync_manager.h ('k') | chrome/browser/sync/internal_api/syncapi_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698