Bug 1404997 - P26. Reduce global threads count. r?padenot draft
authorJean-Yves Avenard <jyavenard@mozilla.com>
Fri, 15 Dec 2017 21:45:35 +0100
changeset 712334 c46d428af5be8b185937cc33009286eef236d800
parent 712328 feff184f0960d48f1181a9bd29300a2e5db461fd
child 712335 335889cde8dcb3d4ebc344dcaaddf1ee540e9dfa
push id93316
push userbmo:jyavenard@mozilla.com
push dateFri, 15 Dec 2017 23:21:20 +0000
reviewerspadenot
bugs1404997
milestone59.0a1
Bug 1404997 - P26. Reduce global threads count. r?padenot MozReview-Commit-ID: JWPH6DRg1k7
dom/media/MediaRecorder.cpp
dom/media/ipc/VideoDecoderManagerParent.cpp
media/webrtc/signaling/src/mediapipeline/MediaPipeline.cpp
--- a/dom/media/MediaRecorder.cpp
+++ b/dom/media/MediaRecorder.cpp
@@ -8,16 +8,17 @@
 
 #include "AudioNodeEngine.h"
 #include "AudioNodeStream.h"
 #include "DOMMediaStream.h"
 #include "GeckoProfiler.h"
 #include "MediaDecoder.h"
 #include "MediaEncoder.h"
 #include "MediaStreamGraphImpl.h"
+#include "VideoUtils.h"
 #include "mozilla/DOMEventTargetHelper.h"
 #include "mozilla/dom/AudioStreamTrack.h"
 #include "mozilla/dom/BlobEvent.h"
 #include "mozilla/dom/File.h"
 #include "mozilla/dom/MediaRecorderErrorEvent.h"
 #include "mozilla/dom/MutableBlobStorage.h"
 #include "mozilla/dom/VideoStreamTrack.h"
 #include "mozilla/media/MediaUtils.h"
@@ -862,25 +863,26 @@ private:
     if (!mRunningState.isOk() || mRunningState.unwrap() != RunningState::Idling) {
       MOZ_ASSERT_UNREACHABLE("Double-init");
       return;
     }
 
     // Create a TaskQueue to read encode media data from MediaEncoder.
     MOZ_RELEASE_ASSERT(!mEncoderThread);
     RefPtr<SharedThreadPool> pool =
-      SharedThreadPool::Get(NS_LITERAL_CSTRING("MediaRecorderReadThread"));
+      GetMediaThreadPool(MediaThreadType::WEBRTC_DECODER);
     if (!pool) {
       LOG(LogLevel::Debug, ("Session.InitEncoder %p Failed to create "
                             "MediaRecorderReadThread thread pool", this));
       DoSessionEndTask(NS_ERROR_FAILURE);
       return;
     }
 
