Bug 1393379. P1 - make MediaDecoder::AddSizeOfResources pure virtual.
We will move the implementation to sub-classes which have more details
about how to calculate the resource size.
MozReview-Commit-ID: 7lfiz5GNtPE
--- a/dom/media/ChannelMediaDecoder.cpp
+++ b/dom/media/ChannelMediaDecoder.cpp
@@ -482,16 +482,25 @@ ChannelMediaDecoder::ShouldThrottleDownl
if (!stats.mDownloadRateReliable || !stats.mPlaybackRateReliable) {
return false;
}
uint32_t factor =
std::max(2u, Preferences::GetUint("media.throttle-factor", 2));
return stats.mDownloadRate > factor * stats.mPlaybackRate;
}
+void
+ChannelMediaDecoder::AddSizeOfResources(ResourceSizes* aSizes)
+{
+ MOZ_ASSERT(NS_IsMainThread());
+ if (mResource) {
+ aSizes->mByteSize += mResource->SizeOfIncludingThis(aSizes->mMallocSizeOf);
+ }
+}
+
already_AddRefed<nsIPrincipal>
ChannelMediaDecoder::GetCurrentPrincipal()
{
MOZ_ASSERT(NS_IsMainThread());
return mResource ? mResource->GetCurrentPrincipal() : nullptr;
}
bool
--- a/dom/media/ChannelMediaDecoder.h
+++ b/dom/media/ChannelMediaDecoder.h
@@ -73,16 +73,17 @@ public:
// Create a new decoder of the same type as this one.
already_AddRefed<ChannelMediaDecoder> Clone(MediaDecoderInit& aInit);
nsresult Load(nsIChannel* aChannel,
bool aIsPrivateBrowsing,
nsIStreamListener** aStreamListener);
+ void AddSizeOfResources(ResourceSizes* aSizes) override;
already_AddRefed<nsIPrincipal> GetCurrentPrincipal() override;
bool IsTransportSeekable() override;
void SetLoadInBackground(bool aLoadInBackground) override;
void Suspend() override;
void Resume() override;
private:
MediaResource* GetResource() const override final;
--- a/dom/media/MediaDecoder.cpp
+++ b/dom/media/MediaDecoder.cpp
@@ -1331,25 +1331,16 @@ MediaDecoder::SizeOfAudioQueue()
{
MOZ_ASSERT(NS_IsMainThread());
if (mDecoderStateMachine) {
return mDecoderStateMachine->SizeOfAudioQueue();
}
return 0;
}
-void MediaDecoder::AddSizeOfResources(ResourceSizes* aSizes)
-{
- MOZ_ASSERT(NS_IsMainThread());
- if (GetResource()) {
- aSizes->mByteSize +=
- GetResource()->SizeOfIncludingThis(aSizes->mMallocSizeOf);
- }
-}
-
void
MediaDecoder::NotifyDataArrivedInternal()
{
MOZ_ASSERT(NS_IsMainThread());
MOZ_DIAGNOSTIC_ASSERT(!IsShutdown());
mReader->OwnerThread()->Dispatch(
NewRunnableMethod("MediaFormatReader::NotifyDataArrived",
mReader.get(),
--- a/dom/media/MediaDecoder.h
+++ b/dom/media/MediaDecoder.h
@@ -270,17 +270,17 @@ private:
~ResourceSizes()
{
mCallback.ResolveIfExists(mByteSize, __func__);
}
MozPromiseHolder<SizeOfPromise> mCallback;
};
- virtual void AddSizeOfResources(ResourceSizes* aSizes);
+ virtual void AddSizeOfResources(ResourceSizes* aSizes) = 0;
VideoFrameContainer* GetVideoFrameContainer()
{
return mVideoFrameContainer;
}
layers::ImageContainer* GetImageContainer();
--- a/dom/media/hls/HLSDecoder.cpp
+++ b/dom/media/hls/HLSDecoder.cpp
@@ -87,16 +87,25 @@ HLSDecoder::Load(nsIChannel* aChannel)
}
SetStateMachine(CreateStateMachine());
NS_ENSURE_TRUE(GetStateMachine(), NS_ERROR_FAILURE);
return InitializeStateMachine();
}
+void
+HLSDecoder::AddSizeOfResources(ResourceSizes* aSizes)
+{
+ MOZ_ASSERT(NS_IsMainThread());
+ if (mResource) {
+ aSizes->mByteSize += mResource->SizeOfIncludingThis(aSizes->mMallocSizeOf);
+ }
+}
+
already_AddRefed<nsIPrincipal>
HLSDecoder::GetCurrentPrincipal()
{
MOZ_ASSERT(NS_IsMainThread());
return mResource ? mResource->GetCurrentPrincipal() : nullptr;
}
nsresult
--- a/dom/media/hls/HLSDecoder.h
+++ b/dom/media/hls/HLSDecoder.h
@@ -32,16 +32,17 @@ public:
static bool IsSupportedType(const MediaContainerType& aContainerType);
nsresult Load(nsIChannel* aChannel);
nsresult Play() override;
void Pause() override;
+ void AddSizeOfResources(ResourceSizes* aSizes) override;
already_AddRefed<nsIPrincipal> GetCurrentPrincipal() override;
bool IsTransportSeekable() override { return true; }
void Suspend() override;
void Resume() override;
private:
MediaResource* GetResource() const override final;
--- a/dom/media/hls/HLSResource.h
+++ b/dom/media/hls/HLSResource.h
@@ -78,33 +78,33 @@ public:
}
java::GeckoHLSResourceWrapper::GlobalRef GetResourceWrapper() {
return mHLSResourceWrapper;
}
void Detach() { mDecoder = nullptr; }
-private:
- friend class HLSResourceCallbacksSupport;
-
- void onDataAvailable();
- void onError(int aErrorCode);
-
size_t SizeOfExcludingThis(MallocSizeOf aMallocSizeOf) const override
{
size_t size = MediaResource::SizeOfExcludingThis(aMallocSizeOf);
return size;
}
size_t SizeOfIncludingThis(MallocSizeOf aMallocSizeOf) const override
{
return aMallocSizeOf(this) + SizeOfExcludingThis(aMallocSizeOf);
}
+private:
+ friend class HLSResourceCallbacksSupport;
+
+ void onDataAvailable();
+ void onError(int aErrorCode);
+
HLSDecoder* mDecoder;
nsCOMPtr<nsIChannel> mChannel;
nsCOMPtr<nsIURI> mURI;
java::GeckoHLSResourceWrapper::GlobalRef mHLSResourceWrapper;
java::GeckoHLSResourceWrapper::Callbacks::GlobalRef mJavaCallbacks;
RefPtr<HLSResourceCallbacksSupport> mCallbackSupport;
};