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 3 // found in the LICENSE file. 4 // 5 // Sync protocol for debug info clients can send to the sync server. 6 7 syntax = "proto2"; 8 9 option optimize_for = LITE_RUNTIME; 10 option retain_unknown_fields = true; 11 12 package sync_pb; 13 14 import "get_updates_caller_info.proto"; 15 16 // Per-type hint information. 17 message TypeHint { 18 // The data type this hint applied to. 19 optional int32 data_type_id = 1; 20 21 // Whether or not a valid hint is provided. 22 optional bool has_valid_hint = 2; 23 } 24 25 // Information about the source that triggered a sync. 26 message SourceInfo { 27 // An enum indicating the reason for the nudge. 28 optional GetUpdatesCallerInfo.GetUpdatesSource source = 1; 29 30 // The per-type hint information associated with the nudge. 31 repeated TypeHint type_hint = 2; 32 } 33 34 // The additional info here is from the StatusController. They get sent when 35 // the event SYNC_CYCLE_COMPLETED is sent. 36 message SyncCycleCompletedEventInfo { 37 // optional bool syncer_stuck = 1; // Was always false, now obsolete. 38 39 // The client has never set these values correctly. It set 40 // num_blocking_conflicts to the total number of conflicts detected and set 41 // num_non_blocking_conflicts to the number of blocking (aka. simple) 42 // conflicts. 43 // 44 // These counters have been deprecated to avoid further confusion. The newer 45 // counters provide more detail and are less buggy. 46 optional int32 num_blocking_conflicts = 2 [deprecated = true]; 47 optional int32 num_non_blocking_conflicts = 3 [deprecated = true]; 48 49 // These new conflict counters replace the ones above. 50 optional int32 num_encryption_conflicts = 4; 51 optional int32 num_hierarchy_conflicts = 5; 52 optional int32 num_simple_conflicts = 6; // No longer sent since M24. 53 optional int32 num_server_conflicts = 7; 54 55 // Counts to track the effective usefulness of our GetUpdate requests. 56 optional int32 num_updates_downloaded = 8; 57 optional int32 num_reflected_updates_downloaded = 9; 58 optional GetUpdatesCallerInfo caller_info = 10; 59 60 // A list of all the sources that were merged into this session. 61 // 62 // Some scenarios, notably mode switches and canary jobs, can spuriously add 63 // back-to-back duplicate sources to this list. 64 repeated SourceInfo source_info = 11; 65 } 66 67 // Datatype specifics statistics gathered at association time. 68 message DatatypeAssociationStats { 69 // The datatype that was associated. 70 optional int32 data_type_id = 1; 71 72 // The state of the world before association. 73 optional int32 num_local_items_before_association = 2; 74 optional int32 num_sync_items_before_association = 3; 75 76 // The state of the world after association. 77 optional int32 num_local_items_after_association = 4; 78 optional int32 num_sync_items_after_association = 5; 79 80 // The changes that got us from before to after. In a correctly working 81 // system these should be the deltas between before and after. 82 optional int32 num_local_items_added = 6; 83 optional int32 num_local_items_deleted = 7; 84 optional int32 num_local_items_modified = 8; 85 optional int32 num_sync_items_added = 9; 86 optional int32 num_sync_items_deleted = 10; 87 optional int32 num_sync_items_modified = 11; 88 89 // Model versions before association. Ideally local and sync model should 90 // have same version if models were persisted properly in last session. 91 // Note: currently version is only set on bookmark model. 92 optional int64 local_version_pre_association = 20; 93 optional int64 sync_version_pre_association = 21; 94 95 // The data type ran into an error during model association. 96 optional bool had_error = 12; 97 98 // Waiting time before downloading starts. This measures the time between 99 // receiving configuration request for a set of data types to starting 100 // downloading data of this type. 101 optional int64 download_wait_time_us = 15; 102 103 // Time spent on downloading sync data for first time sync. 104 // Note: This measures the time between asking backend to download data to 105 // being notified of download-ready by backend. So it consists of 106 // time on data downloading and processing at sync backend. But 107 // downloading time should dominate. It's also the total time spent on 108 // downloading data of all types in the priority group of 109 // |data_type_id| instead of just one data type. 110 optional int64 download_time_us = 13; 111 112 // Waiting time for higher priority types to finish association. This 113 // measures the time between finishing downloading data to requesting 114 // association manager to associate this batch of types. High priority types 115 // have near zero waiting time. 116 optional int64 association_wait_time_for_high_priority_us = 16; 117 118 // Waiting time for other types with same priority during association. 119 // Data type manger sends types of same priority to association manager to 120 // configure as a batch. Association manager configures one type at a time. 121 // This measures the time between when a type is sent to association manager 122 // (among other types) to when association manager starts configuring the 123 // type. Total wait time before association is 124 // |association_wait_time_for_high_priority_us| + 125 // |association_wait_time_for_same_priority_us| 126 optional int64 association_wait_time_for_same_priority_us = 14; 127 128 // Time spent on model association. 129 optional int64 association_time_us = 17; 130 131 // Higher priority type that's configured before this type. 132 repeated int32 high_priority_type_configured_before = 18; 133 134 // Same priority type that's configured before this type. 135 repeated int32 same_priority_type_configured_before = 19; 136 } 137 138 message DebugEventInfo { 139 // Singleton event types. These events have no further information beyond 140 // the fact that the event happened. 141 enum SingletonEventType { 142 CONNECTION_STATUS_CHANGE = 1; // Connection status change. Note this 143 // gets generated even during a successful 144 // connection. 145 UPDATED_TOKEN = 2; // Client received an updated token. 146 PASSPHRASE_REQUIRED = 3; // Cryptographer needs passphrase. 147 PASSPHRASE_ACCEPTED = 4; // Passphrase was accepted by cryptographer. 148 INITIALIZATION_COMPLETE = 5; // Sync Initialization is complete. 149 150 // |STOP_SYNCING_PERMANENTLY| event should never be seen by the server in 151 // the absence of bugs. 152 STOP_SYNCING_PERMANENTLY = 6; // Server sent stop syncing permanently. 153 154 ENCRYPTION_COMPLETE = 7; // Client has finished encrypting all data. 155 ACTIONABLE_ERROR = 8; // Client received an actionable error. 156 ENCRYPTED_TYPES_CHANGED = 9; // Set of encrypted types has changed. 157 // NOTE: until m25 bootstrap token updated also 158 // shared this field (erroneously). 159 PASSPHRASE_TYPE_CHANGED = 10; // The encryption passphrase state changed. 160 KEYSTORE_TOKEN_UPDATED = 11; // A new keystore encryption token was 161 // persisted. 162 CONFIGURE_COMPLETE = 12; // The datatype manager has finished an 163 // at least partially successful 164 // configuration and is once again syncing 165 // with the server. 166 BOOTSTRAP_TOKEN_UPDATED = 13; // A new cryptographer bootstrap token was 167 // generated. 168 } 169 170 // Each of the following fields correspond to different kinds of events. as 171 // a result, only one is set during any single DebugEventInfo. 172 // A singleton event. See enum definition. 173 optional SingletonEventType singleton_event = 1; 174 // A sync cycle completed. 175 optional SyncCycleCompletedEventInfo sync_cycle_completed_event_info = 2; 176 // A datatype triggered a nudge. 177 optional int32 nudging_datatype = 3; 178 // A notification triggered a nudge. 179 repeated int32 datatypes_notified_from_server = 4; 180 // A datatype finished model association. 181 optional DatatypeAssociationStats datatype_association_stats = 5; 182 } 183 184 message DebugInfo { 185 repeated DebugEventInfo events = 1; 186 187 // Whether cryptographer is ready to encrypt and decrypt data. 188 optional bool cryptographer_ready = 2; 189 190 // Cryptographer has pending keys which indicates the correct passphrase 191 // has not been provided yet. 192 optional bool cryptographer_has_pending_keys = 3; 193 194 // Indicates client has dropped some events to save bandwidth. 195 optional bool events_dropped = 4; 196 } 197