Bug 946865 - Move Load Adaption preference to the main thread. r=jesup

This commit is contained in:
Gian-Carlo Pascutto 2013-12-06 20:34:40 +01:00
Родитель d9cac2444b
Коммит 7a76409d70
6 изменённых файлов: 29 добавлений и 11 удалений

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

@ -21,7 +21,6 @@
#include "mozilla/TimeStamp.h"
#include "mozilla/Util.h"
#include "mozilla/Services.h"
#include "mozilla/Preferences.h"
#if defined(ANDROID) || defined(LINUX) || defined(XP_MACOSX)
#include <sys/time.h>
@ -323,10 +322,6 @@ LoadMonitor::GetSystemLoad() {
nsresult
LoadMonitor::Init(nsRefPtr<LoadMonitor> &self)
{
if (!Preferences::GetBool("media.navigator.load_adapt", false)) {
return NS_OK;
}
#if defined(PR_LOGGING)
if (!gLoadMonitorLog)
gLoadMonitorLog = PR_NewLogModule("LoadMonitor");

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

@ -45,6 +45,7 @@ public:
static const int DEFAULT_VIDEO_WIDTH = 640;
static const int DEFAULT_VIDEO_HEIGHT = 480;
static const int DEFAULT_AUDIO_TIMER_MS = 10;
static const bool DEFAULT_LOAD_ADAPT = false;
/* Populate an array of video sources in the nsTArray. Also include devices
* that are currently unavailable. */
@ -130,6 +131,7 @@ struct MediaEnginePrefs {
int32_t mHeight;
int32_t mFPS;
int32_t mMinFPS;
bool mLoadAdapt;
};
class MediaEngineVideoSource : public MediaEngineSource

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

@ -43,7 +43,7 @@ GetUserMediaLog()
namespace mozilla {
#ifndef MOZ_B2G_CAMERA
MediaEngineWebRTC::MediaEngineWebRTC()
MediaEngineWebRTC::MediaEngineWebRTC(MediaEnginePrefs &aPrefs)
: mMutex("mozilla::MediaEngineWebRTC")
, mVideoEngine(nullptr)
, mVoiceEngine(nullptr)
@ -56,8 +56,10 @@ MediaEngineWebRTC::MediaEngineWebRTC()
if (compMgr) {
compMgr->IsContractIDRegistered(NS_TABSOURCESERVICE_CONTRACTID, &mHasTabVideoSource);
}
mLoadMonitor = new LoadMonitor();
mLoadMonitor->Init(mLoadMonitor);
if (aPrefs.mLoadAdapt) {
mLoadMonitor = new LoadMonitor();
mLoadMonitor->Init(mLoadMonitor);
}
}
#endif
@ -359,7 +361,8 @@ MediaEngineWebRTC::Shutdown()
mVideoEngine = nullptr;
mVoiceEngine = nullptr;
mLoadMonitor->Shutdown();
if (mLoadMonitor)
mLoadMonitor->Shutdown();
}
}

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

@ -367,7 +367,7 @@ public:
mLoadMonitor->Init(mLoadMonitor);
}
#else
MediaEngineWebRTC();
MediaEngineWebRTC(MediaEnginePrefs &aPrefs);
#endif
~MediaEngineWebRTC() {
Shutdown();

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

@ -1044,6 +1044,7 @@ MediaManager::MediaManager()
mPrefs.mHeight = MediaEngine::DEFAULT_VIDEO_HEIGHT;
mPrefs.mFPS = MediaEngine::DEFAULT_VIDEO_FPS;
mPrefs.mMinFPS = MediaEngine::DEFAULT_VIDEO_MIN_FPS;
mPrefs.mLoadAdapt = MediaEngine::DEFAULT_LOAD_ADAPT;
nsresult rv;
nsCOMPtr<nsIPrefService> prefs = do_GetService("@mozilla.org/preferences-service;1", &rv);
@ -1088,6 +1089,7 @@ MediaManager::Get() {
prefs->AddObserver("media.navigator.video.default_height", sSingleton, false);
prefs->AddObserver("media.navigator.video.default_fps", sSingleton, false);
prefs->AddObserver("media.navigator.video.default_minfps", sSingleton, false);
prefs->AddObserver("media.navigator.load_adapt", sSingleton, false);
}
}
return sSingleton;
@ -1411,7 +1413,7 @@ MediaManager::GetBackend(uint64_t aWindowId)
if (!mBackend) {
#if defined(MOZ_WEBRTC)
#ifndef MOZ_B2G_CAMERA
mBackend = new MediaEngineWebRTC();
mBackend = new MediaEngineWebRTC(mPrefs);
#else
mBackend = new MediaEngineWebRTC(mCameraManager, aWindowId);
#endif
@ -1509,6 +1511,18 @@ MediaManager::GetPref(nsIPrefBranch *aBranch, const char *aPref,
}
}
void
MediaManager::GetPrefBool(nsIPrefBranch *aBranch, const char *aPref,
const char *aData, bool *aVal)
{
bool temp;
if (aData == nullptr || strcmp(aPref,aData) == 0) {
if (NS_SUCCEEDED(aBranch->GetBoolPref(aPref, &temp))) {
*aVal = temp;
}
}
}
void
MediaManager::GetPrefs(nsIPrefBranch *aBranch, const char *aData)
{
@ -1516,6 +1530,7 @@ MediaManager::GetPrefs(nsIPrefBranch *aBranch, const char *aData)
GetPref(aBranch, "media.navigator.video.default_height", aData, &mPrefs.mHeight);
GetPref(aBranch, "media.navigator.video.default_fps", aData, &mPrefs.mFPS);
GetPref(aBranch, "media.navigator.video.default_minfps", aData, &mPrefs.mMinFPS);
GetPrefBool(aBranch, "media.navigator.load_adapt", aData, &mPrefs.mLoadAdapt);
}
nsresult
@ -1544,6 +1559,7 @@ MediaManager::Observe(nsISupports* aSubject, const char* aTopic,
prefs->RemoveObserver("media.navigator.video.default_height", this);
prefs->RemoveObserver("media.navigator.video.default_fps", this);
prefs->RemoveObserver("media.navigator.video.default_minfps", this);
prefs->RemoveObserver("media.navigator.load_adapt", this);
}
// Close off any remaining active windows.

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

@ -506,6 +506,8 @@ private:
void GetPref(nsIPrefBranch *aBranch, const char *aPref,
const char *aData, int32_t *aVal);
void GetPrefBool(nsIPrefBranch *aBranch, const char *aPref,
const char *aData, bool *aVal);
void GetPrefs(nsIPrefBranch *aBranch, const char *aData);
// Make private because we want only one instance of this class