// THIS IS A GENERATED FILE. DO NOT EDIT DIRECTLY.
// Generated by //wireless/android/play/playlog/tools:strip_proto_file
// from wireless/android/play/playlog/proto/clientanalytics.proto
// Regenerate by running
//   blaze build //wireless/android/play/playlog/proto:clientanalytics_stripped

// Protos defining the communication protocol between Clearcut client libraries
//  and the Clearcut server.
//
//  LogRequest is what a client library sends to the server.
//  LogResponse is what the server sends back.
//
//  The LogRequest.LogSource enum defines the list of datatypes understood by
//  Clearcut.
//
//  Play Odyssey shares some of these protos.

syntax = "proto2";

package wireless_android_play_playlog;

option java_package = "com.google.wireless.android.play.playlog.proto";
option java_outer_classname = "ClientAnalytics";

// Semi-arbitrary key-value pairs describing the event. Common entries
//  will be extracted into strongly typed fields in the GWS log records.
message LogEventKeyValues {
  optional string key = 1;
  optional string value = 2;
}

// The set of currently active experiments for a given LogEvent.
//
//  Next tag: 6
message ActiveExperiments {
  // The list of IDs of client-behavior-altering experiments that are on.
  repeated string client_altering_experiment = 1;
  // The list of IDs of other experiments that are on. The client must not
  //  change its behavior in response to these experiments.
  repeated string other_experiment = 2;
  // The list of GWS experiments that are on. These are not targeted by Playlog.
  repeated int32 gws_experiment = 3;
  // The list of Play experiments that are enabled for this LogEvent.
  //  Includes both client-side and server-side experiments.
  repeated int64 play_experiment = 4;
  // The list of Play experiments that were sent to the client for this LogEvent
  //  but is not recognized by the client. May include server-side experiments
  //  that were active, so correct this list in the logging service.
  repeated int64 unsupported_play_experiment = 5;
}

// Next tag: 25
message LogEvent {
  enum InternalEvent {
    NONE = 0;
    WALL_CLOCK_SET = 1;
    DEVICE_BOOT = 2;
  }
  // Epoch time in milliseconds, according to the wall clock.
  //  See http://go/clearcut-timestamps for details on how this value is used.
  //  This field is required for Odyssey. Otherwise, events will be silently
  //  dropped.
  optional int64 event_time_ms = 1;
  // Time in milliseconds since the device was booted.  (On Android this
  //  is the result of SystemClock.elapsedRealtime(), not
  //  SystemClock.uptimeMillis() which does not increment when the device is in
  //  deep sleep.)
  //
  //  See http://go/clearcut-timestamps for details on how this value is used for
  //  timestamp corrections.  It is also copied to
  //  PlayExtension.client_elapsed_realtime_millis if the routing option
  //  "include_client_elapsed_realtime_millis" is set to true.
  optional int64 event_uptime_ms = 17;
  // Client generated sequence position for this event - defines a total order
  //  for events from a given device. If event A's sequence position is less than
  //  event B's sequence position, then event A happened before event B.
  optional int64 sequence_position = 21;
  // Type of event, could be "CLICK" or "PAGE_VIEW" or "DOWNLOAD_STATUS".
  //  There will be a common repository of cross-vertical events that should be
  //  used, but any individual app would be free to define their own tags.
  //
  //  STRONGLY DISCOURAGED: use event_code instead.
  optional string tag = 2;
  // Type of event. Different kinds of events inside a client app should have
  //  different values of 'event_code'. Different client apps may have
  //  overlapping sets of 'event_code' values; these values are only meant to
  //  make sense within the context of a single client app, as identified by
  //  the 'log_source' field of LogRequest.
  //
  //  A typical way to use 'event_code' is to define the enum of possible values
  //  inside of the custom logging extension proto.
  //  TODO(abednego): add an example CL.
  //
  //  This enum type should be annotated with a LogEventRoutingConfig proto.
  optional int32 event_code = 11;
  // Identifies a group of events that belong to the same flow or session of
  //  user interaction, which is a client-specific concept.
  //
  //  These IDs are used in the Clearcut/UMA pipeline for computing latencies
  //  between pairs of events, where it is necessary to ensure that both events
  //  belong to the same flow.
  //
  //  For example, the Google Play team may want to give a unique ID to each
  //  purchase session, including all of the events starting from the initial
  //  search for an app to the eventual purchase and installation of the app.
  //  Another example would be the Search app wanting to tie together search
  //  query events and clicks on search results, especially if several instances
  //  of the app may be active at the same time.
  optional int32 event_flow_id = 12;
  // Whether this event was initiated by the user at the time of the event or
  //  shortly before (vs. a background event like upgrading a database after the
  //  app was automatically updated).
  optional bool is_user_initiated = 10;
  // These might contain PII and will not be stored for more than 8 days.
  //  If possible, please create a named field in the protos below instead.
  repeated .wireless_android_play_playlog.LogEventKeyValues value = 3;
  // TODO(jsw): Remove. We can't do that as of 2015/08/13 because we still get
  //  several thousand QPS from ancient Play Store clients who use this field.
  //
  //  Extension for Play Store app logs. Real type is PlayStoreLogEvent. This
  //  exists to support legacy clients. Use source_extension instead.
  optional bytes store = 4;
  // WAS optional PlaylogGamesExtension games = 5;

  // First-party app usage tracking. Used only when log_source = APP_USAGE_1P.
  optional .wireless_android_play_playlog.AppUsage1pLogEvent app_usage_1p = 9;
  // A source specific extension (typically a serialized proto). The type of
  //  this data is determined by the log_source of the enclosing LogRequest.
  //  The proto is derived by calling ParseFromString method in
  //  net/proto2/public/message_lite.h.
  optional bytes source_extension = 6;
  // A jspb version of source_extension, using array serialization format.
  //  More info on JSPB at go/jspb.
  optional string source_extension_js = 8;
  // A stringified json proto version of source_extension.  The json string is
  //  converted back to proto using the json_format utility at
  //  net/proto2/util/public/json_format.h, without any flags.
  optional string source_extension_json = 13;
  // The set of currently active experiments. If missing, then the server will
  //  assume that experiment on/off status has not changed since the previous
  //  LogEvent message in the same LogRequest proto. If missing in the very first
  //  LogEvent of a LogRequest, then the server will assume that all experiments
  //  are off.
  optional .wireless_android_play_playlog.ActiveExperiments exp = 7;
  // A string for identifying a test run.  You may use this string to group log
  //  data coming from a test run.  Usually logs from test apps or from normal
  //  apps running on test devices will have this field set.
  optional string test_id = 14;
  // User's timezone offset from UTC in seconds. If the user's UTC time
  //  is X millis then the on-device clock time would be
  //  X + timezone_offset_seconds * 1000.
  //  The default value is non-sensical, mainly so that 0 can be distinguished
  //  from "not specified" using proto nano (and without changing our build
  //  options to use reference types for primitives).
  optional sint64 timezone_offset_seconds = 15 [default = 180000];
  // serialized DeviceExperimentIds; the experiment ids are propagated
  //  to GWSLog experiment ids
  optional .wireless_android_play_playlog.ExperimentIds experiment_ids = 16;
  // Serialized proto message of ClientVisualElementsProto as defined in
  //  logs/proto/visual_element/client_visual_elements.proto. The client can
  //  optionally send a log event with this field set. In this case, clearcut
  //  server needs to deserialize the bytes as a ClientVisualElementsProto and
  //  sets appropriate fields in the output GWSLogEntryProto.
  //
  //  See http://go/NativeVeLogging for more information.
  optional bytes client_ve = 18;
  // Alternative serialized field for the client_ve field defined in 18.
  //  Serialize using array serialization format. More info at go/jspb.
  optional string client_ve_js = 24;
  optional .wireless_android_play_playlog.LogEvent.InternalEvent internal_event = 19;
  // Indicates that an interesting thing has occurred. Used to narrow the set
  //  of samples to consider in analysis. Test codes are copied to
  //  GwsLogEntryProto.TestCode.
  //
  //  See google3/ads/base/test_codes/test_codes.proto
  //  for Ads' use of test codes.
  repeated int32 test_code = 20;
  // Number of times the device is known to have booted. Taken together,
  //  {boot-count, uptime} pairs are a monotonically increasing counter which
  //  can be used to order events accross log sources.
  optional int64 boot_count = 22;
  // The current network connectivity info when the event was logged in the
  //  client
  optional .wireless_android_play_playlog.NetworkConnectionInfo network_connection_info = 23;
  extensions 1000 to 536870911;
}

