# Copyright 2021 The Fuchsia Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

################################################################################
# Cobalt Project: camera
################################################################################

metric_definitions:

################################################################################
# Next Metric ID: 7
################################################################################

################################################################################
# camera_frame_drop_counts_per_stream
#
# Total number of dropped frames per stream type.  Typically, the system decides
# to skip a delivered frame in following cases:
#   1. FrameAvailableInfo contains an erroneous status,
#   2. Delivered frame has a duplicated identifier,
#   3. Delivered frame does not have a timestamp,
#   4. Or, too many frames are currently in use.
################################################################################
- id: 1
  metric_name: camera_frame_drop_counts_per_stream
  metric_type: OCCURRENCE
  metric_semantics: [METRIC_SEMANTICS_UNSPECIFIED]

  metric_dimensions:
    - dimension: stream_type
      event_codes: &stream_types
        1: Stream 0
        2: Stream 1
        3: Stream 2
        4: Stream 3
        5: Stream 4
        6: Stream 5
        7: Stream 6
        8: Stream 7
        9: Stream 8
      # Set the maximal code value as 99 to accommodate any value larger than 9.
      max_event_code: 99

    - dimension: error_code
      event_codes: &error_codes
        1: General
        2: InvalidFrame             # Corresponding to FrameStatus::ERROR_FRAME
        3: NoMemory                 # Corresponding to FrameStatus::ERROR_BUFFER_FULL
        4: FrameIdInUse
        5: InvalidTimestamp
        6: TooManyFramesInFlight
        7: Muted
        8: NoClient

  reports:
    - report_name: camera_stream_frame_drop_stat
      id: 1
      report_type: FLEETWIDE_OCCURRENCE_COUNTS
      privacy_level: NO_ADDED_PRIVACY
      system_profile_field: [OS, ARCH, BOARD_NAME, PRODUCT_NAME, SYSTEM_VERSION, CHANNEL, REALM]

  meta_data:
    max_release_stage: GA
    expiration_date: "2022/05/18"

- id: 2
  metric_name: camera_open_latency_per_stream
  metric_type: INTEGER
  metric_units: MICROSECONDS
  metric_semantics: [LATENCY]

  metric_dimensions:
    - dimension: stream_type
      event_codes: *stream_types

  reports:
    - report_name: camera_stream_open_latency_histograms
      id: 1
      report_type: FLEETWIDE_HISTOGRAMS
      privacy_level: NO_ADDED_PRIVACY
      int_buckets: &latency_histogram_buckets
        linear:
          floor: 0
          num_buckets: 50       # Up to 5 seconds
          step_size: 100000     # 100ms
      system_profile_field: [OS, ARCH, BOARD_NAME, PRODUCT_NAME, SYSTEM_VERSION, CHANNEL, REALM]

  meta_data:
    max_release_stage: GA
    expiration_date: "2022/05/18"

- id: 3
  metric_name: camera_duration_per_stream
  metric_type: INTEGER
  metric_units: MICROSECONDS
  metric_semantics: [METRIC_SEMANTICS_UNSPECIFIED]

  metric_dimensions:
    - dimension: stream_type
      event_codes: *stream_types

  reports:
    - report_name: camera_stream_duration_histograms
      id: 1
      report_type: FLEETWIDE_HISTOGRAMS
      privacy_level: NO_ADDED_PRIVACY
      int_buckets:
        linear:
          floor: 0
          num_buckets: 20       # Up to 1 hour
          step_size: 300000000  # 5 minutes
      system_profile_field: [OS, ARCH, BOARD_NAME, PRODUCT_NAME, SYSTEM_VERSION, CHANNEL, REALM]

  meta_data:
    max_release_stage: GA
    expiration_date: "2022/05/18"

