syntax = "proto3";

package google.play.developer.reporting.v1beta1;
import "metrics.proto";
option java_package = "com.google.play.developer.reporting";
option java_outer_classname = "VitalsServiceProto";
option java_multiple_files = true;

// Reference: https://source.corp.google.com/piper///depot/google3/google/play/developer/reporting/v1main/vitals_service.proto
//
// Service to describe and query Android Vitals bad behavior data metrics,
// such as crash rate, ANR rate, etc.
service VitalsService {

  // Describes the properties of the metric set.
  rpc GetCrashRateMetricSet(GetCrashRateMetricSetRequest) returns
    (CrashRateMetricSet) {
  }

  // Queries the metrics in the metric set.
  rpc QueryCrashRateMetricSet(QueryCrashRateMetricSetRequest) returns
    (QueryCrashRateMetricSetResponse) {
  }

  // Describes the properties of the metric set.
  rpc GetAnrRateMetricSet(GetAnrRateMetricSetRequest) returns (AnrRateMetricSet)
    {
  }

  // Queries the metrics in the metric set.
  rpc QueryAnrRateMetricSet(QueryAnrRateMetricSetRequest) returns
    (QueryAnrRateMetricSetResponse) {
  }

  // Describes the properties of the metric set.
  rpc GetExcessiveWakeupRateMetricSet(GetExcessiveWakeupRateMetricSetRequest)
    returns (ExcessiveWakeupRateMetricSet) {
  }

  // Queries the metrics in the metric set.
  rpc
    QueryExcessiveWakeupRateMetricSet(QueryExcessiveWakeupRateMetricSetRequest)
    returns (QueryExcessiveWakeupRateMetricSetResponse) {
  }

  // Describes the properties of the metric set.
  rpc
    GetStuckBackgroundWakelockRateMetricSet(GetStuckBackgroundWakelockRateMetricSetRequest)
    returns (StuckBackgroundWakelockRateMetricSet) {
  }

  // Queries the metrics in the metric set.
  rpc
    QueryStuckBackgroundWakelockRateMetricSet(QueryStuckBackgroundWakelockRateMetricSetRequest)
    returns (QueryStuckBackgroundWakelockRateMetricSetResponse) {
  }

  // Describes the properties of the metric set.
  rpc GetSlowStartRateMetricSet(GetSlowStartRateMetricSetRequest) returns
    (SlowStartRateMetricSet) {
  }

  // Queries the metrics in the metric set.
  rpc QuerySlowStartRateMetricSet(QuerySlowStartRateMetricSetRequest) returns
    (QuerySlowStartRateMetricSetResponse) {
  }

  // Describes the properties of the metric set.
  rpc GetSlowRenderingRateMetricSet(GetSlowRenderingRateMetricSetRequest)
    returns (SlowRenderingRateMetricSet) {
  }

  // Queries the metrics in the metric set.
  rpc QuerySlowRenderingRateMetricSet(QuerySlowRenderingRateMetricSetRequest)
    returns (QuerySlowRenderingRateMetricSetResponse) {
  }
}

// Request message for
// [GetCrashRateMetricSet][google.play.developer.reporting.v1beta1.VitalsService.GetCrashRateMetricSet].
message GetCrashRateMetricSetRequest {

  // The resource name.
  //
  // Format: apps/{app}/crashRateMetricSet
  string name = 1;
}

// Singleton resource representing the set of crashrate metrics.
//
// This metric set contains crashes data combined with usage data to produce a
// normalized metric independent of user counts.
//
// **Supported aggregation periods:**
//
//  * [DAILY][google.play.developer.reporting.v1beta1.AggregationPeriod.DAILY]:
//    metrics are aggregated in calendar date intervals. Due to historical
//    constraints, the only supported timezone is `America/Los_Angeles`.
//  * [HOURLY][google.play.developer.reporting.v1beta1.AggregationPeriod.HOURLY]:
//    metrics are aggregated in hourly intervals. The default and only
//    supported timezone is `UTC`.
//
// **Supported metrics:**
//
//  * `crashRate` (`google.type.Decimal`): Percentage of distinct users in the
//     aggregation period that experienced at least one crash.
//  * `crashRate7dUserWeighted` (`google.type.Decimal`): Rolling average value
//     of `crashRate` in the last 7 days. The daily values are weighted by the
//     count of distinct users for the day. Not supported in HOURLY granularity.
//  * `crashRate28dUserWeighted` (`google.type.Decimal`): Rolling average value
//     of `crashRate` in the last 28 days. The daily values are weighted by the
//     count of distinct users for the day. Not supported in HOURLY granularity.
//  * `userPerceivedCrashRate` (`google.type.Decimal`): Percentage of distinct
//     users in the aggregation period that experienced at least one crash while
//     they were actively using your app
//     (a user-perceived crash). An app is considered to be in active use
//     if it is displaying any activity or executing any foreground service.
//  * `userPerceivedCrashRate7dUserWeighted` (`google.type.Decimal`): Rolling
//     average value of `userPerceivedCrashRate` in the last 7 days. The daily
//     values are weighted by the count of distinct users for the day. Not
//     supported in HOURLY granularity.
//  * `userPerceivedCrashRate28dUserWeighted` (`google.type.Decimal`): Rolling
//     average value of `userPerceivedCrashRate` in the last 28 days. The daily
//     values are weighted by the count of distinct users for the day. Not
//     supported in HOURLY granularity.
//  * `distinctUsers` (`google.type.Decimal`): Count of distinct users
//     in the aggregation period that were used as normalization value for the
//     `crashRate` and `userPerceivedCrashRate` metrics. A user is counted in
//     this metric if they used the app actively during the aggregation period.
//     An app is considered to be in active use
//     if it is displaying any activity or executing any foreground service.
//     Care must be taken not to aggregate this count further, as it may
//     result in users being counted multiple times. The value is rounded to the
//     nearest multiple of 10, 100, 1,000 or 1,000,000, depending on the
//     magnitude of the value.
//
// **Supported dimensions:**
//
//  * `apiLevel`
//     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
//     the API level of Android that was running on the user's device, e.g., 26.
//  * `versionCode`
//     ([int64][google.play.developer.reporting.v1beta1.DimensionValue.int64_value]):
//     version of the app that was running on the user's device.
//  * `deviceModel`
//     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
//     unique identifier of the user's device model. The form of the
//     identifier is 'deviceBrand/device', where deviceBrand corresponds
//     to Build.BRAND and device corresponds to Build.DEVICE, e.g.,
//     google/coral.
//  * `deviceBrand`
//     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
//     unique identifier of the user's device brand, e.g., google.
//  * `deviceType`
//     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
//     the type (also known as form factor) of the user's device, e.g., PHONE.
//  * `countryCode`
//     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
//     the country or region of the user's device based on their IP address,
//     represented as a 2-letter ISO-3166 code (e.g. US for the United States).
//  * `deviceRamBucket`
//     ([int64][google.play.developer.reporting.v1beta1.DimensionValue.int64_value]):
//     RAM of the device, in MB, in buckets (3GB, 4GB, etc.).
//  *  `deviceSocMake`
//     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
//     Make of the device's primary system-on-chip, e.g., Samsung.
//     [Reference](https://developer.android.com/reference/android/os/Build#SOC_MANUFACTURER)
//  *  `deviceSocModel`
//     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
//     Model of the device's primary system-on-chip, e.g., "Exynos 2100".
//     [Reference](https://developer.android.com/reference/android/os/Build#SOC_MODEL)
//  *  `deviceCpuMake`
//     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
//     Make of the device's CPU, e.g., Qualcomm.
//  *  `deviceCpuModel`
//     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
//     Model of the device's CPU, e.g., "Kryo 240".
//  *  `deviceGpuMake`
//     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
//     Make of the device's GPU, e.g., ARM.
//  *  `deviceGpuModel`
//     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
//     Model of the device's GPU, e.g., Mali.
//  *  `deviceGpuVersion`
//     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
//     Version of the device's GPU, e.g., T750.
//  *  `deviceVulkanVersion`
//     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
//     Vulkan version of the device, e.g., "4198400".
//  *  `deviceGlEsVersion`
//     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
//     OpenGL ES version of the device, e.g., "196610".
//  *  `deviceScreenSize`
//     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
//     Screen size of the device, e.g., NORMAL, LARGE.
//  *  `deviceScreenDpi`
//     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
//     Screen density of the device, e.g., mdpi, hdpi.
//
// **Required permissions**: to access this resource, the calling user needs the
// _View app information (read-only)_ permission for the app.
//
// **Related metric sets:**
//
//  * [vitals.errors][google.play.developer.reporting.v1beta1.ErrorCountMetricSet]
//    contains unnormalized version (absolute counts) of crashes.
//  * [vitals.errors][google.play.developer.reporting.v1beta1.AnrRateMetricSet]
//    contains normalized metrics about ANRs, another stability metric.
//
// (== resource_for v1beta1.vitals.crashrate ==)
message CrashRateMetricSet {
  // The resource name.
  //
  // Format: apps/{app}/crashRateMetricSet
  string name = 1;

  // Summary about data freshness in this resource.
  FreshnessInfo freshness_info = 2;
}