// To describe the network connectivity of the client.
//  Next tag: 2
message NetworkConnectionInfo {
  // From android/frameworks/base/core/java/android/net/ConnectivityManager.java
  //  Note: data will only be recorded for internet connections. This means
  //  BLUETOOTH corresponds to when bluetooth was used for reverse tethering
  //  (i.e. using a computer's internet connection on the phone) and NOT for
  //  general device pairing via bluetooth, such as clockwork.
  enum NetworkType {
    NONE = -1;
    MOBILE = 0;
    WIFI = 1;
    MOBILE_MMS = 2;
    MOBILE_SUPL = 3;
    MOBILE_DUN = 4;
    MOBILE_HIPRI = 5;
    WIMAX = 6;
    BLUETOOTH = 7;
    DUMMY = 8;
    ETHERNET = 9;
    MOBILE_FOTA = 10;
    MOBILE_IMS = 11;
    MOBILE_CBS = 12;
    WIFI_P2P = 13;
    MOBILE_IA = 14;
    MOBILE_EMERGENCY = 15;
    PROXY = 16;
    VPN = 17;
  }
  // The current network connectivity type when the event was logged in the
  //  client
  optional .wireless_android_play_playlog.NetworkConnectionInfo.NetworkType network_type = 1 [default = NONE];
}

// The experiment ids, both in the clear and encrypted.
message ExperimentIds {
  // The client selected experiment ids in the clear (e.g. from Chrome).
  //  serialized experiments.heterodyne.DeviceExperimentIds
  optional bytes clear_blob = 1;
  // A jspb version of clear_blob, using array serialization format.
  //  More info on JSPB at go/jspb.
  optional string clear_blob_js = 4;
  // encrypted serialized experiments.heterodyne.DeviceExperimentIds
  repeated bytes encrypted_blob = 2;
  // indicates whether the Phenotype committed user matches the upload account
  optional bool users_match = 3;
}

// Attributes specific to Android clients.
//
//  Next tag: 23
message AndroidClientInfo {
  // "Gservices" android ID.  Considered PII.  Never logged in archival logs.
  optional int64 android_id = 1;
  // Pseudonymous, random id (sticky) per device.  May only be logged in temp
  //  logs if GWSLogEntryProto.UserInfo.UserId is not set.
  optional string logging_id = 2;
  // Device ID referenced by android.provider.Settings.Secure.ANDROID_ID.
  //  Considered PII. Never logged in archival logs.
  optional int64 device_id = 18;
  // This comes from android.os.Build.VERSION.SDK_INT.
  optional int32 sdk_version = 3;
  // Textual description of the client platform.  e.g., "Nexus 4".
  //  This comes from android.os.Build.MODEL.
  optional string model = 4;
  // The name of the overall product. e.g., "occam".
  //  This comes from android.os.Build.Product.
  optional string product = 5;
  // The name of the hardware (from the kernel command line or /proc).
  //  This comes from android.os.Build.Hardware.  e.g., "mako".
  optional string hardware = 8;
  // The name of the industrial design.  e.g., "mako".
  //  This comes from android.os.Build.Device.
  optional string device = 9;
  // This comes from android.os.Build.ID.  e.g., something like "JRN54F".
  optional string os_build = 6;
  // The client application version. The java int version in the android package
  //  converted to string.
  optional string application_build = 7;
  // The mobile country code / mobile network code (MCC/MNC).
  //  e.g., 310004 for Verizon USA.
  optional string mcc_mnc = 10;
  // The chosen locale from the client. e.g., "en_US", "ko_KR", "en_GB".
  optional string locale = 11;
  // The chosen country from the client. e.g., "US", "KR", "JP".
  optional string country = 12;
  // The manufacturer of the hardware.
  //  This comes from android.os.Build.MANUFACTURER
  optional string manufacturer = 13;
  // The brand the software is customized for, if any.  Often a carrier name.
  //  e.g. "google"
  //  from http://developer.android.com/reference/android/os/Build.html#BRAND
  optional string brand = 14;
  // The name of the underlying board
  //  e.g. "tuna"
  //  from http://developer.android.com/reference/android/os/Build.html#BOARD
  optional string board = 15;
  // Radio version as reported by device, if available at reporting time
  //  e.g. "I9250XXLJ1"
  //  from http://developer.android.com/reference/android/os/Build.html#getRadioVersion()
  optional string radio_version = 16;
  // Device model/build fingerprint.
  //  This comes from android.os.Build.FINGERPRINT.
  optional string fingerprint = 17;
  // android.content.pm.PackageInfo.versionCode of com.google.android.gms.
  //  e.g., 6031030
  optional int32 gms_core_version_code = 19;
  // Whether the device is a Sidewinder device. See go/sidewinder-summary.
  optional bool is_sidewinder_device = 20;
  // The Chimera module config info describing the module sets on the device
  //  when the event is logged in the client.
  //  This is a proto of ChimeraConfigInfo residing in
  //  google3/logs/proto/wireless/android/play/playlog/chimera_modules.proto.
  optional bytes chimera_config_info = 21;
  // Indicates if the device is passing in the LogRequest.LogSource integer
  //  value instead of passing in a string for log_source_name.
  //  This field is not set by the client, but by the server after parsing the
  //  request.
  optional bool using_log_source_int = 22;
}

// Attributes specific to web/mobile browsers.
//
//  Next tag: 5
message BrowserInfo {
  // Locale of the browser. Usually the same as the Accept-Language header but
  //  can be overridden by the hl query-string parameter.
  optional string locale = 1;
  // Name of the browser. This comes from analytics.browserInfo.NAME.
  optional string browser = 2;
  // Version of the browser. This comes from goog.userAgent.product.VERSION.
  optional string browser_version = 3;
  // Version of flash the browser is using.
  //  This comes from goog.userAgent.flash.VERSION. Should not be included if
  //  goog.userAgent.flash.HAS_FLASH is false.
  optional string flash_version = 4;
}

// Attributes specific to desktop clients.
//
//  Next tag: 8
message DesktopClientInfo {
  // Sticky ID that should be considered PII.
  optional string client_id = 1;
  // Pseudonymous, random id (sticky) per device.  May only be logged in temp
  //  logs if GWSLogEntryProto.UserInfo.UserId is not set.
  optional string logging_id = 2;
  // e.g., "mac", "windows", "linux"
  optional string os = 3;
  // e.g., "10.7", "Vista", "Win7"
  optional string os_major_version = 4;
  // e.g., "10.7.3", "Win7 SP1"
  optional string os_full_version = 5;
  // The client application version.
  optional string application_build = 6;
  // The chosen country from the client. e.g., "US", "KR", "JP".
  //  Where this comes from is currently app-specific
  optional string country = 7;
}

// Attributes specific to iOS clients.
//
//  NOTE(vjalan): Fields of this proto are made available as conditions for iOS
//  client-side experimentation in Heterodyne. Fields which contain PII should be
//  annotated with experiments.heterodyne.ignore_for_application_properties to
//  ensure that they cannot be used as conditions.
//
//  Next tag: 9
message IosClientInfo {
  // Sticky ID that should be considered PII.
  optional string client_id = 1;
  // Pseudonymous, random id (sticky) per device.  May only be logged in temp
  //  logs if GWSLogEntryProto.UserInfo.UserId is not set.
  optional string logging_id = 2;
  // The major OS version of an iOS client.
  optional string os_major_version = 3;
  // The minor OS version of an iOS client.
  optional string os_full_version = 4;
  // The client application version.
  optional string application_build = 5;
  // The chosen country from the client. e.g., "US", "KR", "JP".
  //  This is typically populated based on the value of:
  //    [[NSLocale currentLocale] objectForKey:NSLocaleCountryCode]
  optional string country = 6;
  // The unix name (uname) for the model from an iOS client. e.g., "iPhone6,1"
  //  for iPhone 5s.
  optional string model = 7;
  // The current language displayed to user. e.g., "en", "fr", "en-AU", or "de"
  //  This comes from [[NSBundle mainBundle] preferredLocalizations]; and is:
  //  "[language designator]" or "[language designator]-[region designator]"
  //  format based off of what localization is available and displayed to user.
  optional string language_code = 8;
}

