blob: 171909fb0b3e992a2fec5d04f6bd2ccaeda0fee2 [file] [log] [blame]
// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
//
// Sync protocol for debug info clients can send to the sync server.
syntax = "proto2";
option optimize_for = LITE_RUNTIME;
option retain_unknown_fields = true;
package sync_pb;
import "get_updates_caller_info.proto";
// Per-type hint information.
message TypeHint {
// The data type this hint applied to.
optional int32 data_type_id = 1;
// Whether or not a valid hint is provided.
optional bool has_valid_hint = 2;
}
// Information about the source that triggered a sync.
message SourceInfo {
// An enum indicating the reason for the nudge.
optional GetUpdatesCallerInfo.GetUpdatesSource source = 1;
// The per-type hint information associated with the nudge.
repeated TypeHint type_hint = 2;
}
// The additional info here is from the StatusController. They get sent when
// the event SYNC_CYCLE_COMPLETED is sent.
message SyncCycleCompletedEventInfo {
// optional bool syncer_stuck = 1; // Was always false, now obsolete.
// The client has never set these values correctly. It set
// num_blocking_conflicts to the total number of conflicts detected and set
// num_non_blocking_conflicts to the number of blocking (aka. simple)
// conflicts.
//
// These counters have been deprecated to avoid further confusion. The newer
// counters provide more detail and are less buggy.
optional int32 num_blocking_conflicts = 2 [deprecated = true];
optional int32 num_non_blocking_conflicts = 3 [deprecated = true];
// These new conflict counters replace the ones above.
optional int32 num_encryption_conflicts = 4;
optional int32 num_hierarchy_conflicts = 5;
optional int32 num_simple_conflicts = 6; // No longer sent since M24.
optional int32 num_server_conflicts = 7;
// Counts to track the effective usefulness of our GetUpdate requests.
optional int32 num_updates_downloaded = 8;
optional int32 num_reflected_updates_downloaded = 9;
optional GetUpdatesCallerInfo caller_info = 10;
// A list of all the sources that were merged into this session.
//
// Some scenarios, notably mode switches and canary jobs, can spuriously add
// back-to-back duplicate sources to this list.
repeated SourceInfo source_info = 11;
}
// Datatype specifics statistics gathered at association time.
message DatatypeAssociationStats {
// The datatype that was associated.
optional int32 data_type_id = 1;
// The state of the world before association.
optional int32 num_local_items_before_association = 2;
optional int32 num_sync_items_before_association = 3;
// The state of the world after association.
optional int32 num_local_items_after_association = 4;
optional int32 num_sync_items_after_association = 5;
// The changes that got us from before to after. In a correctly working
// system these should be the deltas between before and after.
optional int32 num_local_items_added = 6;
optional int32 num_local_items_deleted = 7;
optional int32 num_local_items_modified = 8;
optional int32 num_sync_items_added = 9;
optional int32 num_sync_items_deleted = 10;
optional int32 num_sync_items_modified = 11;
// Model versions before association. Ideally local and sync model should
// have same version if models were persisted properly in last session.
// Note: currently version is only set on bookmark model.
optional int64 local_version_pre_association = 20;
optional int64 sync_version_pre_association = 21;
// The data type ran into an error during model association.
optional bool had_error = 12;
// Waiting time before downloading starts. This measures the time between
// receiving configuration request for a set of data types to starting
// downloading data of this type.
optional int64 download_wait_time_us = 15;
// Time spent on downloading sync data for first time sync.
// Note: This measures the time between asking backend to download data to
// being notified of download-ready by backend. So it consists of
// time on data downloading and processing at sync backend. But
// downloading time should dominate. It's also the total time spent on
// downloading data of all types in the priority group of
// |data_type_id| instead of just one data type.
optional int64 download_time_us = 13;
// Waiting time for higher priority types to finish association. This
// measures the time between finishing downloading data to requesting
// association manager to associate this batch of types. High priority types
// have near zero waiting time.
optional int64 association_wait_time_for_high_priority_us = 16;
// Waiting time for other types with same priority during association.
// Data type manger sends types of same priority to association manager to
// configure as a batch. Association manager configures one type at a time.
// This measures the time between when a type is sent to association manager
// (among other types) to when association manager starts configuring the
// type. Total wait time before association is
// |association_wait_time_for_high_priority_us| +
// |association_wait_time_for_same_priority_us|
optional int64 association_wait_time_for_same_priority_us = 14;
// Time spent on model association.
optional int64 association_time_us = 17;
// Higher priority type that's configured before this type.
repeated int32 high_priority_type_configured_before = 18;
// Same priority type that's configured before this type.
repeated int32 same_priority_type_configured_before = 19;
}
message DebugEventInfo {
// Singleton event types. These events have no further information beyond
// the fact that the event happened.
enum SingletonEventType {
CONNECTION_STATUS_CHANGE = 1; // Connection status change. Note this
// gets generated even during a successful
// connection.
UPDATED_TOKEN = 2; // Client received an updated token.
PASSPHRASE_REQUIRED = 3; // Cryptographer needs passphrase.
PASSPHRASE_ACCEPTED = 4; // Passphrase was accepted by cryptographer.
INITIALIZATION_COMPLETE = 5; // Sync Initialization is complete.
// |STOP_SYNCING_PERMANENTLY| event should never be seen by the server in
// the absence of bugs.
STOP_SYNCING_PERMANENTLY = 6; // Server sent stop syncing permanently.
ENCRYPTION_COMPLETE = 7; // Client has finished encrypting all data.
ACTIONABLE_ERROR = 8; // Client received an actionable error.
ENCRYPTED_TYPES_CHANGED = 9; // Set of encrypted types has changed.
// NOTE: until m25 bootstrap token updated also
// shared this field (erroneously).
PASSPHRASE_TYPE_CHANGED = 10; // The encryption passphrase state changed.
KEYSTORE_TOKEN_UPDATED = 11; // A new keystore encryption token was
// persisted.
CONFIGURE_COMPLETE = 12; // The datatype manager has finished an
// at least partially successful
// configuration and is once again syncing
// with the server.
BOOTSTRAP_TOKEN_UPDATED = 13; // A new cryptographer bootstrap token was
// generated.
}
// Each of the following fields correspond to different kinds of events. as
// a result, only one is set during any single DebugEventInfo.
// A singleton event. See enum definition.
optional SingletonEventType singleton_event = 1;
// A sync cycle completed.
optional SyncCycleCompletedEventInfo sync_cycle_completed_event_info = 2;
// A datatype triggered a nudge.
optional int32 nudging_datatype = 3;
// A notification triggered a nudge.
repeated int32 datatypes_notified_from_server = 4;
// A datatype finished model association.
optional DatatypeAssociationStats datatype_association_stats = 5;
}
message DebugInfo {
repeated DebugEventInfo events = 1;
// Whether cryptographer is ready to encrypt and decrypt data.
optional bool cryptographer_ready = 2;
// Cryptographer has pending keys which indicates the correct passphrase
// has not been provided yet.
optional bool cryptographer_has_pending_keys = 3;
// Indicates client has dropped some events to save bandwidth.
optional bool events_dropped = 4;
}