// Request message for
// [QueryCrashRateMetricSet][google.play.developer.reporting.v1beta1.VitalsService.QueryCrashRateMetricSet].
message QueryCrashRateMetricSetRequest {

  // The resource name.
  //
  // Format: apps/{app}/crashRateMetricSet
  string name = 1;

  // Specification of the timeline aggregation parameters.
  //
  // **Supported aggregation periods:**
  //
  //  * [DAILY][google.play.developer.reporting.v1beta1.AggregationPeriod.DAILY]:
  //    metrics are aggregated in calendar date intervals. Due to historical
  //    constraints, the default and only supported timezone is
  //    `America/Los_Angeles`.
  //  * [HOURLY][google.play.developer.reporting.v1beta1.AggregationPeriod.HOURLY]:
  //    metrics are aggregated in hourly intervals. The default and only
  //    supported timezone is `UTC`.
  TimelineSpec timeline_spec = 2;

  // Dimensions to slice the metrics by.
  //
  // **Supported dimensions:**
  //
  //  * `apiLevel`
  //     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
  //     the API level of Android that was running on the user's device,
  //     e.g., 26.
  //  * `versionCode`
  //     ([int64][google.play.developer.reporting.v1beta1.DimensionValue.int64_value]):
  //     version of the app that was running on the user's device.
  //  * `deviceModel`
  //     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
  //     unique identifier of the user's device model. The form of the
  //     identifier is 'deviceBrand/device', where deviceBrand corresponds
  //     to Build.BRAND and device corresponds to Build.DEVICE, e.g.,
  //     google/coral.
  //  * `deviceBrand`
  //     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
  //     unique identifier of the user's device brand, e.g., google.
  //  * `deviceType`
  //     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
  //     the type (also known as form factor) of the user's device, e.g., PHONE.
  //  * `countryCode`
  //     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
  //     the country or region of the user's device based on their IP address,
  //     represented as a 2-letter ISO-3166 code (e.g. US for the United
  //     States).
  //  * `deviceRamBucket`
  //     ([int64][google.play.developer.reporting.v1beta1.DimensionValue.int64_value]):
  //     RAM of the device, in MB, in buckets (3GB, 4GB, etc.).
  //  *  `deviceSocMake`
  //     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
  //     Make of the device's primary system-on-chip, e.g., Samsung.
  //     [Reference](https://developer.android.com/reference/android/os/Build#SOC_MANUFACTURER)
  //  *  `deviceSocModel`
  //     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
  //     Model of the device's primary system-on-chip, e.g., "Exynos 2100".
  //     [Reference](https://developer.android.com/reference/android/os/Build#SOC_MODEL)
  //  *  `deviceCpuMake`
  //     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
  //     Make of the device's CPU, e.g., Qualcomm.
  //  *  `deviceCpuModel`
  //     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
  //     Model of the device's CPU, e.g., "Kryo 240".
  //  *  `deviceGpuMake`
  //     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
  //     Make of the device's GPU, e.g., ARM.
  //  *  `deviceGpuModel`
  //     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
  //     Model of the device's GPU, e.g., Mali.
  //  *  `deviceGpuVersion`
  //     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
  //     Version of the device's GPU, e.g., T750.
  //  *  `deviceVulkanVersion`
  //     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
  //     Vulkan version of the device, e.g., "4198400".
  //  *  `deviceGlEsVersion`
  //     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
  //     OpenGL ES version of the device, e.g., "196610".
  //  *  `deviceScreenSize`
  //     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
  //     Screen size of the device, e.g., NORMAL, LARGE.
  //  *  `deviceScreenDpi`
  //     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
  //     Screen density of the device, e.g., mdpi, hdpi.
  repeated string dimensions = 3;

  // Metrics to aggregate.
  //
  // **Supported metrics:**
  //
  //  * `crashRate` (`google.type.Decimal`): Percentage of distinct users in the
  //     aggregation period that experienced at least one crash.
  //  * `crashRate7dUserWeighted` (`google.type.Decimal`): Rolling average value
  //     of `crashRate` in the last 7 days. The daily values are weighted by the
  //     count of distinct users for the day.
  //  * `crashRate28dUserWeighted` (`google.type.Decimal`): Rolling average
  //     value of `crashRate` in the last 28 days. The daily values are weighted
  //     by the count of distinct users for the day. Not supported in HOURLY
  //     granularity.
  //  * `userPerceivedCrashRate` (`google.type.Decimal`): Percentage of distinct
  //     users in the aggregation period that experienced at least one crash
  //     while they were actively using your app (a user-perceived crash). An
  //     app is considered to be in active use if it is displaying any activity
  //     or executing any foreground service.
  //  * `userPerceivedCrashRate7dUserWeighted` (`google.type.Decimal`): Rolling
  //     average value of `userPerceivedCrashRate` in the last 7 days. The daily
  //     values are weighted by the count of distinct users for the day. Not
  //     supported in HOURLY granularity.
  //  * `userPerceivedCrashRate28dUserWeighted` (`google.type.Decimal`): Rolling
  //     average value of `userPerceivedCrashRate` in the last 28 days. The
  //     daily values are weighted by the count of distinct users for the day.
  //     Not supported in HOURLY granularity.
  //  * `distinctUsers` (`google.type.Decimal`): Count of distinct users
  //     in the aggregation period that were used as normalization value for the
  //     `crashRate` and `userPerceivedCrashRate` metrics. A user is counted in
  //     this metric if they used the app actively during the aggregation
  //     period. An app is considered to be in active use if it is displaying
  //     any activity or executing any foreground service. Care must be taken
  //     not to aggregate this count further, as it may result in users being
  //     counted multiple times. The value is rounded to the nearest
  //     multiple of 10, 100, 1,000 or 1,000,000, depending on the magnitude of
  //     the value.
  repeated string metrics = 4;

  // Filters to apply to data. The filtering expression follows
  // [AIP-160](https://google.aip.dev/160) standard and supports filtering
  // by equality of all breakdown dimensions.
  string filter = 7;

  // Maximum size of the returned data.
  //
  // If unspecified, at most 1000 rows will be returned.
  // The maximum value is 100,000; values above 100,000 will be coerced to
  // 100,000.
  int32 page_size = 5;

  // A page token, received from a previous call.
  // Provide this to retrieve the subsequent page.
  //
  // When paginating, all other parameters provided to the request must
  // match the call that provided the page token.
  string page_token = 6;

  // User view to select. The output data will correspond to the selected view.
  //
  // **Supported values:**
  //
  //  * `OS_PUBLIC`
  //     To select data from all publicly released Android versions. This is the
  //     default. Supports all the above dimensions.
  //  * `APP_TESTERS`
  //     To select data from users who have opted in to be testers. Supports all
  //     the above dimensions.
  //  * `OS_BETA`
  //     To select data from beta android versions only, excluding data from
  //     released android versions. Only the following dimensions are supported:
  //
  //    * `versionCode`
  //       ([int64][google.play.developer.reporting.v1beta1.DimensionValue.int64_value]):
  //       version of the app that was running on the user's device.
  //    * `osBuild`
  //       ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
  //       OS build of the user's device, e.g., "T1B2.220916.004".
  UserCohort user_cohort = 8;
}

// Response message for
// [QueryCrashRateMetricSet][google.play.developer.reporting.v1beta1.VitalsService.QueryCrashRateMetricSet].
message QueryCrashRateMetricSetResponse {

  // Returned rows of data.
  repeated MetricsRow rows = 1;

  // Continuation token to fetch the next page of data.
  string next_page_token = 2;
}

// Request message for
// [GetAnrRateMetricSet][google.play.developer.reporting.v1beta1.VitalsService.GetAnrRateMetricSet].
message GetAnrRateMetricSetRequest {

  // The resource name.
  //
  // Format: apps/{app}/anrRateMetricSet
  string name = 1;
}