// Attributes specific to Pancetta Chrome app clients. Pancetta clients will be
//  Chrome apps running on desktops or a headless network access point. The apps
//  are used to upload data from wearables to Pancetta servers.
//
//  Next tag: 6
message PancettaClientInfo {
  // Operating system.
  //  Next tag: 7
  enum OsType {
    OS_TYPE_UNKNOWN = 0;
    OS_TYPE_MAC = 1;
    OS_TYPE_WINDOWS = 2;
    OS_TYPE_ANDROID = 3;
    OS_TYPE_CROS = 4;
    OS_TYPE_LINUX = 5;
    OS_TYPE_OPENBSD = 6;
  }
  // Device ID that should be considered PII. This should only be filled by
  //  Pancetta's headless network access point which is manufactured and
  //  distributed by Google.
  optional string device_id = 1;
  // The OS that Chrome is running on.
  optional .wireless_android_play_playlog.PancettaClientInfo.OsType os = 2;
  // The Chrome app id.
  optional string app_id = 3;
  // The Chrome app version.
  optional string app_version = 4;
  // Optional. Mobile Country Code and Mobile Network Code if possible.
  //  This is for the headless network access point.
  optional string mcc_mnc = 5;
}

// Attributes specific to third-party CE devices.
//   CE devices scope
//  - Roku
//  - Smart TV (Non Android-TV)
//  - PlayStation 3/4
//  - XBox 360/One
//
//  We do not specify types of devices since it is defined by the pair of
//  device_make and device_model (e.g.: make=roku + model=2500X = streaming box,
//  make=lge + model=42LN5700 = Smart TV, make=tivo + model=roamio = Set Top Box)
//  Next tag: 9
message PlayCeClientInfo {
  // Sticky ID that should be considered PII. This is the device serial number
  //  or another device identifier that, together with make and model, uniquely
  //  identifies the device.
  optional string client_id = 1;
  // Pseudonymous, random id (sticky) per device.  May only be logged in temp
  //  logs if GWSLogEntryProto.UserInfo.UserId is not set.
  optional string logging_id = 7;
  // Device make. E.g.: samsung, lge, google, sony, microsoft.
  //  Case insensitive. RoKu==roku.
  optional string make = 3;
  // Device model. E.g.: 2500X. Case insensitive. 2500X==2500x.
  optional string model = 4;
  // App version/build. Each application defines it for itself.
  //  E.g.: GPM20140708-171921 on make=roku and model=2500X corresponds to a
  //  combination of BrightScript and C++ code compiled for mips
  //  from the git snapshot of the GPM app at the given time (20140708-171921).
  optional string application_build = 5;
  // Platform version. E.g.: 5.5. (Roku FW version for Play Movies launch). Can
  //  include letters (e.g.: 5.5.3254b for a beta build #3254 of the FW release
  //  5.5).
  optional string platform_version = 6;
  // The chosen country from the client. e.g., "US", "KR", "JP".
  //  Where this comes from is currently app-specific
  optional string country = 8;
}

// Attributes specific to VR clients. These are applications built on top of
//  the cross-platform Google Virtual Reality Toolkit (aka GVR). They run on a
//  variety of platforms including Android Cardboard, IOS Cardboard, Oculus, etc
//
//  This may be an Android phone for Cardboard, or may be a full VR headset.
//
//  Next tag: 11
message VrClientInfo {
  // The type of VR client that made this request.
  //  Next enum tag: 6
  enum VrClientType {
    // VR client type is unknown.
    UNKNOWN = 0;
    // Client type is an Android device using the Cardboard SDK.
    ANDROID_CARDBOARD_SDK = 1;
    // Client type is an iOS device using the Cardboard SDK.
    IOS_CARDBOARD_SDK = 2;
    // Client type is an Android device using Unity SDK.
    ANDROID_UNITY_SDK = 3;
    // Client type is an iOS device using Unity SDK.
    IOS_UNITY_SDK = 4;
    // Client type is a Windows machine (e.g. VrApp running Oculus or Valve).
    WINDOWS = 5;
  }
  // The VR client type for this client. One of the enum values defined above.
  optional .wireless_android_play_playlog.VrClientInfo.VrClientType vr_client_type = 1;
  // The VR client OS SDK version, in a format appropriate for the platform.
  optional string sdk_version = 2;
  // The VR device build fingerprint, in a format appropriate for the platform.
  optional string fingerprint = 3;
  // Version of the Google VR Toolkit (aka GVR).
  optional string gvr_version = 4;
  // The manufacturer of the client, for example Samsung.
  optional string manufacturer = 5;
  // The model of the client, for example Nexus 6.
  optional string model = 6;
  // The chosen language from the client. e.g., "en", "ko".  We originally
  //  logged locale, but after a privacy review switched to only log language.
  optional string language = 7;
  // The chosen country from the client. e.g., "US", "KR", "JP".
  optional string country = 8;
  // The version of the Unity runtime.
  optional string unity_version = 9;
  // The version of Google's VR Unity SDK.
  optional string unity_sdk_version = 10;
}
// Note: we don't store any user identifiers here.
//  All VR clients use Zweiback.

// Attributes specific to JavaScript clients.
//
//  Next tag: 7
message JsClientInfo {
  enum OsType {
    OS_UNKNOWN = 0;
    MAC = 1;
    WINDOWS = 2;
    ANDROID = 3;
    LINUX = 4;
    CHROME_OS = 5;
    IPAD = 6;
    IPHONE = 7;
    IPOD = 8;
  }
  enum DeviceType {
    UNKNOWN = 0;
    MOBILE = 1;
    TABLET = 2;
    DESKTOP = 3;
  }
  // e.g., "mac", "windows", "linux"
  optional string os = 1;
  // The OS version (not available for everything).
  optional string os_version = 2;
  optional .wireless_android_play_playlog.JsClientInfo.DeviceType device_type = 3;
  // The country from the client. e.g., "US", "KR", "JP".
  //  Only populated if the client explicitly sets it.
  optional string country = 4;
  // The locale used to display the page, e.g., "de_DE", "en", "en_US"; this may
  //  differ from the browser's locale if the user overrode the language
  //  settings.
  //  Only populated if the client explicitly sets it.
  optional string locale = 5;
  // e.g., MAC, WINDOWS, ANDROID etc.
  optional .wireless_android_play_playlog.JsClientInfo.OsType os_type = 6;
}

// Next tag: 12
message ClientInfo {
  // The type of client that made this request.
  //  Next enum tag: 10
  enum ClientType {
    // Client type is unknown.
    UNKNOWN = 0;
    // Client type is Javascript.
    JS = 1;
    // Desktop client type.
    DESKTOP = 2;
    // iOS client type.
    IOS = 3;
    // Android client type.
    ANDROID = 4;
    // This is to be used by third party consumer electronics devices
    //  with GooglePlay apps, e.g.: Roku, Smart TVs etc.
    PLAY_CE = 5;
    // Python client type.
    PYTHON = 6;
    // VR client type.
    VR = 7;
    // Pancetta client type. go/pancetta
    PANCETTA = 8;
    // DriveFS client type. go/drive-fs
    DRIVE_FS = 9;
  }
  // The client type for this client. One of the enum values defined above.
  optional .wireless_android_play_playlog.ClientInfo.ClientType client_type = 1;
  // Identical to GWSLogEntryProto.RemoteHost.
  //  Set by the Clearcut server when ClientInfo is written to Footprints.
  //  Do not set this value in client code; the server will ignore it.
  optional string remote_host = 6;
  // Identical to GWSLogEntryProto.RemoteHost6.
  //  Set by the Clearcut server when ClientInfo is written to Footprints.
  //  Do not set this value in client code; the server will ignore it.
  optional string remote_host6 = 7;
  // Only one of the following *_client_info fields will exist in any request.
  optional .wireless_android_play_playlog.AndroidClientInfo android_client_info = 2;
  optional .wireless_android_play_playlog.DesktopClientInfo desktop_client_info = 3;
  optional .wireless_android_play_playlog.IosClientInfo ios_client_info = 4;
  optional .wireless_android_play_playlog.PlayCeClientInfo play_ce_client_info = 5;
  optional .wireless_android_play_playlog.VrClientInfo vr_client_info = 8;
  // Pancetta contact: pancetta-cloud-eng@.
  optional .wireless_android_play_playlog.PancettaClientInfo pancetta_client_info = 10;
  // The browser used to make the request, if accessing through any web client.
  optional .wireless_android_play_playlog.BrowserInfo browser_info = 9;
  optional .wireless_android_play_playlog.JsClientInfo js_client_info = 11;
}

