blob: 4247b0599bcbfd468d9a569a1406ff2907c3adc1 [file] [log] [blame]
/*
* 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;
}