From da4c7e7ed675c3bf405668739c3012d140856109 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Wed, 15 May 2024 05:34:42 +0200 Subject: Adding upstream version 126.0. Signed-off-by: Daniel Baumann --- dom/media/utils/TelemetryProbesReporter.cpp | 71 +++++++++++++++++++++++------ 1 file changed, 56 insertions(+), 15 deletions(-) (limited to 'dom/media/utils/TelemetryProbesReporter.cpp') 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. -- cgit v1.2.3