// The list of IDs of experiments that are currently on for this client. All
//  other experiments are off.
//
//  Next tag: 2
message ExperimentIdList {
  // IDs are sorted and do not contain duplicates.
  repeated string id = 1;
}

// First party app usage log event extension.
//  Used only when log_source = APP_USAGE_1P.
//
//  TODO(jsw): Investigate whether anyone is actually using this, and if not,
//  remove it.
//
//  Next tag: 4
message AppUsage1pLogEvent {
  // A wireless.android.stats.playlog.activeusers.AppType.Id value. See
  //  google3/wireless/android/stats/playlog/activeusers/apptype.proto.
  optional int32 app_type = 1;
  // Package name of the app (on Android).
  optional string android_package_name = 2;
  // Version of the app.
  optional string version = 3;
}

// A BatchedLogRequest represents a batched collection of log requests.
//
//  Next tag: 2
message BatchedLogRequest {
  repeated .wireless_android_play_playlog.LogRequest log_request = 1;
}

// A LogRequest represents a batched collection of loggable events, each event
//  to be processed and sent to zero or more destinations (e.g. Sawmill log types
//  or Footprints) by the Clearcut server.
//
//  Next tag: 13
message LogRequest {
  enum LogSource {
    option allow_alias = true;
    UNKNOWN = -1;
    STORE = 0;
    // Google Play Store Android App
    WEB_STORE = 65;
    // Google Play Web Store (https://play.google.com/store)
    WORK_STORE = 132;
    // Play for Work on the web client (Worksky)
    WORK_STORE_APP = 261;
    // Play for Work on the Google Play Store Android App
    EDU_STORE = 15;
    // for collecting stats on Play for Education
    MUSIC = 1;
    BOOKS = 2;
    VIDEO = 3;
    // Android Video (go/avi, android-video-oncall@)
    MOVIES = 74;
    MAGAZINES = 4;
    GAMES = 5;
    LB_A = 6;
    // for collecting app usage stats (Lockbox project)
    ANDROID_IDE = 7;
    // Android IDE (deprecated, see ANDROID_STUDIO below)
    LB_P = 8;
    // for collecting phone call events and stats (Lockbox project)
    LB_S = 9;
    // for collecting SMS events and stats (Lockbox project)
    GMS_CORE = 10;
    // Usage of GMS Core itself and its internal stats
    APP_USAGE_1P = 11;
    // First-party app usage tracking.
    ICING = 12;
    // Icing stats (AppDataSearch go/icing)
    HERREVAD = 13;
    // for collecting Nova Network quality data
    GOOGLE_TV = 14;
    // Google TV, not Eureka.
    GMS_CORE_PEOPLE = 16;
    // GMS core people (aka menagerie, zhengfu@, android-contacts@)
    LE = 17;
    // Location Engine statistics
    GOOGLE_ANALYTICS = 18;
    // Google Analytics SDK health monitoring
    LB_D = 19;
    // for collecting device state changes (Lockbox project)
    ANDROID_GSA = 20;
    // Android GSA (Google Search App) stats
    LB_T = 21;
    // for collecting Android RunningTaskInfo (Lockbox project)
    PERSONAL_LOGGER = 22;
    // PixelPerfect activity logger
    PERSONAL_BROWSER_LOGGER = 37;
    // PixelPerfect Chrome extension logger
    GMS_CORE_WALLET_MERCHANT_ERROR = 23;
    // GMS core wallet merchant errors
    LB_C = 24;
    // Android contacts going from Now to HappyHour.log_event_extension_test
    LB_IA = 52;
    // Android installed apps going from Now to HappyHour.
    LB_CB = 237;
    // Android contacts for backup/restore purpose.
    LB_DM = 268;
    // Android device metadata used for contacts backup/restore
    // purpose.
    ANDROID_AUTH = 25;
    // for collecting GMS core android auth data
    ANDROID_CAMERA = 26;
    // Android camera usage statistics
    CW = 27;
    // Clockwork interaction logs
    CW_COUNTERS = 243;
    // Clockwork counters
    GEL = 28;
    // Google experience launcher logs (http://go/signac).
    DNA_PROBER = 29;
    // DNA logger (for internal research), go/dna2014.
    UDR = 30;
    // For collecting Android app usage data.
    GMS_CORE_WALLET = 31;
    // GMS core wallet analytics
    SOCIAL = 32;
    // Traffic from Social clients: gplus-log-quality@
    INSTORE_WALLET = 33;
    // Instore play payments
    NOVA = 34;
    // Nova client logs.
    LB_CA = 35;
    // DEPRECATED: Android contact account data going from Now to Footprints.
    LATIN_IME = 36;
    // Google Keyboard (http://go/google-keyboard)
    NEWS_WEATHER = 38;
    // News & Weather Android/iOS apps
    HANGOUT = 39;
    // Deprecated source for HangoutLogEntry (rtc-analytics-eng@)
    HANGOUT_LOG_REQUEST = 50;
    // Hangouts data using HangoutLogRequest (rtc-analytics-eng@)
    COPRESENCE = 40;
    // Copresence (http://go/whisper)
    SOCIAL_AFFINITY = 41;
    // Social Affinity logs (go/disco-logging-v2).
    PHOTOS = 42;
    // Google Photos (go/photos).
    GCM = 43;
    // Google Cloud Messaging logs (go/gcm).
    GOKART = 44;
    // GoKart (go/gokart, Drive Android API)
    FINDR = 45;
    // Findr app (go/findr).
    ANDROID_MESSAGING = 46;
    // Android messenger(Bugle).
    SOCIAL_WEB = 47;
    // Traffic from Social clients: gplus-log-quality@.
    BACKDROP = 48;
    // Backdrop device logs (go/tv-imax).
    TELEMATICS = 49;
    // Telematics app (go/telematics).
    GVC_HARVESTER = 51;
    // GVC Harvester (go/harvesterdesigndoc)
    CAR = 53;
    // Android Automotive (go/gearhead).
    PIXEL_PERFECT = 54;
    // PixelPerfect app client log (go/pixelperfect-analytics)
    DRIVE = 55;
    // Google Drive (go/cakemix, nickread@, cakemix-drive@)
    DOCS = 56;
    // Google Docs (go/cakemix, haluk@, bulach@, tstrauss@)
    SHEETS = 57;
    // Google Sheets (go/cakemix, tgleason@, bulach@, tstrauss@)
    SLIDES = 58;
    // Google Slides (go/cakemix, yugacohler@, bulach@, tstrauss@)
    IME = 59;
    // Google Android IME logs (go/goopy).
    WARP = 60;
    // Warp (go/warp-project)
    NFC_PROGRAMMER = 61;
    // NfcProgrammer (go/aedu-platform-overview)
    NETSTATS = 62;
    // Collection of Network Statistics (go/n-s).
    NEWSSTAND = 63;
    // Google Play Newsstand.
    KIDS_COMMUNICATOR = 64;
    // Kids Communicator (http://goto/kidscommunicator_dd)
    WIFI_ASSISTANT = 66;
    // WiFi Assistant client logs.
    CAST_SENDER_SDK = 67;
    // Cast Sender SDK (go/dongle)
    CRONET_SOCIAL = 68;
    // Social cronet metrics.
    PHENOTYPE = 69;
    // The client side of experiment framework (go/ph, peiling@, phenotype-eng@).
    PHENOTYPE_COUNTERS = 70;
    // The counters for Phenotype (go/ph, peiling@, phenotype-eng@).
    CHROME_INFRA = 71;
    // Chrome Infrastructure events
    JUSTSPEAK = 72;
    // JustSpeak (go/justspeak)
    PERF_PROFILE = 73;
    // Android Wide Profiling (go/android-wide-profiling)
    KATNISS = 75;
    // Android TV search (go/atv-search)
    SOCIAL_APPINVITE = 76;
    // Google Plus Platform App Invite (go/appinvite)
    GMM_COUNTERS = 77;
    // Google Maps Mobile (go/gmm).
    BOND_ONEGOOGLE = 78;
    // Bond OneGoogleBar integration (go/bond-ogb)
    MAPS_API = 79;
    // Android and iOS Maps API (go/mapview & go/meridian)
    CRONET_ANDROID_YT = 196;
    // Cronet UMA logs from Android YT (go/cronet-uma)
    CRONET_ANDROID_GSA = 80;
    // Cronet UMA logs from Android GSA (go/cronet-uma)
    GOOGLE_FIT_WEARABLE = 81;
    // Google Fit Wearable App (go/heart)
    FITNESS_ANDROID = 169;
    // Google Fit Android App (go/heart)
    FITNESS_GMS_CORE = 170;
    // Google Fit GMSCore (go/heart)
    GOOGLE_EXPRESS = 82;
    // Google Express (go/gsx)
    GOOGLE_EXPRESS_DEV = 215;
    // Google Express (go/gsx) For DEV mall server
    GOOGLE_EXPRESS_COURIER_ANDROID_PRIMES = 228;
    // Google Express (go/gsx) Courier App metric logging (go/primes)
    GOOGLE_EXPRESS_ANDROID_PRIMES = 229;
    // Google Express (go/gsx) App metric logging (go/primes)
    GOOGLE_EXPRESS_STOREOMS_ANDROID_PRIMES = 240;
    // Google Express (go/gsx) Store OMS App metric logging (go/primes)
    SENSE = 83;
    // Sense (go/sense)
    ANDROID_BACKUP = 84;
    // Android Backup Service.
    VR = 85;
    // Virtual Reality and Google Cardboard (go/vr-team)
    IME_COUNTERS = 86;
    // The counters for Google Android IME (go/goopy).
    SETUP_WIZARD = 87;
    // Setup Wizard (go/suw)
    EMERGENCY_ASSIST = 88;
    // Barton (go/barton-deprecation)
    TRON = 89;
    // The event logs for Android Framework (go/tron, cwren@, khigaki@, tron-eng@).
    TRON_COUNTERS = 90;
    // The counters for Android Framework (go/tron, cwren@, khigaki@, tron-eng@).
    BATTERY_STATS = 91;
    // For collecting battery performance data from Android clients. (go/androidplatformstats, belland@, clearcut-eng@)
    DISK_STATS = 92;
    // For collecting disk utilization stats from Android clients. (go/androidplatformstats, belland@, clearcut-eng@)
    GRAPHICS_STATS = 107;
    // For collecting rendering performance stats from Android clients. (go/androidplatformstats, belland@, clearcut-eng@)
    PROC_STATS = 93;
    // For collecting memory utilization stats from Android clients. (go/androidplatformstats, belland@, clearcut-eng@)
    DROP_BOX = 131;
    // For collecting DropBox logs from Android clients.
    FINGERPRINT_STATS = 181;
    // For collecting fingerprint stats from Android clients. (go/android-fingerprintstats)
    NOTIFICATION_STATS = 182;
    // For collecting notification stats from Android clients. (go/android-notificationstats)
    TAP_AND_PAY_GCORE = 94;
    // Tap and Pay client service layer (go/tp2-eng)
    A11YLOGGER = 95;
    // Accessibility Settings Logger (go/a11ylogger)
    GCM_COUNTERS = 96;
    // Google Cloud Messaging counters (go/gcm).
    PLACES_NO_GLS_CONSENT = 97;
    // Mobile Places API logs without GLS consent (go/ios-places-api).
    TACHYON_LOG_REQUEST = 98;
    // WebRTC Tachyon (go/tachyon)
    TACHYON_COUNTERS = 99;
    // WebRTC Tachyon (go/tachyon)
    VISION = 100;
    // Vision (go/mobile-vision)
    SOCIAL_USER_LOCATION = 101;
    // Location Sharing (go/location-sharing)
    LAUNCHPAD_TOYS = 102;
    // Launchpad Toys (go/launchpadtoys)
    METALOG_COUNTERS = 103;
    // Counters for metalog (go/clearcut-metalog, iamawong@, clearcut-eng@)
    MOBILESDK_CLIENT = 104;
    // go/greenhouse
    ANDROID_VERIFY_APPS = 105;
    // go/safety-net
    ADSHIELD = 106;
    // go/adshield
    SHERLOG = 108;
    // Sherlog data (go/sherlog)
    LE_ULR_COUNTERS = 109;
    // Counters for ULR (go/gcore-ulr). Location custom events use LE.
    GMM_UE3 = 110;
    // Logs for GMM analytics and sessions (go/gca-analytics)
    CALENDAR = 111;
    // Google Android Calendar
    ENDER = 112;
    // Logs for Ender (go/ender)
    FAMILY_COMPASS = 113;
    // go/familycompass
    TRANSOM = 114;
    // Transom client-side metrics (go/transom)
    TRANSOM_COUNTERS = 115;
    // Counters for transom metrics
    LB_AS = 116;
    // App usage collected by the new UsageStats API (Lockbox project).
    LB_CFG = 117;
    // Device config collected by the new UsageStats API (Lockbox project).
    IOS_GSA = 118;
    // iOS GSA (Google Search App) stats
    TAP_AND_PAY_APP = 119;
    // Tap and Pay android app, aka Android pay app (go/tp2)
    TAP_AND_PAY_APP_COUNTERS = 265;
    // Tap and Pay android app counters
    FLYDROID = 120;
    // Logs for Flydroid (go/flydroid).
    CPANEL_APP = 121;
    // CPanel latency on mobile.
    ANDROID_SNET_GCORE = 122;
    // go/safety-net
    ANDROID_SNET_IDLE = 123;
    // go/safety-net
    ANDROID_SNET_JAR = 124;
    // go/safety-net
    CONTEXT_MANAGER = 125;
    // Logs for Context Manager (go/context-manager)
    CLASSROOM = 126;
    // App usage of the go/classroom app.
    TAILORMADE = 127;
    // Logs for Tailormade app (go/a1-tm)
    KEEP = 128;
    // Logs for Keep (go/keep).
    GMM_BRIIM_COUNTERS = 129;
    // GMM BRIIM counters (go/gmm-briim)
    CHROMECAST_APP_LOG = 130;
    // Logs for chromecast app (go/chromecastapplogs)
    ADWORDS_MOBILE = 133;
    // Logs for AdWords mobile app (go/awm)
    LEANBACK_EVENT = 134;
    // Logs for Android TV Leanback Launcher (go/android-tv)
    ANDROID_GMAIL = 135;
    // Logs for Gmail (go/android-gmail-clearcut, shahrk@, android-mail-team@)
    SAMPLE_SHM = 136;
    // Logs for system health metric and memory metric sample app (go/primes)
    GPLUS_ANDROID_PRIMES = 140;
    // Logs for system health metric for Gplus (go/primes)
    GPLUS_ANDROID_SYSTEM_HEALTH = 140;
    GMAIL_ANDROID_PRIMES = 150;
    // Logs for system health metric for GMail (go/primes)
    GMAIL_ANDROID_SYSTEM_HEALTH = 150;
    CALENDAR_ANDROID_PRIMES = 151;
    // Logs for system health metric for Calendar (go/primes)
    CALENDAR_ANDROID_SYSTEM_HEALTH = 151;
    DOCS_ANDROID_PRIMES = 152;
    // Logs for system health metric for Docs (go/primes)
    DOCS_ANDROID_SYSTEM_HEALTH = 152;
    YT_MAIN_APP_ANDROID_PRIMES = 154;
    // Logs for system health metric for the YouTube main app (go/primes)
    YT_KIDS_ANDROID_PRIMES = 155;
    // Logs for system health metric for the YouTube kids app (go/primes)
    YT_GAMING_ANDROID_PRIMES = 156;
    // Logs for system health metric for the YouTube gaming app (go/primes)
    YT_MUSIC_ANDROID_PRIMES = 157;
    // Logs for system health metric for the YouTube music app (go/primes)
    YT_LITE_ANDROID_PRIMES = 158;
    // Logs for system health metric for the YouTube lite app (go/primes)
    YT_CREATOR_ANDROID_PRIMES = 171;
    // Logs for system health metric for the YouTube Creator Studio app (go/primes)
    JAM_ANDROID_PRIMES = 159;
    // Logs for system health metric for Jam (go/jam, go/primes)
    JAM_KIOSK_ANDROID_PRIMES = 160;
    // Logs for system health metric for Jam Kiosk (go/jam, go/primes)
    PHOTOS_ANDROID_PRIMES = 165;
    // Logs for system health metric for Photos (go/primes)
    DRIVE_ANDROID_PRIMES = 166;
    // Logs for system health metric for Drive (go/primes)
    SHEETS_ANDROID_PRIMES = 167;
    // Logs for system health metric for Sheets (go/primes)
    SLIDES_ANDROID_PRIMES = 168;
    // Logs for system health metric for Slides (go/primes)
    SNAPSEED_ANDROID_PRIMES = 178;
    // Logs for system health metric for Snapseed (go/primes, go/snapseed).
    HANGOUTS_ANDROID_PRIMES = 179;
    // Logs for system health metric for Shem (go/primes, go/rtc-shem).
    INBOX_ANDROID_PRIMES = 180;
    // Logs for system health metric for Inbox (go/primes, go/bt-speed)
    INBOX_IOS_PRIMES = 262;
    // Logs for ios system health metric for Inbox (go/primes-ios, go/bt-speed)
    SDP_IOS_PRIMES = 287;
    // Logs for ios system health metric for sdp (go/primes-ios, go/bt-speed)
    GMSCORE_ANDROID_PRIMES = 193;
    // Logs for system health metric for GmsCore (go/primes)
    PLAY_MUSIC_ANDROID_WEAR_PRIMES = 200;
    // Logs for system health metric for Play Music for Android Wear (music-android-wear@, go/wear-play-music, go/primes)
    GEARHEAD_ANDROID_PRIMES = 201;
    // Logs for system health metric for the Android Auto (GearHead) app (go/primes, go/gearhead)
    INSTORE_CONSUMER_PRIMES = 207;
    // Logs for system health metric for Hands Free (go/primes, go/instore-wallet)
    SAMPLE_IOS_PRIMES = 202;
    // Logs for ios system health metric and memory metric sample app (go/primes-ios)
    CPANEL_ANDROID_PRIMES = 213;
    // Logs for android system health metric (go/cpanel-mobile)
    HUDDLE_ANDROID_PRIMES = 214;
    // Primes for Huddle (go/huddle)
    AWX_ANDROID_PRIMES = 222;
    // Primes for Google AdWords Express android app (go/primes, go/awx-android)
    GHS_ANDROID_PRIMES = 223;
    // Primes for Google Home Services android app (go/primes, go/sab-awx-android)
    ADWORDS_MOBILE_ANDROID_PRIMES = 224;
    // AdWords system health (go/awm, go/primes)
    TAP_AND_PAY_ANDROID_PRIMES = 227;
    // Primes for Tap and Pay android app, aka Android pay app (go/tp2)
    WALLET_APP_ANDROID_PRIMES = 232;
    // Primes for Wallet android app (go/gmoney)
    WALLET_APP_IOS_PRIMES = 233;
    // Primes for Wallet iOS app (go/gmoney)
    ANALYTICS_ANDROID_PRIMES = 235;
    // Logs for system health metric for Analytics Android app (go/primes)
    SPACES_ANDROID_PRIMES = 236;
    // Logs for the Spaces Android App (go/spaces)
    SPACES_IOS_PRIMES = 276;
    // Logs for the Spaces iOS App (go/spaces)
    SOCIETY_ANDROID_PRIMES = 238;
    // Logs for system health metric for Society (go/primes, go/society)
    GMM_BRIIM_PRIMES = 239;
    // Logs for system health metric for GMM BRIIM (go/gmm-briim)
    CW_PRIMES = 242;
    // Clockwork go/primes logs
    FAMILYLINK_ANDROID_PRIMES = 244;
    // Logs for system health metric for FamilyLink (go/primes)
    FAMILYLINK_IOS_PRIMES = 291;
    // Logs for ios system health metric for FamilyLink (go/primes-ios, go/familylink-ios-app)
    WH_PRIMES = 248;
    // Primes for Westinghouse (go/westinghouse, go/primes)
    NOVA_ANDROID_PRIMES = 249;
    // Nova client app system health metrics (go/primes)
    PHOTOS_DRAPER_ANDROID_PRIMES = 253;
    // Logs for system health metric for Photos Draper (go/primes, go/photos-draper)
    GMM_PRIMES = 254;
    // Logs for system health metric for aGMM (go/gmm)
    TRANSLATE_ANDROID_PRIMES = 255;
    // Logs for system health metric for Translate on Android (go/primes)
    TRANSLATE_IOS_PRIMES = 256;
    // Logs for system health metric for Translate on iOS (go/primes)
    FLYDROID_ANDROID_PRIMES = 259;
    // Log for system health metric for Freighter (go/freighter)
    CONSUMERIQ_PRIMES = 260;
    // Log for system health metric for Consumer IQ (go/primes)
    GMB_ANDROID_PRIMES = 263;
    // Primes for Google My Business android app (go/gmb-android, go/primes).
    CLOUDDPC_PRIMES = 304;
    // Primes for CloudDpc (go/clouddpc)
    CLOUDDPC_ARC_PRIMES = 305;
    // Primes for CloudDpc for ARC (go/clouddpc)
    ICORE = 137;
    // iOS logging (go/ios-logging)
    PANCETTA_MOBILE_HOST = 138;
    // Logs for Pancetta mobile hosts (go/pancetta)
    PANCETTA_MOBILE_HOST_COUNTERS = 139;
    // Counters for Pancetta mobile hosts (go/pancetta)
    CROSSDEVICENOTIFICATION = 141;
    // Logs for cross device notification service (go/hotpocket)
    CROSSDEVICENOTIFICATION_DEV = 142;
    // Dev logs for cross device notification service (go/hotpocket)
    MAPS_API_COUNTERS = 143;
    // Android and iOS Maps API (go/mapview & go/meridian)
    GPU = 144;
    // Logs for Geo Photo Uploader (go/gpu-site)
    ON_THE_GO = 145;
    // Logs for OnTheGo (go/onthego)
    ON_THE_GO_COUNTERS = 146;
    // Counters for OnTheGo (go/onthego)
    GMS_CORE_PEOPLE_AUTOCOMPLETE = 147;
    // Logs for Gcore People Autocomplete (go/yenta)
    FLYDROID_COUNTERS = 148;
    // Logs for Flydroid (go/flydroid).
    FIREBALL = 149;
    // Logs for Fireball (go/fireballdev)
    FIREBALL_COUNTERS = 257;
    // Fireball counters (go/fireballdev)
    CRONET_FIREBALL = 303;
    // Fireball cronet (go/fireballdev)
    FIREBALL_PRIMES = 266;
    // Logs for system health for Fireball (go/fireball-systemhealth-plan)
    FIREBALL_IOS_PRIMES = 313;
    // Logs for system health for Fireball iOS (go/fireball-systemhealth-plan)
    GOOGLE_HANDWRITING_INPUT_ANDROID_PRIMES = 314;
    // Primes for Google Handwriting Input (go/hwrime)
    PYROCLASM = 153;
    // Logs for Pyroclasm (go/pyroclasm)
    ANDROID_GSA_COUNTERS = 161;
    // Logs for AGSA counters.
    JAM_IMPRESSIONS = 162;
    // Impressions logs for Jam (go/jam).
    JAM_KIOSK_IMPRESSIONS = 163;
    // Impressions logs for Jam Kiosk (go/jam).
    PAYMENTS_OCR = 164;
    // Logs for payments ocr (go/cc-ocr-metrics).
    UNICORN_FAMILY_MANAGEMENT = 172;
    // Logs for Family management (and onboarding) go/familymanagement
    AUDITOR = 173;
    // Logs for Accesssibility Auditor (go/a11y-checker)
    NQLOOKUP = 174;
    // Logs for NQLookup (go/nqlookup, contact herrevad@google.com)
    ANDROID_GSA_HIGH_PRIORITY_EVENTS = 175;
    // Logs for high priority events in AGSA (go/click-tracking-agsa).
    ANDROID_DIALER = 176;
    // Logs for Android Dialer (go/android-dialer)
    CLEARCUT_DEMO = 177;
    // Logs for Clearcut's demo application
    APPMANAGER = 183;
    // Logs for Firebase App Manager (go/appmanager)
    SMARTLOCK_COUNTERS = 184;
    // Counters for Smart Lock (go/smartlock)
    EXPEDITIONS_GUIDE = 185;
    // Guide-aggregated logs for go/expeditions .
    FUSE = 186;
    // Logs for Fuse (go/fuse).
    PIXEL_PERFECT_CLIENT_STATE_LOGGER = 187;
    // Logs for PixelPerfect client app (go/pxp-client)
    PLATFORM_STATS_COUNTERS = 188;
    // Counters for platform stats.(go/androidplatformstats, clearcut-eng@)
    DRIVE_VIEWER = 189;
    // Google Drive Viewer Android and iOS apps (go/picoprojector)
    PDF_VIEWER = 190;
    // Google PDF Viewer Android app (go/picoprojector)
    BIGTOP = 191;
    // Logs for Bigtop (externally known as Inbox, go/bigtop).
    VOICE = 192;
    // Logs for Google Voice (go/googlevoice).
    MYFIBER = 194;
    // Logs for My Fiber mobile applications (go/myfibernative)
    RECORDED_PAGES = 195;
    // Logs for RecordedPages (go/recorded-pages)
    MOB_DOG = 197;
    // Logs for MobDog (go/mobdog)
    WALLET_APP = 198;
    // Logs for the Wallet app (go/gmoney)
    GBOARD = 199;
    // Logs for GBoard (go/gboard)
    CRONET_GMM = 203;
    // Cronet UMA logs from GMM (go/cronet-uma)
    TRUSTED_FACE = 204;
    // Logs for Trusted Face (go/smartlock)
    MATCHSTICK = 205;
    // Logs for Matchstick library (go/matchstick)
    APP_CATALOG = 206;
    // Logs for AppCatalog aka "Get My Google Apps" (go/growth)
    BLUETOOTH = 208;
    // Logs for Bluetooth (go/fluoride)
    WIFI = 209;
    // Logs for WiFi (go/connectivity-site)
    TELECOM = 210;
    // Logs for Telcom (go/connectivity-site)
    TELEPHONY = 211;
    // Logs for Telephony (go/connectivity-site)
    IDENTITY_FRONTEND = 212;
    // Logs for the Identity frontend (go/ifus-readme)
    SESAME = 216;
    // Logs for Sesame (go/sesame-logging)
    GOOGLE_KEYBOARD_CONTENT = 217;
    // Google Keyboard's Latin IME content logs (go/google-keyboard)
    MADDEN = 218;
    // Logs for Madden (go/madden)
    INK = 219;
    // Logs for Ink (go/ink)
    ANDROID_CONTACTS = 220;
    // Logs for Android Contacts (go/android-contacts)
    GOOGLE_KEYBOARD_COUNTERS = 221;
    // Google Keyboard histogram counters (go/google-keyboard)
    CLEARCUT_PROBER = 225;
    // Clearcut prober (go/clearcut-prober)
    PLAY_CONSOLE_APP = 226;
    // Logs for the Google Play Developer Console app
    PLAY_CONSOLE_APP_PRIMES = 264;
    // Log for system health metrics for the Google Play Developer Console app
    SPECTRUM = 230;
    // Spectrum (go/spectrum-site)
    SPECTRUM_COUNTERS = 231;
    // Spectrum (go/spectrum-site)
    SPECTRUM_ANDROID_PRIMES = 267;
    // Spectrum (go/spectrum-site)
    IOS_SPOTLIGHT_SEARCH_LIBRARY = 234;
    // Logs for the iOS Spotlight Search Library (go/tempeh-dd)
    BOQ_WEB = 241;
    // Logs for client-side analytics of Boq Web (go/boq-web)
    ORCHESTRATION_CLIENT = 245;
    // Orchestration client logs for prod environment (go/megalogs-design)
    ORCHESTRATION_CLIENT_DEV = 246;
    // Orchestration client logs for dev environment (go/megalogs-design)
    GOOGLE_NOW_LAUNCHER = 247;
    // Logs for Google Now Launcher (go/gnl-logging)
    SCOOBY_SPAM_REPORT_LOG = 250;
    // Logs of spam reports by scooby clients. (go/scooby)
    IOS_GROWTH = 251;
    // go/growthkit-metrics
    APPS_NOTIFY = 252;
    // Drive web push notifications (go/apps-notify)
    SMARTKEY_APP = 269;
    // Smart Key App for project Bolt (go/smartlock)
    CLINICAL_STUDIES = 270;
    // Lifescience Clinical Studies logs (go/apollox)
    FITNESS_ANDROID_PRIMES = 271;
    // System health metric for Google Fit Android App (go/heart, go/primes)
    IMPROV_APPS = 272;
    // Logs for Improv apps (go/improvlogging)
    FAMILYLINK = 273;
    // Family Link (go/familylink-dd)
    FAMILYLINK_COUNTERS = 274;
    // Family Link counters (go/familylink-dd)
    SOCIETY = 275;
    // NBU Society app (go/society)
    DIALER_ANDROID_PRIMES = 277;
    // Android Dialer Primes (go/dialer)
    YOUTUBE_DIRECTOR_APP = 278;
    // YouTube Director App (go/youtube-director)
    TACHYON_ANDROID_PRIMES = 279;
    // Android Tachyon Client
    DRIVE_FS = 280;
    // DriveFS (go/drive-fs)
    YT_MAIN = 281;
    // Logs for YT's main application
    WING_MARKETPLACE_ANDROID_PRIMES = 282;
    // Primes for Wing Marketplace Android app (go/wing-marketplace-android, go/primes)
    DYNAMITE = 283;
    // Logs for Dynamite (go/dynamite)
    CORP_ANDROID_FOOD = 284;
    // Logs for the internal Android Food app (g3doc/java/com/google/corp/bizapps/rews/food/android)
    ANDROID_MESSAGING_PRIMES = 285;
    // Primes for Android Messenger (go/bugledev, go/primes)
    GPLUS_IOS_PRIMES = 286;
    // Primes for Google+ iOS app (go/gplus-ios, go/primes)
    CHROMECAST_ANDROID_PRIMES = 288;
    // Primes for Chromecast Android app (go/cast-apps)
    APPSTREAMING = 289;
    // Logs for AppStreaming Client Framework Side (go/piccard)
    GMB_ANDROID = 290;
    // Logs for GMB Android app (go/gmb-android).
    VOICE_IOS_PRIMES = 292;
    // Primes for iOS Google Voice (go/googlevoice).
    VOICE_ANDROID_PRIMES = 293;
    // Primes for Android Google Voice (go/googlevoice).
    PAISA = 294;
    // NBU Paisa app (go/paisa)
    GMB_IOS = 295;
    // Logs for GMB iOS App (go/gmb-ios).
    SCOOBY_EVENTS = 296;
    // Call logs events by scooby clients. (go/scooby)
    SNAPSEED_IOS_PRIMES = 297;
    // Primes for Snapseed IOS (go/Snapseed)
    YOUTUBE_DIRECTOR_IOS_PRIMES = 298;
    // YouTube Director App (go/youtube-director)
    WALLPAPER_PICKER = 299;
    // Android wallpaper picker (go/magic-wallpapers)
    CHIME = 300;
    // Chime (go/chime)
    BEACON_GCORE = 301;
    // Logs for debugging beacon module (go/beacons)
    ANDROID_STUDIO = 302;
    // Android Studio (go/android-studio)
    DOCS_OFFLINE = 306;
    // Logs for Docs Offline on Desktop  (go/jetpax)
    FREIGHTER = 307;
    // Logs for Freighter (http://go/freighter)
    DOCS_IOS_PRIMES = 308;
    // Logs for the Google Docs iOS application
    SLIDES_IOS_PRIMES = 309;
    // Logs for the Google Docs iOS application
    SHEETS_IOS_PRIMES = 310;
    // Logs for the Google Docs iOS application
    IPCONNECTIVITY = 311;
    // Logs for Networking (go/connectivity-site)
    CURATOR = 312;
    // Logs for curator app (go/curator)
  }
  // Different types schedulers for log upload.
  enum SchedulerType {
    UNKNOWN_SCHEDULER = 0;
    ASAP = 1;
    // As soon as possible used when log store is full.
    DEFAULT_PERIODIC = 2;
    QOS_FAST_ONEOFF = 3;
    QOS_DEFAULT_PERIODIC = 4;
    QOS_UNMETERED_PERIODIC = 5;
  }
  // "Now", in milliseconds, according to the same clock as the one used to set
  //  the 'event_time_ms' values in the LogEvent protos above.
  optional int64 request_time_ms = 4;
  // Current time since boot in milliseconds, including time spent in sleep,
  //  according to the same clock as the one used to set
  //  the 'event_uptime_ms' values in the LogEvent protos above.
  optional int64 request_uptime_ms = 8;
  optional .wireless_android_play_playlog.ClientInfo client_info = 1;
  optional .wireless_android_play_playlog.LogRequest.LogSource log_source = 2 [default = UNKNOWN];
  // If log_source is not present and log_source_name is present, the value of
  //  log_source_name is parsed as a LogSource value and set to log_source.
  optional string log_source_name = 6;
  // cookie from pseudonymous id service at the time the event was posted
  optional string zwieback_cookie = 7;
  repeated .wireless_android_play_playlog.LogEvent log_event = 3;
  // Can be used instead of 'log_event' in order to save battery in cases where
  //  LogEvent protos are already serialized, and deserializing is undesirable.
  //  If used, this is a collection of byte streams each produced using a
  //  CodedOutputStream.
  repeated bytes serialized_log_events = 5;
  // Quality of Service tier for log upload.
  optional .wireless_android_play_playlog.QosTierConfiguration.QosTier qos_tier = 9 [default = DEFAULT];
  // The type of log upload scheduler.
  optional .wireless_android_play_playlog.LogRequest.SchedulerType scheduler = 10;
  // Device status.
  optional .wireless_android_play_playlog.DeviceStatus device_status = 11;
  // A timestamp taken from a source external to the device. For example, a GPS
  //  timestamp. This can be more accurate than the device wall clock, but is not
  //  guaranteed to be. That will depend on the source, and on the device
  //  hardware and software that obtains the timestamp.
  optional .wireless_android_play_playlog.ExternalTimestamp external_timestamp = 12;
  extensions 1000 to 536870911;
}