// Singleton resource representing the set of ANR (Application not responding)
// metrics.
//
// This metric set contains ANRs data combined with usage data to produce a
// normalized metric independent of user counts.
//
// **Supported aggregation periods:**
//
//  * [DAILY][google.play.developer.reporting.v1beta1.AggregationPeriod.DAILY]:
//    metrics are aggregated in calendar date intervals. Due to historical
//    constraints, the only supported timezone is `America/Los_Angeles`.
//  * [HOURLY][google.play.developer.reporting.v1beta1.AggregationPeriod.HOURLY]:
//    metrics are aggregated in hourly intervals. The default and only
//    supported timezone is `UTC`.
//
// **Supported metrics:**
//
//  *  `anrRate` (`google.type.Decimal`): Percentage of distinct users in the
//     aggregation period that experienced at least one ANR.
//  *  `anrRate7dUserWeighted` (`google.type.Decimal`): Rolling average value
//     of `anrRate` in the last 7 days. The daily values are weighted by the
//     count of distinct users for the day. Not supported in HOURLY granularity.
//  *  `anrRate28dUserWeighted` (`google.type.Decimal`): Rolling average
//     value of `anrRate` in the last 28 days. The daily values are weighted
//     by the count of distinct users for the day. Not supported in HOURLY
//     granularity.
//  *  `userPerceivedAnrRate` (`google.type.Decimal`): Percentage of distinct
//     users in the aggregation period that experienced at least one
//     user-perceived ANR. User-perceived ANRs are currently those of 'Input
//     dispatching' type.
//  *  `userPerceivedAnrRate7dUserWeighted` (`google.type.Decimal`): Rolling
//     average value of `userPerceivedAnrRate` in the last 7 days. The daily
//     values are weighted by the count of distinct users for the day. Not
//     supported in HOURLY granularity.
//  *  `userPerceivedAnrRate28dUserWeighted` (`google.type.Decimal`): Rolling
//     average value of `userPerceivedAnrRate` in the last 28 days. The daily
//     values are weighted by the count of distinct users for the day.
//  *  `distinctUsers` (`google.type.Decimal`): Count of distinct users
//     in the aggregation period that were used as normalization value for the
//     `anrRate` and `userPerceivedAnrRate` metrics. A user is counted in this
//     metric if they used the app in the foreground during the aggregation
//     period. Care must be taken not to aggregate this count further, as it may
//     result in users being counted multiple times. The value is rounded to the
//     nearest multiple of 10, 100, 1,000 or 1,000,000, depending on the
//     magnitude of the value.
//
// **Supported dimensions:**
//
//  * `apiLevel`
//     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
//     the API level of Android that was running on the user's device, e.g., 26.
//  * `versionCode`
//     ([int64][google.play.developer.reporting.v1beta1.DimensionValue.int64_value]):
//     version of the app that was running on the user's device.
//  * `deviceModel`
//     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
//     unique identifier of the user's device model. The form of the
//     identifier is 'deviceBrand/device', where deviceBrand corresponds
//     to Build.BRAND and device corresponds to Build.DEVICE, e.g.,
//     google/coral.
//  * `deviceBrand`
//     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
//     unique identifier of the user's device brand, e.g., google.
//  * `deviceType`
//     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
//     the type (also known as form factor) of the user's device, e.g., PHONE.
//  * `countryCode`
//     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
//     the country or region of the user's device based on their IP address,
//     represented as a 2-letter ISO-3166 code (e.g. US for the United States).
//  * `deviceRamBucket`
//     ([int64][google.play.developer.reporting.v1beta1.DimensionValue.int64_value]):
//     RAM of the device, in MB, in buckets (3GB, 4GB, etc.).
//  *  `deviceSocMake`
//     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
//     Make of the device's primary system-on-chip, e.g., Samsung.
//     [Reference](https://developer.android.com/reference/android/os/Build#SOC_MANUFACTURER)
//  *  `deviceSocModel`
//     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
//     Model of the device's primary system-on-chip, e.g., "Exynos 2100".
//     [Reference](https://developer.android.com/reference/android/os/Build#SOC_MODEL)
//  *  `deviceCpuMake`
//     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
//     Make of the device's CPU, e.g., Qualcomm.
//  *  `deviceCpuModel`
//     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
//     Model of the device's CPU, e.g., "Kryo 240".
//  *  `deviceGpuMake`
//     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
//     Make of the device's GPU, e.g., ARM.
//  *  `deviceGpuModel`
//     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
//     Model of the device's GPU, e.g., Mali.
//  *  `deviceGpuVersion`
//     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
//     Version of the device's GPU, e.g., T750.
//  *  `deviceVulkanVersion`
//     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
//     Vulkan version of the device, e.g., "4198400".
//  *  `deviceGlEsVersion`
//     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
//     OpenGL ES version of the device, e.g., "196610".
//  *  `deviceScreenSize`
//     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
//     Screen size of the device, e.g., NORMAL, LARGE.
//  *  `deviceScreenDpi`
//     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
//     Screen density of the device, e.g., mdpi, hdpi.
//
// **Required permissions**: to access this resource, the calling user needs the
// _View app information (read-only)_ permission for the app.
//
// **Related metric sets:**
//
//  * [vitals.errors][google.play.developer.reporting.v1beta1.ErrorCountMetricSet]
//    contains unnormalized version (absolute counts) of crashes.
//  * [vitals.errors][google.play.developer.reporting.v1beta1.CrashRateMetricSet]
//    contains normalized metrics about crashes, another stability metric.
//
// (== resource_for v1beta1.vitals.anrrate ==)
message AnrRateMetricSet {
  // The resource name.
  //
  // Format: apps/{app}/anrRateMetricSet
  string name = 1;

  // Summary about data freshness in this resource.
  FreshnessInfo freshness_info = 2;
}

// Request message for
// [QueryAnrRateMetricSet][google.play.developer.reporting.v1beta1.VitalsService.QueryAnrRateMetricSet].
message QueryAnrRateMetricSetRequest {

  // The resource name.
  //
  // Format: apps/{app}/anrRateMetricSet
  string name = 1;

  // Specification of the timeline aggregation parameters.
  //
  // **Supported aggregation periods:**
  //
  //  * [DAILY][google.play.developer.reporting.v1beta1.AggregationPeriod.DAILY]:
  //    metrics are aggregated in calendar date intervals. Due to historical
  //    constraints, the default and only supported timezone is
  //    `America/Los_Angeles`.
  //  * [HOURLY][google.play.developer.reporting.v1beta1.AggregationPeriod.HOURLY]:
  //    metrics are aggregated in hourly intervals. The default and only
  //    supported timezone is `UTC`.
  TimelineSpec timeline_spec = 2;

  // Dimensions to slice the metrics by.
  //
  // **Supported dimensions:**
  //
  //  * `apiLevel`
  //     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
  //     the API level of Android that was running on the user's device,
  //     e.g., 26.
  //  * `versionCode`
  //     ([int64][google.play.developer.reporting.v1beta1.DimensionValue.int64_value]):
  //     version of the app that was running on the user's device.
  //  * `deviceModel`
  //     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
  //     unique identifier of the user's device model. The form of the
  //     identifier is 'deviceBrand/device', where deviceBrand corresponds
  //     to Build.BRAND and device corresponds to Build.DEVICE, e.g.,
  //     google/coral.
  //  * `deviceBrand`
  //     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
  //     unique identifier of the user's device brand, e.g., google.
  //  * `deviceType`
  //     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
  //     the type (also known as form factor) of the user's device, e.g., PHONE.
  //  * `countryCode`
  //     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
  //     the country or region of the user's device based on their IP address,
  //     represented as a 2-letter ISO-3166 code (e.g. US for the United
  //     States).
  //  * `deviceRamBucket`
  //     ([int64][google.play.developer.reporting.v1beta1.DimensionValue.int64_value]):
  //     RAM of the device, in MB, in buckets (3GB, 4GB, etc.).
  //  *  `deviceSocMake`
  //     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
  //     Make of the device's primary system-on-chip, e.g., Samsung.
  //     [Reference](https://developer.android.com/reference/android/os/Build#SOC_MANUFACTURER)
  //  *  `deviceSocModel`
  //     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
  //     Model of the device's primary system-on-chip, e.g., "Exynos 2100".
  //     [Reference](https://developer.android.com/reference/android/os/Build#SOC_MODEL)
  //  *  `deviceCpuMake`
  //     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
  //     Make of the device's CPU, e.g., Qualcomm.
  //  *  `deviceCpuModel`
  //     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
  //     Model of the device's CPU, e.g., "Kryo 240".
  //  *  `deviceGpuMake`
  //     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
  //     Make of the device's GPU, e.g., ARM.
  //  *  `deviceGpuModel`
  //     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
  //     Model of the device's GPU, e.g., Mali.
  //  *  `deviceGpuVersion`
  //     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
  //     Version of the device's GPU, e.g., T750.
  //  *  `deviceVulkanVersion`
  //     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
  //     Vulkan version of the device, e.g., "4198400".
  //  *  `deviceGlEsVersion`
  //     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
  //     OpenGL ES version of the device, e.g., "196610".
  //  *  `deviceScreenSize`
  //     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
  //     Screen size of the device, e.g., NORMAL, LARGE.
  //  *  `deviceScreenDpi`
  //     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
  //     Screen density of the device, e.g., mdpi, hdpi.
  repeated string dimensions = 3;

  // Metrics to aggregate.
  //
  // **Supported metrics:**
  //
  //  *  `anrRate` (`google.type.Decimal`): Percentage of distinct users in the
  //     aggregation period that experienced at least one ANR.
  //  *  `anrRate7dUserWeighted` (`google.type.Decimal`): Rolling average value
  //     of `anrRate` in the last 7 days. The daily values are weighted by the
  //     count of distinct users for the day. Not supported in HOURLY
  //     granularity.
  //  *  `anrRate28dUserWeighted` (`google.type.Decimal`): Rolling average
  //     value of `anrRate` in the last 28 days. The daily values are weighted
  //     by the count of distinct users for the day. Not supported in HOURLY
  //     granularity.
  //  *  `userPerceivedAnrRate` (`google.type.Decimal`): Percentage of distinct
  //     users in the aggregation period that experienced at least one
  //     user-perceived ANR. User-perceived ANRs are currently those of 'Input
  //     dispatching' type.
  //  *  `userPerceivedAnrRate7dUserWeighted` (`google.type.Decimal`): Rolling
  //     average value of `userPerceivedAnrRate` in the last 7 days. The daily
  //     values are weighted by the count of distinct users for the day. Not
  //     supported in HOURLY granularity.
  //  *  `userPerceivedAnrRate28dUserWeighted` (`google.type.Decimal`): Rolling
  //     average value of `userPerceivedAnrRate` in the last 28 days. The daily
  //     values are weighted by the count of distinct users for the day. Not
  // .    supported in HOURLY granularity.
  //  *  `distinctUsers` (`google.type.Decimal`): Count of distinct users
  //     in the aggregation period that were used as normalization value for the
  //     `anrRate` and `userPerceivedAnrRate` metrics. A user is counted in this
  //     metric if they used the app in the foreground during the aggregation
  //     period. Care must be taken not to aggregate this count further, as it
  //     may result in users being counted multiple times. The value is rounded
  //     to the nearest multiple of 10, 100, 1,000 or 1,000,000, depending on
  //     the magnitude of the value.
  repeated string metrics = 4;

  // Filters to apply to data. The filtering expression follows
  // [AIP-160](https://google.aip.dev/160) standard and supports filtering
  // by equality of all breakdown dimensions.
  string filter = 7;

  // Maximum size of the returned data.
  //
  // If unspecified, at most 1000 rows will be returned.
  // The maximum value is 100,000; values above 100,000 will be coerced to
  // 100,000.
  int32 page_size = 5;

  // A page token, received from a previous call.
  // Provide this to retrieve the subsequent page.
  //
  // When paginating, all other parameters provided to the request must
  // match the call that provided the page token.
  string page_token = 6;

  // User view to select. The output data will correspond to the selected view.
  //
  // **Supported values:**
  //
  //  * `OS_PUBLIC`
  //     To select data from all publicly released Android versions. This is the
  //     default. Supports all the above dimensions.
  //  * `APP_TESTERS`
  //     To select data from users who have opted in to be testers. Supports all
  //     the above dimensions.
  //  * `OS_BETA`
  //     To select data from beta android versions only, excluding data from
  //     released android versions. Only the following dimensions are supported:
  //
  //    * `versionCode`
  //       ([int64][google.play.developer.reporting.v1beta1.DimensionValue.int64_value]):
  //       version of the app that was running on the user's device.
  //    * `osBuild`
  //       ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
  //       OS build of the user's device, e.g., "T1B2.220916.004".
  UserCohort user_cohort = 8;
}

