From 9442cd0ea8c1e67ab5c704dc59c20e3c1b931c89 Mon Sep 17 00:00:00 2001 From: Jean-Yves Avenard Date: Tue, 3 Jul 2018 09:34:56 -0700 Subject: [PATCH] Bug 1471165 - P2. Add logging facilities. r=bryce Reviewers: bryce Tags: #secure-revision Bug #: 1471165 Differential Revision: https://phabricator.services.mozilla.com/D1834 --- .../mediacapabilities/MediaCapabilities.cpp | 142 +++++++++++++++--- .../mediacapabilities/MediaCapabilities.h | 6 + 2 files changed, 125 insertions(+), 23 deletions(-) diff --git a/dom/media/mediacapabilities/MediaCapabilities.cpp b/dom/media/mediacapabilities/MediaCapabilities.cpp index 77d0ca56cd1a..311f151d1386 100644 --- a/dom/media/mediacapabilities/MediaCapabilities.cpp +++ b/dom/media/mediacapabilities/MediaCapabilities.cpp @@ -24,9 +24,82 @@ #include "mozilla/layers/KnowsCompositor.h" #include "nsContentUtils.h" +#include + +static mozilla::LazyLogModule sMediaCapabilitiesLog("MediaCapabilities"); + +#define LOG(msg, ...) \ + DDMOZ_LOG(sMediaCapabilitiesLog, LogLevel::Debug, msg, ##__VA_ARGS__) + namespace mozilla { namespace dom { +static nsCString +VideoConfigurationToStr(const VideoConfiguration* aConfig) +{ + if (!aConfig) { + return nsCString(); + } + auto str = nsPrintfCString( + "[contentType:%s width:%d height:%d bitrate:%" PRIu64 " framerate:%s]", + NS_ConvertUTF16toUTF8(aConfig->mContentType.Value()).get(), + aConfig->mWidth.Value(), + aConfig->mHeight.Value(), + aConfig->mBitrate.Value(), + NS_ConvertUTF16toUTF8(aConfig->mFramerate.Value()).get()); + return std::move(str); +} + +static nsCString +AudioConfigurationToStr(const AudioConfiguration* aConfig) +{ + if (!aConfig) { + return nsCString(); + } + auto str = nsPrintfCString( + "[contentType:%s channels:%s bitrate:%" PRIu64 " samplerate:%d]", + NS_ConvertUTF16toUTF8(aConfig->mContentType.Value()).get(), + aConfig->mChannels.WasPassed() + ? NS_ConvertUTF16toUTF8(aConfig->mChannels.Value()).get() + : "?", + aConfig->mBitrate.WasPassed() ? aConfig->mBitrate.Value() : 0, + aConfig->mSamplerate.WasPassed() ? aConfig->mSamplerate.Value() : 0); + return std::move(str); +} + +static nsCString +MediaCapabilitiesInfoToStr(const MediaCapabilitiesInfo* aInfo) +{ + if (!aInfo) { + return nsCString(); + } + auto str = nsPrintfCString("[supported:%s smooth:%s powerEfficient:%s]", + aInfo->Supported() ? "true" : "false", + aInfo->Smooth() ? "true" : "false", + aInfo->PowerEfficient() ? "true" : "false"); + return std::move(str); +} + +static nsCString +MediaDecodingConfigurationToStr(const MediaDecodingConfiguration& aConfig) +{ + nsCString str; + str += NS_LITERAL_CSTRING("["); + if (aConfig.mVideo.IsAnyMemberPresent()) { + str += + NS_LITERAL_CSTRING("video:") + VideoConfigurationToStr(&aConfig.mVideo); + if (aConfig.mAudio.IsAnyMemberPresent()) { + str += NS_LITERAL_CSTRING(" "); + } + } + if (aConfig.mAudio.IsAnyMemberPresent()) { + str += + NS_LITERAL_CSTRING("audio:") + AudioConfigurationToStr(&aConfig.mAudio); + } + str += NS_LITERAL_CSTRING("]"); + return str; +} + MediaCapabilities::MediaCapabilities(nsIGlobalObject* aParent) : mParent(aParent) { @@ -119,6 +192,8 @@ MediaCapabilities::DecodingInfo( } } + LOG("Processing %s", MediaDecodingConfigurationToStr(aConfiguration).get()); + bool supported = true; Maybe videoContainer; Maybe audioContainer; @@ -154,6 +229,9 @@ MediaCapabilities::DecodingInfo( if (!supported) { auto info = MakeUnique( false /* supported */, false /* smooth */, false /* power efficient */); + LOG("%s -> %s", + MediaDecodingConfigurationToStr(aConfiguration).get(), + MediaCapabilitiesInfoToStr(info.get()).get()); promise->MaybeResolve(std::move(info)); return promise.forget(); } @@ -216,6 +294,9 @@ MediaCapabilities::DecodingInfo( MakeUnique(false /* supported */, false /* smooth */, false /* power efficient */); + LOG("%s -> %s", + MediaDecodingConfigurationToStr(aConfiguration).get(), + MediaCapabilitiesInfoToStr(info.get()).get()); promise->MaybeResolve(std::move(info)); return promise.forget(); } @@ -340,31 +421,46 @@ MediaCapabilities::DecodingInfo( MOZ_ASSERT(targetThread); + // this is only captured for use with the LOG macro. + RefPtr self = this; + CapabilitiesPromise::All(targetThread, promises) - ->Then(targetThread, - __func__, - [promise, tracks = std::move(tracks), workerRef, holder]( - const CapabilitiesPromise::AllPromiseType::ResolveOrRejectValue& + ->Then( + targetThread, + __func__, + [promise, + tracks = std::move(tracks), + workerRef, + holder, + aConfiguration, + self, + this](const CapabilitiesPromise::AllPromiseType::ResolveOrRejectValue& aValue) { - holder->Complete(); - if (aValue.IsReject()) { - auto info = - MakeUnique(false /* supported */, - false /* smooth */, - false /* power efficient */); - promise->MaybeResolve(std::move(info)); - return; - } - bool powerEfficient = true; - bool smooth = true; - for (auto&& capability : aValue.ResolveValue()) { - smooth &= capability.Smooth(); - powerEfficient &= capability.PowerEfficient(); - } - auto info = MakeUnique( - true /* supported */, smooth, powerEfficient); - promise->MaybeResolve(std::move(info)); - }) + holder->Complete(); + if (aValue.IsReject()) { + auto info = + MakeUnique(false /* supported */, + false /* smooth */, + false /* power efficient */); + LOG("%s -> %s", + MediaDecodingConfigurationToStr(aConfiguration).get(), + MediaCapabilitiesInfoToStr(info.get()).get()); + promise->MaybeResolve(std::move(info)); + return; + } + bool powerEfficient = true; + bool smooth = true; + for (auto&& capability : aValue.ResolveValue()) { + smooth &= capability.Smooth(); + powerEfficient &= capability.PowerEfficient(); + } + auto info = MakeUnique( + true /* supported */, smooth, powerEfficient); + LOG("%s -> %s", + MediaDecodingConfigurationToStr(aConfiguration).get(), + MediaCapabilitiesInfoToStr(info.get()).get()); + promise->MaybeResolve(std::move(info)); + }) ->Track(*holder); return promise.forget(); diff --git a/dom/media/mediacapabilities/MediaCapabilities.h b/dom/media/mediacapabilities/MediaCapabilities.h index f6b2f06b31fd..fc713c09b096 100644 --- a/dom/media/mediacapabilities/MediaCapabilities.h +++ b/dom/media/mediacapabilities/MediaCapabilities.h @@ -7,6 +7,7 @@ #ifndef mozilla_dom_MediaCapabilities_h_ #define mozilla_dom_MediaCapabilities_h_ +#include "DecoderDoctorLogger.h" #include "MediaContainerType.h" #include "js/TypeDecls.h" #include "mozilla/Maybe.h" @@ -23,6 +24,11 @@ namespace mozilla { namespace layers { class KnowsCompositor; } +namespace dom { +class MediaCapabilities; +} // namespace dom +DDLoggedTypeName(dom::MediaCapabilities); + namespace dom { struct MediaDecodingConfiguration;