// DeviceStatus captures device status including network connection status,
//  battery status, and etc.
//  Next tag: 5
message DeviceStatus {
  // Status of automatic date and time setting.
  enum AutomaticTime {
    // Device is using an older version of GmsCore (before U), or there was a
    //  problem getting the setting.
    UNKNOWN = 0;
    // Automatic date and time was not enabled.
    AUTO_TIME_OFF = 1;
    // Automatic date and time was enabled.
    AUTO_TIME_ON = 2;
  }
  // Whether device network connection is unmetered.
  optional bool is_unmetered = 1;
  // Whether device is under charge. See link
  //  http://developer.android.com/training/monitoring-device-state/battery-monitoring.html
  //  This boolean returns true when status equals to
  //  BatteryManager.BATTERY_STATUS_CHARGING || BatteryManager.BATTERY_STATUS_FULL
  optional bool is_charging = 2;
  // Whether automatic date and time is enabled on the device. See link
  //  http://developer.android.com/reference/android/provider/Settings.Global.html#AUTO_TIME
  //  Note, this does not guarantee correct device clock if NTP clock sync has
  //  not occurred.
  optional .wireless_android_play_playlog.DeviceStatus.AutomaticTime auto_time_status = 3;
  // Is true if the device contains an account that has the @google.com domain.
  optional bool is_googler_device = 4;
}

