Index: chrome/browser/sync/engine/syncer_thread.cc |
=================================================================== |
--- chrome/browser/sync/engine/syncer_thread.cc (revision 72686) |
+++ chrome/browser/sync/engine/syncer_thread.cc (working copy) |
@@ -5,9 +5,8 @@ |
#include "chrome/browser/sync/engine/syncer_thread.h" |
#include <algorithm> |
+#include <map> |
#include <queue> |
-#include <string> |
-#include <vector> |
#include "base/rand_util.h" |
#include "base/third_party/dynamic_annotations/dynamic_annotations.h" |
@@ -35,7 +34,6 @@ |
using sessions::SyncSession; |
using sessions::SyncSessionSnapshot; |
using sessions::SyncSourceInfo; |
-using sessions::TypePayloadMap; |
// We use high values here to ensure that failure to receive poll updates from |
// the server doesn't result in rapid-fire polling from the client due to low |
@@ -56,18 +54,6 @@ |
const int SyncerThread::kMaxBackoffSeconds = 60 * 60 * 4; // 4 hours. |
-void SyncerThread::NudgeSyncerWithPayloads( |
- int milliseconds_from_now, |
- NudgeSource source, |
- const TypePayloadMap& model_types_with_payloads) { |
- base::AutoLock lock(lock_); |
- if (vault_.syncer_ == NULL) { |
- return; |
- } |
- |
- NudgeSyncImpl(milliseconds_from_now, source, model_types_with_payloads); |
-} |
- |
void SyncerThread::NudgeSyncerWithDataTypes( |
int milliseconds_from_now, |
NudgeSource source, |
@@ -77,9 +63,7 @@ |
return; |
} |
- TypePayloadMap model_types_with_payloads = |
- sessions::ModelTypeBitSetToTypePayloadMap(model_types, std::string()); |
- NudgeSyncImpl(milliseconds_from_now, source, model_types_with_payloads); |
+ NudgeSyncImpl(milliseconds_from_now, source, model_types); |
} |
void SyncerThread::NudgeSyncer( |
@@ -90,12 +74,8 @@ |
return; |
} |
- // Set all enabled datatypes. |
- ModelSafeRoutingInfo routes; |
- session_context_->registrar()->GetModelSafeRoutingInfo(&routes); |
- TypePayloadMap model_types_with_payloads = |
- sessions::RoutingInfoToTypePayloadMap(routes, std::string()); |
- NudgeSyncImpl(milliseconds_from_now, source, model_types_with_payloads); |
+ syncable::ModelTypeBitSet model_types; // All false by default. |
+ NudgeSyncImpl(milliseconds_from_now, source, model_types); |
} |
SyncerThread::SyncerThread(sessions::SyncSessionContext* context) |
@@ -362,12 +342,11 @@ |
// Update timing information for how often these datatypes are triggering |
// nudges. |
base::TimeTicks now = TimeTicks::Now(); |
- if (!last_sync_time.is_null()) { |
- TypePayloadMap::const_iterator iter; |
- for (iter = session->source().types.begin(); |
- iter != session->source().types.end(); |
- ++iter) { |
- syncable::PostTimeToTypeHistogram(iter->first, |
+ for (size_t i = syncable::FIRST_REAL_MODEL_TYPE; |
+ i < session->source().second.size(); |
+ ++i) { |
+ if (session->source().second[i]) { |
+ syncable::PostTimeToTypeHistogram(syncable::ModelType(i), |
now - last_sync_time); |
} |
} |
@@ -595,7 +574,7 @@ |
bool* was_nudged) { |
bool nudged = false; |
NudgeSource nudge_source = kUnknown; |
- TypePayloadMap model_types_with_payloads; |
+ syncable::ModelTypeBitSet model_types; |
// Has the previous sync cycle completed? |
if (continue_sync_cycle) |
nudge_source = kContinuation; |
@@ -604,13 +583,13 @@ |
if (!vault_.pending_nudge_time_.is_null()) { |
if (!was_throttled) { |
nudge_source = vault_.pending_nudge_source_; |
- model_types_with_payloads = vault_.pending_nudge_types_; |
+ model_types = vault_.pending_nudge_types_; |
nudged = true; |
} |
VLOG(1) << "Clearing pending nudge from " << vault_.pending_nudge_source_ |
<< " at tick " << vault_.pending_nudge_time_.ToInternalValue(); |
vault_.pending_nudge_source_ = kUnknown; |
- vault_.pending_nudge_types_.clear(); |
+ vault_.pending_nudge_types_.reset(); |
vault_.pending_nudge_time_ = base::TimeTicks(); |
} |
@@ -620,12 +599,11 @@ |
// from syncer having more work to do. This will be handled properly with |
// the message loop based syncer thread, bug 26339. |
return MakeSyncSourceInfo(nudged || nudge_source == kContinuation, |
- nudge_source, model_types_with_payloads, initial_sync); |
+ nudge_source, model_types, initial_sync); |
} |
SyncSourceInfo SyncerThread::MakeSyncSourceInfo(bool nudged, |
- NudgeSource nudge_source, |
- const TypePayloadMap& model_types_with_payloads, |
+ NudgeSource nudge_source, const syncable::ModelTypeBitSet& nudge_types, |
bool* initial_sync) { |
sync_pb::GetUpdatesCallerInfo::GetUpdatesSource updates_source = |
sync_pb::GetUpdatesCallerInfo::UNKNOWN; |
@@ -654,19 +632,7 @@ |
break; |
} |
} |
- |
- TypePayloadMap sync_source_types; |
- if (model_types_with_payloads.empty()) { |
- // No datatypes requested. This must be a poll so set all enabled datatypes. |
- ModelSafeRoutingInfo routes; |
- session_context_->registrar()->GetModelSafeRoutingInfo(&routes); |
- sync_source_types = sessions::RoutingInfoToTypePayloadMap(routes, |
- std::string()); |
- } else { |
- sync_source_types = model_types_with_payloads; |
- } |
- |
- return SyncSourceInfo(updates_source, sync_source_types); |
+ return SyncSourceInfo(updates_source, nudge_types); |
} |
void SyncerThread::CreateSyncer(const std::string& dirname) { |
@@ -768,10 +734,9 @@ |
} |
// Called with mutex_ already locked. |
-void SyncerThread::NudgeSyncImpl( |
- int milliseconds_from_now, |
- NudgeSource source, |
- const TypePayloadMap& model_types_with_payloads) { |
+void SyncerThread::NudgeSyncImpl(int milliseconds_from_now, |
+ NudgeSource source, |
+ const syncable::ModelTypeBitSet& model_types) { |
// TODO(sync): Add the option to reset the backoff state machine. |
// This is needed so nudges that are a result of the user's desire |
// to download updates for a new data type can be satisfied quickly. |
@@ -782,12 +747,11 @@ |
return; |
} |
- // Union the current TypePayloadMap with any from nudges that may have already |
+ // Union the current bitset with any from nudges that may have already |
// posted (coalesce the nudge datatype information). |
// TODO(tim): It seems weird to do this if the sources don't match up (e.g. |
// if pending_source is kLocal and |source| is kClearPrivateData). |
- sessions::CoalescePayloads(&vault_.pending_nudge_types_, |
- model_types_with_payloads); |
+ vault_.pending_nudge_types_ |= model_types; |
const TimeTicks nudge_time = TimeTicks::Now() + |
TimeDelta::FromMilliseconds(milliseconds_from_now); |