// Response message for
// [QueryAnrRateMetricSet][google.play.developer.reporting.v1beta1.VitalsService.QueryAnrRateMetricSet].
message QueryAnrRateMetricSetResponse {

  // Returned rows of data.
  repeated MetricsRow rows = 1;

  // Continuation token to fetch the next page of data.
  string next_page_token = 2;
}

// Request message for
// [GetExcessiveWakeupRateMetricSet][google.play.developer.reporting.v1beta1.VitalsService.GetExcessiveWakeupRateMetricSet].
message GetExcessiveWakeupRateMetricSetRequest {

  // The resource name.
  //
  // Format: apps/{app}/excessiveWakeupRateMetricSet
  string name = 1;
}

// Singleton resource representing the set of Excessive Weakeups metrics.
//
// This metric set contains AlarmManager wakeup counts data combined with
// process state data to produce a normalized metric independent of user counts.
//
// **Supported aggregation periods:**
//
//  * [DAILY][google.play.developer.reporting.v1beta1.AggregationPeriod.DAILY]:
//    metrics are aggregated in calendar date intervals. Due to historical
//    constraints, the only supported timezone is `America/Los_Angeles`.
//
// **Supported metrics:**
//
//  * `excessiveWakeupRate` (`google.type.Decimal`): Percentage of distinct
//     users in the aggregation period that had more than 10 wakeups per hour.
//  * `excessiveWakeupRate7dUserWeighted` (`google.type.Decimal`): Rolling
//     average value of `excessiveWakeupRate` in the last 7 days. The daily
//     values are weighted by the count of distinct users for the day.
//  * `excessiveWakeupRate28dUserWeighted` (`google.type.Decimal`): Rolling
//     average value of `excessiveWakeupRate` in the last 28 days. The daily
//     values are weighted by the count of distinct users for the day.
//  * `distinctUsers` (`google.type.Decimal`): Count of distinct users
//     in the aggregation period that were used as normalization value for the
//     `excessiveWakeupRate` metric. A user is counted in this metric if
//     they app was doing any work on the device, i.e., not just active
//     foreground usage but also background work. Care must be taken
//     not to aggregate this count further, as it may result in users being
//     counted multiple times. The value is rounded to the nearest
//     multiple of 10, 100, 1,000 or 1,000,000, depending on the magnitude of
//     the value.
//
// **Supported dimensions:**
//
//  * `apiLevel`
//     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
//     the API level of Android that was running on the user's device, e.g., 26.
//  * `versionCode`
//     ([int64][google.play.developer.reporting.v1beta1.DimensionValue.int64_value]):
//     version of the app that was running on the user's device.
//  * `deviceModel`
//     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
//     unique identifier of the user's device model. The form of the
//     identifier is 'deviceBrand/device', where deviceBrand corresponds
//     to Build.BRAND and device corresponds to Build.DEVICE, e.g.,
//     google/coral.
//  * `deviceBrand`
//     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
//     unique identifier of the user's device brand, e.g., google.
//  * `deviceType`
//     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
//     the type (also known as form factor) of the user's device, e.g., PHONE.
//  * `countryCode`
//     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
//     the country or region of the user's device based on their IP address,
//     represented as a 2-letter ISO-3166 code (e.g. US for the United States).
//  * `deviceRamBucket`
//     ([int64][google.play.developer.reporting.v1beta1.DimensionValue.int64_value]):
//     RAM of the device, in MB, in buckets (3GB, 4GB, etc.).
//  *  `deviceSocMake`
//     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
//     Make of the device's primary system-on-chip, e.g., Samsung.
//     [Reference](https://developer.android.com/reference/android/os/Build#SOC_MANUFACTURER)
//  *  `deviceSocModel`
//     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
//     Model of the device's primary system-on-chip, e.g., "Exynos 2100".
//     [Reference](https://developer.android.com/reference/android/os/Build#SOC_MODEL)
//  *  `deviceCpuMake`
//     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
//     Make of the device's CPU, e.g., Qualcomm.
//  *  `deviceCpuModel`
//     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
//     Model of the device's CPU, e.g., "Kryo 240".
//  *  `deviceGpuMake`
//     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
//     Make of the device's GPU, e.g., ARM.
//  *  `deviceGpuModel`
//     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
//     Model of the device's GPU, e.g., Mali.
//  *  `deviceGpuVersion`
//     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
//     Version of the device's GPU, e.g., T750.
//  *  `deviceVulkanVersion`
//     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
//     Vulkan version of the device, e.g., "4198400".
//  *  `deviceGlEsVersion`
//     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
//     OpenGL ES version of the device, e.g., "196610".
//  *  `deviceScreenSize`
//     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
//     Screen size of the device, e.g., NORMAL, LARGE.
//  *  `deviceScreenDpi`
//     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
//     Screen density of the device, e.g., mdpi, hdpi.
//
// **Required permissions**: to access this resource, the calling user needs the
// _View app information (read-only)_ permission for the app.
//
// (== resource_for v1beta1.vitals.excessivewakeuprate ==)
message ExcessiveWakeupRateMetricSet {

  // The resource name.
  //
  // Format: apps/{app}/excessiveWakeupRateMetricSet
  string name = 1;

  // Summary about data freshness in this resource.
  FreshnessInfo freshness_info = 2;
}

// Request message for
// [QueryExcessiveWakeupRateMetricSet][google.play.developer.reporting.v1beta1.VitalsService.QueryExcessiveWakeupRateMetricSet].
message QueryExcessiveWakeupRateMetricSetRequest {

  // The resource name.
  //
  // Format: apps/{app}/excessiveWakeupRateMetricSet
  string name = 1;

  // Specification of the timeline aggregation parameters.
  //
  // **Supported aggregation periods:**
  //
  //  * [DAILY][google.play.developer.reporting.v1beta1.AggregationPeriod.DAILY]:
  //    metrics are aggregated in calendar date intervals. Due to historical
  //    constraints, the only supported timezone is `America/Los_Angeles`.
  TimelineSpec timeline_spec = 2;

  // Dimensions to slice the data by.
  //
  // **Supported dimensions:**
  //
  //  * `apiLevel`
  //     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
  //     the API level of Android that was running on the user's device,
  //     e.g., 26.
  //  * `versionCode`
  //     ([int64][google.play.developer.reporting.v1beta1.DimensionValue.int64_value]):
  //     version of the app that was running on the user's device.
  //  * `deviceModel`
  //     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
  //     unique identifier of the user's device model. The form of the
  //     identifier is 'deviceBrand/device', where deviceBrand corresponds
  //     to Build.BRAND and device corresponds to Build.DEVICE, e.g.,
  //     google/coral.
  //  * `deviceBrand`
  //     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
  //     unique identifier of the user's device brand, e.g., google.
  //  * `deviceType`
  //     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
  //     the type (also known as form factor) of the user's device, e.g., PHONE.
  //  * `countryCode`
  //     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
  //     the country or region of the user's device based on their IP address,
  //     represented as a 2-letter ISO-3166 code (e.g. US for the United
  //     States).
  //  * `deviceRamBucket`
  //     ([int64][google.play.developer.reporting.v1beta1.DimensionValue.int64_value]):
  //     RAM of the device, in MB, in buckets (3GB, 4GB, etc.).
  //  *  `deviceSocMake`
  //     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
  //     Make of the device's primary system-on-chip, e.g., Samsung.
  //     [Reference](https://developer.android.com/reference/android/os/Build#SOC_MANUFACTURER)
  //  *  `deviceSocModel`
  //     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
  //     Model of the device's primary system-on-chip, e.g., "Exynos 2100".
  //     [Reference](https://developer.android.com/reference/android/os/Build#SOC_MODEL)
  //  *  `deviceCpuMake`
  //     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
  //     Make of the device's CPU, e.g., Qualcomm.
  //  *  `deviceCpuModel`
  //     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
  //     Model of the device's CPU, e.g., "Kryo 240".
  //  *  `deviceGpuMake`
  //     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
  //     Make of the device's GPU, e.g., ARM.
  //  *  `deviceGpuModel`
  //     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
  //     Model of the device's GPU, e.g., Mali.
  //  *  `deviceGpuVersion`
  //     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
  //     Version of the device's GPU, e.g., T750.
  //  *  `deviceVulkanVersion`
  //     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
  //     Vulkan version of the device, e.g., "4198400".
  //  *  `deviceGlEsVersion`
  //     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
  //     OpenGL ES version of the device, e.g., "196610".
  //  *  `deviceScreenSize`
  //     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
  //     Screen size of the device, e.g., NORMAL, LARGE.
  //  *  `deviceScreenDpi`
  //     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
  //     Screen density of the device, e.g., mdpi, hdpi.
  repeated string dimensions = 3;

  // Metrics to aggregate.
  //
  // **Supported metrics:**
  //
  //  * `excessiveWakeupRate` (`google.type.Decimal`): Percentage of distinct
  //     users in the aggregation period that had more than 10 wakeups per hour.
  //  * `excessiveWakeupRate7dUserWeighted` (`google.type.Decimal`): Rolling
  //     average value of `excessiveWakeupRate` in the last 7 days. The daily
  //     values are weighted by the count of distinct users for the day.
  //  * `excessiveWakeupRate28dUserWeighted` (`google.type.Decimal`): Rolling
  //     average value of `excessiveWakeupRate` in the last 28 days. The daily
  //     values are weighted by the count of distinct users for the day.
  //  * `distinctUsers` (`google.type.Decimal`): Count of distinct users
  //     in the aggregation period that were used as normalization value for the
  //     `excessiveWakeupRate` metric. A user is counted in this metric if
  //     they app was doing any work on the device, i.e., not just active
  //     foreground usage but also background work. Care must be taken
  //     not to aggregate this count further, as it may result in users being
  //     counted multiple times. The value is rounded to the nearest
  //     multiple of 10, 100, 1,000 or 1,000,000, depending on the magnitude of
  //     the value.
  repeated string metrics = 4;

  // Filters to apply to data. The filtering expression follows
  // [AIP-160](https://google.aip.dev/160) standard and supports filtering
  // by equality of all breakdown dimensions.
  string filter = 7;

  // Maximum size of the returned data.
  //
  // If unspecified, at most 1000 rows will be returned.
  // The maximum value is 100000; values above 100000 will be coerced to 100000.
  int32 page_size = 5;

  // A page token, received from a previous call.
  // Provide this to retrieve the subsequent page.
  //
  // When paginating, all other parameters provided to the request must
  // match the call that provided the page token.
  string page_token = 6;

  // User view to select. The output data will correspond to the selected view.
  //
  // **Supported values:**
  //
  //  * `OS_PUBLIC`
  //     To select data from all publicly released Android versions. This is the
  //     default. Supports all the above dimensions.
  //  * `APP_TESTERS`
  //     To select data from users who have opted in to be testers. Supports all
  //     the above dimensions.
  //  * `OS_BETA`
  //     To select data from beta android versions only, excluding data from
  //     released android versions. Only the following dimensions are supported:
  //
  //    * `versionCode`
  //       ([int64][google.play.developer.reporting.v1beta1.DimensionValue.int64_value]):
  //       version of the app that was running on the user's device.
  //    * `osBuild`
  //       ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
  //       OS build of the user's device, e.g., "T1B2.220916.004".
  UserCohort user_cohort = 8;
}