// ExternalTimestamp captures a timestamp obtained by an external source. This
//  can be GPS or clock sync over the network. The timestamp is typically old, so
//  the device uptime when the timestamp was obtained is also included. The
//  source of this timestamp must guarantee that the timestamp is not older than
//  the most recent device boot.
//  Next tag: 4
message ExternalTimestamp {
  // A timestamp given by an external source.
  optional int64 time_ms = 1;
  // The device uptime when the timestamp was recorded.
  optional int64 uptime_ms = 2;
  // The name of the source that provided the timestamp.
  optional string source = 3;
}

// QosTierConfiguration configures what Quality of Service tier should be
//  applied to a given log source.
//
//  Next tag: 3
message QosTierConfiguration {
  // Quality of Service tiers for Clearcut log upload.
  enum QosTier {
    // Use GcmNetworkManager to schedule logs upload every hour.
    DEFAULT = 0;
    // Log will be uploaded when the device is on an unmetered network.
    //  Note that devices that rarely or never connect to unmetered networks
    //  will end up losing many or all of these messages.
    UNMETERED_ONLY = 1;
    // Similar to the previous one, but if an upload opportunity does not arise
    //  near to the end of the day, Clearcut will upload the data as soon as
    //  the device is online (even if on a metered network).
    UNMETERED_OR_DAILY = 2;
    // Log will be uploaded as soon as the device is using the radio.
    //  If not, log will be uploaded at the next DEFAULT-tier upload time.
    FAST_IF_RADIO_AWAKE = 3;
    // This is for server to override client QosTier setting.
    //  If a certain log source's QosTier is set to NEVER, then Clearcut will
    //  drop log events of that log source immediately and won't save them in
    //  log store.
    NEVER = 4;
  }
  optional string log_source_name = 1;
  optional .wireless_android_play_playlog.QosTierConfiguration.QosTier qos_tier = 2;
}

