| Index: sync/engine/directory_update_handler.cc
|
| diff --git a/sync/engine/directory_update_handler.cc b/sync/engine/directory_update_handler.cc
|
| index 8f0da59c9ec1fafbdfade529b0988192cbcd3942..a2f0ebf964626819654f51b7592de66d149c9028 100644
|
| --- a/sync/engine/directory_update_handler.cc
|
| +++ b/sync/engine/directory_update_handler.cc
|
| @@ -60,6 +60,7 @@ SyncerError DirectoryUpdateHandler::ProcessGetUpdatesResponse(
|
| // A GetUpdates using the old context was in progress when the context was
|
| // set. Fail this get updates cycle, to force a retry.
|
| DVLOG(1) << "GU Context conflict detected, forcing GU retry.";
|
| + debug_info_emitter_->EmitUpdateCountersUpdate();
|
| return DATATYPE_TRIGGERED_RETRY;
|
| }
|
| }
|
| @@ -70,6 +71,7 @@ SyncerError DirectoryUpdateHandler::ProcessGetUpdatesResponse(
|
| ExpireEntriesIfNeeded(&trans, progress_marker);
|
| UpdateProgressMarker(progress_marker);
|
| }
|
| + debug_info_emitter_->EmitUpdateCountersUpdate();
|
| return SYNCER_OK;
|
| }
|
|
|
| @@ -86,6 +88,8 @@ void DirectoryUpdateHandler::ApplyUpdates(sessions::StatusController* status) {
|
| base::Unretained(this),
|
| base::Unretained(status));
|
| worker_->DoWorkAndWaitUntilDone(c);
|
| +
|
| + debug_info_emitter_->EmitUpdateCountersUpdate();
|
| }
|
|
|
| void DirectoryUpdateHandler::PassiveApplyUpdates(
|
| @@ -96,6 +100,8 @@ void DirectoryUpdateHandler::PassiveApplyUpdates(
|
|
|
| // Just do the work here instead of deferring to another thread.
|
| ApplyUpdatesImpl(status);
|
| +
|
| + debug_info_emitter_->EmitUpdateCountersUpdate();
|
| }
|
|
|
| SyncerError DirectoryUpdateHandler::ApplyUpdatesImpl(
|
| @@ -111,19 +117,30 @@ SyncerError DirectoryUpdateHandler::ApplyUpdatesImpl(
|
| // First set of update application passes.
|
| UpdateApplicator applicator(dir_->GetCryptographer(&trans));
|
| applicator.AttemptApplications(&trans, handles);
|
| +
|
| + // The old StatusController counters.
|
| status->increment_num_updates_applied_by(applicator.updates_applied());
|
| status->increment_num_hierarchy_conflicts_by(
|
| applicator.hierarchy_conflicts());
|
| status->increment_num_encryption_conflicts_by(
|
| applicator.encryption_conflicts());
|
|
|
| + // The new UpdateCounter counters.
|
| + UpdateCounters* counters = debug_info_emitter_->GetMutableUpdateCounters();
|
| + counters->num_updates_applied += applicator.updates_applied();
|
| + counters->num_hierarchy_conflict_application_failures =
|
| + applicator.hierarchy_conflicts();
|
| + counters->num_encryption_conflict_application_failures +=
|
| + applicator.encryption_conflicts();
|
| +
|
| if (applicator.simple_conflict_ids().size() != 0) {
|
| // Resolve the simple conflicts we just detected.
|
| ConflictResolver resolver;
|
| resolver.ResolveConflicts(&trans,
|
| dir_->GetCryptographer(&trans),
|
| applicator.simple_conflict_ids(),
|
| - status);
|
| + status,
|
| + counters);
|
|
|
| // Conflict resolution sometimes results in more updates to apply.
|
| handles.clear();
|
| @@ -138,6 +155,7 @@ SyncerError DirectoryUpdateHandler::ApplyUpdatesImpl(
|
| // We count the number of updates from both applicator passes.
|
| status->increment_num_updates_applied_by(
|
| conflict_applicator.updates_applied());
|
| + counters->num_updates_applied += conflict_applicator.updates_applied();
|
|
|
| // Encryption conflicts should remain unchanged by the resolution of simple
|
| // conflicts. Those can only be solved by updating our nigori key bag.
|
| @@ -177,7 +195,10 @@ void DirectoryUpdateHandler::UpdateSyncEntities(
|
| syncable::ModelNeutralWriteTransaction* trans,
|
| const SyncEntityList& applicable_updates,
|
| sessions::StatusController* status) {
|
| - ProcessDownloadedUpdates(dir_, trans, type_, applicable_updates, status);
|
| + UpdateCounters* counters = debug_info_emitter_->GetMutableUpdateCounters();
|
| + counters->num_updates_received += applicable_updates.size();
|
| + ProcessDownloadedUpdates(dir_, trans, type_,
|
| + applicable_updates, status, counters);
|
| }
|
|
|
| bool DirectoryUpdateHandler::IsValidProgressMarker(
|
|
|