Bug 1393399 P3 - keep the MediaDecoderOwner's identification in MFR;
When GPU process crashes, the MediaDecoder, MDSM, and MFR are all destroyed.
So, we use MediaDecoderOwner to identify which video we're dealing with.
MozReview-Commit-ID: 1cv08M7Cpcf
--- a/dom/media/ChannelMediaDecoder.cpp
+++ b/dom/media/ChannelMediaDecoder.cpp
@@ -196,16 +196,17 @@ MediaDecoderStateMachine* ChannelMediaDe
{
MOZ_ASSERT(NS_IsMainThread());
MediaFormatReaderInit init;
init.mVideoFrameContainer = GetVideoFrameContainer();
init.mKnowsCompositor = GetCompositor();
init.mCrashHelper = GetOwner()->CreateGMPCrashHelper();
init.mFrameStats = mFrameStats;
init.mResource = mResource;
+ init.mMediaDecoderOwnerID = mOwner;
mReader = DecoderTraits::CreateReader(ContainerType(), init);
return new MediaDecoderStateMachine(this, mReader);
}
void
ChannelMediaDecoder::Shutdown()
{
mWatchManager.Shutdown();
--- a/dom/media/MediaFormatReader.cpp
+++ b/dom/media/MediaFormatReader.cpp
@@ -1109,16 +1109,17 @@ MediaFormatReader::MediaFormatReader(Med
, mVideoFrameContainer(aInit.mVideoFrameContainer)
, mCrashHelper(aInit.mCrashHelper)
, mDecoderFactory(new DecoderFactory(this))
, mShutdownPromisePool(new ShutdownPromisePool())
, mBuffered(mTaskQueue,
TimeIntervals(),
"MediaFormatReader::mBuffered (Canonical)")
, mFrameStats(aInit.mFrameStats)
+ , mMediaDecoderOwnerID(aInit.mMediaDecoderOwnerID)
{
MOZ_ASSERT(aDemuxer);
MOZ_COUNT_CTOR(MediaFormatReader);
mOnTrackWaitingForKeyListener = OnTrackWaitingForKey().Connect(
mTaskQueue, this, &MediaFormatReader::NotifyWaitingForKey);
}
MediaFormatReader::~MediaFormatReader()
--- a/dom/media/MediaFormatReader.h
+++ b/dom/media/MediaFormatReader.h
@@ -68,23 +68,27 @@ struct SeekRejectValue
};
struct MetadataHolder
{
UniquePtr<MediaInfo> mInfo;
UniquePtr<MetadataTags> mTags;
};
+typedef void* MediaDecoderOwnerID;
+
struct MOZ_STACK_CLASS MediaFormatReaderInit
{
MediaResource* mResource = nullptr;
VideoFrameContainer* mVideoFrameContainer = nullptr;
FrameStatistics* mFrameStats = nullptr;
already_AddRefed<layers::KnowsCompositor> mKnowsCompositor;
already_AddRefed<GMPCrashHelper> mCrashHelper;
+ // Used in bug 1393399 for temporary telemetry.
+ MediaDecoderOwnerID mMediaDecoderOwnerID = nullptr;
};
class MediaFormatReader final
{
static const bool IsExclusive = true;
typedef TrackInfo::TrackType TrackType;
typedef MozPromise<bool, MediaResult, IsExclusive> NotifyDataArrivedPromise;
@@ -757,13 +761,16 @@ private:
MediaEventProducer<nsTArray<uint8_t>, nsString> mOnEncrypted;
MediaEventProducer<void> mOnWaitingForKey;
MediaEventProducer<MediaResult> mOnDecodeWarning;
RefPtr<FrameStatistics> mFrameStats;
+
+ // Used in bug 1393399 for telemetry.
+ const MediaDecoderOwnerID mMediaDecoderOwnerID;
};
} // namespace mozilla
#endif
--- a/dom/media/hls/HLSDecoder.cpp
+++ b/dom/media/hls/HLSDecoder.cpp
@@ -88,16 +88,17 @@ HLSDecoder::CreateStateMachine()
{
MOZ_ASSERT(NS_IsMainThread());
MediaFormatReaderInit init;
init.mVideoFrameContainer = GetVideoFrameContainer();
init.mKnowsCompositor = GetCompositor();
init.mCrashHelper = GetOwner()->CreateGMPCrashHelper();
init.mFrameStats = mFrameStats;
+ init.mMediaDecoderOwnerID = mOwner;
mReader =
new MediaFormatReader(init, new HLSDemuxer(mHLSResourceWrapper->GetPlayerId()));
return new MediaDecoderStateMachine(this, mReader);
}
bool
HLSDecoder::IsEnabled()
--- a/dom/media/mediasource/MediaSourceDecoder.cpp
+++ b/dom/media/mediasource/MediaSourceDecoder.cpp
@@ -37,16 +37,17 @@ MediaSourceDecoder::CreateStateMachine()
{
MOZ_ASSERT(NS_IsMainThread());
mDemuxer = new MediaSourceDemuxer(AbstractMainThread());
MediaFormatReaderInit init;
init.mVideoFrameContainer = GetVideoFrameContainer();
init.mKnowsCompositor = GetCompositor();
init.mCrashHelper = GetOwner()->CreateGMPCrashHelper();
init.mFrameStats = mFrameStats;
+ init.mMediaDecoderOwnerID = mOwner;
mReader = new MediaFormatReader(init, mDemuxer);
return new MediaDecoderStateMachine(this, mReader);
}
nsresult
MediaSourceDecoder::Load(nsIPrincipal* aPrincipal)
{
MOZ_ASSERT(NS_IsMainThread());