Bug 1362912. P2 - fix the callers. r=gerald

MozReview-Commit-ID: LdYcIWAFDUn

--HG--
extra : rebase_source : eb943f7e5b7674c3397fce3ad0e8193b4c0ddc01
extra : source : fdfd468b6edbabf3830eb78fc705f6d6682b7126
This commit is contained in:
JW Wang 2017-05-09 23:31:32 +08:00
parent 4f8f4d86e6
commit 20f3ad9f2f
7 changed files with 96 additions and 31 deletions

View File

@ -54,8 +54,11 @@ MediaDecoderReaderWrapper::RequestAudioData()
->Then(mOwnerThread, __func__, ->Then(mOwnerThread, __func__,
[startTime] (AudioData* aAudio) { [startTime] (AudioData* aAudio) {
aAudio->AdjustForStartTime(startTime); aAudio->AdjustForStartTime(startTime);
return AudioDataPromise::CreateAndResolve(aAudio, __func__);
}, },
[] (const MediaResult& aError) {}); [] (const MediaResult& aError) {
return AudioDataPromise::CreateAndReject(aError, __func__);
});
} }
RefPtr<MediaDecoderReaderWrapper::VideoDataPromise> RefPtr<MediaDecoderReaderWrapper::VideoDataPromise>
@ -77,8 +80,11 @@ MediaDecoderReaderWrapper::RequestVideoData(bool aSkipToNextKeyframe,
->Then(mOwnerThread, __func__, ->Then(mOwnerThread, __func__,
[startTime] (VideoData* aVideo) { [startTime] (VideoData* aVideo) {
aVideo->AdjustForStartTime(startTime); aVideo->AdjustForStartTime(startTime);
return VideoDataPromise::CreateAndResolve(aVideo, __func__);
}, },
[] (const MediaResult& aError) {}); [] (const MediaResult& aError) {
return VideoDataPromise::CreateAndReject(aError, __func__);
});
} }
RefPtr<MediaDecoderReader::SeekPromise> RefPtr<MediaDecoderReader::SeekPromise>
@ -131,17 +137,25 @@ MediaDecoderReaderWrapper::Shutdown()
&MediaDecoderReader::Shutdown); &MediaDecoderReader::Shutdown);
} }
void RefPtr<MediaDecoderReaderWrapper::MetadataPromise>
MediaDecoderReaderWrapper::OnMetadataRead(MetadataHolder* aMetadata) MediaDecoderReaderWrapper::OnMetadataRead(MetadataHolder* aMetadata)
{ {
MOZ_ASSERT(mOwnerThread->IsCurrentThreadIn()); MOZ_ASSERT(mOwnerThread->IsCurrentThreadIn());
if (mShutdown) { if (mShutdown) {
return; return MetadataPromise::CreateAndReject(
NS_ERROR_DOM_MEDIA_ABORT_ERR, __func__);
} }
if (mStartTime.isNothing()) { if (mStartTime.isNothing()) {
mStartTime.emplace(aMetadata->mInfo.mStartTime); mStartTime.emplace(aMetadata->mInfo.mStartTime);
} }
return MetadataPromise::CreateAndResolve(aMetadata, __func__);
}
RefPtr<MediaDecoderReaderWrapper::MetadataPromise>
MediaDecoderReaderWrapper::OnMetadataNotRead(const MediaResult& aError)
{
return MetadataPromise::CreateAndReject(aError, __func__);
} }
void void

View File

@ -90,8 +90,8 @@ public:
private: private:
~MediaDecoderReaderWrapper(); ~MediaDecoderReaderWrapper();
void OnMetadataRead(MetadataHolder* aMetadata); RefPtr<MetadataPromise> OnMetadataRead(MetadataHolder* aMetadata);
void OnMetadataNotRead() {} RefPtr<MetadataPromise> OnMetadataNotRead(const MediaResult& aError);
const RefPtr<AbstractThread> mOwnerThread; const RefPtr<AbstractThread> mOwnerThread;
const RefPtr<MediaDecoderReader> mReader; const RefPtr<MediaDecoderReader> mReader;

View File

