1 /*
2  * Copyright (C) 2020 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 #ifndef ANDROID_MEDIA_MEDIAMETRICSCONSTANTS_H
18 #define ANDROID_MEDIA_MEDIAMETRICSCONSTANTS_H
19 
20 /*
21  * MediaMetrics Keys and Properties.
22  *
23  * C/C++ friendly constants that ensure
24  * 1) Compilation error on misspelling
25  * 2) Consistent behavior and documentation.
26  */
27 
28 /*
29  * Taxonomy of audio keys
30  *
31  * To build longer keys, we use compiler string concatenation of
32  * adjacent string literals.  This is done in the translation phase
33  * of compilation to make a single string token.
34  */
35 
36 // Key Prefixes are used for MediaMetrics Item Keys and ends with a ".".
37 // They must be appended with another value to make a key.
38 #define AMEDIAMETRICS_KEY_PREFIX_AUDIO "audio."
39 
40 // Device related key prefix.
41 #define AMEDIAMETRICS_KEY_PREFIX_AUDIO_DEVICE  AMEDIAMETRICS_KEY_PREFIX_AUDIO "device."
42 
43 // The AudioMmap key appends the "trackId" to the prefix.
44 // This is the AudioFlinger equivalent of the AAudio Stream.
45 // TODO: unify with AMEDIAMETRICS_KEY_PREFIX_AUDIO_STREAM
46 #define AMEDIAMETRICS_KEY_PREFIX_AUDIO_MMAP  AMEDIAMETRICS_KEY_PREFIX_AUDIO "mmap."
47 
48 // The AudioRecord key appends the "trackId" to the prefix.
49 #define AMEDIAMETRICS_KEY_PREFIX_AUDIO_RECORD AMEDIAMETRICS_KEY_PREFIX_AUDIO "record."
50 
51 // The AudioStream key appends the "streamId" to the prefix.
52 #define AMEDIAMETRICS_KEY_PREFIX_AUDIO_STREAM  AMEDIAMETRICS_KEY_PREFIX_AUDIO "stream."
53 
54 // The AudioThread key appends the "threadId" to the prefix.
55 #define AMEDIAMETRICS_KEY_PREFIX_AUDIO_THREAD AMEDIAMETRICS_KEY_PREFIX_AUDIO "thread."
56 
57 // The AudioTrack key appends the "trackId" to the prefix.
58 #define AMEDIAMETRICS_KEY_PREFIX_AUDIO_TRACK  AMEDIAMETRICS_KEY_PREFIX_AUDIO "track."
59 
60 // Keys are strings used for MediaMetrics Item Keys
61 #define AMEDIAMETRICS_KEY_AUDIO_FLINGER       AMEDIAMETRICS_KEY_PREFIX_AUDIO "flinger"
62 #define AMEDIAMETRICS_KEY_AUDIO_POLICY        AMEDIAMETRICS_KEY_PREFIX_AUDIO "policy"
63 
64 /*
65  * MediaMetrics Properties are unified space for consistency and readability.
66  */
67 
68 // Property prefixes may be applied before a property name to indicate a specific
69 // category to which it is associated.
70 #define AMEDIAMETRICS_PROP_PREFIX_EFFECTIVE "effective."
71 #define AMEDIAMETRICS_PROP_PREFIX_HAL       "hal."
72 #define AMEDIAMETRICS_PROP_PREFIX_HAPTIC    "haptic."
73 #define AMEDIAMETRICS_PROP_PREFIX_SERVER    "server."
74 
75 // Properties within mediametrics are string constants denoted by
76 // a macro name beginning with AMEDIAMETRICS_PROP_*
77 //
78 // For a property name like "auxEffectId" we write this as a single upper case word
79 // at the end of the macro name, such as AMEDIAMETRICS_PROP_AUXEFFECTID.
80 //
81 // Underscores after the AMEDIAMETRICS_PROP_* prefix indicate
82 // a "dot" in the property name. For example AMEDIAMETRICS_PROP_VOLUME_LEFT
83 // corresponds to "volume.left".
84 //
85 // The property names are camel case, typically a lowercase letter [a-z]
86 // followed by one or more characters in the range [a-zA-Z0-9_.].
87 // Special symbols such as !@#$%^&*()[]{}<>,:;'"\/?|+-=~ are reserved.
88 //
89 // Properties within this header should include special suffixes like '#'
90 // directly in the string for brevity.  Code outside of this header should
91 // use the macro constant for the special symbols for searchability.
92 
93 // Any property that ends with a # will have duplicate values listed instead
94 // of suppressed in the Time Machine.
95 #define AMEDIAMETRICS_PROP_SUFFIX_CHAR_DUPLICATES_ALLOWED '#'
96 
97 #define AMEDIAMETRICS_PROP_ALLOWUID       "_allowUid"      // int32_t, allow client uid to post
98 #define AMEDIAMETRICS_PROP_AUDIOMODE      "audioMode"      // string (audio.flinger)
99 #define AMEDIAMETRICS_PROP_AUXEFFECTID    "auxEffectId"    // int32 (AudioTrack)
100 #define AMEDIAMETRICS_PROP_BUFFERSIZEFRAMES "bufferSizeFrames" // int32
101 #define AMEDIAMETRICS_PROP_BUFFERCAPACITYFRAMES "bufferCapacityFrames" // int32
102 #define AMEDIAMETRICS_PROP_BURSTFRAMES    "burstFrames"    // int32
103 #define AMEDIAMETRICS_PROP_CALLERNAME     "callerName"     // string, eg. "aaudio"
104 #define AMEDIAMETRICS_PROP_CHANNELCOUNT   "channelCount"   // int32
105 #define AMEDIAMETRICS_PROP_CHANNELMASK    "channelMask"    // int32
106 #define AMEDIAMETRICS_PROP_CONTENTTYPE    "contentType"    // string attributes (AudioTrack)
107 #define AMEDIAMETRICS_PROP_CUMULATIVETIMENS "cumulativeTimeNs" // int64_t playback/record time
108                                                            // since start
109 // DEVICE values are averaged since starting on device
110 #define AMEDIAMETRICS_PROP_DEVICELATENCYMS "deviceLatencyMs" // double - avg latency time
111 #define AMEDIAMETRICS_PROP_DEVICESTARTUPMS "deviceStartupMs" // double - avg startup time
112 #define AMEDIAMETRICS_PROP_DEVICETIMENS   "deviceTimeNs"   // int64_t playback/record time
113 #define AMEDIAMETRICS_PROP_DEVICEVOLUME   "deviceVolume"   // double - average device volume
114 
115 #define AMEDIAMETRICS_PROP_DIRECTION      "direction"      // string AAudio input or output
116 #define AMEDIAMETRICS_PROP_DURATIONNS     "durationNs"     // int64 duration time span
117 #define AMEDIAMETRICS_PROP_ENCODING       "encoding"       // string value of format
118 #define AMEDIAMETRICS_PROP_EVENT          "event#"         // string value (often func name)
119 #define AMEDIAMETRICS_PROP_EXECUTIONTIMENS "executionTimeNs"  // time to execute the event
120 
121 // TODO: fix inconsistency in flags: AudioRecord / AudioTrack int32,  AudioThread string
122 #define AMEDIAMETRICS_PROP_FLAGS          "flags"
123 
124 #define AMEDIAMETRICS_PROP_FRAMECOUNT     "frameCount"     // int32
125 #define AMEDIAMETRICS_PROP_INPUTDEVICES   "inputDevices"   // string value
126 #define AMEDIAMETRICS_PROP_INTERVALCOUNT  "intervalCount"  // int32
127 #define AMEDIAMETRICS_PROP_LATENCYMS      "latencyMs"      // double value
128 #define AMEDIAMETRICS_PROP_NAME           "name"           // string value
129 #define AMEDIAMETRICS_PROP_ORIGINALFLAGS  "originalFlags"  // int32
130 #define AMEDIAMETRICS_PROP_OUTPUTDEVICES  "outputDevices"  // string value
131 #define AMEDIAMETRICS_PROP_PERFORMANCEMODE "performanceMode"    // string value, "none", lowLatency"
132 #define AMEDIAMETRICS_PROP_PLAYBACK_PITCH "playback.pitch" // double value (AudioTrack)
133 #define AMEDIAMETRICS_PROP_PLAYBACK_SPEED "playback.speed" // double value (AudioTrack)
134 #define AMEDIAMETRICS_PROP_ROUTEDDEVICEID "routedDeviceId" // int32
135 #define AMEDIAMETRICS_PROP_SAMPLERATE     "sampleRate"     // int32
136 #define AMEDIAMETRICS_PROP_SELECTEDDEVICEID "selectedDeviceId" // int32
137 #define AMEDIAMETRICS_PROP_SELECTEDMICDIRECTION "selectedMicDirection" // int32
138 #define AMEDIAMETRICS_PROP_SELECTEDMICFIELDDIRECTION "selectedMicFieldDimension" // double
139 #define AMEDIAMETRICS_PROP_SESSIONID      "sessionId"      // int32
140 #define AMEDIAMETRICS_PROP_SHARINGMODE    "sharingMode"    // string value, "exclusive", shared"
141 #define AMEDIAMETRICS_PROP_SOURCE         "source"         // string (AudioAttributes)
142 #define AMEDIAMETRICS_PROP_STARTUPMS      "startupMs"      // double value
143 // State is "ACTIVE" or "STOPPED" for AudioRecord
144 #define AMEDIAMETRICS_PROP_STATE          "state"          // string
145 #define AMEDIAMETRICS_PROP_STATUS         "status"         // int32 status_t
146 #define AMEDIAMETRICS_PROP_STREAMTYPE     "streamType"     // string (AudioTrack)
147 #define AMEDIAMETRICS_PROP_THREADID       "threadId"       // int32 value io handle
148 #define AMEDIAMETRICS_PROP_THROTTLEMS     "throttleMs"     // double
149 #define AMEDIAMETRICS_PROP_TRACKID        "trackId"        // int32 port id of track/record
150 #define AMEDIAMETRICS_PROP_TRAITS         "traits"         // string
151 #define AMEDIAMETRICS_PROP_TYPE           "type"           // string (thread type)
152 #define AMEDIAMETRICS_PROP_UNDERRUN       "underrun"       // int32
153 #define AMEDIAMETRICS_PROP_UNDERRUNFRAMES "underrunFrames" // int64_t from Thread
154 #define AMEDIAMETRICS_PROP_USAGE          "usage"          // string attributes (ATrack)
155 #define AMEDIAMETRICS_PROP_VOICEVOLUME    "voiceVolume"    // double (audio.flinger)
156 #define AMEDIAMETRICS_PROP_VOLUME_LEFT    "volume.left"    // double (AudioTrack)
157 #define AMEDIAMETRICS_PROP_VOLUME_RIGHT   "volume.right"   // double (AudioTrack)
158 #define AMEDIAMETRICS_PROP_WHERE          "where"          // string value
159 
160 // Timing values: millisecond values are suffixed with MS and the type is double
161 // nanosecond values are suffixed with NS and the type is int64.
162 
163 // Values are strings accepted for a given property.
164 
165 // An event is a general description, which often is a function name.
166 #define AMEDIAMETRICS_PROP_EVENT_VALUE_BEGINAUDIOINTERVALGROUP "beginAudioIntervalGroup"
167 #define AMEDIAMETRICS_PROP_EVENT_VALUE_CLOSE      "close"
168 #define AMEDIAMETRICS_PROP_EVENT_VALUE_CREATE     "create"
169 #define AMEDIAMETRICS_PROP_EVENT_VALUE_CREATEAUDIOPATCH "createAudioPatch"
170 #define AMEDIAMETRICS_PROP_EVENT_VALUE_CTOR       "ctor"
171 #define AMEDIAMETRICS_PROP_EVENT_VALUE_DISCONNECT "disconnect"
172 #define AMEDIAMETRICS_PROP_EVENT_VALUE_DTOR       "dtor"
173 #define AMEDIAMETRICS_PROP_EVENT_VALUE_ENDAUDIOINTERVALGROUP "endAudioIntervalGroup"
174 #define AMEDIAMETRICS_PROP_EVENT_VALUE_FLUSH      "flush"  // AudioTrack
175 #define AMEDIAMETRICS_PROP_EVENT_VALUE_INVALIDATE "invalidate" // server track, record
176 #define AMEDIAMETRICS_PROP_EVENT_VALUE_OPEN       "open"
177 #define AMEDIAMETRICS_PROP_EVENT_VALUE_PAUSE      "pause"  // AudioTrack
178 #define AMEDIAMETRICS_PROP_EVENT_VALUE_READPARAMETERS "readParameters" // Thread
179 #define AMEDIAMETRICS_PROP_EVENT_VALUE_RELEASE    "release"
180 #define AMEDIAMETRICS_PROP_EVENT_VALUE_RESTORE    "restore"
181 #define AMEDIAMETRICS_PROP_EVENT_VALUE_SETMODE    "setMode" // AudioFlinger
182 #define AMEDIAMETRICS_PROP_EVENT_VALUE_SETBUFFERSIZE    "setBufferSize" // AudioTrack
183 #define AMEDIAMETRICS_PROP_EVENT_VALUE_SETPLAYBACKPARAM "setPlaybackParam" // AudioTrack
184 #define AMEDIAMETRICS_PROP_EVENT_VALUE_SETVOICEVOLUME   "setVoiceVolume" // AudioFlinger
185 #define AMEDIAMETRICS_PROP_EVENT_VALUE_SETVOLUME  "setVolume"  // AudioTrack
186 #define AMEDIAMETRICS_PROP_EVENT_VALUE_START      "start"  // AudioTrack, AudioRecord
187 #define AMEDIAMETRICS_PROP_EVENT_VALUE_STOP       "stop"   // AudioTrack, AudioRecord
188 #define AMEDIAMETRICS_PROP_EVENT_VALUE_UNDERRUN   "underrun" // from Thread
189 
190 // Possible values for AMEDIAMETRICS_PROP_CALLERNAME
191 // Check within the framework for these strings as this header file may not be explicitly
192 // included to avoid unnecessary cross-project dependencies.
193 #define AMEDIAMETRICS_PROP_CALLERNAME_VALUE_AAUDIO        "aaudio"         // Native AAudio
194 #define AMEDIAMETRICS_PROP_CALLERNAME_VALUE_JAVA          "java"           // Java API layer
195 #define AMEDIAMETRICS_PROP_CALLERNAME_VALUE_MEDIA         "media"          // libmedia
196 #define AMEDIAMETRICS_PROP_CALLERNAME_VALUE_OPENSLES      "opensles"       // Open SLES
197 #define AMEDIAMETRICS_PROP_CALLERNAME_VALUE_RTP           "rtp"            // RTP communication
198 #define AMEDIAMETRICS_PROP_CALLERNAME_VALUE_SOUNDPOOL     "soundpool"      // SoundPool
199 #define AMEDIAMETRICS_PROP_CALLERNAME_VALUE_TONEGENERATOR "tonegenerator"  // dial tones
200 #define AMEDIAMETRICS_PROP_CALLERNAME_VALUE_UNKNOWN       "unknown"        // callerName not set
201 
202 #endif // ANDROID_MEDIA_MEDIAMETRICSCONSTANTS_H
203