| /* |
| * Copyright (C) 2023 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| syntax = "proto2"; |
| |
| package android.os.statsd.media; |
| |
| import "frameworks/proto_logging/stats/atoms.proto"; |
| import "frameworks/proto_logging/stats/atom_field_options.proto"; |
| import "frameworks/proto_logging/stats/enums/media/codec/enums.proto"; |
| |
| extend Atom { |
| optional MediaCodecReclaimRequestCompleted |
| media_codec_reclaim_request_completed = 600 |
| [(module) = "framework", (module) = "media_metrics"]; |
| |
| optional MediaCodecStarted media_codec_started = 641 |
| [(module) = "framework", (module) = "media_metrics"]; |
| |
| optional MediaCodecStopped media_codec_stopped = 642 |
| [(module) = "framework", (module) = "media_metrics"]; |
| |
| optional MediaCodecRendered media_codec_rendered = 684 |
| [(module) = "framework", (module) = "media_metrics"]; |
| } |
| |
| /** |
| * MediaResourceManagerService (media.resource_manager) logs this event |
| * when a client requests to reclaim codec(s) from other process(es). |
| * |
| * To decide from which process to reclaim the resources, the |
| * MediaResourceManagerService uses "out of memory" score to prioritize |
| * the requesting processes. Lower the oom score, higher the priority. |
| * |
| * If multiple codecs are reclaimed to satisfy the current (codec) reclaim |
| * request, then there will be one MediaCodecReclaimRequestCompleted atom logged |
| * for each codec reclaimed. |
| * The target_index will index through the reclaimed codecs. |
| * |
| * Logged from: |
| * frameworks/av/services/mediaresourcemanager/ResourceManagerService.cpp |
| * |
| * @since U |
| */ |
| message MediaCodecReclaimRequestCompleted { |
| // Requester Information: Process that triggered codec reclaim event. |
| // The uid of the Requester. |
| optional int32 requester_uid = 1 [(is_uid) = true]; |
| |
| // The oom score of the Requester. |
| optional int32 requester_oom_score = 2; |
| |
| // Codec Information: Codec that the Requester wants to initialize. |
| // The name of the codec that requester needs. |
| // eg. `OMX.google.aac.decoder` |
| optional string codec = 3; |
| |
| // The number of concurrent instances of this codec, when the |
| // reclaim request was made. |
| optional int32 no_of_concurrent_codecs = 4; |
| |
| // Reclaim Information: |
| // Status of reclaim request. |
| optional android.media.codec.ReclaimStatus reclaim_status = 5; |
| |
| // If it was a successful reclaim, the number of codecs that have been reclaimed. |
| optional int32 no_of_codecs_reclaimed = 6; |
| |
| // Information of the (target) process that it belonged to. |
| // If no_of_codecs_reclaimed is more than 1, this will be target index. |
| optional int32 target_index = 7; |
| // The uid of the Target. |
| optional int32 target_uid = 8 [(is_uid) = true]; |
| // The oom score of the Target. |
| optional int32 target_oom_score = 9; |
| } |
| |
| /** |
| * MediaResourceManagerService (media.resource_manager) logs this event |
| * when a client starts a codec. |
| * |
| * Logged from: |
| * frameworks/av/services/mediaresourcemanager/ResourceManagerService.cpp |
| * |
| * @since U |
| */ |
| message MediaCodecStarted { |
| // Reporter Information: Application/Process that started the codec. |
| // The uid of the Requester. |
| optional int32 requester_uid = 1 [(is_uid) = true]; |
| |
| // Randomly generated Codec ID for: |
| // - finding the corresponding MediaCodecStopped atom. |
| // - correlating MediaCodecReported for more codec configuration parameters. |
| optional int64 codec_id = 2; |
| |
| // The name of the codec that the requester starts. |
| // eg. `OMX.google.aac.decoder` |
| optional string codec_name = 3; |
| |
| // Type of codec (Audio/Video/Image). |
| optional android.media.codec.CodecType codec_type = 4; |
| |
| // true if this is an encoder, false if this is a decoder. |
| optional bool is_encoder = 5; |
| |
| // true if this is hardware codec, false otherwise (software or neither) |
| optional bool is_hardware = 6; |
| |
| // Resolution as width x height. |
| optional int32 width = 7; |
| optional int32 height = 8; |
| |
| // Total number of concurrent codecs in the system. |
| optional int32 system_concurrent_codec_count = 9; |
| |
| // Total number of concurrent codecs owned by this application. |
| optional int32 app_concurrent_codec_count = 10; |
| |
| // Current total pixel count for this application. |
| optional int64 total_pixel_count = 11; |
| |
| // Total number of concurrent HW Video codecs owned by this application. |
| optional int32 app_concurrent_hw_video_codec_count = 12; |
| |
| // Total number of concurrent SW Video codecs owned by this application. |
| optional int32 app_concurrent_sw_video_codec_count = 13; |
| |
| // Total number of concurrent Video codecs owned by this application. |
| optional int32 app_concurrent_video_codec_count = 14; |
| |
| // Total number of concurrent Audio codecs owned by this application. |
| optional int32 app_concurrent_audio_codec_count = 15; |
| |
| // Total number of concurrent Image codecs owned by this application. |
| optional int32 app_concurrent_image_codec_count = 16; |
| } |
| |
| /** |
| * MediaResourceManagerService (media.resource_manager) logs this event |
| * when a client stops a codec. |
| * |
| * Logged from: |
| * frameworks/av/services/mediaresourcemanager/ResourceManagerService.cpp |
| * |
| * @since U |
| */ |
| message MediaCodecStopped { |
| // Reporter Information: Application/Process that stopped the codec. |
| // The uid of the Requester. |
| optional int32 requester_uid = 1 [(is_uid) = true]; |
| |
| // Randomly generated Codec ID for: |
| // - finding the corresponding MediaCodecStarted atom. |
| // - correlating MediaCodecReported for more codec configuration parameters. |
| optional int64 codec_id = 2; |
| |
| // The name of the codec that the requester starts. |
| // eg. `OMX.google.aac.decoder` |
| optional string codec_name = 3; |
| |
| // Type of codec (Audio/Video/Image). |
| optional android.media.codec.CodecType codec_type = 4; |
| |
| // true if this is an encoder, false if this is a decoder. |
| optional bool is_encoder = 5; |
| |
| // true if this is hardware codec, false otherwise (software or neither) |
| optional bool is_hardware = 6; |
| |
| // Resolution as width x height. |
| optional int32 width = 7; |
| optional int32 height = 8; |
| |
| // Total number of concurrent codecs in the system. |
| optional int32 system_concurrent_codec_count = 9; |
| |
| // Total number of concurrent codecs owned by this application. |
| optional int32 app_concurrent_codec_count = 10; |
| |
| // Current total pixel count for this application. |
| optional int64 total_pixel_count = 11; |
| |
| // Time elapsed between codec start to stop, in microseconds |
| optional int64 codec_operation_duration_ms = 12; |
| } |
| |
| /** |
| * MediaCodec logs this event when a codec that has rendered video to the display has been closed. |
| * |
| * Logged from: |
| * frameworks/av/media/libstagefright/MediaCodec.cpp |
| */ |
| message MediaCodecRendered { |
| // Application/Process that owns the media codec. |
| optional int32 uid = 1 [(is_uid) = true]; |
| |
| // Randomly generated Codec ID for: |
| // - finding the corresponding MediaCodecReported for more codec configuration parameters |
| optional int64 codec_id = 2; |
| |
| // Framework generated random temporary id for joining related atoms from media playback. |
| optional string log_session_id = 3; |
| |
| // |
| // DIMENSIONS |
| // |
| // Whether or not the codec was a hardware codec. |
| optional int32 is_hardware = 4; |
| // Whether or not a secure codec was used. |
| optional int32 is_secure = 5; |
| // Whether or not the codec is tunneled. |
| optional int32 is_tunneled = 6; |
| // The type of codec that was used. |
| optional android.media.codec.Codec codec = 7; |
| // The maximum resolution during playback. |
| optional android.media.codec.Resolution resolution = 8; |
| // The bitrate. |
| optional android.media.codec.Bitrate bitrate = 9; |
| // The framerate as computed by the presentation timestamps in the content stream. |
| optional android.media.codec.Framerate content_framerate = 10; |
| // The framerate as computed by the presentation timestamps. |
| optional android.media.codec.Framerate actual_framerate = 11; |
| // Any HDR format used during playback. |
| optional android.media.codec.HdrFormat hdr_format = 12; |
| |
| // |
| // SINGULARS |
| // |
| optional int64 first_render_timestamp_ns = 13; |
| // The playback duration in seconds. |
| optional int64 playback_duration_seconds = 14; |
| // The number of total frames output by the decoder. |
| optional int64 frames_total = 15; |
| // The number of frames sent to SurfaceFlinger for rendering. |
| optional int64 frames_released = 16; |
| // The number of frames rendered sent to Composer HAL for rendering. |
| optional int64 frames_rendered = 17; |
| // The number of frames dropped. |
| optional int64 frames_dropped = 18; |
| // The number of frames skipped by the app. |
| optional int64 frames_skipped = 19; |
| // The frame drop rate. |
| optional float frame_drop_rate = 20; |
| // The frame skip rate. |
| optional float frame_skip_rate = 21; |
| // The frame skip+drop rate. |
| optional float frame_skip_drop_rate = 22; |
| |
| // |
| // FREEZE |
| // |
| // The overall freeze score. |
| optional int64 freeze_score = 23; |
| // The duration of freezes divided by the total duration of playback. |
| optional float freeze_rate = 24; |
| // The histogram of freeze durations. |
| repeated int32 freeze_duration_ms_histogram = 25; |
| // The histogram bucket limits for freeze durations. |
| repeated int32 freeze_duration_ms_histogram_buckets = 26; |
| // The histogram of durations between freezes. |
| repeated int32 freeze_distance_ms_histogram = 27; |
| // The histogram bucket limits for durations between freezes. |
| repeated int32 freeze_distance_ms_histogram_buckets = 28; |
| |
| // |
| // JUDDER |
| // |
| // The overall judder score. |
| optional int64 judder_score = 29; |
| // The number of frames that have judder divided by the total number of frames. |
| optional float judder_rate = 30; |
| // The histogram of judder scores for each frame. |
| repeated int32 judder_score_histogram = 31; |
| // The histogram bucket limits for judder scores. |
| repeated int32 judder_score_histogram_buckets = 32; |
| } |