// Next tag: 3
message QosTiersOverride {
  // Quality of Service tiers enforced by server for overriding client
  //  qos_tier setting in event logging.
  //  This usually happens when server is burdened with fast qos tiers.
  repeated .wireless_android_play_playlog.QosTierConfiguration qos_tier_configuration = 1;
  // The fingerprint of the qos_tier_configuration field.
  optional int64 qos_tier_fingerprint = 2;
}

// Next tag: 2
message LogSourceBatchingBlacklist {
  repeated string log_source_name = 1;
}

// Next tag: 5
message LogResponse {
  // Client should wait for next_request_wait_millis before sending the next
  //  log request.
  optional int64 next_request_wait_millis = 1 [default = -1];
  // If present, this is the new set of enabled experiments for this client.
  //  Otherwise, the client should assume that there has been no change in the
  //  set of enabled experiments.
  optional .wireless_android_play_playlog.ExperimentIdList experiments = 2;
  // Quality of Service tiers enforced by server for overriding client
  //  qos_tier setting in event logging.
  optional .wireless_android_play_playlog.QosTiersOverride qos_tier = 3;
  // Enforced by server for telling Clearcut uploader not to group log events
  //  from certain log sources. If it is not set, client will try to group log
  //  events together with the same upload context without considering log
  //  sources restrictions. Upload context includes following info.
  //  1. PlayLoggerContext.isAnonymous
  //  2. PlayLoggerContext.uploadAccountName
  //  3. PlayLoggerContext.zwiebackCookie
  //  4. PlayLoggerContext.qosTier
  optional .wireless_android_play_playlog.LogSourceBatchingBlacklist log_source_batching_blacklist = 4;
}


