15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "sync/internal_api/debug_info_event_listener.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "sync/notifier/object_id_invalidation_map.h" 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "sync/util/cryptographer.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace syncer { 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using sessions::SyncSessionSnapshot; 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DebugInfoEventListener::DebugInfoEventListener() 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : events_dropped_(false), 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cryptographer_has_pending_keys_(false), 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cryptographer_ready_(false), 18c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) weak_ptr_factory_(this) { 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DebugInfoEventListener::~DebugInfoEventListener() { 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void DebugInfoEventListener::OnSyncCycleCompleted( 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const SyncSessionSnapshot& snapshot) { 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(thread_checker_.CalledOnValidThread()); 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sync_pb::DebugEventInfo event_info; 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sync_pb::SyncCycleCompletedEventInfo* sync_completed_event_info = 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) event_info.mutable_sync_cycle_completed_event_info(); 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sync_completed_event_info->set_num_encryption_conflicts( 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) snapshot.num_encryption_conflicts()); 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sync_completed_event_info->set_num_hierarchy_conflicts( 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) snapshot.num_hierarchy_conflicts()); 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sync_completed_event_info->set_num_server_conflicts( 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) snapshot.num_server_conflicts()); 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sync_completed_event_info->set_num_updates_downloaded( 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) snapshot.model_neutral_state().num_updates_downloaded_total); 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sync_completed_event_info->set_num_reflected_updates_downloaded( 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) snapshot.model_neutral_state().num_reflected_updates_downloaded_total); 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sync_completed_event_info->mutable_caller_info()->set_source( 43a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) snapshot.legacy_updates_source()); 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sync_completed_event_info->mutable_caller_info()->set_notifications_enabled( 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) snapshot.notifications_enabled()); 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddEventToQueue(event_info); 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void DebugInfoEventListener::OnInitializationComplete( 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const WeakHandle<JsBackend>& js_backend, 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const WeakHandle<DataTypeDebugInfoListener>& debug_listener, 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool success, ModelTypeSet restored_types) { 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(thread_checker_.CalledOnValidThread()); 5523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) CreateAndAddEvent(sync_pb::SyncEnums::INITIALIZATION_COMPLETE); 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void DebugInfoEventListener::OnConnectionStatusChange( 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ConnectionStatus status) { 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(thread_checker_.CalledOnValidThread()); 6123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) CreateAndAddEvent(sync_pb::SyncEnums::CONNECTION_STATUS_CHANGE); 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void DebugInfoEventListener::OnPassphraseRequired( 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PassphraseRequiredReason reason, 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const sync_pb::EncryptedData& pending_keys) { 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(thread_checker_.CalledOnValidThread()); 6823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) CreateAndAddEvent(sync_pb::SyncEnums::PASSPHRASE_REQUIRED); 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void DebugInfoEventListener::OnPassphraseAccepted() { 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(thread_checker_.CalledOnValidThread()); 7323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) CreateAndAddEvent(sync_pb::SyncEnums::PASSPHRASE_ACCEPTED); 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void DebugInfoEventListener::OnBootstrapTokenUpdated( 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& bootstrap_token, BootstrapTokenType type) { 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(thread_checker_.CalledOnValidThread()); 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (type == PASSPHRASE_BOOTSTRAP_TOKEN) { 8023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) CreateAndAddEvent(sync_pb::SyncEnums::BOOTSTRAP_TOKEN_UPDATED); 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK_EQ(type, KEYSTORE_BOOTSTRAP_TOKEN); 8423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) CreateAndAddEvent(sync_pb::SyncEnums::KEYSTORE_TOKEN_UPDATED); 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void DebugInfoEventListener::OnEncryptedTypesChanged( 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ModelTypeSet encrypted_types, 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool encrypt_everything) { 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(thread_checker_.CalledOnValidThread()); 9123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) CreateAndAddEvent(sync_pb::SyncEnums::ENCRYPTED_TYPES_CHANGED); 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void DebugInfoEventListener::OnEncryptionComplete() { 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(thread_checker_.CalledOnValidThread()); 9623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) CreateAndAddEvent(sync_pb::SyncEnums::ENCRYPTION_COMPLETE); 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void DebugInfoEventListener::OnCryptographerStateChanged( 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Cryptographer* cryptographer) { 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(thread_checker_.CalledOnValidThread()); 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cryptographer_has_pending_keys_ = cryptographer->has_pending_keys(); 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cryptographer_ready_ = cryptographer->is_ready(); 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void DebugInfoEventListener::OnPassphraseTypeChanged( 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PassphraseType type, 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Time explicit_passphrase_time) { 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(thread_checker_.CalledOnValidThread()); 11023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) CreateAndAddEvent(sync_pb::SyncEnums::PASSPHRASE_TYPE_CHANGED); 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void DebugInfoEventListener::OnActionableError( 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const SyncProtocolError& sync_error) { 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(thread_checker_.CalledOnValidThread()); 11623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) CreateAndAddEvent(sync_pb::SyncEnums::ACTIONABLE_ERROR); 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void DebugInfoEventListener::OnMigrationRequested(ModelTypeSet types) {} 1205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 121effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochvoid DebugInfoEventListener::OnProtocolEvent(const ProtocolEvent& event) {} 122effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void DebugInfoEventListener::OnNudgeFromDatatype(ModelType datatype) { 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(thread_checker_.CalledOnValidThread()); 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sync_pb::DebugEventInfo event_info; 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) event_info.set_nudging_datatype( 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetSpecificsFieldNumberFromModelType(datatype)); 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddEventToQueue(event_info); 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void DebugInfoEventListener::OnIncomingNotification( 1324e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const ObjectIdInvalidationMap& invalidation_map) { 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(thread_checker_.CalledOnValidThread()); 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sync_pb::DebugEventInfo event_info; 1354e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ModelTypeSet types = 1364e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ObjectIdSetToModelTypeSet(invalidation_map.GetObjectIds()); 1374e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 1384e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) for (ModelTypeSet::Iterator it = types.First(); it.Good(); it.Inc()) { 1394e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) event_info.add_datatypes_notified_from_server( 1404e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) GetSpecificsFieldNumberFromModelType(it.Get())); 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddEventToQueue(event_info); 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 146f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void DebugInfoEventListener::GetDebugInfo(sync_pb::DebugInfo* debug_info) { 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(thread_checker_.CalledOnValidThread()); 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK_LE(events_.size(), kMaxEntries); 149f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 150f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) for (DebugEventInfoQueue::const_iterator iter = events_.begin(); 151f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) iter != events_.end(); 152f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ++iter) { 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sync_pb::DebugEventInfo* event_info = debug_info->add_events(); 154f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) event_info->CopyFrom(*iter); 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) debug_info->set_events_dropped(events_dropped_); 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) debug_info->set_cryptographer_ready(cryptographer_ready_); 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) debug_info->set_cryptographer_has_pending_keys( 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cryptographer_has_pending_keys_); 161f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 162f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 163f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void DebugInfoEventListener::ClearDebugInfo() { 164f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) DCHECK(thread_checker_.CalledOnValidThread()); 165f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) DCHECK_LE(events_.size(), kMaxEntries); 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 167f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) events_.clear(); 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) events_dropped_ = false; 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)base::WeakPtr<DataTypeDebugInfoListener> DebugInfoEventListener::GetWeakPtr() { 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(thread_checker_.CalledOnValidThread()); 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return weak_ptr_factory_.GetWeakPtr(); 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)void DebugInfoEventListener::OnDataTypeConfigureComplete( 17768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) const std::vector<DataTypeConfigurationStats>& configuration_stats) { 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(thread_checker_.CalledOnValidThread()); 179868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 18068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) for (size_t i = 0; i < configuration_stats.size(); ++i) { 18168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) DCHECK(ProtocolTypes().Has(configuration_stats[i].model_type)); 18268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) const DataTypeAssociationStats& association_stats = 18368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) configuration_stats[i].association_stats; 18468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 18568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) sync_pb::DebugEventInfo association_event; 18668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) sync_pb::DatatypeAssociationStats* datatype_stats = 18768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) association_event.mutable_datatype_association_stats(); 18868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) datatype_stats->set_data_type_id( 18968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) GetSpecificsFieldNumberFromModelType( 19068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) configuration_stats[i].model_type)); 19168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) datatype_stats->set_num_local_items_before_association( 19268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) association_stats.num_local_items_before_association); 19368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) datatype_stats->set_num_sync_items_before_association( 19468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) association_stats.num_sync_items_before_association); 19568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) datatype_stats->set_num_local_items_after_association( 19668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) association_stats.num_local_items_after_association); 19768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) datatype_stats->set_num_sync_items_after_association( 19868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) association_stats.num_sync_items_after_association); 19968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) datatype_stats->set_num_local_items_added( 20068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) association_stats.num_local_items_added); 20168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) datatype_stats->set_num_local_items_deleted( 20268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) association_stats.num_local_items_deleted); 20368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) datatype_stats->set_num_local_items_modified( 20468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) association_stats.num_local_items_modified); 20568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) datatype_stats->set_num_sync_items_added( 20668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) association_stats.num_sync_items_added); 20768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) datatype_stats->set_num_sync_items_deleted( 20868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) association_stats.num_sync_items_deleted); 20968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) datatype_stats->set_num_sync_items_modified( 21068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) association_stats.num_sync_items_modified); 21168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) datatype_stats->set_local_version_pre_association( 21268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) association_stats.local_version_pre_association); 21368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) datatype_stats->set_sync_version_pre_association( 21468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) association_stats.sync_version_pre_association); 21568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) datatype_stats->set_had_error(association_stats.had_error); 21668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) datatype_stats->set_association_wait_time_for_same_priority_us( 21768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) association_stats.association_wait_time.InMicroseconds()); 21868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) datatype_stats->set_association_time_us( 21968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) association_stats.association_time.InMicroseconds()); 22068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) datatype_stats->set_download_wait_time_us( 22168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) configuration_stats[i].download_wait_time.InMicroseconds()); 22268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) datatype_stats->set_download_time_us( 22368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) configuration_stats[i].download_time.InMicroseconds()); 22468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) datatype_stats->set_association_wait_time_for_high_priority_us( 22568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) configuration_stats[i].association_wait_time_for_high_priority 22668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) .InMicroseconds()); 22768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 22868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) for (ModelTypeSet::Iterator it = 22968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) configuration_stats[i].high_priority_types_configured_before 23068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) .First(); 23168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) it.Good(); it.Inc()) { 23268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) datatype_stats->add_high_priority_type_configured_before( 23368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) GetSpecificsFieldNumberFromModelType(it.Get())); 23468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) } 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 23668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) for (ModelTypeSet::Iterator it = 23768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) configuration_stats[i].same_priority_types_configured_before 23868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) .First(); 23968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) it.Good(); it.Inc()) { 24068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) datatype_stats->add_same_priority_type_configured_before( 24168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) GetSpecificsFieldNumberFromModelType(it.Get())); 24268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) } 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 24468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) AddEventToQueue(association_event); 24568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) } 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void DebugInfoEventListener::CreateAndAddEvent( 24923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) sync_pb::SyncEnums::SingletonDebugEventType type) { 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(thread_checker_.CalledOnValidThread()); 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sync_pb::DebugEventInfo event_info; 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) event_info.set_singleton_event(type); 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddEventToQueue(event_info); 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void DebugInfoEventListener::AddEventToQueue( 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const sync_pb::DebugEventInfo& event_info) { 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(thread_checker_.CalledOnValidThread()); 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (events_.size() >= kMaxEntries) { 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DVLOG(1) << "DebugInfoEventListener::AddEventToQueue Dropping an old event " 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) << "because of full queue"; 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 263f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) events_.pop_front(); 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) events_dropped_ = true; 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 266f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) events_.push_back(event_info); 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace syncer 270