@ -570,8 +570,9 @@ public:
RefPtr<Token> token = mToken.forget(); RefPtr<Token> token = mToken.forget();
return decoder->Shutdown()->Then( return decoder->Shutdown()->Then(
AbstractThread::GetCurrent(), __func__, AbstractThread::GetCurrent(), __func__,
[token]() {}, [token]() {
[token]() { MOZ_RELEASE_ASSERT(false, "Can't reach here"); }); return ShutdownPromise::CreateAndResolve(true, __func__);
});
} }
private: private:
@ -889,8 +890,14 @@ public:
mTaskQueue, __func__, mTaskQueue, __func__,
[self, aTime]() { return self->mTrackDemuxer->Seek(aTime); }) [self, aTime]() { return self->mTrackDemuxer->Seek(aTime); })
->Then(mTaskQueue, __func__, ->Then(mTaskQueue, __func__,
[self]() { self->UpdateRandomAccessPoint(); }, [self](const TimeUnit& aTime) {
[self]() { self->UpdateRandomAccessPoint(); }); self->UpdateRandomAccessPoint();
return SeekPromise::CreateAndResolve(aTime, __func__);
},
[self](const MediaResult& aError) {
self->UpdateRandomAccessPoint();
return SeekPromise::CreateAndReject(aError, __func__);
});
} }
RefPtr<SamplesPromise> GetSamples(int32_t aNumSamples) override RefPtr<SamplesPromise> GetSamples(int32_t aNumSamples) override
@ -901,8 +908,14 @@ public:
return self->mTrackDemuxer->GetSamples(aNumSamples); return self->mTrackDemuxer->GetSamples(aNumSamples);
}) })
->Then(mTaskQueue, __func__, ->Then(mTaskQueue, __func__,
[self]() { self->UpdateRandomAccessPoint(); }, [self](RefPtr<SamplesHolder> aSamples) {
[self]() { self->UpdateRandomAccessPoint(); }); self->UpdateRandomAccessPoint();
return SamplesPromise::CreateAndResolve(aSamples.forget(), __func__);
},
[self](const MediaResult& aError) {
self->UpdateRandomAccessPoint();
return SamplesPromise::CreateAndReject(aError, __func__);
});
} }
bool GetSamplesMayBlock() const override bool GetSamplesMayBlock() const override
@ -938,8 +951,14 @@ public:
aTimeThreshold); aTimeThreshold);
}) })
->Then(mTaskQueue, __func__, ->Then(mTaskQueue, __func__,
[self]() { self->UpdateRandomAccessPoint(); }, [self](uint32_t aVal) {
[self]() { self->UpdateRandomAccessPoint(); }); self->UpdateRandomAccessPoint();
return SkipAccessPointPromise::CreateAndResolve(aVal, __func__);
},
[self](const SkipFailureHolder& aError) {
self->UpdateRandomAccessPoint();
return SkipAccessPointPromise::CreateAndReject(aError, __func__);
});
} }
TimeIntervals GetBuffered() override TimeIntervals GetBuffered() override
@ -997,12 +1016,14 @@ private:
RefPtr<MediaDataDemuxer::InitPromise> RefPtr<MediaDataDemuxer::InitPromise>
MediaFormatReader::DemuxerProxy::Init() MediaFormatReader::DemuxerProxy::Init()
{ {
using InitPromise = MediaDataDemuxer::InitPromise;
RefPtr<Data> data = mData; RefPtr<Data> data = mData;
RefPtr<AutoTaskQueue> taskQueue = mTaskQueue; RefPtr<AutoTaskQueue> taskQueue = mTaskQueue;
return InvokeAsync(mTaskQueue, __func__, return InvokeAsync(mTaskQueue, __func__,
[data, taskQueue]() { [data, taskQueue]() {
if (!data->mDemuxer) { if (!data->mDemuxer) {
return MediaDataDemuxer::InitPromise::CreateAndReject( return InitPromise::CreateAndReject(
NS_ERROR_DOM_MEDIA_CANCELED, __func__); NS_ERROR_DOM_MEDIA_CANCELED, __func__);
} }
return data->mDemuxer->Init(); return data->mDemuxer->Init();
@ -1010,7 +1031,8 @@ MediaFormatReader::DemuxerProxy::Init()
->Then(taskQueue, __func__, ->Then(taskQueue, __func__,
[data, taskQueue]() { [data, taskQueue]() {
if (!data->mDemuxer) { // Was shutdown. if (!data->mDemuxer) { // Was shutdown.
return; return InitPromise::CreateAndReject(
NS_ERROR_DOM_MEDIA_CANCELED, __func__);
} }
data->mNumAudioTrack = data->mNumAudioTrack =
data->mDemuxer->GetNumberTracks(TrackInfo::kAudioTrack); data->mDemuxer->GetNumberTracks(TrackInfo::kAudioTrack);
@ -1043,8 +1065,11 @@ MediaFormatReader::DemuxerProxy::Init()
data->mShouldComputeStartTime = data->mShouldComputeStartTime =
data->mDemuxer->ShouldComputeStartTime(); data->mDemuxer->ShouldComputeStartTime();
data->mInitDone = true; data->mInitDone = true;
return InitPromise::CreateAndResolve(NS_OK, __func__);
}, },
[]() {}); [](const MediaResult& aError) {
return InitPromise::CreateAndReject(aError, __func__);
});
} }
RefPtr<MediaFormatReader::NotifyDataArrivedPromise> RefPtr<MediaFormatReader::NotifyDataArrivedPromise>
@ -1614,6 +1639,8 @@ MediaFormatReader::OnDemuxFailed(TrackType aTrack, const MediaResult& aError)
void void
MediaFormatReader::DoDemuxVideo() MediaFormatReader::DoDemuxVideo()
{ {
using SamplesPromise = MediaTrackDemuxer::SamplesPromise;
auto p = mVideo.mTrackDemuxer->GetSamples(1); auto p = mVideo.mTrackDemuxer->GetSamples(1);
if (mVideo.mFirstDemuxedSampleTime.isNothing()) { if (mVideo.mFirstDemuxedSampleTime.isNothing()) {
@ -1621,9 +1648,11 @@ MediaFormatReader::DoDemuxVideo()
p = p->Then(OwnerThread(), __func__, p = p->Then(OwnerThread(), __func__,
[self] (RefPtr<MediaTrackDemuxer::SamplesHolder> aSamples) { [self] (RefPtr<MediaTrackDemuxer::SamplesHolder> aSamples) {
self->OnFirstDemuxCompleted(TrackInfo::kVideoTrack, aSamples); self->OnFirstDemuxCompleted(TrackInfo::kVideoTrack, aSamples);
return SamplesPromise::CreateAndResolve(aSamples.forget(), __func__);
}, },
[self] (const MediaResult& aError) { [self] (const MediaResult& aError) {
self->OnFirstDemuxFailed(TrackInfo::kVideoTrack, aError); self->OnFirstDemuxFailed(TrackInfo::kVideoTrack, aError);
return SamplesPromise::CreateAndReject(aError, __func__);
}); });
} }
@ -1687,6 +1716,8 @@ MediaFormatReader::RequestAudioData()
void void
MediaFormatReader::DoDemuxAudio() MediaFormatReader::DoDemuxAudio()
{ {
using SamplesPromise = MediaTrackDemuxer::SamplesPromise;
auto p = mAudio.mTrackDemuxer->GetSamples(1); auto p = mAudio.mTrackDemuxer->GetSamples(1);
if (mAudio.mFirstDemuxedSampleTime.isNothing()) { if (mAudio.mFirstDemuxedSampleTime.isNothing()) {
@ -1694,9 +1725,11 @@ MediaFormatReader::DoDemuxAudio()
p = p->Then(OwnerThread(), __func__, p = p->Then(OwnerThread(), __func__,
[self] (RefPtr<MediaTrackDemuxer::SamplesHolder> aSamples) { [self] (RefPtr<MediaTrackDemuxer::SamplesHolder> aSamples) {
self->OnFirstDemuxCompleted(TrackInfo::kAudioTrack, aSamples); self->OnFirstDemuxCompleted(TrackInfo::kAudioTrack, aSamples);
return SamplesPromise::CreateAndResolve(aSamples.forget(), __func__);
}, },
[self] (const MediaResult& aError) { [self] (const MediaResult& aError) {
self->OnFirstDemuxFailed(TrackInfo::kAudioTrack, aError); self->OnFirstDemuxFailed(TrackInfo::kAudioTrack, aError);
return SamplesPromise::CreateAndReject(aError, __func__);
}); });
} }

View File

@ -648,15 +648,17 @@ GeckoMediaPluginServiceParent::AsyncAddPluginDirectory(const nsAString& aDirecto
->Then( ->Then(
mMainThread, mMainThread,
__func__, __func__,
[dir, self]() -> void { [dir, self](bool aVal) {
LOGD(("GeckoMediaPluginServiceParent::AsyncAddPluginDirectory %s succeeded", LOGD(("GeckoMediaPluginServiceParent::AsyncAddPluginDirectory %s succeeded",
NS_ConvertUTF16toUTF8(dir).get())); NS_ConvertUTF16toUTF8(dir).get()));
MOZ_ASSERT(NS_IsMainThread()); MOZ_ASSERT(NS_IsMainThread());
self->UpdateContentProcessGMPCapabilities(); self->UpdateContentProcessGMPCapabilities();
return GenericPromise::CreateAndResolve(aVal, __func__);
}, },
[dir]() -> void { [dir](nsresult aResult) {
LOGD(("GeckoMediaPluginServiceParent::AsyncAddPluginDirectory %s failed", LOGD(("GeckoMediaPluginServiceParent::AsyncAddPluginDirectory %s failed",
NS_ConvertUTF16toUTF8(dir).get())); NS_ConvertUTF16toUTF8(dir).get()));
return GenericPromise::CreateAndReject(aResult, __func__);
}); });
} }
@ -874,15 +876,17 @@ GeckoMediaPluginServiceParent::AddOnGMPThread(nsString aDirectory)
RefPtr<GeckoMediaPluginServiceParent> self(this); RefPtr<GeckoMediaPluginServiceParent> self(this);
return gmp->Init(this, directory)->Then(thread, __func__, return gmp->Init(this, directory)->Then(thread, __func__,
[gmp, self, dir]() -> void { [gmp, self, dir](bool aVal) {
LOGD(("%s::%s: %s Succeeded", __CLASS__, __FUNCTION__, dir.get())); LOGD(("%s::%s: %s Succeeded", __CLASS__, __FUNCTION__, dir.get()));
{ {
MutexAutoLock lock(self->mMutex); MutexAutoLock lock(self->mMutex);
self->mPlugins.AppendElement(gmp); self->mPlugins.AppendElement(gmp);
} }
return GenericPromise::CreateAndResolve(aVal, __func__);
}, },
[dir]() -> void { [dir](nsresult aResult) {
LOGD(("%s::%s: %s Failed", __CLASS__, __FUNCTION__, dir.get())); LOGD(("%s::%s: %s Failed", __CLASS__, __FUNCTION__, dir.get()));
return GenericPromise::CreateAndReject(aResult, __func__);
}); });
} }

View File

@ -88,7 +88,7 @@ RunOnTaskQueue(TaskQueue* aQueue, FunctionType aFun)
} }
// std::function can't come soon enough. :-( // std::function can't come soon enough. :-(
#define DO_FAIL []()->void { EXPECT_TRUE(false); } #define DO_FAIL []() { EXPECT_TRUE(false); return TestPromise::CreateAndReject(0, __func__); }
TEST(MozPromise, BasicResolve) TEST(MozPromise, BasicResolve)
{ {
@ -185,7 +185,11 @@ TEST(MozPromise, CompletionPromises)
->Then(queue, __func__, ->Then(queue, __func__,
[] (int aVal) -> RefPtr<TestPromise> { return TestPromise::CreateAndResolve(aVal + 10, __func__); }, [] (int aVal) -> RefPtr<TestPromise> { return TestPromise::CreateAndResolve(aVal + 10, __func__); },
DO_FAIL) DO_FAIL)
->Then(queue, __func__, [&invokedPass] () -> void { invokedPass = true; }, DO_FAIL) ->Then(queue, __func__,
[&invokedPass] (int aVal) {
invokedPass = true;
return TestPromise::CreateAndResolve(aVal, __func__);
}, DO_FAIL)
->Then(queue, __func__, ->Then(queue, __func__,
[queue] (int aVal) -> RefPtr<TestPromise> { [queue] (int aVal) -> RefPtr<TestPromise> {
RefPtr<TestPromise::Private> p = new TestPromise::Private(__func__); RefPtr<TestPromise::Private> p = new TestPromise::Private(__func__);
@ -222,7 +226,7 @@ TEST(MozPromise, PromiseAllResolve)
EXPECT_EQ(aResolveValues[2], 42); EXPECT_EQ(aResolveValues[2], 42);
queue->BeginShutdown(); queue->BeginShutdown();
}, },
DO_FAIL []() { EXPECT_TRUE(false); }
); );
}); });
} }
@ -241,7 +245,7 @@ TEST(MozPromise, PromiseAllReject)
promises.AppendElement(TestPromise::CreateAndReject(52.0, __func__)); promises.AppendElement(TestPromise::CreateAndReject(52.0, __func__));
TestPromise::All(queue, promises)->Then(queue, __func__, TestPromise::All(queue, promises)->Then(queue, __func__,
DO_FAIL, []() { EXPECT_TRUE(false); },
[queue] (float aRejectValue) -> void { [queue] (float aRejectValue) -> void {
EXPECT_EQ(aRejectValue, 32.0); EXPECT_EQ(aRejectValue, 32.0);
queue->BeginShutdown(); queue->BeginShutdown();
@ -265,8 +269,11 @@ TEST(MozPromise, Chaining)
p = p->Then(queue, __func__, p = p->Then(queue, __func__,
[] (int aVal) { [] (int aVal) {
EXPECT_EQ(aVal, 42); EXPECT_EQ(aVal, 42);
return TestPromise::CreateAndResolve(aVal, __func__);
}, },
[] () {} [] (double aVal) {
return TestPromise::CreateAndReject(aVal, __func__);
}
); );
if (i == kIterations / 2) { if (i == kIterations / 2) {

View File

@ -173,8 +173,12 @@ public:
iter.Remove(); iter.Remove();
} }
RefPtr<SamplesWaitingForKey> k = mSamplesWaitingForKey; RefPtr<SamplesWaitingForKey> k = mSamplesWaitingForKey;
return mDecoder->Flush()->Then(mTaskQueue, __func__, return mDecoder->Flush()->Then(
[k]() { k->Flush(); }); mTaskQueue, __func__,
[k]() {
k->Flush();
return FlushPromise::CreateAndResolve(true, __func__);
});
} }
RefPtr<DecodePromise> Drain() override RefPtr<DecodePromise> Drain() override

View File

@ -241,8 +241,9 @@ OmxDataDecoder::DoAsyncShutdown()
LOGL("DoAsyncShutdown: flush complete"); LOGL("DoAsyncShutdown: flush complete");
return self->mOmxLayer->SendCommand(OMX_CommandStateSet, OMX_StateIdle, nullptr); return self->mOmxLayer->SendCommand(OMX_CommandStateSet, OMX_StateIdle, nullptr);
}, },
[self] () { [self] (const OmxCommandFailureHolder& aError) {
self->mOmxLayer->Shutdown(); self->mOmxLayer->Shutdown();
return OmxCommandPromise::CreateAndReject(aError, __func__);
}) })
->Then(mOmxTaskQueue, __func__, ->Then(mOmxTaskQueue, __func__,
[self] () -> RefPtr<OmxCommandPromise> { [self] () -> RefPtr<OmxCommandPromise> {
@ -263,8 +264,9 @@ OmxDataDecoder::DoAsyncShutdown()
return p; return p;
}, },
[self] () { [self] (const OmxCommandFailureHolder& aError) {
self->mOmxLayer->Shutdown(); self->mOmxLayer->Shutdown();
return OmxCommandPromise::CreateAndReject(aError, __func__);
}) })
->Then(mOmxTaskQueue, __func__, ->Then(mOmxTaskQueue, __func__,
[self] () { [self] () {
@ -786,8 +788,9 @@ OmxDataDecoder::PortSettingsChanged()
return p; return p;
}, },
[self] () { [self] (const OmxCommandFailureHolder& aError) {
self->NotifyError(OMX_ErrorUndefined, __func__); self->NotifyError(OMX_ErrorUndefined, __func__);
return OmxCommandPromise::CreateAndReject(aError, __func__);
}) })
->Then(mOmxTaskQueue, __func__, ->Then(mOmxTaskQueue, __func__,
[self] () { [self] () {