// Response message for
// [QueryExcessiveWakeupRateMetricSet][google.play.developer.reporting.v1beta1.VitalsService.QueryExcessiveWakeupRateMetricSet].
message QueryExcessiveWakeupRateMetricSetResponse {

  // Returned rows of data.
  repeated MetricsRow rows = 1;

  // Continuation token to fetch the next page of data.
  string next_page_token = 2;
}

// Request message for
// [GetStuckBackgroundWakelockRateMetricSet][google.play.developer.reporting.v1beta1.VitalsService.GetStuckBackgroundWakelockRateMetricSet].
message GetStuckBackgroundWakelockRateMetricSetRequest {

  // The resource name.
  //
  // Format: apps/{app}/stuckBackgroundWakelockRateMetricSet
  string name = 1;
}

// Singleton resource representing the set of Stuck Background Wakelocks
// metrics.
//
// This metric set contains PowerManager wakelock duration data combined with
// process state data to produce a normalized metric independent of user counts.
//
// **Supported aggregation periods:**
//
//  * [DAILY][google.play.developer.reporting.v1beta1.AggregationPeriod.DAILY]:
//    metrics are aggregated in calendar date intervals. Due to historical
//    constraints, the only supported timezone is `America/Los_Angeles`.
//
// **Supported metrics:**
//
//  * `stuckBgWakelockRate` (`google.type.Decimal`): Percentage of distinct
//     users in the aggregation period that had a wakelock held in the
//     background for longer than 1 hour.
//  * `stuckBgWakelockRate7dUserWeighted` (`google.type.Decimal`): Rolling
//     average value of `stuckBgWakelockRate` in the last 7 days. The daily
//     values are weighted by the count of distinct users for the day.
//  * `stuckBgWakelockRate28dUserWeighted` (`google.type.Decimal`): Rolling
//     average value of `stuckBgWakelockRate` in the last 28 days. The daily
//     values are weighted by the count of distinct users for the day.
//  * `distinctUsers` (`google.type.Decimal`): Count of distinct users
//     in the aggregation period that were used as normalization value for the
//     `stuckBgWakelockRate` metric. A user is counted in this metric if
//     their app was doing any work on the device, i.e., not just active
//     foreground usage but also background work. Care must be taken
//     not to aggregate this count further, as it may result in users being
//     counted multiple times. The value is rounded to the nearest
//     multiple of 10, 100, 1,000 or 1,000,000, depending on the magnitude of
//     the value.
//
// **Supported dimensions:**
//
//  * `apiLevel`
//     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
//     the API level of Android that was running on the user's device, e.g., 26.
//  * `versionCode`
//     ([int64][google.play.developer.reporting.v1beta1.DimensionValue.int64_value]):
//     version of the app that was running on the user's device.
//  * `deviceModel`
//     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
//     unique identifier of the user's device model. The form of the
//     identifier is 'deviceBrand/device', where deviceBrand corresponds
//     to Build.BRAND and device corresponds to Build.DEVICE, e.g.,
//     google/coral.
//  * `deviceBrand`
//     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
//     unique identifier of the user's device brand, e.g., google.
//  * `deviceType`
//     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
//     the type (also known as form factor) of the user's device, e.g., PHONE.
//  * `countryCode`
//     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
//     the country or region of the user's device based on their IP address,
//     represented as a 2-letter ISO-3166 code (e.g. US for the United States).
//  * `deviceRamBucket`
//     ([int64][google.play.developer.reporting.v1beta1.DimensionValue.int64_value]):
//     RAM of the device, in MB, in buckets (3GB, 4GB, etc.).
//  *  `deviceSocMake`
//     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
//     Make of the device's primary system-on-chip, e.g., Samsung.
//     [Reference](https://developer.android.com/reference/android/os/Build#SOC_MANUFACTURER)
//  *  `deviceSocModel`
//     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
//     Model of the device's primary system-on-chip, e.g., "Exynos 2100".
//     [Reference](https://developer.android.com/reference/android/os/Build#SOC_MODEL)
//  *  `deviceCpuMake`
//     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
//     Make of the device's CPU, e.g., Qualcomm.
//  *  `deviceCpuModel`
//     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
//     Model of the device's CPU, e.g., "Kryo 240".
//  *  `deviceGpuMake`
//     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
//     Make of the device's GPU, e.g., ARM.
//  *  `deviceGpuModel`
//     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
//     Model of the device's GPU, e.g., Mali.
//  *  `deviceGpuVersion`
//     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
//     Version of the device's GPU, e.g., T750.
//  *  `deviceVulkanVersion`
//     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
//     Vulkan version of the device, e.g., "4198400".
//  *  `deviceGlEsVersion`
//     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
//     OpenGL ES version of the device, e.g., "196610".
//  *  `deviceScreenSize`
//     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
//     Screen size of the device, e.g., NORMAL, LARGE.
//  *  `deviceScreenDpi`
//     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
//     Screen density of the device, e.g., mdpi, hdpi.
//
// **Required permissions**: to access this resource, the calling user needs the
// _View app information (read-only)_ permission for the app.
//
// (== resource_for v1beta1.vitals.stuckbackgroundwakelockrate ==)
message StuckBackgroundWakelockRateMetricSet {

  // The resource name.
  //
  // Format: apps/{app}/stuckBackgroundWakelockRateMetricSet
  string name = 1;

  // Summary about data freshness in this resource.
  FreshnessInfo freshness_info = 2;
}

