| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "sync/internal_api/debug_info_event_listener.h" | 5 #include "components/sync/core_impl/debug_info_event_listener.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 | 8 |
| 9 #include "sync/util/cryptographer.h" | 9 #include "components/sync/base/cryptographer.h" |
| 10 | 10 |
| 11 namespace syncer { | 11 namespace syncer { |
| 12 | 12 |
| 13 using sessions::SyncSessionSnapshot; | 13 using sessions::SyncSessionSnapshot; |
| 14 | 14 |
| 15 DebugInfoEventListener::DebugInfoEventListener() | 15 DebugInfoEventListener::DebugInfoEventListener() |
| 16 : events_dropped_(false), | 16 : events_dropped_(false), |
| 17 cryptographer_has_pending_keys_(false), | 17 cryptographer_has_pending_keys_(false), |
| 18 cryptographer_ready_(false), | 18 cryptographer_ready_(false), |
| 19 weak_ptr_factory_(this) { | 19 weak_ptr_factory_(this) {} |
| 20 } | |
| 21 | 20 |
| 22 DebugInfoEventListener::~DebugInfoEventListener() { | 21 DebugInfoEventListener::~DebugInfoEventListener() {} |
| 23 } | |
| 24 | 22 |
| 25 void DebugInfoEventListener::OnSyncCycleCompleted( | 23 void DebugInfoEventListener::OnSyncCycleCompleted( |
| 26 const SyncSessionSnapshot& snapshot) { | 24 const SyncSessionSnapshot& snapshot) { |
| 27 DCHECK(thread_checker_.CalledOnValidThread()); | 25 DCHECK(thread_checker_.CalledOnValidThread()); |
| 28 sync_pb::DebugEventInfo event_info; | 26 sync_pb::DebugEventInfo event_info; |
| 29 sync_pb::SyncCycleCompletedEventInfo* sync_completed_event_info = | 27 sync_pb::SyncCycleCompletedEventInfo* sync_completed_event_info = |
| 30 event_info.mutable_sync_cycle_completed_event_info(); | 28 event_info.mutable_sync_cycle_completed_event_info(); |
| 31 | 29 |
| 32 sync_completed_event_info->set_num_encryption_conflicts( | 30 sync_completed_event_info->set_num_encryption_conflicts( |
| 33 snapshot.num_encryption_conflicts()); | 31 snapshot.num_encryption_conflicts()); |
| (...skipping 10 matching lines...) Expand all Loading... |
| 44 snapshot.legacy_updates_source()); | 42 snapshot.legacy_updates_source()); |
| 45 sync_completed_event_info->mutable_caller_info()->set_notifications_enabled( | 43 sync_completed_event_info->mutable_caller_info()->set_notifications_enabled( |
| 46 snapshot.notifications_enabled()); | 44 snapshot.notifications_enabled()); |
| 47 | 45 |
| 48 AddEventToQueue(event_info); | 46 AddEventToQueue(event_info); |
| 49 } | 47 } |
| 50 | 48 |
| 51 void DebugInfoEventListener::OnInitializationComplete( | 49 void DebugInfoEventListener::OnInitializationComplete( |
| 52 const WeakHandle<JsBackend>& js_backend, | 50 const WeakHandle<JsBackend>& js_backend, |
| 53 const WeakHandle<DataTypeDebugInfoListener>& debug_listener, | 51 const WeakHandle<DataTypeDebugInfoListener>& debug_listener, |
| 54 bool success, ModelTypeSet restored_types) { | 52 bool success, |
| 53 ModelTypeSet restored_types) { |
| 55 DCHECK(thread_checker_.CalledOnValidThread()); | 54 DCHECK(thread_checker_.CalledOnValidThread()); |
| 56 CreateAndAddEvent(sync_pb::SyncEnums::INITIALIZATION_COMPLETE); | 55 CreateAndAddEvent(sync_pb::SyncEnums::INITIALIZATION_COMPLETE); |
| 57 } | 56 } |
| 58 | 57 |
| 59 void DebugInfoEventListener::OnConnectionStatusChange( | 58 void DebugInfoEventListener::OnConnectionStatusChange(ConnectionStatus status) { |
| 60 ConnectionStatus status) { | |
| 61 DCHECK(thread_checker_.CalledOnValidThread()); | 59 DCHECK(thread_checker_.CalledOnValidThread()); |
| 62 CreateAndAddEvent(sync_pb::SyncEnums::CONNECTION_STATUS_CHANGE); | 60 CreateAndAddEvent(sync_pb::SyncEnums::CONNECTION_STATUS_CHANGE); |
| 63 } | 61 } |
| 64 | 62 |
| 65 void DebugInfoEventListener::OnPassphraseRequired( | 63 void DebugInfoEventListener::OnPassphraseRequired( |
| 66 PassphraseRequiredReason reason, | 64 PassphraseRequiredReason reason, |
| 67 const sync_pb::EncryptedData& pending_keys) { | 65 const sync_pb::EncryptedData& pending_keys) { |
| 68 DCHECK(thread_checker_.CalledOnValidThread()); | 66 DCHECK(thread_checker_.CalledOnValidThread()); |
| 69 CreateAndAddEvent(sync_pb::SyncEnums::PASSPHRASE_REQUIRED); | 67 CreateAndAddEvent(sync_pb::SyncEnums::PASSPHRASE_REQUIRED); |
| 70 } | 68 } |
| 71 | 69 |
| 72 void DebugInfoEventListener::OnPassphraseAccepted() { | 70 void DebugInfoEventListener::OnPassphraseAccepted() { |
| 73 DCHECK(thread_checker_.CalledOnValidThread()); | 71 DCHECK(thread_checker_.CalledOnValidThread()); |
| 74 CreateAndAddEvent(sync_pb::SyncEnums::PASSPHRASE_ACCEPTED); | 72 CreateAndAddEvent(sync_pb::SyncEnums::PASSPHRASE_ACCEPTED); |
| 75 } | 73 } |
| 76 | 74 |
| 77 void DebugInfoEventListener::OnBootstrapTokenUpdated( | 75 void DebugInfoEventListener::OnBootstrapTokenUpdated( |
| 78 const std::string& bootstrap_token, BootstrapTokenType type) { | 76 const std::string& bootstrap_token, |
| 77 BootstrapTokenType type) { |
| 79 DCHECK(thread_checker_.CalledOnValidThread()); | 78 DCHECK(thread_checker_.CalledOnValidThread()); |
| 80 if (type == PASSPHRASE_BOOTSTRAP_TOKEN) { | 79 if (type == PASSPHRASE_BOOTSTRAP_TOKEN) { |
| 81 CreateAndAddEvent(sync_pb::SyncEnums::BOOTSTRAP_TOKEN_UPDATED); | 80 CreateAndAddEvent(sync_pb::SyncEnums::BOOTSTRAP_TOKEN_UPDATED); |
| 82 return; | 81 return; |
| 83 } | 82 } |
| 84 DCHECK_EQ(type, KEYSTORE_BOOTSTRAP_TOKEN); | 83 DCHECK_EQ(type, KEYSTORE_BOOTSTRAP_TOKEN); |
| 85 CreateAndAddEvent(sync_pb::SyncEnums::KEYSTORE_TOKEN_UPDATED); | 84 CreateAndAddEvent(sync_pb::SyncEnums::KEYSTORE_TOKEN_UPDATED); |
| 86 } | 85 } |
| 87 | 86 |
| 88 void DebugInfoEventListener::OnEncryptedTypesChanged( | 87 void DebugInfoEventListener::OnEncryptedTypesChanged( |
| (...skipping 16 matching lines...) Expand all Loading... |
| 105 } | 104 } |
| 106 | 105 |
| 107 void DebugInfoEventListener::OnPassphraseTypeChanged( | 106 void DebugInfoEventListener::OnPassphraseTypeChanged( |
| 108 PassphraseType type, | 107 PassphraseType type, |
| 109 base::Time explicit_passphrase_time) { | 108 base::Time explicit_passphrase_time) { |
| 110 DCHECK(thread_checker_.CalledOnValidThread()); | 109 DCHECK(thread_checker_.CalledOnValidThread()); |
| 111 CreateAndAddEvent(sync_pb::SyncEnums::PASSPHRASE_TYPE_CHANGED); | 110 CreateAndAddEvent(sync_pb::SyncEnums::PASSPHRASE_TYPE_CHANGED); |
| 112 } | 111 } |
| 113 | 112 |
| 114 void DebugInfoEventListener::OnLocalSetPassphraseEncryption( | 113 void DebugInfoEventListener::OnLocalSetPassphraseEncryption( |
| 115 const SyncEncryptionHandler::NigoriState& nigori_state) { | 114 const SyncEncryptionHandler::NigoriState& nigori_state) {} |
| 116 } | |
| 117 | 115 |
| 118 void DebugInfoEventListener::OnActionableError( | 116 void DebugInfoEventListener::OnActionableError( |
| 119 const SyncProtocolError& sync_error) { | 117 const SyncProtocolError& sync_error) { |
| 120 DCHECK(thread_checker_.CalledOnValidThread()); | 118 DCHECK(thread_checker_.CalledOnValidThread()); |
| 121 CreateAndAddEvent(sync_pb::SyncEnums::ACTIONABLE_ERROR); | 119 CreateAndAddEvent(sync_pb::SyncEnums::ACTIONABLE_ERROR); |
| 122 } | 120 } |
| 123 | 121 |
| 124 void DebugInfoEventListener::OnMigrationRequested(ModelTypeSet types) {} | 122 void DebugInfoEventListener::OnMigrationRequested(ModelTypeSet types) {} |
| 125 | 123 |
| 126 void DebugInfoEventListener::OnProtocolEvent(const ProtocolEvent& event) {} | 124 void DebugInfoEventListener::OnProtocolEvent(const ProtocolEvent& event) {} |
| 127 | 125 |
| 128 void DebugInfoEventListener::OnNudgeFromDatatype(ModelType datatype) { | 126 void DebugInfoEventListener::OnNudgeFromDatatype(ModelType datatype) { |
| 129 DCHECK(thread_checker_.CalledOnValidThread()); | 127 DCHECK(thread_checker_.CalledOnValidThread()); |
| 130 sync_pb::DebugEventInfo event_info; | 128 sync_pb::DebugEventInfo event_info; |
| 131 event_info.set_nudging_datatype( | 129 event_info.set_nudging_datatype( |
| 132 GetSpecificsFieldNumberFromModelType(datatype)); | 130 GetSpecificsFieldNumberFromModelType(datatype)); |
| 133 AddEventToQueue(event_info); | 131 AddEventToQueue(event_info); |
| 134 } | 132 } |
| 135 | 133 |
| 136 void DebugInfoEventListener::GetDebugInfo(sync_pb::DebugInfo* debug_info) { | 134 void DebugInfoEventListener::GetDebugInfo(sync_pb::DebugInfo* debug_info) { |
| 137 DCHECK(thread_checker_.CalledOnValidThread()); | 135 DCHECK(thread_checker_.CalledOnValidThread()); |
| 138 DCHECK_LE(events_.size(), kMaxEntries); | 136 DCHECK_LE(events_.size(), kMaxEntries); |
| 139 | 137 |
| 140 for (DebugEventInfoQueue::const_iterator iter = events_.begin(); | 138 for (DebugEventInfoQueue::const_iterator iter = events_.begin(); |
| 141 iter != events_.end(); | 139 iter != events_.end(); ++iter) { |
| 142 ++iter) { | |
| 143 sync_pb::DebugEventInfo* event_info = debug_info->add_events(); | 140 sync_pb::DebugEventInfo* event_info = debug_info->add_events(); |
| 144 event_info->CopyFrom(*iter); | 141 event_info->CopyFrom(*iter); |
| 145 } | 142 } |
| 146 | 143 |
| 147 debug_info->set_events_dropped(events_dropped_); | 144 debug_info->set_events_dropped(events_dropped_); |
| 148 debug_info->set_cryptographer_ready(cryptographer_ready_); | 145 debug_info->set_cryptographer_ready(cryptographer_ready_); |
| 149 debug_info->set_cryptographer_has_pending_keys( | 146 debug_info->set_cryptographer_has_pending_keys( |
| 150 cryptographer_has_pending_keys_); | 147 cryptographer_has_pending_keys_); |
| 151 } | 148 } |
| 152 | 149 |
| (...skipping 15 matching lines...) Expand all Loading... |
| 168 DCHECK(thread_checker_.CalledOnValidThread()); | 165 DCHECK(thread_checker_.CalledOnValidThread()); |
| 169 | 166 |
| 170 for (size_t i = 0; i < configuration_stats.size(); ++i) { | 167 for (size_t i = 0; i < configuration_stats.size(); ++i) { |
| 171 DCHECK(ProtocolTypes().Has(configuration_stats[i].model_type)); | 168 DCHECK(ProtocolTypes().Has(configuration_stats[i].model_type)); |
| 172 const DataTypeAssociationStats& association_stats = | 169 const DataTypeAssociationStats& association_stats = |
| 173 configuration_stats[i].association_stats; | 170 configuration_stats[i].association_stats; |
| 174 | 171 |
| 175 sync_pb::DebugEventInfo association_event; | 172 sync_pb::DebugEventInfo association_event; |
| 176 sync_pb::DatatypeAssociationStats* datatype_stats = | 173 sync_pb::DatatypeAssociationStats* datatype_stats = |
| 177 association_event.mutable_datatype_association_stats(); | 174 association_event.mutable_datatype_association_stats(); |
| 178 datatype_stats->set_data_type_id( | 175 datatype_stats->set_data_type_id(GetSpecificsFieldNumberFromModelType( |
| 179 GetSpecificsFieldNumberFromModelType( | 176 configuration_stats[i].model_type)); |
| 180 configuration_stats[i].model_type)); | |
| 181 datatype_stats->set_num_local_items_before_association( | 177 datatype_stats->set_num_local_items_before_association( |
| 182 association_stats.num_local_items_before_association); | 178 association_stats.num_local_items_before_association); |
| 183 datatype_stats->set_num_sync_items_before_association( | 179 datatype_stats->set_num_sync_items_before_association( |
| 184 association_stats.num_sync_items_before_association); | 180 association_stats.num_sync_items_before_association); |
| 185 datatype_stats->set_num_local_items_after_association( | 181 datatype_stats->set_num_local_items_after_association( |
| 186 association_stats.num_local_items_after_association); | 182 association_stats.num_local_items_after_association); |
| 187 datatype_stats->set_num_sync_items_after_association( | 183 datatype_stats->set_num_sync_items_after_association( |
| 188 association_stats.num_sync_items_after_association); | 184 association_stats.num_sync_items_after_association); |
| 189 datatype_stats->set_num_local_items_added( | 185 datatype_stats->set_num_local_items_added( |
| 190 association_stats.num_local_items_added); | 186 association_stats.num_local_items_added); |
| 191 datatype_stats->set_num_local_items_deleted( | 187 datatype_stats->set_num_local_items_deleted( |
| 192 association_stats.num_local_items_deleted); | 188 association_stats.num_local_items_deleted); |
| 193 datatype_stats->set_num_local_items_modified( | 189 datatype_stats->set_num_local_items_modified( |
| 194 association_stats.num_local_items_modified); | 190 association_stats.num_local_items_modified); |
| 195 datatype_stats->set_num_sync_items_added( | 191 datatype_stats->set_num_sync_items_added( |
| 196 association_stats.num_sync_items_added); | 192 association_stats.num_sync_items_added); |
| 197 datatype_stats->set_num_sync_items_deleted( | 193 datatype_stats->set_num_sync_items_deleted( |
| 198 association_stats.num_sync_items_deleted); | 194 association_stats.num_sync_items_deleted); |
| 199 datatype_stats->set_num_sync_items_modified( | 195 datatype_stats->set_num_sync_items_modified( |
| 200 association_stats.num_sync_items_modified); | 196 association_stats.num_sync_items_modified); |
| 201 datatype_stats->set_local_version_pre_association( | 197 datatype_stats->set_local_version_pre_association( |
| 202 association_stats.local_version_pre_association); | 198 association_stats.local_version_pre_association); |
| 203 datatype_stats->set_sync_version_pre_association( | 199 datatype_stats->set_sync_version_pre_association( |
| 204 association_stats.sync_version_pre_association); | 200 association_stats.sync_version_pre_association); |
| 205 datatype_stats->set_had_error(association_stats.had_error); | 201 datatype_stats->set_had_error(association_stats.had_error); |
| 206 datatype_stats->set_association_wait_time_for_same_priority_us( | 202 datatype_stats->set_association_wait_time_for_same_priority_us( |
| 207 association_stats.association_wait_time.InMicroseconds()); | 203 association_stats.association_wait_time.InMicroseconds()); |
| 208 datatype_stats->set_association_time_us( | 204 datatype_stats->set_association_time_us( |
| 209 association_stats.association_time.InMicroseconds()); | 205 association_stats.association_time.InMicroseconds()); |
| 210 datatype_stats->set_download_wait_time_us( | 206 datatype_stats->set_download_wait_time_us( |
| 211 configuration_stats[i].download_wait_time.InMicroseconds()); | 207 configuration_stats[i].download_wait_time.InMicroseconds()); |
| 212 datatype_stats->set_download_time_us( | 208 datatype_stats->set_download_time_us( |
| 213 configuration_stats[i].download_time.InMicroseconds()); | 209 configuration_stats[i].download_time.InMicroseconds()); |
| 214 datatype_stats->set_association_wait_time_for_high_priority_us( | 210 datatype_stats->set_association_wait_time_for_high_priority_us( |
| 215 configuration_stats[i].association_wait_time_for_high_priority | 211 configuration_stats[i] |
| 216 .InMicroseconds()); | 212 .association_wait_time_for_high_priority.InMicroseconds()); |
| 217 | 213 |
| 218 for (ModelTypeSet::Iterator it = | 214 for (ModelTypeSet::Iterator it = |
| 219 configuration_stats[i].high_priority_types_configured_before | 215 configuration_stats[i] |
| 220 .First(); | 216 .high_priority_types_configured_before.First(); |
| 221 it.Good(); it.Inc()) { | 217 it.Good(); it.Inc()) { |
| 222 datatype_stats->add_high_priority_type_configured_before( | 218 datatype_stats->add_high_priority_type_configured_before( |
| 223 GetSpecificsFieldNumberFromModelType(it.Get())); | 219 GetSpecificsFieldNumberFromModelType(it.Get())); |
| 224 } | 220 } |
| 225 | 221 |
| 226 for (ModelTypeSet::Iterator it = | 222 for (ModelTypeSet::Iterator it = |
| 227 configuration_stats[i].same_priority_types_configured_before | 223 configuration_stats[i] |
| 228 .First(); | 224 .same_priority_types_configured_before.First(); |
| 229 it.Good(); it.Inc()) { | 225 it.Good(); it.Inc()) { |
| 230 datatype_stats->add_same_priority_type_configured_before( | 226 datatype_stats->add_same_priority_type_configured_before( |
| 231 GetSpecificsFieldNumberFromModelType(it.Get())); | 227 GetSpecificsFieldNumberFromModelType(it.Get())); |
| 232 } | 228 } |
| 233 | 229 |
| 234 AddEventToQueue(association_event); | 230 AddEventToQueue(association_event); |
| 235 } | 231 } |
| 236 } | 232 } |
| 237 | 233 |
| 238 void DebugInfoEventListener::CreateAndAddEvent( | 234 void DebugInfoEventListener::CreateAndAddEvent( |
| 239 sync_pb::SyncEnums::SingletonDebugEventType type) { | 235 sync_pb::SyncEnums::SingletonDebugEventType type) { |
| 240 DCHECK(thread_checker_.CalledOnValidThread()); | 236 DCHECK(thread_checker_.CalledOnValidThread()); |
| 241 sync_pb::DebugEventInfo event_info; | 237 sync_pb::DebugEventInfo event_info; |
| 242 event_info.set_singleton_event(type); | 238 event_info.set_singleton_event(type); |
| 243 AddEventToQueue(event_info); | 239 AddEventToQueue(event_info); |
| 244 } | 240 } |
| 245 | 241 |
| 246 void DebugInfoEventListener::AddEventToQueue( | 242 void DebugInfoEventListener::AddEventToQueue( |
| 247 const sync_pb::DebugEventInfo& event_info) { | 243 const sync_pb::DebugEventInfo& event_info) { |
| 248 DCHECK(thread_checker_.CalledOnValidThread()); | 244 DCHECK(thread_checker_.CalledOnValidThread()); |
| 249 if (events_.size() >= kMaxEntries) { | 245 if (events_.size() >= kMaxEntries) { |
| 250 DVLOG(1) << "DebugInfoEventListener::AddEventToQueue Dropping an old event " | 246 DVLOG(1) << "DebugInfoEventListener::AddEventToQueue Dropping an old event " |
| 251 << "because of full queue"; | 247 << "because of full queue"; |
| 252 | 248 |
| 253 events_.pop_front(); | 249 events_.pop_front(); |
| 254 events_dropped_ = true; | 250 events_dropped_ = true; |
| 255 } | 251 } |
| 256 events_.push_back(event_info); | 252 events_.push_back(event_info); |
| 257 } | 253 } |
| 258 | 254 |
| 259 } // namespace syncer | 255 } // namespace syncer |
| OLD | NEW |