-    mEncoderThread = MakeAndAddRef<TaskQueue>(pool.forget());
+    mEncoderThread =
+      MakeAndAddRef<TaskQueue>(pool.forget(), "MediaRecorderReadThread");
 
     if (!gMediaRecorderShutdownBlocker) {
       // Add a shutdown blocker so mEncoderThread can be shutdown async.
       class Blocker : public ShutdownBlocker
       {
       public:
         Blocker()
           : ShutdownBlocker(NS_LITERAL_STRING(
--- a/dom/media/ipc/VideoDecoderManagerParent.cpp
+++ b/dom/media/ipc/VideoDecoderManagerParent.cpp
@@ -1,26 +1,26 @@
 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
 /* vim: set ts=8 sts=2 et sw=2 tw=99: */
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 #include "VideoDecoderManagerParent.h"
 #include "VideoDecoderParent.h"
+#include "VideoUtils.h"
 #include "base/thread.h"
 #include "mozilla/UniquePtr.h"
 #include "mozilla/Services.h"
 #include "mozilla/Observer.h"
 #include "nsIObserverService.h"
 #include "nsIObserver.h"
 #include "nsIEventTarget.h"
 #include "nsThreadUtils.h"
 #include "ImageContainer.h"
 #include "mozilla/layers/VideoBridgeChild.h"
-#include "mozilla/SharedThreadPool.h"
 #include "mozilla/layers/ImageDataSerializer.h"
 #include "mozilla/SyncRunnable.h"
 
 #if XP_WIN
 #include <objbase.h>
 #endif
 
 namespace mozilla {
@@ -205,17 +205,17 @@ VideoDecoderManagerParent::AllocPVideoDe
                                                     const float& aFramerate,
                                                     const layers::TextureFactoryIdentifier& aIdentifier,
                                                     bool* aSuccess,
                                                     nsCString* aBlacklistedD3D11Driver,
                                                     nsCString* aBlacklistedD3D9Driver,
                                                     nsCString* aErrorDescription)
 {
   RefPtr<TaskQueue> decodeTaskQueue = new TaskQueue(
-    SharedThreadPool::Get(NS_LITERAL_CSTRING("VideoDecoderParent"), 4),
+    GetMediaThreadPool(MediaThreadType::PLATFORM_DECODER),
     "VideoDecoderParent::mDecodeTaskQueue");
 
   auto* parent = new VideoDecoderParent(
     this, aVideoInfo, aFramerate, aIdentifier,
     sManagerTaskQueue, decodeTaskQueue, aSuccess, aErrorDescription);
 
 #ifdef XP_WIN
   *aBlacklistedD3D11Driver = GetFoundD3D11BlacklistedDLL();
--- a/media/webrtc/signaling/src/mediapipeline/MediaPipeline.cpp
+++ b/media/webrtc/signaling/src/mediapipeline/MediaPipeline.cpp
@@ -111,18 +111,19 @@ protected:
 // thread whenever a frame is converted.
 class VideoFrameConverter
 {
 public:
   NS_INLINE_DECL_THREADSAFE_REFCOUNTING(VideoFrameConverter)
 
   VideoFrameConverter()
     : mLength(0)
-    , mTaskQueue(new AutoTaskQueue(
-        SharedThreadPool::Get(NS_LITERAL_CSTRING("VideoFrameConverter"))))
+    , mTaskQueue(
+        new AutoTaskQueue(GetMediaThreadPool(MediaThreadType::WEBRTC_DECODER),
+                          "VideoFrameConverter"))
     , mLastImage(-1) // -1 is not a guaranteed invalid serial. See bug 1262134.
 #ifdef DEBUG
     , mThrottleCount(0)
     , mThrottleRecord(0)
 #endif
     , mMutex("VideoFrameConverter")
   {
     MOZ_COUNT_CTOR(VideoFrameConverter);
@@ -487,18 +488,19 @@ protected:
 // use multiple threads and a TaskQueue.
 class AudioProxyThread
 {
 public:
   NS_INLINE_DECL_THREADSAFE_REFCOUNTING(AudioProxyThread)
 
   explicit AudioProxyThread(AudioSessionConduit* aConduit)
     : mConduit(aConduit)
-    , mTaskQueue(new AutoTaskQueue(
-        SharedThreadPool::Get(NS_LITERAL_CSTRING("AudioProxy"), 1)))
+    , mTaskQueue(
+        new AutoTaskQueue(GetMediaThreadPool(MediaThreadType::WEBRTC_DECODER),
+                          "AudioProxy"))
   {
     MOZ_ASSERT(mConduit);
     MOZ_COUNT_CTOR(AudioProxyThread);
   }
 
   void InternalProcessAudioChunk(TrackRate rate,
                                  const AudioChunk& chunk,
                                  bool enabled)
@@ -2157,18 +2159,19 @@ class MediaPipelineReceiveAudio::Pipelin
 public:
   PipelineListener(dom::MediaStreamTrack* aTrack,
                    const RefPtr<MediaSessionConduit>& aConduit)
     : GenericReceiveListener(aTrack)
     , mConduit(aConduit)
     , mSource(mTrack->GetInputStream()->AsSourceStream())
     , mTrackId(mTrack->GetInputTrackId())
     , mRate(mSource ? mSource->GraphRate() : 0)
-    , mTaskQueue(new AutoTaskQueue(
-        SharedThreadPool::Get(NS_LITERAL_CSTRING("PipelineAudioListener"))))
+    , mTaskQueue(
+        new AutoTaskQueue(GetMediaThreadPool(MediaThreadType::WEBRTC_DECODER),
+                          "AudioPipelineListener"))
     , mLastLog(0)
   {
     MOZ_ASSERT(mSource);
   }
 
   // Implement MediaStreamListener
   void NotifyPull(MediaStreamGraph* aGraph,
                   StreamTime aDesiredTime) override