Bug 1418917. P1 - run some functions off the main thread. r=bechen,gerald

MozReview-Commit-ID: Fn9OveV69hX

--HG--
extra : rebase_source : 36ed72bea695f07694d83c418ba45d89cf1f03be
extra : intermediate-source : e25c80e8ea6991b4f06bc4305b602c792a5b1e8a
extra : source : d20765cfa8575943c62b933563e36ee9ffa4e765
This commit is contained in:
JW Wang 2017-11-16 15:41:36 +08:00
Родитель bee29ac23b
Коммит e672887f6f
2 изменённых файлов: 59 добавлений и 19 удалений

Просмотреть файл

@ -1937,17 +1937,23 @@ void
MediaCacheStream::NotifyLoadID(uint32_t aLoadID)
{
MOZ_ASSERT(aLoadID > 0);
ReentrantMonitorAutoEnter mon(mMediaCache->GetReentrantMonitor());
mLoadID = aLoadID;
nsCOMPtr<nsIRunnable> r = NS_NewRunnableFunction(
"MediaCacheStream::NotifyLoadID",
[ client = RefPtr<ChannelMediaResource>(mClient), this, aLoadID ]() {
ReentrantMonitorAutoEnter mon(mMediaCache->GetReentrantMonitor());
mLoadID = aLoadID;
});
OwnerThread()->Dispatch(r.forget());
}
void
MediaCacheStream::NotifyDataStarted(uint32_t aLoadID,
int64_t aOffset,
bool aSeekable,
int64_t aLength)
MediaCacheStream::NotifyDataStartedInternal(uint32_t aLoadID,
int64_t aOffset,
bool aSeekable,
int64_t aLength)
{
NS_ASSERTION(NS_IsMainThread(), "Only call on main thread");
MOZ_ASSERT(OwnerThread()->IsOnCurrentThread());
MOZ_ASSERT(aLoadID > 0);
LOG("Stream %p DataStarted: %" PRId64 " aLoadID=%u aLength=%" PRId64,
this,
@ -1999,6 +2005,23 @@ MediaCacheStream::UpdatePrincipal(nsIPrincipal* aPrincipal)
}
}
void
MediaCacheStream::NotifyDataStarted(uint32_t aLoadID,
int64_t aOffset,
bool aSeekable,
int64_t aLength)
{
MOZ_ASSERT(NS_IsMainThread());
MOZ_ASSERT(aLoadID > 0);
nsCOMPtr<nsIRunnable> r = NS_NewRunnableFunction(
"MediaCacheStream::NotifyDataStarted",
[ =, client = RefPtr<ChannelMediaResource>(mClient) ]() {
NotifyDataStartedInternal(aLoadID, aOffset, aSeekable, aLength);
});
OwnerThread()->Dispatch(r.forget());
}
void
MediaCacheStream::NotifyDataReceived(uint32_t aLoadID,
uint32_t aCount,
@ -2460,12 +2483,18 @@ MediaCacheStream::SetReadMode(ReadMode aMode)
void
MediaCacheStream::SetPlaybackRate(uint32_t aBytesPerSecond)
{
NS_ASSERTION(aBytesPerSecond > 0, "Zero playback rate not allowed");
ReentrantMonitorAutoEnter mon(mMediaCache->GetReentrantMonitor());
if (aBytesPerSecond == mPlaybackBytesPerSecond)
return;
mPlaybackBytesPerSecond = aBytesPerSecond;
mMediaCache->QueueUpdate();
MOZ_ASSERT(aBytesPerSecond > 0, "Zero playback rate not allowed");
nsCOMPtr<nsIRunnable> r = NS_NewRunnableFunction(
"MediaCacheStream::SetPlaybackRate",
[ =, client = RefPtr<ChannelMediaResource>(mClient) ]() {
ReentrantMonitorAutoEnter mon(mMediaCache->GetReentrantMonitor());
if (!mClosed && mPlaybackBytesPerSecond != aBytesPerSecond) {
mPlaybackBytesPerSecond = aBytesPerSecond;
mMediaCache->QueueUpdate();
}
});
OwnerThread()->Dispatch(r.forget());
}
nsresult
@ -2493,12 +2522,18 @@ void
MediaCacheStream::ThrottleReadahead(bool bThrottle)
{
MOZ_ASSERT(NS_IsMainThread());
ReentrantMonitorAutoEnter mon(mMediaCache->GetReentrantMonitor());
if (mThrottleReadahead != bThrottle) {
LOGI("Stream %p ThrottleReadahead %d", this, bThrottle);
mThrottleReadahead = bThrottle;
mMediaCache->QueueUpdate();
}
nsCOMPtr<nsIRunnable> r = NS_NewRunnableFunction(
"MediaCacheStream::ThrottleReadahead",
[ client = RefPtr<ChannelMediaResource>(mClient), this, bThrottle ]() {
ReentrantMonitorAutoEnter mon(mMediaCache->GetReentrantMonitor());
if (!mClosed && mThrottleReadahead != bThrottle) {
LOGI("Stream %p ThrottleReadahead %d", this, bThrottle);
mThrottleReadahead = bThrottle;
mMediaCache->QueueUpdate();
}
});
OwnerThread()->Dispatch(r.forget());
}
uint32_t

Просмотреть файл

@ -454,6 +454,11 @@ private:
// waiting on the media cache monitor. Called on the main thread only.
void FlushPartialBlockInternal(bool aNotify, ReentrantMonitorAutoEnter& aReentrantMonitor);
void NotifyDataStartedInternal(uint32_t aLoadID,
int64_t aOffset,
bool aSeekable,
int64_t aLength);
void NotifyDataEndedInternal(uint32_t aLoadID,
nsresult aStatus,
bool aReopenOnError);