// Request message for
// [QueryStuckBackgroundWakelockRateMetricSet][google.play.developer.reporting.v1beta1.VitalsService.QueryStuckBackgroundWakelockRateMetricSet].
message QueryStuckBackgroundWakelockRateMetricSetRequest {

  // The resource name.
  //
  // Format: apps/{app}/stuckBackgroundWakelockRateMetricSet
  string name = 1;

  // Specification of the timeline aggregation parameters.
  //
  // **Supported aggregation periods:**
  //
  //  * [DAILY][google.play.developer.reporting.v1beta1.AggregationPeriod.DAILY]:
  //    metrics are aggregated in calendar date intervals. Due to historical
  //    constraints, the only supported timezone is `America/Los_Angeles`.
  TimelineSpec timeline_spec = 2;

  // Dimensions to slice the data by.
  //
  // **Supported dimensions:**
  //
  //  * `apiLevel`
  //     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
  //     the API level of Android that was running on the user's device,
  //     e.g., 26.
  //  * `versionCode`
  //     ([int64][google.play.developer.reporting.v1beta1.DimensionValue.int64_value]):
  //     version of the app that was running on the user's device.
  //  * `deviceModel`
  //     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
  //     unique identifier of the user's device model. The form of the
  //     identifier is 'deviceBrand/device', where deviceBrand corresponds
  //     to Build.BRAND and device corresponds to Build.DEVICE, e.g.,
  //     google/coral.
  //  * `deviceBrand`
  //     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
  //     unique identifier of the user's device brand, e.g., google.
  //  * `deviceType`
  //     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
  //     the type (also known as form factor) of the user's device, e.g., PHONE.
  //  * `countryCode`
  //     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
  //     the country or region of the user's device based on their IP address,
  //     represented as a 2-letter ISO-3166 code (e.g. US for the United
  //     States).
  //  * `deviceRamBucket`
  //     ([int64][google.play.developer.reporting.v1beta1.DimensionValue.int64_value]):
  //     RAM of the device, in MB, in buckets (3GB, 4GB, etc.).
  //  *  `deviceSocMake`
  //     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
  //     Make of the device's primary system-on-chip, e.g., Samsung.
  //     [Reference](https://developer.android.com/reference/android/os/Build#SOC_MANUFACTURER)
  //  *  `deviceSocModel`
  //     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
  //     Model of the device's primary system-on-chip, e.g., "Exynos 2100".
  //     [Reference](https://developer.android.com/reference/android/os/Build#SOC_MODEL)
  //  *  `deviceCpuMake`
  //     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
  //     Make of the device's CPU, e.g., Qualcomm.
  //  *  `deviceCpuModel`
  //     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
  //     Model of the device's CPU, e.g., "Kryo 240".
  //  *  `deviceGpuMake`
  //     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
  //     Make of the device's GPU, e.g., ARM.
  //  *  `deviceGpuModel`
  //     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
  //     Model of the device's GPU, e.g., Mali.
  //  *  `deviceGpuVersion`
  //     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
  //     Version of the device's GPU, e.g., T750.
  //  *  `deviceVulkanVersion`
  //     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
  //     Vulkan version of the device, e.g., "4198400".
  //  *  `deviceGlEsVersion`
  //     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
  //     OpenGL ES version of the device, e.g., "196610".
  //  *  `deviceScreenSize`
  //     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
  //     Screen size of the device, e.g., NORMAL, LARGE.
  //  *  `deviceScreenDpi`
  //     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
  //     Screen density of the device, e.g., mdpi, hdpi.
  repeated string dimensions = 3;

  // Metrics to aggregate.
  //
  // **Supported metrics:**
  //
  //  * `stuckBgWakelockRate` (`google.type.Decimal`): Percentage of
  //    distinct users in the aggregation period that had a wakelock held in the
  //     background for longer than 1 hour.
  //  * `stuckBgWakelockRate7dUserWeighted` (`google.type.Decimal`): Rolling
  //     average value of `stuckBgWakelockRate` in the last 7 days. The daily
  //     values are weighted by the count of distinct users for the day.
  //  * `stuckBgWakelockRate28dUserWeighted` (`google.type.Decimal`): Rolling
  //     average value of `stuckBgWakelockRate` in the last 28 days. The daily
  //     values are weighted by the count of distinct users for the day.
  //  * `distinctUsers` (`google.type.Decimal`): Count of distinct users
  //     in the aggregation period that were used as normalization value for the
  //     `stuckBgWakelockRate` metric. A user is counted in this metric if
  //     they app was doing any work on the device, i.e., not just active
  //     foreground usage but also background work. Care must be taken
  //     not to aggregate this count further, as it may result in users being
  //     counted multiple times. The value is rounded to the nearest
  //     multiple of 10, 100, 1,000 or 1,000,000, depending on the magnitude of
  //     the value.
  repeated string metrics = 4;

  // Filters to apply to data. The filtering expression follows
  // [AIP-160](https://google.aip.dev/160) standard and supports filtering
  // by equality of all breakdown dimensions.
  string filter = 7;

  // Maximum size of the returned data.
  //
  // If unspecified, at most 1000 rows will be returned.
  // The maximum value is 100000; values above 100000 will be coerced to 100000.
  int32 page_size = 5;

  // A page token, received from a previous call.
  // Provide this to retrieve the subsequent page.
  //
  // When paginating, all other parameters provided to the request must
  // match the call that provided the page token.
  string page_token = 6;

  // User view to select. The output data will correspond to the selected view.
  //
  // **Supported values:**
  //
  //  * `OS_PUBLIC`
  //     To select data from all publicly released Android versions. This is the
  //     default. Supports all the above dimensions.
  //  * `APP_TESTERS`
  //     To select data from users who have opted in to be testers. Supports all
  //     the above dimensions.
  //  * `OS_BETA`
  //     To select data from beta android versions only, excluding data from
  //     released android versions. Only the following dimensions are supported:
  //
  //    * `versionCode`
  //       ([int64][google.play.developer.reporting.v1beta1.DimensionValue.int64_value]):
  //       version of the app that was running on the user's device.
  //    * `osBuild`
  //       ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
  //       OS build of the user's device, e.g., "T1B2.220916.004".
  UserCohort user_cohort = 8;
}

// Response message for
// [QueryStuckBackgroundWakelockRateMetricSet][google.play.developer.reporting.v1beta1.VitalsService.QueryStuckBackgroundWakelockRateMetricSet].
message QueryStuckBackgroundWakelockRateMetricSetResponse {

  // Returned rows of data.
  repeated MetricsRow rows = 1;

  // Continuation token to fetch the next page of data.
  string next_page_token = 2;
}

// Request message for
// [GetSlowStartRateMetricSet][google.play.developer.reporting.v1beta1.VitalsService.GetSlowStartRateMetricSet].
message GetSlowStartRateMetricSetRequest {

  // The resource name.
  //
  // Format: apps/{app}/slowStartRateMetricSet
  string name = 1;
}

// Singleton resource representing the set of Slow Start metrics.
//
// This metric set contains Activity start duration data.
//
// **Supported aggregation periods:**
//
//  * [DAILY][google.play.developer.reporting.v1beta1.AggregationPeriod.DAILY]:
//    metrics are aggregated in calendar date intervals. Due to historical
//    constraints, the only supported timezone is `America/Los_Angeles`.
//
// **Supported metrics:**
//
//  * `slowStartRate` (`google.type.Decimal`): Percentage of distinct
//     users in the aggregation period that had a slow start.
//  * `slowStartRate7dUserWeighted` (`google.type.Decimal`): Rolling
//     average value of `slowStartRate` in the last 7 days. The daily
//     values are weighted by the count of distinct users for the day.
//  * `slowStartRate28dUserWeighted` (`google.type.Decimal`): Rolling
//     average value of `slowStartRate` in the last 28 days. The daily
//     values are weighted by the count of distinct users for the day.
//  * `distinctUsers` (`google.type.Decimal`): Count of distinct users
//     in the aggregation period that were used as normalization value for the
//     `slowStartRate` metric. A user is counted in this metric if
//     their app was launched in the device. Care must be taken
//     not to aggregate this count further, as it may result in users being
//     counted multiple times. The value is rounded to the nearest
//     multiple of 10, 100, 1,000 or 1,000,000, depending on the magnitude of
//     the value.
//
// **Required dimension:**
//
// This dimension must be specified with each request for the request to be
// valid.
//
//  * `startType`
//     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
//     the type of start that was measured. Valid types are `HOT`, `WARM` and
//     `COLD`.
//
// **Supported dimensions:**
//
//  * `apiLevel`
//     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
//     the API level of Android that was running on the user's device, e.g., 26.
//  * `versionCode`
//     ([int64][google.play.developer.reporting.v1beta1.DimensionValue.int64_value]):
//     version of the app that was running on the user's device.
//  * `deviceModel`
//     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
//     unique identifier of the user's device model. The form of the
//     identifier is 'deviceBrand/device', where deviceBrand corresponds
//     to Build.BRAND and device corresponds to Build.DEVICE, e.g.,
//     google/coral.
//  * `deviceBrand`
//     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
//     unique identifier of the user's device brand, e.g., google.
//  * `deviceType`
//     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
//     the type (also known as form factor) of the user's device, e.g., PHONE.
//  * `countryCode`
//     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
//     the country or region of the user's device based on their IP address,
//     represented as a 2-letter ISO-3166 code (e.g. US for the United States).
//  * `deviceRamBucket`
//     ([int64][google.play.developer.reporting.v1beta1.DimensionValue.int64_value]):
//     RAM of the device, in MB, in buckets (3GB, 4GB, etc.).
//  *  `deviceSocMake`
//     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
//     Make of the device's primary system-on-chip, e.g., Samsung.
//     [Reference](https://developer.android.com/reference/android/os/Build#SOC_MANUFACTURER)
//  *  `deviceSocModel`
//     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
//     Model of the device's primary system-on-chip, e.g., "Exynos 2100".
//     [Reference](https://developer.android.com/reference/android/os/Build#SOC_MODEL)
//  *  `deviceCpuMake`
//     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
//     Make of the device's CPU, e.g., Qualcomm.
//  *  `deviceCpuModel`
//     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
//     Model of the device's CPU, e.g., "Kryo 240".
//  *  `deviceGpuMake`
//     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
//     Make of the device's GPU, e.g., ARM.
//  *  `deviceGpuModel`
//     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
//     Model of the device's GPU, e.g., Mali.
//  *  `deviceGpuVersion`
//     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
//     Version of the device's GPU, e.g., T750.
//  *  `deviceVulkanVersion`
//     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
//     Vulkan version of the device, e.g., "4198400".
//  *  `deviceGlEsVersion`
//     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
//     OpenGL ES version of the device, e.g., "196610".
//  *  `deviceScreenSize`
//     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
//     Screen size of the device, e.g., NORMAL, LARGE.
//  *  `deviceScreenDpi`
//     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
//     Screen density of the device, e.g., mdpi, hdpi.
//
// **Required permissions**: to access this resource, the calling user needs the
// _View app information (read-only)_ permission for the app.
//
// (== resource_for v1beta1.vitals.slowstartrate ==)
message SlowStartRateMetricSet {

  // The resource name.
  //
  // Format: apps/{app}/slowStartRateMetricSet
  string name = 1;

  // Summary about data freshness in this resource.
  FreshnessInfo freshness_info = 2;
}