- id: 4
  metric_name: camera_stream_close_error
  metric_type: OCCURRENCE
  metric_semantics: [METRIC_SEMANTICS_UNSPECIFIED]

  metric_dimensions:
    - dimension: stream_type
      event_codes: *stream_types

    - dimension: error_code
      event_codes:
        # Internal failures
        1: INTERNAL
        2: NOT_SUPPORTED
        3: NO_RESOURCES
        4: NO_MEMORY
        # Parameter errors
        10: INVALID_ARGS
        11: BAD_HANDLE
        14: OUT_OF_RANGE
        15: BUFFER_TOO_SMALL
        # Precondition or state errors
        20: BAD_STATE
        21: TIMED_OUT
        24: PEER_CLOSED
        25: NOT_FOUND
        26: ALREADY_EXISTS
        28: UNAVAILABLE
        # Permission check errors
        30: ACCESS_DENIED
        # I/O errors
        40: IO
        # Flow control
        60: STOP

  reports:
    - report_name: camera_stream_close_error_stat
      id: 1
      report_type: FLEETWIDE_OCCURRENCE_COUNTS
      privacy_level: NO_ADDED_PRIVACY
      system_profile_field: [OS, ARCH, BOARD_NAME, PRODUCT_NAME, SYSTEM_VERSION, CHANNEL, REALM]

  meta_data:
    max_release_stage: GA
    expiration_date: "2022/05/18"

- id: 5
  metric_name: camera_stream_memory_bandwidth_in_kbytes
  metric_type: INTEGER
  metric_units: KILOBYTES
  metric_semantics: [MEMORY_USAGE]

  metric_dimensions:
    - dimension: stream_type
      event_codes: *stream_types

    - dimension: channels
      event_codes:
        1: CPU
        2: ISP
        3: GPU
        4: GE2D

  reports:
    - report_name: camera_stream_average_memory_bandwidth
      id: 1
      report_type: FLEETWIDE_MEANS
      privacy_level: NO_ADDED_PRIVACY
      system_profile_field: [OS, ARCH, BOARD_NAME, PRODUCT_NAME, SYSTEM_VERSION, CHANNEL, REALM]

  meta_data:
    max_release_stage: GA
    expiration_date: "2022/05/18"

################################################################################
# camera_failure_frequency
#
# This metric is intended to capture failure rates of known issues in the field.
# An occurrence is triggered when the conditions necessary for such a failure
# are encountered, with the FailureTestResult dimension indicating whether the
# failure actually occurred.
################################################################################
- id: 6
  metric_name: camera_failure_frequency
  metric_type: OCCURRENCE
  metric_semantics: [USAGE_COUNTING]

  metric_dimensions:
    - dimension: FailureTestType
      event_codes:
        # Conditions: driver stream connected and streaming requested
        # Failure: driver stops (or never starts) sending frames
        # Success: driver stream disconnected without Failure
        1: FramesStuckInPipeline
        # Conditions: sensor module reset requested
        # Failure: sensor never comes out of reset state
        # Success: sensor comes out of reset and begins responding
        2: SensorFailedToReset
    - dimension: FailureTestResult
      event_codes:
        1: Success
        2: Failure
    - dimension: ConfigIndex
      event_codes:
        0: NotApplicable
        1: Config0
        2: Config1
        3: Config2
    - dimension: StreamIndex
      event_codes:
        0: NotApplicable
        1: Stream0
        2: Stream1
        3: Stream2

  reports:
    - report_name: fleetwide_counts
      id: 1
      report_type: FLEETWIDE_OCCURRENCE_COUNTS
      privacy_level: NO_ADDED_PRIVACY
      system_profile_field: [BOARD_NAME, PRODUCT_NAME, SYSTEM_VERSION, CHANNEL]
    - report_name: per_device_counts
      id: 2
      report_type: UNIQUE_DEVICE_HISTOGRAMS
      privacy_level: NO_ADDED_PRIVACY
      system_profile_selection: SELECT_LAST
      local_aggregation_period: WINDOW_1_DAY
      int_buckets: &buckets_pow2
        exponential:
          # 0, 1, 2, 4, 8, ...~1e9
          floor: 0
          num_buckets: 32
          initial_step: 1
          step_multiplier: 2
      system_profile_field: [BOARD_NAME, PRODUCT_NAME, SYSTEM_VERSION, CHANNEL]
    - report_name: per_device_statistics
      id: 3
      report_type: UNIQUE_DEVICE_NUMERIC_STATS
      privacy_level: NO_ADDED_PRIVACY
      local_aggregation_period: WINDOW_1_DAY
      system_profile_field: [BOARD_NAME, PRODUCT_NAME, SYSTEM_VERSION, CHANNEL]

  meta_data:
    max_release_stage: GA
    expiration_date: "2023/04/20"
