diff options
3 files changed, 400 insertions, 0 deletions
diff --git a/cmds/statsd/src/atoms.proto b/cmds/statsd/src/atoms.proto index 2bd429976d4c..c8d4eec1ff12 100644 --- a/cmds/statsd/src/atoms.proto +++ b/cmds/statsd/src/atoms.proto @@ -48,6 +48,7 @@ import "frameworks/base/core/proto/android/stats/docsui/docsui_enums.proto"; import "frameworks/base/core/proto/android/stats/enums.proto"; import "frameworks/base/core/proto/android/stats/intelligence/enums.proto"; import "frameworks/base/core/proto/android/stats/launcher/launcher.proto"; +import "frameworks/base/core/proto/android/stats/mediametrics/mediametrics.proto"; import "frameworks/base/core/proto/android/stats/storage/storage_enums.proto"; import "frameworks/base/core/proto/android/stats/style/style_enums.proto"; import "frameworks/base/core/proto/android/telecomm/enums.proto"; @@ -283,6 +284,16 @@ message Atom { ThermalThrottlingSeverityStateChanged thermal_throttling_severity_state_changed = 189; RoleRequestResultReported role_request_result_reported = 190 [(log_from_module) = "permissioncontroller"]; + MediametricsAudiopolicyReported mediametrics_audiopolicy_reported = 191; + MediametricsAudiorecordReported mediametrics_audiorecord_reported = 192; + MediametricsAudiothreadReported mediametrics_audiothread_reported = 193; + MediametricsAudiotrackReported mediametrics_audiotrack_reported = 194; + MediametricsCodecReported mediametrics_codec_reported = 195; + MediametricsDrmWidevineReported mediametrics_drm_widevine_reported = 196; + MediametricsExtractorReported mediametrics_extractor_reported = 197; + MediametricsMediadrmReported mediametrics_mediadrm_reported = 198; + MediametricsNuPlayerReported mediametrics_nuplayer_reported = 199; + MediametricsRecorderReported mediametrics_recorder_reported = 200; } // Pulled events will start at field 10000. @@ -5809,6 +5820,160 @@ message ProcessStartTime { } /** + * Track Media Codec usage + * Logged from: + * frameworks/av/media/libstagefright/MediaCodec.cpp + * frameworks/av/services/mediaanalytics/statsd_codec.cpp + */ +message MediametricsCodecReported { + optional int64 timestamp_nanos = 1; + optional string package_name = 2; + optional int64 package_version_code = 3; + optional int64 media_apex_version = 4; + + optional android.stats.mediametrics.CodecData codec_data = 5 [(android.os.statsd.log_mode) = MODE_BYTES]; +} + +/** + * Track Media Extractor (pulling video/audio streams out of containers) usage + * Logged from: + * frameworks/av/media/libstagefright/RemoteMediaExtractor.cpp + * frameworks/av/services/mediaanalytics/statsd_extractor.cpp + */ +message MediametricsExtractorReported { + optional int64 timestamp_nanos = 1; + optional string package_name = 2; + optional int64 package_version_code = 3; + optional int64 media_apex_version = 4; + + optional android.stats.mediametrics.ExtractorData extractor_data = 5 [(android.os.statsd.log_mode) = MODE_BYTES]; +} + +/** + * Track how we arbitrate between microphone/input requests. + * Logged from + * frameworks/av/services/audiopolicy/service/AudioPolicyInterfaceImpl.cpp + * frameworks/av/services/mediaanalytics/statsd_audiopolicy.cpp + */ +message MediametricsAudiopolicyReported { + optional int64 timestamp_nanos = 1; + optional string package_name = 2; + optional int64 package_version_code = 3; + optional int64 media_apex_version = 4; + + optional android.stats.mediametrics.AudioPolicyData audiopolicy_data = 5 [(android.os.statsd.log_mode) = MODE_BYTES]; +} + +/** + * Track how we arbitrate between microphone requests. + * Logged from + * frameworks/av/media/libaudioclient/AudioRecord.cpp + * frameworks/av/services/mediaanalytics/statsd_audiorecord.cpp + */ +message MediametricsAudiorecordReported { + optional int64 timestamp_nanos = 1; + optional string package_name = 2; + optional int64 package_version_code = 3; + optional int64 media_apex_version = 4; + + optional android.stats.mediametrics.AudioRecordData audiorecord_data = 5 [(android.os.statsd.log_mode) = MODE_BYTES]; +} + +/** + * Track how we arbitrate between microphone/input requests. + * Logged from + * frameworks/av/media/libnblog/ReportPerformance.cpp + * frameworks/av/services/mediaanalytics/statsd_audiothread.cpp + */ +message MediametricsAudiothreadReported { + optional int64 timestamp_nanos = 1; + optional string package_name = 2; + optional int64 package_version_code = 3; + optional int64 media_apex_version = 4; + + optional android.stats.mediametrics.AudioThreadData audiothread_data = 5 [(android.os.statsd.log_mode) = MODE_BYTES]; +} + +/** + * Track how we arbitrate between microphone/input requests. + * Logged from + * frameworks/av/media/libaudioclient/AudioTrack.cpp + * frameworks/av/services/mediaanalytics/statsd_audiotrack.cpp + */ +message MediametricsAudiotrackReported { + optional int64 timestamp_nanos = 1; + optional string package_name = 2; + optional int64 package_version_code = 3; + optional int64 media_apex_version = 4; + + optional android.stats.mediametrics.AudioTrackData audiotrack_data = 5 [(android.os.statsd.log_mode) = MODE_BYTES]; +} + +/** + * Track information about DRM framework performance + * Logged from + * frameworks/av/drm/libmediadrm/DrmHal.cpp + * frameworks/av/services/mediaanalytics/statsd_drm.cpp + */ +message MediametricsMediadrmReported { + optional int64 timestamp_nanos = 1; + optional string package_name = 2; + optional int64 package_version_code = 3; + optional int64 media_apex_version = 4; + + // vendor+description tell about which DRM plugin is in use on this device + optional string vendor = 5; + optional string description = 6; + // from frameworks/av/drm/libmediadrm/protos/metrics.proto + optional bytes framework_stats = 7 [(android.os.statsd.log_mode) = MODE_BYTES]; +} + +/** + * Track information about the widevine DRM plugin performance + * Logged from + * vendor/widevine/libwvdrmengine/cdm/metrics + * frameworks/av/services/mediaanalytics/statsd_drm.cpp + */ +message MediametricsDrmWidevineReported { + optional int64 timestamp_nanos = 1; + optional string package_name = 2; + optional int64 package_version_code = 3; + optional int64 media_apex_version = 4; + + optional bytes vendor_specific_stats = 5 [(android.os.statsd.log_mode) = MODE_BYTES]; +} + +/** + * Track information about recordings (e.g. camcorder) + * Logged from + * frameworks/av/media/libmediaplayerservice/StagefrightRecorder.cpp + * frameworks/av/services/mediaanalytics/statsd_recorder.cpp + */ +message MediametricsRecorderReported { + optional int64 timestamp_nanos = 1; + optional string package_name = 2; + optional int64 package_version_code = 3; + optional int64 media_apex_version = 4; + + optional android.stats.mediametrics.RecorderData recorder_data = 5 [(android.os.statsd.log_mode) = MODE_BYTES]; +} + +/** + * Track Media Player usage + * Logged from: + * frameworks/av/media/libmediaplayerservice/nuplayer/NuPlayerDriver.cpp + * frameworks/av/services/mediaanalytics/statsd_nuplayer.cpp + */ +message MediametricsNuPlayerReported { + optional int64 timestamp_nanos = 1; + optional string package_name = 2; + optional int64 package_version_code = 3; + optional int64 media_apex_version = 4; + + optional android.stats.mediametrics.NuPlayerData nuplayer_data = 5 [(android.os.statsd.log_mode) = MODE_BYTES]; +} + +/** * State of a dangerous permission requested by a package */ message DangerousPermissionState { diff --git a/cmds/statsd/tools/localtools/src/com/android/statsd/shelltools/testdrive/TestDrive.java b/cmds/statsd/tools/localtools/src/com/android/statsd/shelltools/testdrive/TestDrive.java index fc7b778b7a86..3e705fdf8a12 100644 --- a/cmds/statsd/tools/localtools/src/com/android/statsd/shelltools/testdrive/TestDrive.java +++ b/cmds/statsd/tools/localtools/src/com/android/statsd/shelltools/testdrive/TestDrive.java @@ -57,6 +57,7 @@ public class TestDrive { "AID_BLUETOOTH", "AID_LMKD", "com.android.managedprovisioning", + "AID_MEDIA", "AID_NETWORK_STACK" }; private static final Logger LOGGER = Logger.getLogger(TestDrive.class.getName()); diff --git a/core/proto/android/stats/mediametrics/mediametrics.proto b/core/proto/android/stats/mediametrics/mediametrics.proto new file mode 100644 index 000000000000..34ed90a8c90c --- /dev/null +++ b/core/proto/android/stats/mediametrics/mediametrics.proto @@ -0,0 +1,234 @@ +/* + * Copyright (C) 2019 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.stats.mediametrics; + +/** + * Track how we arbitrate between microphone/input requests. + * Logged from + * frameworks/av/services/audiopolicy/service/AudioPolicyInterfaceImpl.cpp + * frameworks/av/services/mediaanalytics/statsd_audiopolicy.cpp + * Next Tag: 10 + */ +message AudioPolicyData { + optional int32 status = 1; + optional string request_source = 2; + optional string request_package = 3; + optional int32 request_session = 4; + optional string request_device = 5; + optional string active_source = 6; + optional string active_package = 7; + optional int32 active_session = 8; + optional string active_device = 9; +} + +/** + * Track properties of audio recording + * Logged from + * frameworks/av/media/libaudioclient/AudioRecord.cpp + * frameworks/av/services/mediaanalytics/statsd_audiorecord.cpp + * Next Tag: 16 + */ +message AudioRecordData { + optional string encoding = 1; + optional string source = 2; + optional int32 latency = 3; + optional int32 samplerate = 4; + optional int32 channels = 5; + optional int64 created_millis = 6; + optional int64 duration_millis = 7; + optional int32 count = 8; + optional int32 error_code = 9; + optional string error_function = 10; + optional int32 port_id = 11; + optional int32 frame_count = 12; + optional string attributes = 13; + optional int64 channel_mask = 14; + optional int64 start_count = 15; + +} + +/** + * Track audio thread performance data + * Logged from + * frameworks/av/media/libnblog/ReportPerformance.cpp + * frameworks/av/services/mediaanalytics/statsd_audiothread.cpp + * Next Tag: 28 + */ +message AudioThreadData { + optional string type = 1; + optional int32 framecount = 2; + optional int32 samplerate = 3; + optional string work_millis_hist = 4; + optional string latency_millis_hist = 5; + optional string warmup_millis_hist = 6; + optional int64 underruns = 7; + optional int64 overruns = 8; + optional int64 active_millis = 9; + optional int64 duration_millis = 10; + + optional int32 id = 11; + optional int32 port_id = 12; + optional int32 sample_rate = 13; + optional int64 channel_mask = 14; + optional string encoding = 15; + optional int32 frame_count = 16; + optional string output_device = 17; + optional string input_device = 18; + optional double io_jitter_mean_millis = 19; + optional double io_jitter_stddev_millis = 20; + optional double process_time_mean_millis = 21; + optional double process_time_stddev_millis = 22; + optional double timestamp_jitter_mean_millis = 23; + optional double timestamp_jitter_stddev_millis = 24; + optional double latency_mean_millis = 25; + optional double latency_stddev_millis = 26; + +} + +/** + * Track audio track playback data + * Logged from + * frameworks/av/media/libaudioclient/AudioTrack.cpp + * frameworks/av/services/mediaanalytics/statsd_audiotrack.cpp + * Next Tag: 12 + */ +message AudioTrackData { + optional string stream_type = 1; + optional string content_type = 2; + optional string track_usage = 3; + optional int32 sample_rate = 4; + optional int64 channel_mask = 5; + + optional int32 underrun_frames = 6; + optional int32 startup_glitch = 7; + + optional int32 port_id = 8; + optional string encoding = 9; + optional int32 frame_count = 10; + optional string attributes = 11; + + +} + +/** + * Track Media Codec usage + * Logged from: + * frameworks/av/media/libstagefright/MediaCodec.cpp + * frameworks/av/services/mediaanalytics/statsd_codec.cpp + * Next Tag: 21 + */ +message CodecData { + optional string codec = 1; + optional string mime = 2; + optional string mode = 3; + optional int32 encoder = 4; + optional int32 secure = 5; + optional int32 width = 6; + optional int32 height = 7; + optional int32 rotation = 8; + optional int32 crypto = 9; + optional int32 profile = 10; + optional int32 level = 11; + optional int32 max_width = 12; + optional int32 max_height = 13; + optional int32 error_code = 14; + optional string error_state = 15; + optional int64 latency_max = 16; + optional int64 latency_min = 17; + optional int64 latency_avg = 18; + optional int64 latency_count = 19; + optional int64 latency_unknown = 20; +} + +/** + * Track Media Extractor (pulling video/audio streams out of containers) usage + * Logged from: + * frameworks/av/media/libstagefright/RemoteMediaExtractor.cpp + * frameworks/av/services/mediaanalytics/statsd_extractor.cpp + * Next Tag: 4 + */ +message ExtractorData { + optional string format = 1; + optional string mime = 2; + optional int32 tracks = 3; +} + +/** + * Track Media Player usage + * this handles both nuplayer and nuplayer2 + * Logged from: + * frameworks/av/media/libmediaplayerservice/nuplayer/NuPlayerDriver.cpp + * frameworks/av/media/libmediaplayer2/nuplayer2/NuPlayer2Driver.cpp + * frameworks/av/services/mediaanalytics/statsd_nuplayer.cpp + * Next Tag: 21 + */ +message NuPlayerData { + optional string whichPlayer = 1; + + optional string video_mime = 2; + optional string video_codec = 3; + optional int32 width = 4; + optional int32 height = 5; + optional int64 frames = 6; + optional int64 frames_dropped = 7; + optional double framerate = 8; + optional string audio_mime = 9; + optional string audio_codec = 10; + optional int64 duration_millis = 11; + optional int64 playing_millis = 12; + optional int32 error = 13; + optional int32 error_code = 14; + optional string error_state = 15; + optional string data_source_type = 16; + optional int64 rebuffering_millis = 17; + optional int32 rebuffers = 18; + optional int32 rebuffer_at_exit = 19; + optional int64 frames_dropped_startup = 20; +} + +/** + * Track information about recordings (e.g. camcorder) + * Logged from + * frameworks/av/media/libmediaplayerservice/StagefrightRecorder.cpp + * frameworks/av/services/mediaanalytics/if_statsd.cpp + * Next Tag: 22 + */ +message RecorderData { + optional string audio_mime = 1; + optional string video_mime = 2; + optional int32 video_profile = 3; + optional int32 video_level = 4; + optional int32 width = 5; + optional int32 height = 6; + optional int32 rotation = 7; + optional int32 framerate = 8; + optional int32 capture_fps = 9; + optional double capture_fps_enable = 10; + optional int64 duration_millis = 11; + optional int64 paused_millis = 12; + optional int32 paused_count = 13; + optional int32 audio_bitrate = 14; + optional int32 audio_channels = 15; + optional int32 audio_samplerate = 16; + optional int32 movie_timescale = 17; + optional int32 audio_timescale = 18; + optional int32 video_timescale = 19; + optional int32 video_bitrate = 20; + optional int32 iframe_interval = 21; +} |