// Request message for
// [QuerySlowStartRateMetricSet][google.play.developer.reporting.v1beta1.VitalsService.QuerySlowStartRateMetricSet].
message QuerySlowStartRateMetricSetRequest {

  // The resource name.
  //
  // Format: apps/{app}/slowStartRateMetricSet
  string name = 1;

  // Specification of the timeline aggregation parameters.
  //
  // **Supported aggregation periods:**
  //
  //  * [DAILY][google.play.developer.reporting.v1beta1.AggregationPeriod.DAILY]:
  //    metrics are aggregated in calendar date intervals. Due to historical
  //    constraints, the only supported timezone is `America/Los_Angeles`.
  TimelineSpec timeline_spec = 2;

  // Dimensions to slice the data by.
  //
  // **Supported dimensions:**
  //
  //  * `apiLevel`
  //     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
  //     the API level of Android that was running on the user's device,
  //     e.g., 26.
  //  * `versionCode`
  //     ([int64][google.play.developer.reporting.v1beta1.DimensionValue.int64_value]):
  //     version of the app that was running on the user's device.
  //  * `deviceModel`
  //     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
  //     unique identifier of the user's device model. The form of the
  //     identifier is 'deviceBrand/device', where deviceBrand corresponds
  //     to Build.BRAND and device corresponds to Build.DEVICE, e.g.,
  //     google/coral.
  //  * `deviceBrand`
  //     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
  //     unique identifier of the user's device brand, e.g., google.
  //  * `deviceType`
  //     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
  //     the type (also known as form factor) of the user's device, e.g., PHONE.
  //  * `countryCode`
  //     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
  //     the country or region of the user's device based on their IP address,
  //     represented as a 2-letter ISO-3166 code (e.g. US for the United
  //     States).
  //  * `deviceRamBucket`
  //     ([int64][google.play.developer.reporting.v1beta1.DimensionValue.int64_value]):
  //     RAM of the device, in MB, in buckets (3GB, 4GB, etc.).
  //  *  `deviceSocMake`
  //     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
  //     Make of the device's primary system-on-chip, e.g., Samsung.
  //     [Reference](https://developer.android.com/reference/android/os/Build#SOC_MANUFACTURER)
  //  *  `deviceSocModel`
  //     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
  //     Model of the device's primary system-on-chip, e.g., "Exynos 2100".
  //     [Reference](https://developer.android.com/reference/android/os/Build#SOC_MODEL)
  //  *  `deviceCpuMake`
  //     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
  //     Make of the device's CPU, e.g., Qualcomm.
  //  *  `deviceCpuModel`
  //     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
  //     Model of the device's CPU, e.g., "Kryo 240".
  //  *  `deviceGpuMake`
  //     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
  //     Make of the device's GPU, e.g., ARM.
  //  *  `deviceGpuModel`
  //     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
  //     Model of the device's GPU, e.g., Mali.
  //  *  `deviceGpuVersion`
  //     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
  //     Version of the device's GPU, e.g., T750.
  //  *  `deviceVulkanVersion`
  //     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
  //     Vulkan version of the device, e.g., "4198400".
  //  *  `deviceGlEsVersion`
  //     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
  //     OpenGL ES version of the device, e.g., "196610".
  //  *  `deviceScreenSize`
  //     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
  //     Screen size of the device, e.g., NORMAL, LARGE.
  //  *  `deviceScreenDpi`
  //     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
  //     Screen density of the device, e.g., mdpi, hdpi.
  repeated string dimensions = 3;

  // Metrics to aggregate.
  //
  // **Supported metrics:**
  //
  //  * `slowStartRate` (`google.type.Decimal`): Percentage of distinct
  //     users in the aggregation period that had a slow start.
  //  * `slowStartRate7dUserWeighted` (`google.type.Decimal`): Rolling
  //     average value of `slowStartRate` in the last 7 days. The daily
  //     values are weighted by the count of distinct users for the day.
  //  * `slowStartRate28dUserWeighted` (`google.type.Decimal`): Rolling
  //     average value of `slowStartRate` in the last 28 days. The daily
  //     values are weighted by the count of distinct users for the day.
  //  * `distinctUsers` (`google.type.Decimal`): Count of distinct users
  //     in the aggregation period that were used as normalization value for the
  //     `slowStartRate` metric. A user is counted in this metric if
  //     their app was launched in the device. Care must be taken
  //     not to aggregate this count further, as it may result in users being
  //     counted multiple times. The value is rounded to the nearest
  //     multiple of 10, 100, 1,000 or 1,000,000, depending on the magnitude of
  //     the value.
  repeated string metrics = 4;

  // Filters to apply to data. The filtering expression follows
  // [AIP-160](https://google.aip.dev/160) standard and supports filtering
  // by equality of all breakdown dimensions.
  string filter = 7;

  // Maximum size of the returned data.
  //
  // If unspecified, at most 1000 rows will be returned.
  // The maximum value is 100000; values above 100000 will be coerced to 100000.
  int32 page_size = 5;

  // A page token, received from a previous call.
  // Provide this to retrieve the subsequent page.
  //
  // When paginating, all other parameters provided to the request must
  // match the call that provided the page token.
  string page_token = 6;

  // User view to select. The output data will correspond to the selected view.
  //
  // **Supported values:**
  //
  //  * `OS_PUBLIC`
  //     To select data from all publicly released Android versions. This is the
  //     default. Supports all the above dimensions.
  //  * `APP_TESTERS`
  //     To select data from users who have opted in to be testers. Supports all
  //     the above dimensions.
  //  * `OS_BETA`
  //     To select data from beta Android versions only, excluding data from
  //     released Android versions. Only the following dimensions are supported:
  //
  //    * `versionCode`
  //       ([int64][google.play.developer.reporting.v1beta1.DimensionValue.int64_value]):
  //       version of the app that was running on the user's device.
  //    * `osBuild`
  //       ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
  //       OS build of the user's device, e.g., "T1B2.220916.004".
  UserCohort user_cohort = 8;
}

// Response message for
// [QuerySlowStartRateMetricSet][google.play.developer.reporting.v1beta1.VitalsService.QuerySlowStartRateMetricSet].
message QuerySlowStartRateMetricSetResponse {

  // Returned rows of data.
  repeated MetricsRow rows = 1;

  // Continuation token to fetch the next page of data.
  string next_page_token = 2;
}

// Request message for
// [GetSlowRenderingRateMetricSet][google.play.developer.reporting.v1beta1.VitalsService.GetSlowRenderingRateMetricSet].
message GetSlowRenderingRateMetricSetRequest {

  // The resource name.
  //
  // Format: apps/{app}/slowRenderingRateMetricSet
  string name = 1;
}

// Singleton resource representing the set of Slow Rendering metrics.
//
// This metric set contains low-level rendering data captured by SurafeFlinger.
// Sessions are evaluated based on the present-to-present histogram of frames
// handled by any SurfaceFlinger layer owned by the app.
//
// A slow session is a session where more than 25% of frames for the session
// did not meet the metric's target frame rate (either 20fps, or 30fps).
//
// *NOTE:* This metric set is only available for games.
//
// **Supported aggregation periods:**
//
//  * [DAILY][google.play.developer.reporting.v1beta1.AggregationPeriod.DAILY]:
//    metrics are aggregated in calendar date intervals. Due to historical
//    constraints, the only supported timezone is `America/Los_Angeles`.
//
// **Supported metrics:**
//
//  * `slowRenderingRate20Fps` (`google.type.Decimal`): Percentage of distinct
//     users in the aggregation period that had slow rendering.
//  * `slowRenderingRate20Fps7dUserWeighted` (`google.type.Decimal`): Rolling
//     average value of `slowRenderingRate20Fps` in the last 7 days. The daily
//     values are weighted by the count of distinct users for the day.
//  * `slowRenderingRate20Fps28dUserWeighted` (`google.type.Decimal`): Rolling
//     average value of `slowRenderingRate20Fps` in the last 28 days. The daily
//     values are weighted by the count of distinct users for the day.
//  * `slowRenderingRate30Fps` (`google.type.Decimal`): Percentage of distinct
//     users in the aggregation period that had slow rendering.
//  * `slowRenderingRate30Fps7dUserWeighted` (`google.type.Decimal`): Rolling
//     average value of `slowRenderingRate30Fps` in the last 7 days. The daily
//     values are weighted by the count of distinct users for the day.
//  * `slowRenderingRate30Fps28dUserWeighted` (`google.type.Decimal`): Rolling
//     average value of `slowRenderingRate30Fps` in the last 28 days. The daily
//     values are weighted by the count of distinct users for the day.
//  * `distinctUsers` (`google.type.Decimal`): Count of distinct users
//     in the aggregation period that were used as normalization value for the
//     `slowRenderingRate20Fps`/`slowRenderingRate30Fps` metric. A user is
//     counted in this metric if their app rendered any frames. Care must
//     be taken not to aggregate this count further, as it may result in users
//     being counted multiple times. The value is rounded to the nearest
//     multiple of 10, 100, 1,000 or 1,000,000, depending on the magnitude of
//     the value.
//
// **Supported dimensions:**
//
//  * `apiLevel`
//     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
//     the API level of Android that was running on the user's device, e.g., 26.
//  * `versionCode`
//     ([int64][google.play.developer.reporting.v1beta1.DimensionValue.int64_value]):
//     version of the app that was running on the user's device.
//  * `deviceModel`
//     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
//     unique identifier of the user's device model. The form of the
//     identifier is 'deviceBrand/device', where deviceBrand corresponds
//     to Build.BRAND and device corresponds to Build.DEVICE, e.g.,
//     google/coral.
//  * `deviceBrand`
//     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
//     unique identifier of the user's device brand, e.g., google.
//  * `deviceType`
//     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
//     the type (also known as form factor) of the user's device, e.g., PHONE.
//  * `countryCode`
//     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
//     the country or region of the user's device based on their IP address,
//     represented as a 2-letter ISO-3166 code (e.g. US for the United States).
//  * `deviceRamBucket`
//     ([int64][google.play.developer.reporting.v1beta1.DimensionValue.int64_value]):
//     RAM of the device, in MB, in buckets (3GB, 4GB, etc.).
//  *  `deviceSocMake`
//     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
//     Make of the device's primary system-on-chip, e.g., Samsung.
//     [Reference](https://developer.android.com/reference/android/os/Build#SOC_MANUFACTURER)
//  *  `deviceSocModel`
//     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
//     Model of the device's primary system-on-chip, e.g., "Exynos 2100".
//     [Reference](https://developer.android.com/reference/android/os/Build#SOC_MODEL)
//  *  `deviceCpuMake`
//     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
//     Make of the device's CPU, e.g., Qualcomm.
//  *  `deviceCpuModel`
//     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
//     Model of the device's CPU, e.g., "Kryo 240".
//  *  `deviceGpuMake`
//     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
//     Make of the device's GPU, e.g., ARM.
//  *  `deviceGpuModel`
//     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
//     Model of the device's GPU, e.g., Mali.
//  *  `deviceGpuVersion`
//     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
//     Version of the device's GPU, e.g., T750.
//  *  `deviceVulkanVersion`
//     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
//     Vulkan version of the device, e.g., "4198400".
//  *  `deviceGlEsVersion`
//     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
//     OpenGL ES version of the device, e.g., "196610".
//  *  `deviceScreenSize`
//     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
//     Screen size of the device, e.g., NORMAL, LARGE.
//  *  `deviceScreenDpi`
//     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
//     Screen density of the device, e.g., mdpi, hdpi.
//
// **Required permissions**: to access this resource, the calling user needs the
// _View app information (read-only)_ permission for the app.
//
// (== resource_for v1beta1.vitals.slowrenderingrate ==)
message SlowRenderingRateMetricSet {

  // The resource name.
  //
  // Format: apps/{app}/slowRenderingRateMetricSet
  string name = 1;

  // Summary about data freshness in this resource.
  FreshnessInfo freshness_info = 2;
}

