1 // Copyright 2017 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include "media/base/watch_time_keys.h"
6 
7 #include "base/notreached.h"
8 
9 namespace media {
10 
11 // TODO(dalecurtis): Key strings aren't really necessary anymore, so instead
12 // of hard coding these, switch to generating them.
13 
14 // Audio+video watch time metrics.
15 static const char kWatchTimeAudioVideoAll[] = "Media.WatchTime.AudioVideo.All";
16 static const char kWatchTimeAudioVideoMse[] = "Media.WatchTime.AudioVideo.MSE";
17 static const char kWatchTimeAudioVideoEme[] = "Media.WatchTime.AudioVideo.EME";
18 static const char kWatchTimeAudioVideoSrc[] = "Media.WatchTime.AudioVideo.SRC";
19 static const char kWatchTimeAudioVideoBattery[] =
20     "Media.WatchTime.AudioVideo.Battery";
21 static const char kWatchTimeAudioVideoAc[] = "Media.WatchTime.AudioVideo.AC";
22 static const char kWatchTimeAudioVideoDisplayFullscreen[] =
23     "Media.WatchTime.AudioVideo.DisplayFullscreen";
24 static const char kWatchTimeAudioVideoDisplayInline[] =
25     "Media.WatchTime.AudioVideo.DisplayInline";
26 static const char kWatchTimeAudioVideoDisplayPictureInPicture[] =
27     "Media.WatchTime.AudioVideo.DisplayPictureInPicture";
28 static const char kWatchTimeAudioVideoEmbeddedExperience[] =
29     "Media.WatchTime.AudioVideo.EmbeddedExperience";
30 static const char kWatchTimeAudioVideoNativeControlsOn[] =
31     "Media.WatchTime.AudioVideo.NativeControlsOn";
32 static const char kWatchTimeAudioVideoNativeControlsOff[] =
33     "Media.WatchTime.AudioVideo.NativeControlsOff";
34 
35 // Audio only "watch time" metrics.
36 static const char kWatchTimeAudioAll[] = "Media.WatchTime.Audio.All";
37 static const char kWatchTimeAudioMse[] = "Media.WatchTime.Audio.MSE";
38 static const char kWatchTimeAudioEme[] = "Media.WatchTime.Audio.EME";
39 static const char kWatchTimeAudioSrc[] = "Media.WatchTime.Audio.SRC";
40 static const char kWatchTimeAudioBattery[] = "Media.WatchTime.Audio.Battery";
41 static const char kWatchTimeAudioAc[] = "Media.WatchTime.Audio.AC";
42 static const char kWatchTimeAudioEmbeddedExperience[] =
43     "Media.WatchTime.Audio.EmbeddedExperience";
44 static const char kWatchTimeAudioNativeControlsOn[] =
45     "Media.WatchTime.Audio.NativeControlsOn";
46 static const char kWatchTimeAudioNativeControlsOff[] =
47     "Media.WatchTime.Audio.NativeControlsOff";
48 
49 static const char kWatchTimeAudioBackgroundAll[] =
50     "Media.WatchTime.Audio.Background.All";
51 static const char kWatchTimeAudioBackgroundMse[] =
52     "Media.WatchTime.Audio.Background.MSE";
53 static const char kWatchTimeAudioBackgroundEme[] =
54     "Media.WatchTime.Audio.Background.EME";
55 static const char kWatchTimeAudioBackgroundSrc[] =
56     "Media.WatchTime.Audio.Background.SRC";
57 static const char kWatchTimeAudioBackgroundBattery[] =
58     "Media.WatchTime.Audio.Background.Battery";
59 static const char kWatchTimeAudioBackgroundAc[] =
60     "Media.WatchTime.Audio.Background.AC";
61 static const char kWatchTimeAudioBackgroundEmbeddedExperience[] =
62     "Media.WatchTime.Audio.Background.EmbeddedExperience";
63 
64 // Audio+video background watch time metrics.
65 static const char kWatchTimeAudioVideoBackgroundAll[] =
66     "Media.WatchTime.AudioVideo.Background.All";
67 static const char kWatchTimeAudioVideoBackgroundMse[] =
68     "Media.WatchTime.AudioVideo.Background.MSE";
69 static const char kWatchTimeAudioVideoBackgroundEme[] =
70     "Media.WatchTime.AudioVideo.Background.EME";
71 static const char kWatchTimeAudioVideoBackgroundSrc[] =
72     "Media.WatchTime.AudioVideo.Background.SRC";
73 static const char kWatchTimeAudioVideoBackgroundBattery[] =
74     "Media.WatchTime.AudioVideo.Background.Battery";
75 static const char kWatchTimeAudioVideoBackgroundAc[] =
76     "Media.WatchTime.AudioVideo.Background.AC";
77 static const char kWatchTimeAudioVideoBackgroundEmbeddedExperience[] =
78     "Media.WatchTime.AudioVideo.Background.EmbeddedExperience";
79 
80 // Audio+video muted watch time metrics.
81 static const char kWatchTimeAudioVideoMutedAll[] =
82     "Media.WatchTime.AudioVideo.Muted.All";
83 static const char kWatchTimeAudioVideoMutedMse[] =
84     "Media.WatchTime.AudioVideo.Muted.MSE";
85 static const char kWatchTimeAudioVideoMutedEme[] =
86     "Media.WatchTime.AudioVideo.Muted.EME";
87 static const char kWatchTimeAudioVideoMutedSrc[] =
88     "Media.WatchTime.AudioVideo.Muted.SRC";
89 
90 const char kWatchTimeUnderflowCount[] = "UnderflowCount";
91 
92 const char kMeanTimeBetweenRebuffersAudioSrc[] =
93     "Media.MeanTimeBetweenRebuffers.Audio.SRC";
94 const char kMeanTimeBetweenRebuffersAudioMse[] =
95     "Media.MeanTimeBetweenRebuffers.Audio.MSE";
96 const char kMeanTimeBetweenRebuffersAudioEme[] =
97     "Media.MeanTimeBetweenRebuffers.Audio.EME";
98 const char kMeanTimeBetweenRebuffersAudioVideoSrc[] =
99     "Media.MeanTimeBetweenRebuffers.AudioVideo.SRC";
100 const char kMeanTimeBetweenRebuffersAudioVideoMse[] =
101     "Media.MeanTimeBetweenRebuffers.AudioVideo.MSE";
102 const char kMeanTimeBetweenRebuffersAudioVideoEme[] =
103     "Media.MeanTimeBetweenRebuffers.AudioVideo.EME";
104 
105 const char kRebuffersCountAudioSrc[] = "Media.RebuffersCount.Audio.SRC";
106 const char kRebuffersCountAudioMse[] = "Media.RebuffersCount.Audio.MSE";
107 const char kRebuffersCountAudioEme[] = "Media.RebuffersCount.Audio.EME";
108 const char kRebuffersCountAudioVideoSrc[] =
109     "Media.RebuffersCount.AudioVideo.SRC";
110 const char kRebuffersCountAudioVideoMse[] =
111     "Media.RebuffersCount.AudioVideo.MSE";
112 const char kRebuffersCountAudioVideoEme[] =
113     "Media.RebuffersCount.AudioVideo.EME";
114 
115 const char kDiscardedWatchTimeAudioSrc[] =
116     "Media.WatchTime.Audio.Discarded.SRC";
117 const char kDiscardedWatchTimeAudioMse[] =
118     "Media.WatchTime.Audio.Discarded.MSE";
119 const char kDiscardedWatchTimeAudioEme[] =
120     "Media.WatchTime.Audio.Discarded.EME";
121 const char kDiscardedWatchTimeAudioVideoSrc[] =
122     "Media.WatchTime.AudioVideo.Discarded.SRC";
123 const char kDiscardedWatchTimeAudioVideoMse[] =
124     "Media.WatchTime.AudioVideo.Discarded.MSE";
125 const char kDiscardedWatchTimeAudioVideoEme[] =
126     "Media.WatchTime.AudioVideo.Discarded.EME";
127 
ConvertWatchTimeKeyToStringForUma(WatchTimeKey key)128 base::StringPiece ConvertWatchTimeKeyToStringForUma(WatchTimeKey key) {
129   // WARNING: Returning a non-empty value will log the key to UMA.
130   switch (key) {
131     case WatchTimeKey::kAudioAll:
132       return kWatchTimeAudioAll;
133     case WatchTimeKey::kAudioMse:
134       return kWatchTimeAudioMse;
135     case WatchTimeKey::kAudioEme:
136       return kWatchTimeAudioEme;
137     case WatchTimeKey::kAudioSrc:
138       return kWatchTimeAudioSrc;
139     case WatchTimeKey::kAudioBattery:
140       return kWatchTimeAudioBattery;
141     case WatchTimeKey::kAudioAc:
142       return kWatchTimeAudioAc;
143     case WatchTimeKey::kAudioEmbeddedExperience:
144       return kWatchTimeAudioEmbeddedExperience;
145     case WatchTimeKey::kAudioNativeControlsOn:
146       return kWatchTimeAudioNativeControlsOn;
147     case WatchTimeKey::kAudioNativeControlsOff:
148       return kWatchTimeAudioNativeControlsOff;
149     case WatchTimeKey::kAudioBackgroundAll:
150       return kWatchTimeAudioBackgroundAll;
151     case WatchTimeKey::kAudioBackgroundMse:
152       return kWatchTimeAudioBackgroundMse;
153     case WatchTimeKey::kAudioBackgroundEme:
154       return kWatchTimeAudioBackgroundEme;
155     case WatchTimeKey::kAudioBackgroundSrc:
156       return kWatchTimeAudioBackgroundSrc;
157     case WatchTimeKey::kAudioBackgroundBattery:
158       return kWatchTimeAudioBackgroundBattery;
159     case WatchTimeKey::kAudioBackgroundAc:
160       return kWatchTimeAudioBackgroundAc;
161     case WatchTimeKey::kAudioBackgroundEmbeddedExperience:
162       return kWatchTimeAudioBackgroundEmbeddedExperience;
163     case WatchTimeKey::kAudioVideoAll:
164       return kWatchTimeAudioVideoAll;
165     case WatchTimeKey::kAudioVideoMse:
166       return kWatchTimeAudioVideoMse;
167     case WatchTimeKey::kAudioVideoEme:
168       return kWatchTimeAudioVideoEme;
169     case WatchTimeKey::kAudioVideoSrc:
170       return kWatchTimeAudioVideoSrc;
171     case WatchTimeKey::kAudioVideoBattery:
172       return kWatchTimeAudioVideoBattery;
173     case WatchTimeKey::kAudioVideoAc:
174       return kWatchTimeAudioVideoAc;
175     case WatchTimeKey::kAudioVideoDisplayFullscreen:
176       return kWatchTimeAudioVideoDisplayFullscreen;
177     case WatchTimeKey::kAudioVideoDisplayInline:
178       return kWatchTimeAudioVideoDisplayInline;
179     case WatchTimeKey::kAudioVideoDisplayPictureInPicture:
180       return kWatchTimeAudioVideoDisplayPictureInPicture;
181     case WatchTimeKey::kAudioVideoEmbeddedExperience:
182       return kWatchTimeAudioVideoEmbeddedExperience;
183     case WatchTimeKey::kAudioVideoNativeControlsOn:
184       return kWatchTimeAudioVideoNativeControlsOn;
185     case WatchTimeKey::kAudioVideoNativeControlsOff:
186       return kWatchTimeAudioVideoNativeControlsOff;
187     case WatchTimeKey::kAudioVideoBackgroundAll:
188       return kWatchTimeAudioVideoBackgroundAll;
189     case WatchTimeKey::kAudioVideoBackgroundMse:
190       return kWatchTimeAudioVideoBackgroundMse;
191     case WatchTimeKey::kAudioVideoBackgroundEme:
192       return kWatchTimeAudioVideoBackgroundEme;
193     case WatchTimeKey::kAudioVideoBackgroundSrc:
194       return kWatchTimeAudioVideoBackgroundSrc;
195     case WatchTimeKey::kAudioVideoBackgroundBattery:
196       return kWatchTimeAudioVideoBackgroundBattery;
197     case WatchTimeKey::kAudioVideoBackgroundAc:
198       return kWatchTimeAudioVideoBackgroundAc;
199     case WatchTimeKey::kAudioVideoBackgroundEmbeddedExperience:
200       return kWatchTimeAudioVideoBackgroundEmbeddedExperience;
201     case WatchTimeKey::kAudioVideoMutedAll:
202       return kWatchTimeAudioVideoMutedAll;
203     case WatchTimeKey::kAudioVideoMutedMse:
204       return kWatchTimeAudioVideoMutedMse;
205     case WatchTimeKey::kAudioVideoMutedEme:
206       return kWatchTimeAudioVideoMutedEme;
207     case WatchTimeKey::kAudioVideoMutedSrc:
208       return kWatchTimeAudioVideoMutedSrc;
209     // WARNING: Returning a non-empty value will log the key to UMA.
210 
211     // The following keys are not reported to UMA and thus have no conversion.
212     // We don't report keys to UMA that we don't have a strong use case for
213     // since UMA requires us to break out each state manually (ac, inline, etc).
214     case WatchTimeKey::kAudioVideoMutedBattery:
215     case WatchTimeKey::kAudioVideoMutedAc:
216     case WatchTimeKey::kAudioVideoMutedEmbeddedExperience:
217     case WatchTimeKey::kAudioVideoMutedDisplayFullscreen:
218     case WatchTimeKey::kAudioVideoMutedDisplayInline:
219     case WatchTimeKey::kAudioVideoMutedDisplayPictureInPicture:
220     case WatchTimeKey::kAudioVideoMutedNativeControlsOn:
221     case WatchTimeKey::kAudioVideoMutedNativeControlsOff:
222     case WatchTimeKey::kVideoAll:
223     case WatchTimeKey::kVideoMse:
224     case WatchTimeKey::kVideoEme:
225     case WatchTimeKey::kVideoSrc:
226     case WatchTimeKey::kVideoBattery:
227     case WatchTimeKey::kVideoAc:
228     case WatchTimeKey::kVideoDisplayFullscreen:
229     case WatchTimeKey::kVideoDisplayInline:
230     case WatchTimeKey::kVideoDisplayPictureInPicture:
231     case WatchTimeKey::kVideoEmbeddedExperience:
232     case WatchTimeKey::kVideoNativeControlsOn:
233     case WatchTimeKey::kVideoNativeControlsOff:
234     case WatchTimeKey::kVideoBackgroundAll:
235     case WatchTimeKey::kVideoBackgroundMse:
236     case WatchTimeKey::kVideoBackgroundEme:
237     case WatchTimeKey::kVideoBackgroundSrc:
238     case WatchTimeKey::kVideoBackgroundBattery:
239     case WatchTimeKey::kVideoBackgroundAc:
240     case WatchTimeKey::kVideoBackgroundEmbeddedExperience:
241       return base::StringPiece();
242   };
243 
244   NOTREACHED();
245   return base::StringPiece();
246 }
247 
248 }  // namespace media
249