summaryrefslogtreecommitdiffstats
path: root/dom/media/utils/TelemetryProbesReporter.cpp
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-05-15 03:34:42 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-05-15 03:34:42 +0000
commitda4c7e7ed675c3bf405668739c3012d140856109 (patch)
treecdd868dba063fecba609a1d819de271f0d51b23e /dom/media/utils/TelemetryProbesReporter.cpp
parentAdding upstream version 125.0.3. (diff)
downloadfirefox-da4c7e7ed675c3bf405668739c3012d140856109.tar.xz
firefox-da4c7e7ed675c3bf405668739c3012d140856109.zip
Adding upstream version 126.0.upstream/126.0
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'dom/media/utils/TelemetryProbesReporter.cpp')
-rw-r--r--dom/media/utils/TelemetryProbesReporter.cpp71
1 files changed, 56 insertions, 15 deletions
diff --git a/dom/media/utils/TelemetryProbesReporter.cpp b/dom/media/utils/TelemetryProbesReporter.cpp
index 8c5614c048..377cee9abc 100644
--- a/dom/media/utils/TelemetryProbesReporter.cpp
+++ b/dom/media/utils/TelemetryProbesReporter.cpp
@@ -293,23 +293,30 @@ void TelemetryProbesReporter::OnDecodeResumed() {
}
void TelemetryProbesReporter::OntFirstFrameLoaded(
- const TimeDuration& aLoadedFirstFrameTime, bool aIsMSE,
- bool aIsExternalEngineStateMachine) {
- const MediaInfo& info = mOwner->GetMediaInfo();
- MOZ_ASSERT(info.HasVideo());
+ const double aLoadedFirstFrameTime, const double aLoadedMetadataTime,
+ const double aTotalWaitingDataTime, const double aTotalBufferingTime,
+ const FirstFrameLoadedFlagSet aFlags, const MediaInfo& aInfo) {
+ MOZ_ASSERT(aInfo.HasVideo());
nsCString resolution;
- DetermineResolutionForTelemetry(info, resolution);
+ DetermineResolutionForTelemetry(aInfo, resolution);
+
+ const bool isMSE = aFlags.contains(FirstFrameLoadedFlag::IsMSE);
+ const bool isExternalEngineStateMachine =
+ aFlags.contains(FirstFrameLoadedFlag::IsExternalEngineStateMachine);
glean::media_playback::FirstFrameLoadedExtra extraData;
- extraData.firstFrameLoadedTime = Some(aLoadedFirstFrameTime.ToMilliseconds());
- if (!aIsMSE && !aIsExternalEngineStateMachine) {
+ extraData.firstFrameLoadedTime = Some(aLoadedFirstFrameTime);
+ extraData.metadataLoadedTime = Some(aLoadedMetadataTime);
+ extraData.totalWaitingDataTime = Some(aTotalWaitingDataTime);
+ extraData.bufferingTime = Some(aTotalBufferingTime);
+ if (!isMSE && !isExternalEngineStateMachine) {
extraData.playbackType = Some("Non-MSE playback"_ns);
- } else if (aIsMSE && !aIsExternalEngineStateMachine) {
+ } else if (isMSE && !isExternalEngineStateMachine) {
extraData.playbackType = !mOwner->IsEncrypted() ? Some("MSE playback"_ns)
: Some("EME playback"_ns);
- } else if (!aIsMSE && aIsExternalEngineStateMachine) {
+ } else if (!isMSE && isExternalEngineStateMachine) {
extraData.playbackType = Some("Non-MSE media-engine playback"_ns);
- } else if (aIsMSE && aIsExternalEngineStateMachine) {
+ } else if (isMSE && isExternalEngineStateMachine) {
extraData.playbackType = !mOwner->IsEncrypted()
? Some("MSE media-engine playback"_ns)
: Some("EME media-engine playback"_ns);
@@ -317,18 +324,35 @@ void TelemetryProbesReporter::OntFirstFrameLoaded(
extraData.playbackType = Some("ERROR TYPE"_ns);
MOZ_ASSERT(false, "Unexpected playback type!");
}
- extraData.videoCodec = Some(info.mVideo.mMimeType);
+ extraData.videoCodec = Some(aInfo.mVideo.mMimeType);
extraData.resolution = Some(resolution);
if (const auto keySystem = mOwner->GetKeySystem()) {
extraData.keySystem = Some(NS_ConvertUTF16toUTF8(*keySystem));
}
+ if (aFlags.contains(FirstFrameLoadedFlag::IsHardwareDecoding)) {
+ extraData.isHardwareDecoding = Some(true);
+ }
+
+#ifdef MOZ_WIDGET_ANDROID
+ if (aFlags.contains(FirstFrameLoadedFlag::IsHLS)) {
+ extraData.hlsDecoder = Some(true);
+ }
+#endif
if (MOZ_LOG_TEST(gTelemetryProbesReporterLog, LogLevel::Debug)) {
nsPrintfCString logMessage{
- "Media_Playabck First_Frame_Loaded event, time(ms)=%f, "
- "playback-type=%s, videoCodec=%s, resolution=%s",
- aLoadedFirstFrameTime.ToMilliseconds(), extraData.playbackType->get(),
- extraData.videoCodec->get(), extraData.resolution->get()};
+ "Media_Playabck First_Frame_Loaded event, time(ms)=["
+ "full:%f, loading-meta:%f, waiting-data:%f, buffering:%f], "
+ "playback-type=%s, "
+ "videoCodec=%s, resolution=%s, hardware=%d",
+ aLoadedFirstFrameTime,
+ aLoadedMetadataTime,
+ aTotalWaitingDataTime,
+ aTotalBufferingTime,
+ extraData.playbackType->get(),
+ extraData.videoCodec->get(),
+ extraData.resolution->get(),
+ aFlags.contains(FirstFrameLoadedFlag::IsHardwareDecoding)};
if (const auto keySystem = mOwner->GetKeySystem()) {
logMessage.Append(nsPrintfCString{
", keySystem=%s", NS_ConvertUTF16toUTF8(*keySystem).get()});
@@ -336,6 +360,7 @@ void TelemetryProbesReporter::OntFirstFrameLoaded(
LOG("%s", logMessage.get());
}
glean::media_playback::first_frame_loaded.Record(Some(extraData));
+ mOwner->DispatchAsyncTestingEvent(u"mozfirstframeloadedprobe"_ns);
}
void TelemetryProbesReporter::OnShutdown() {
@@ -465,6 +490,7 @@ void TelemetryProbesReporter::ReportResultForVideo() {
SECONDS_TO_MS(totalVideoPlayTimeS));
}
+ // TODO: deprecate the old probes.
// Report result for video using CDM
auto keySystem = mOwner->GetKeySystem();
if (keySystem) {
@@ -519,6 +545,10 @@ void TelemetryProbesReporter::ReportResultForVideo() {
ReportResultForMFCDMPlaybackIfNeeded(totalVideoPlayTimeS, key);
}
#endif
+ if (keySystem) {
+ ReportPlaytimeForKeySystem(*keySystem, totalVideoPlayTimeS,
+ info.mVideo.mMimeType, key);
+ }
}
#ifdef MOZ_WMF_CDM
@@ -564,6 +594,17 @@ void TelemetryProbesReporter::ReportResultForMFCDMPlaybackIfNeeded(
}
#endif
+void TelemetryProbesReporter::ReportPlaytimeForKeySystem(
+ const nsAString& aKeySystem, const double aTotalPlayTimeS,
+ const nsCString& aCodec, const nsCString& aResolution) {
+ glean::mediadrm::EmePlaybackExtra extra = {
+ .keySystem = Some(NS_ConvertUTF16toUTF8(aKeySystem)),
+ .playedTime = Some(aTotalPlayTimeS),
+ .resolution = Some(aResolution),
+ .videoCodec = Some(aCodec)};
+ glean::mediadrm::eme_playback.Record(Some(extra));
+}
+
void TelemetryProbesReporter::ReportResultForAudio() {
// Don't record telemetry for a media that didn't have a valid audio or video
// to play, or hasn't played.