// Request message for
// [QuerySlowRenderingRateMetricSet][google.play.developer.reporting.v1beta1.VitalsService.QuerySlowRenderingRateMetricSet].
message QuerySlowRenderingRateMetricSetRequest {

  // The resource name.
  //
  // Format: apps/{app}/slowRenderingRateMetricSet
  string name = 1;

  // Specification of the timeline aggregation parameters.
  //
  // **Supported aggregation periods:**
  //
  //  * [DAILY][google.play.developer.reporting.v1beta1.AggregationPeriod.DAILY]:
  //    metrics are aggregated in calendar date intervals. Due to historical
  //    constraints, the only supported timezone is `America/Los_Angeles`.
  TimelineSpec timeline_spec = 2;

  // Dimensions to slice the data by.
  //
  // **Supported dimensions:**
  //
  //  * `apiLevel`
  //     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
  //     the API level of Android that was running on the user's device,
  //     e.g., 26.
  //  * `versionCode`
  //     ([int64][google.play.developer.reporting.v1beta1.DimensionValue.int64_value]):
  //     version of the app that was running on the user's device.
  //  * `deviceModel`
  //     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
  //     unique identifier of the user's device model. The form of the
  //     identifier is 'deviceBrand/device', where deviceBrand corresponds
  //     to Build.BRAND and device corresponds to Build.DEVICE, e.g.,
  //     google/coral.
  //  * `deviceBrand`
  //     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
  //     unique identifier of the user's device brand, e.g., google.
  //  * `deviceType`
  //     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
  //     the type (also known as form factor) of the user's device, e.g., PHONE.
  //  * `countryCode`
  //     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
  //     the country or region of the user's device based on their IP address,
  //     represented as a 2-letter ISO-3166 code (e.g. US for the United
  //     States).
  //  * `deviceRamBucket`
  //     ([int64][google.play.developer.reporting.v1beta1.DimensionValue.int64_value]):
  //     RAM of the device, in MB, in buckets (3GB, 4GB, etc.).
  //  *  `deviceSocMake`
  //     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
  //     Make of the device's primary system-on-chip, e.g., Samsung.
  //     [Reference](https://developer.android.com/reference/android/os/Build#SOC_MANUFACTURER)
  //  *  `deviceSocModel`
  //     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
  //     Model of the device's primary system-on-chip, e.g., "Exynos 2100".
  //     [Reference](https://developer.android.com/reference/android/os/Build#SOC_MODEL)
  //  *  `deviceCpuMake`
  //     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
  //     Make of the device's CPU, e.g., Qualcomm.
  //  *  `deviceCpuModel`
  //     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
  //     Model of the device's CPU, e.g., "Kryo 240".
  //  *  `deviceGpuMake`
  //     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
  //     Make of the device's GPU, e.g., ARM.
  //  *  `deviceGpuModel`
  //     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
  //     Model of the device's GPU, e.g., Mali.
  //  *  `deviceGpuVersion`
  //     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
  //     Version of the device's GPU, e.g., T750.
  //  *  `deviceVulkanVersion`
  //     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
  //     Vulkan version of the device, e.g., "4198400".
  //  *  `deviceGlEsVersion`
  //     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
  //     OpenGL ES version of the device, e.g., "196610".
  //  *  `deviceScreenSize`
  //     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
  //     Screen size of the device, e.g., NORMAL, LARGE.
  //  *  `deviceScreenDpi`
  //     ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
  //     Screen density of the device, e.g., mdpi, hdpi.
  repeated string dimensions = 3;

  // Metrics to aggregate.
  //
  // **Supported metrics:**
  //
  //  * `slowRenderingRate20Fps` (`google.type.Decimal`): Percentage of distinct
  //     users in the aggregation period that had a slow rendering.
  //  * `slowRenderingRate20Fps7dUserWeighted` (`google.type.Decimal`): Rolling
  //     average value of `slowRenderingRate20Fps` in the last 7 days. The daily
  //     values are weighted by the count of distinct users for the day.
  //  * `slowRenderingRate20Fps28dUserWeighted` (`google.type.Decimal`): Rolling
  //     average value of `slowRenderingRate20Fps` in the last 28 days. The
  //     daily values are weighted by the count of distinct users for the day.
  //  * `slowRenderingRate30Fps` (`google.type.Decimal`): Percentage of distinct
  //     users in the aggregation period that had a slow rendering.
  //  * `slowRenderingRate30Fps7dUserWeighted` (`google.type.Decimal`): Rolling
  //     average value of `slowRenderingRate30Fps` in the last 7 days. The daily
  //     values are weighted by the count of distinct users for the day.
  //  * `slowRenderingRate30Fps28dUserWeighted` (`google.type.Decimal`): Rolling
  //     average value of `slowRenderingRate30Fps` in the last 28 days. The
  //     daily values are weighted by the count of distinct users for the day.
  //  * `distinctUsers` (`google.type.Decimal`): Count of distinct users
  //     in the aggregation period that were used as normalization value for the
  //     `slowRenderingRate20Fps`/`slowRenderingRate30Fps` metric. A user is
  //     counted in this metric if their app was launched in the device. Care
  //     must be taken not to aggregate this count further, as it may result in
  //     users being counted multiple times. The value is rounded to the nearest
  //     multiple of 10, 100, 1,000 or 1,000,000, depending on the magnitude of
  //     the value.
  repeated string metrics = 4;

  // Filters to apply to data. The filtering expression follows
  // [AIP-160](https://google.aip.dev/160) standard and supports filtering
  // by equality of all breakdown dimensions.
  string filter = 7;

  // Maximum size of the returned data.
  //
  // If unspecified, at most 1000 rows will be returned.
  // The maximum value is 100000; values above 100000 will be coerced to 100000.
  int32 page_size = 5;

  // A page token, received from a previous call.
  // Provide this to retrieve the subsequent page.
  //
  // When paginating, all other parameters provided to the request must
  // match the call that provided the page token.
  string page_token = 6;

  // User view to select. The output data will correspond to the selected view.
  //
  // **Supported values:**
  //
  //  * `OS_PUBLIC`
  //     To select data from all publicly released Android versions. This is the
  //     default. Supports all the above dimensions.
  //  * `APP_TESTERS`
  //     To select data from users who have opted in to be testers. Supports all
  //     the above dimensions.
  //  * `OS_BETA`
  //     To select data from beta Android versions only, excluding data from
  //     released Android versions. Only the following dimensions are supported:
  //
  //    * `versionCode`
  //       ([int64][google.play.developer.reporting.v1beta1.DimensionValue.int64_value]):
  //       version of the app that was running on the user's device.
  //    * `osBuild`
  //       ([string][google.play.developer.reporting.v1beta1.DimensionValue.string_value]):
  //       OS build of the user's device, e.g., "T1B2.220916.004".
  UserCohort user_cohort = 8;
}

// Response message for
// [QuerySlowRenderingRateMetricSet][google.play.developer.reporting.v1beta1.VitalsService.QuerySlowRenderingRateMetricSet].
message QuerySlowRenderingRateMetricSetResponse {

  // Returned rows of data.
  repeated MetricsRow rows = 1;

  // Continuation token to fetch the next page of data.
  string next_page_token = 2;
}
