diff --git a/dom/html/HTMLMediaElement.cpp b/dom/html/HTMLMediaElement.cpp index 0cf392bc35fd..d518164d73c5 100644 --- a/dom/html/HTMLMediaElement.cpp +++ b/dom/html/HTMLMediaElement.cpp @@ -2454,27 +2454,6 @@ bool HTMLMediaElement::AllowedToPlay() const { return AutoplayPolicy::IsAllowedToPlay(*this); } -uint32_t HTMLMediaElement::GetPreloadDefault() const { - if (mMediaSource) { - return HTMLMediaElement::PRELOAD_ATTR_METADATA; - } - if (OnCellularConnection()) { - return Preferences::GetInt("media.preload.default.cellular", - HTMLMediaElement::PRELOAD_ATTR_NONE); - } - return Preferences::GetInt("media.preload.default", - HTMLMediaElement::PRELOAD_ATTR_METADATA); -} - -uint32_t HTMLMediaElement::GetPreloadDefaultAuto() const { - if (OnCellularConnection()) { - return Preferences::GetInt("media.preload.auto.cellular", - HTMLMediaElement::PRELOAD_ATTR_METADATA); - } - return Preferences::GetInt("media.preload.auto", - HTMLMediaElement::PRELOAD_ENOUGH); -} - void HTMLMediaElement::UpdatePreloadAction() { PreloadAction nextAction = PRELOAD_UNDEFINED; // If autoplay is set, or we're playing, we should always preload data, @@ -2489,8 +2468,13 @@ void HTMLMediaElement::UpdatePreloadAction() { mAttrs.GetAttr(nsGkAtoms::preload, kNameSpaceID_None); // MSE doesn't work if preload is none, so it ignores the pref when src is // from MSE. - uint32_t preloadDefault = GetPreloadDefault(); - uint32_t preloadAuto = GetPreloadDefaultAuto(); + uint32_t preloadDefault = + mMediaSource + ? HTMLMediaElement::PRELOAD_ATTR_METADATA + : Preferences::GetInt("media.preload.default", + HTMLMediaElement::PRELOAD_ATTR_METADATA); + uint32_t preloadAuto = Preferences::GetInt( + "media.preload.auto", HTMLMediaElement::PRELOAD_ENOUGH); if (!val) { // Attribute is not set. Use the preload action specified by the // media.preload.default pref, or just preload metadata if not present. diff --git a/dom/html/HTMLMediaElement.h b/dom/html/HTMLMediaElement.h index a99afd09ceb6..e10261e77d96 100644 --- a/dom/html/HTMLMediaElement.h +++ b/dom/html/HTMLMediaElement.h @@ -1737,9 +1737,6 @@ class HTMLMediaElement : public nsGenericHTMLElement, virtual void MaybeBeginCloningVisually(){}; - uint32_t GetPreloadDefault() const; - uint32_t GetPreloadDefaultAuto() const; - /** * This function is called by AfterSetAttr and OnAttrSetButNotChanged. * It will not be called if the value is being unset. diff --git a/dom/ipc/ContentChild.cpp b/dom/ipc/ContentChild.cpp index acd71b0a7895..7e14a1cf0e93 100644 --- a/dom/ipc/ContentChild.cpp +++ b/dom/ipc/ContentChild.cpp @@ -2029,17 +2029,6 @@ mozilla::ipc::IPCResult ContentChild::RecvPScriptCacheConstructor( PNeckoChild* ContentChild::AllocPNeckoChild() { return new NeckoChild(); } -mozilla::ipc::IPCResult ContentChild::RecvNetworkLinkTypeChange( - const uint32_t& aType) { - mNetworkLinkType = aType; - nsCOMPtr obs = mozilla::services::GetObserverService(); - if (obs) { - obs->NotifyObservers(nullptr, "contentchild:network-link-type-changed", - nullptr); - } - return IPC_OK(); -} - bool ContentChild::DeallocPNeckoChild(PNeckoChild* necko) { delete necko; return true; diff --git a/dom/ipc/ContentChild.h b/dom/ipc/ContentChild.h index c54d0ab6cc7f..d0675b94031f 100644 --- a/dom/ipc/ContentChild.h +++ b/dom/ipc/ContentChild.h @@ -489,9 +489,6 @@ class ContentChild final : public PContentChild, mozilla::ipc::IPCResult RecvRefreshScreens( nsTArray&& aScreens); - mozilla::ipc::IPCResult RecvNetworkLinkTypeChange(const uint32_t& aType); - uint32_t NetworkLinkType() const { return mNetworkLinkType; } - // Get the directory for IndexedDB files. We query the parent for this and // cache the value nsString& GetIndexedDBPath(); @@ -813,8 +810,6 @@ class ContentChild final : public PContentChild, mozilla::Atomic mPendingInputEvents; #endif - uint32_t mNetworkLinkType = 0; - DISALLOW_EVIL_CONSTRUCTORS(ContentChild); }; diff --git a/dom/ipc/ContentParent.cpp b/dom/ipc/ContentParent.cpp index d3071f452f58..f926f9e3d5db 100644 --- a/dom/ipc/ContentParent.cpp +++ b/dom/ipc/ContentParent.cpp @@ -158,7 +158,6 @@ #include "nsIMemoryReporter.h" #include "nsIMozBrowserFrame.h" #include "nsIMutable.h" -#include "nsINetworkLinkService.h" #include "nsIObserverService.h" #include "nsIParentChannel.h" #include "nsIRemoteWindowContext.h" @@ -615,7 +614,6 @@ static const char* sObserverTopics[] = { "cookie-changed", "private-cookie-changed", "clear-site-data-reload-needed", - NS_NETWORK_LINK_TYPE_TOPIC, }; #if defined(XP_MACOSX) && defined(MOZ_SANDBOX) @@ -3122,30 +3120,10 @@ ContentParent::Observe(nsISupports* aSubject, const char* aTopic, } else if (!strcmp(aTopic, "clear-site-data-reload-needed")) { // Rebroadcast "clear-site-data-reload-needed". Unused << SendClearSiteDataReloadNeeded(nsString(aData)); - } else if (!strcmp(aTopic, NS_NETWORK_LINK_TYPE_TOPIC)) { - UpdateNetworkLinkType(); } - return NS_OK; } -void ContentParent::UpdateNetworkLinkType() { - nsresult rv; - nsCOMPtr nls = - do_GetService(NS_NETWORK_LINK_SERVICE_CONTRACTID, &rv); - if (NS_FAILED(rv)) { - return; - } - - uint32_t linkType = nsINetworkLinkService::LINK_TYPE_UNKNOWN; - rv = nls->GetLinkType(&linkType); - if (NS_FAILED(rv)) { - return; - } - - Unused << SendNetworkLinkTypeChange(linkType); -} - NS_IMETHODIMP ContentParent::GetInterface(const nsIID& aIID, void** aResult) { NS_ENSURE_ARG_POINTER(aResult); diff --git a/dom/ipc/ContentParent.h b/dom/ipc/ContentParent.h index 221b71388b7a..6e8620e6e5a5 100644 --- a/dom/ipc/ContentParent.h +++ b/dom/ipc/ContentParent.h @@ -1213,8 +1213,6 @@ class ContentParent final : public PContentParent, void OnBrowsingContextGroupSubscribe(BrowsingContextGroup* aGroup); void OnBrowsingContextGroupUnsubscribe(BrowsingContextGroup* aGroup); - void UpdateNetworkLinkType(); - private: // Released in ActorDestroy; deliberately not exposed to the CC. RefPtr mSelfRef; diff --git a/dom/ipc/PContent.ipdl b/dom/ipc/PContent.ipdl index b21502ef3831..b1b381497cbd 100644 --- a/dom/ipc/PContent.ipdl +++ b/dom/ipc/PContent.ipdl @@ -430,8 +430,6 @@ child: async AudioDefaultDeviceChange(); - async NetworkLinkTypeChange(uint32_t type); - // Re-create the rendering stack for a device reset. async ReinitRenderingForDeviceReset(); diff --git a/dom/media/ChannelMediaDecoder.cpp b/dom/media/ChannelMediaDecoder.cpp index 6ed95cd449a5..b732d1ae4626 100644 --- a/dom/media/ChannelMediaDecoder.cpp +++ b/dom/media/ChannelMediaDecoder.cpp @@ -11,7 +11,6 @@ #include "BaseMediaResource.h" #include "MediaShutdownManager.h" #include "mozilla/StaticPrefs.h" -#include "VideoUtils.h" namespace mozilla { @@ -459,9 +458,8 @@ MediaStatistics ChannelMediaDecoder::GetStatistics( bool ChannelMediaDecoder::ShouldThrottleDownload( const MediaStatistics& aStats) { // We throttle the download if either the throttle override pref is set - // (so that we always throttle at the readahead limit on mobile if using - // a cellular network) or if the download is fast enough that there's no - // concern about playback being interrupted. + // (so that we can always throttle in Firefox on mobile) or if the download + // is fast enough that there's no concern about playback being interrupted. MOZ_ASSERT(NS_IsMainThread()); NS_ENSURE_TRUE(GetStateMachine(), false); @@ -474,9 +472,8 @@ bool ChannelMediaDecoder::ShouldThrottleDownload( return false; } - if (OnCellularConnection() && - Preferences::GetBool( - "media.throttle-cellular-regardless-of-download-rate", false)) { + if (Preferences::GetBool("media.throttle-regardless-of-download-rate", + false)) { return true; } diff --git a/dom/media/FileBlockCache.cpp b/dom/media/FileBlockCache.cpp index f8a6b06bcd7f..4d6cc8bbedcd 100644 --- a/dom/media/FileBlockCache.cpp +++ b/dom/media/FileBlockCache.cpp @@ -125,9 +125,11 @@ void FileBlockCache::Flush() { })); } -size_t FileBlockCache::GetMaxBlocks(size_t aCacheSizeInKB) const { +int32_t FileBlockCache::GetMaxBlocks() const { // We look up the cache size every time. This means dynamic changes // to the pref are applied. + const uint32_t cacheSizeKb = + std::min(StaticPrefs::MediaCacheSize(), uint32_t(INT32_MAX) * 2); // Ensure we can divide BLOCK_SIZE by 1024. static_assert(MediaCacheStream::BLOCK_SIZE % 1024 == 0, "BLOCK_SIZE should be a multiple of 1024"); @@ -138,13 +140,14 @@ size_t FileBlockCache::GetMaxBlocks(size_t aCacheSizeInKB) const { static_assert(MediaCacheStream::BLOCK_SIZE / 1024 <= int64_t(UINT32_MAX), "BLOCK_SIZE / 1024 should be at most UINT32_MAX"); // Since BLOCK_SIZE is a strict multiple of 1024, - // aCacheSizeInKB * 1024 / BLOCK_SIZE == aCacheSizeInKB / (BLOCK_SIZE / - // 1024), but the latter formula avoids a potential overflow from `* 1024`. + // cacheSizeKb * 1024 / BLOCK_SIZE == cacheSizeKb / (BLOCK_SIZE / 1024), + // but the latter formula avoids a potential overflow from `* 1024`. // And because BLOCK_SIZE/1024 is at least 2, the maximum cache size // INT32_MAX*2 will give a maxBlocks that can fit in an int32_t. - constexpr size_t blockSizeKb = size_t(MediaCacheStream::BLOCK_SIZE / 1024); - const size_t maxBlocks = aCacheSizeInKB / blockSizeKb; - return std::max(maxBlocks, size_t(1)); + constexpr uint32_t blockSizeKb = + uint32_t(MediaCacheStream::BLOCK_SIZE / 1024); + const int32_t maxBlocks = int32_t(cacheSizeKb / blockSizeKb); + return std::max(maxBlocks, int32_t(1)); } FileBlockCache::FileBlockCache() diff --git a/dom/media/FileBlockCache.h b/dom/media/FileBlockCache.h index 420f3cf76a27..19188d7eca47 100644 --- a/dom/media/FileBlockCache.h +++ b/dom/media/FileBlockCache.h @@ -68,7 +68,7 @@ class FileBlockCache : public MediaBlockCacheBase { // Maximum number of blocks allowed in this block cache. // Calculated from "media.cache_size" pref. - size_t GetMaxBlocks(size_t aCacheSizeInKB) const override; + int32_t GetMaxBlocks() const override; // Can be called on any thread. This defers to a non-main thread. nsresult WriteBlock(uint32_t aBlockIndex, Span aData1, diff --git a/dom/media/MediaBlockCacheBase.h b/dom/media/MediaBlockCacheBase.h index 97c3a6c1b0fc..3a4c78b6a26c 100644 --- a/dom/media/MediaBlockCacheBase.h +++ b/dom/media/MediaBlockCacheBase.h @@ -56,7 +56,7 @@ class MediaBlockCacheBase { // Maximum number of blocks expected in this block cache. (But allow overflow // to accomodate incoming traffic before MediaCache can handle it.) - virtual size_t GetMaxBlocks(size_t aCacheSizeInKiB) const = 0; + virtual int32_t GetMaxBlocks() const = 0; // Can be called on any thread. This defers to a non-main thread. virtual nsresult WriteBlock(uint32_t aBlockIndex, Span aData1, diff --git a/dom/media/MediaCache.cpp b/dom/media/MediaCache.cpp index 559eb77870f5..317972dd67be 100644 --- a/dom/media/MediaCache.cpp +++ b/dom/media/MediaCache.cpp @@ -11,7 +11,6 @@ #include "MediaBlockCacheBase.h" #include "MediaResource.h" #include "MemoryBlockCache.h" -#include "mozilla/Atomics.h" #include "mozilla/Attributes.h" #include "mozilla/ClearOnShutdown.h" #include "mozilla/ErrorNames.h" @@ -24,14 +23,12 @@ #include "mozilla/SystemGroup.h" #include "mozilla/Telemetry.h" #include "nsContentUtils.h" -#include "nsINetworkLinkService.h" #include "nsIObserverService.h" #include "nsIPrincipal.h" #include "nsPrintfCString.h" #include "nsProxyRelease.h" #include "nsThreadUtils.h" #include "prio.h" -#include "VideoUtils.h" #include namespace mozilla { @@ -117,6 +114,7 @@ void MediaCacheFlusher::RegisterMediaCache(MediaCache* aMediaCache) { if (!gMediaCacheFlusher) { gMediaCacheFlusher = new MediaCacheFlusher(); + nsCOMPtr observerService = mozilla::services::GetObserverService(); if (observerService) { @@ -124,10 +122,6 @@ void MediaCacheFlusher::RegisterMediaCache(MediaCache* aMediaCache) { true); observerService->AddObserver(gMediaCacheFlusher, "cacheservice:empty-cache", true); - observerService->AddObserver( - gMediaCacheFlusher, "contentchild:network-link-type-changed", true); - observerService->AddObserver(gMediaCacheFlusher, - NS_NETWORK_LINK_TYPE_TOPIC, true); } } @@ -248,10 +242,6 @@ class MediaCache { return mMonitor; } - // Updates the cache size, readahead limit, and resume threshold, based on - // whether we're on a cellular connection or not. Main thread only. - static void UpdateGeometryStatics(); - /** * An iterator that makes it easy to iterate through all streams that * have a given resource ID and are not closed. @@ -292,7 +282,6 @@ class MediaCache { NS_ASSERTION(NS_IsMainThread(), "Only construct MediaCache on main thread"); MOZ_COUNT_CTOR(MediaCache); MediaCacheFlusher::RegisterMediaCache(this); - UpdateGeometryStatics(); } ~MediaCache() { @@ -324,21 +313,6 @@ class MediaCache { MOZ_COUNT_DTOR(MediaCache); } - static size_t CacheSize() { - MOZ_ASSERT(sThread->IsOnCurrentThread()); - return sCacheSizeInKB; - } - - static size_t ReadaheadLimit() { - MOZ_ASSERT(sThread->IsOnCurrentThread()); - return sReadaheadLimit; - } - - static size_t ResumeThreshold() { - MOZ_ASSERT(sThread->IsOnCurrentThread()); - return sResumeThreshold; - } - // Find a free or reusable block and return its index. If there are no // free blocks and no reusable blocks, add a new block to the cache // and return it. Can return -1 on OOM. @@ -477,11 +451,6 @@ class MediaCache { // to access sThread on all threads. static bool sThreadInit; - // Accesson MediaCache thread only. - static size_t sCacheSizeInKB; - static size_t sReadaheadLimit; - static size_t sResumeThreshold; - private: // Used by MediaCacheStream::GetDebugInfo() only for debugging. // Don't add new callers to this function. @@ -501,37 +470,6 @@ StaticRefPtr MediaCache::sThread; /* static */ bool MediaCache::sThreadInit = false; -/* static */ size_t MediaCache::sCacheSizeInKB = 0; -/* static */ size_t MediaCache::sReadaheadLimit = 0; -/* static */ size_t MediaCache::sResumeThreshold = 0; - -void MediaCache::UpdateGeometryStatics() { - NS_ASSERTION(NS_IsMainThread(), - "Only call on main thread"); // JNI required on Android... - bool cacheAggressively = !OnCellularConnection(); - LOG("MediaCache::UpdateGeometryStatics() cacheAggressively=%d", - cacheAggressively); - // Read the prefs on the main thread, and post their value to the MediaCache - // thread. This ensures the values are synchronized. - uint32_t cacheSize = 0, readaheadLimit = 0, resumeThreshold = 0; - if (cacheAggressively) { - cacheSize = StaticPrefs::MediaCacheSize(); - readaheadLimit = StaticPrefs::MediaCacheReadaheadLimit(); - resumeThreshold = StaticPrefs::MediaCacheResumeThreshold(); - } else { - cacheSize = StaticPrefs::MediaCacheCellularSize(); - readaheadLimit = StaticPrefs::MediaCacheCellularReadaheadLimit(); - resumeThreshold = StaticPrefs::MediaCacheCellularResumeThreshold(); - } - nsCOMPtr r = - NS_NewRunnableFunction("MediaCache::UpdateGeometryStatics", [=]() { - sCacheSizeInKB = cacheSize; - sReadaheadLimit = readaheadLimit; - sResumeThreshold = resumeThreshold; - }); - sThread->Dispatch(r.forget()); -} - NS_IMETHODIMP MediaCacheFlusher::Observe(nsISupports* aSubject, char const* aTopic, char16_t const* aData) { @@ -549,10 +487,6 @@ MediaCacheFlusher::Observe(nsISupports* aSubject, char const* aTopic, } return NS_OK; } - if (strcmp(aTopic, "contentchild:network-link-type-changed") == 0 || - strcmp(aTopic, NS_NETWORK_LINK_TYPE_TOPIC) == 0) { - MediaCache::UpdateGeometryStatics(); - } return NS_OK; } @@ -893,8 +827,7 @@ int32_t MediaCache::FindBlockForIncomingData(AutoLock& aLock, TimeStamp aNow, // b) the data we're going to store in the free block is not higher // priority than the data already stored in the free block. // The latter can lead us to go over the cache limit a bit. - if ((mIndex.Length() < - uint32_t(mBlockCache->GetMaxBlocks(MediaCache::CacheSize())) || + if ((mIndex.Length() < uint32_t(mBlockCache->GetMaxBlocks()) || blockIndex < 0 || PredictNextUseForIncomingData(aLock, aStream) >= PredictNextUse(aLock, aNow, blockIndex))) { @@ -1222,7 +1155,7 @@ void MediaCache::Update() { mInUpdate = true; #endif - int32_t maxBlocks = mBlockCache->GetMaxBlocks(MediaCache::CacheSize()); + int32_t maxBlocks = mBlockCache->GetMaxBlocks(); TimeStamp now = TimeStamp::Now(); int32_t freeBlockCount = mFreeBlocks.GetCount(); @@ -1343,8 +1276,8 @@ void MediaCache::Update() { } } - int32_t resumeThreshold = MediaCache::ResumeThreshold(); - int32_t readaheadLimit = MediaCache::ReadaheadLimit(); + int32_t resumeThreshold = StaticPrefs::MediaCacheResumeThreshold(); + int32_t readaheadLimit = StaticPrefs::MediaCacheReadaheadLimit(); for (uint32_t i = 0; i < mStreams.Length(); ++i) { actions.AppendElement(StreamAction{}); diff --git a/dom/media/MemoryBlockCache.h b/dom/media/MemoryBlockCache.h index abebb5125e72..3b854597612e 100644 --- a/dom/media/MemoryBlockCache.h +++ b/dom/media/MemoryBlockCache.h @@ -45,7 +45,7 @@ class MemoryBlockCache : public MediaBlockCacheBase { // Maximum number of blocks allowed in this block cache. // Based on initial content length, and minimum usable block cache. - size_t GetMaxBlocks(size_t) const override { return mMaxBlocks; } + int32_t GetMaxBlocks() const override { return mMaxBlocks; } // Can be called on any thread. virtual nsresult WriteBlock(uint32_t aBlockIndex, Span aData1, @@ -73,7 +73,7 @@ class MemoryBlockCache : public MediaBlockCacheBase { const size_t mInitialContentLength; // Maximum number of blocks that this MemoryBlockCache expects. - const size_t mMaxBlocks; + const int32_t mMaxBlocks; // Mutex which controls access to all members below. Mutex mMutex; diff --git a/dom/media/VideoUtils.cpp b/dom/media/VideoUtils.cpp index dc0631eae5a9..0dddf90e384f 100644 --- a/dom/media/VideoUtils.cpp +++ b/dom/media/VideoUtils.cpp @@ -14,7 +14,6 @@ #include "TimeUnits.h" #include "VorbisUtils.h" #include "mozilla/Base64.h" -#include "mozilla/dom/ContentChild.h" #include "mozilla/SharedThreadPool.h" #include "mozilla/StaticPrefs.h" #include "mozilla/SystemGroup.h" @@ -24,11 +23,9 @@ #include "nsCharSeparatedTokenizer.h" #include "nsContentTypeParser.h" #include "nsIConsoleService.h" -#include "nsINetworkLinkService.h" #include "nsIRandomGenerator.h" #include "nsIServiceManager.h" #include "nsMathUtils.h" -#include "nsNetCID.h" #include "nsServiceManagerUtils.h" #include "nsThreadUtils.h" @@ -715,46 +712,4 @@ UniquePtr CreateTrackInfoWithMIMETypeAndContainerTypeExtraParameters( return trackInfo; } -bool OnCellularConnection() { - uint32_t linkType = nsINetworkLinkService::LINK_TYPE_UNKNOWN; - if (XRE_IsContentProcess()) { - mozilla::dom::ContentChild* cpc = - mozilla::dom::ContentChild::GetSingleton(); - if (!cpc) { - NS_WARNING("Can't get ContentChild singleton in content process!"); - return false; - } - linkType = cpc->NetworkLinkType(); - } else { - nsresult rv; - nsCOMPtr nls = - do_GetService(NS_NETWORK_LINK_SERVICE_CONTRACTID, &rv); - if (NS_FAILED(rv)) { - NS_WARNING("Can't get nsINetworkLinkService."); - return false; - } - - rv = nls->GetLinkType(&linkType); - if (NS_FAILED(rv)) { - NS_WARNING("Can't get network link type."); - return false; - } - } - - switch (linkType) { - case nsINetworkLinkService::LINK_TYPE_UNKNOWN: - case nsINetworkLinkService::LINK_TYPE_ETHERNET: - case nsINetworkLinkService::LINK_TYPE_USB: - case nsINetworkLinkService::LINK_TYPE_WIFI: - return false; - case nsINetworkLinkService::LINK_TYPE_WIMAX: - case nsINetworkLinkService::LINK_TYPE_2G: - case nsINetworkLinkService::LINK_TYPE_3G: - case nsINetworkLinkService::LINK_TYPE_4G: - return true; - } - - return false; -} - } // end namespace mozilla diff --git a/dom/media/VideoUtils.h b/dom/media/VideoUtils.h index 4611592d5fdf..639183169fef 100644 --- a/dom/media/VideoUtils.h +++ b/dom/media/VideoUtils.h @@ -545,10 +545,6 @@ inline void AppendStringIfNotEmpty(nsACString& aDest, nsACString&& aSrc) { } } -// Returns true if we're running on a cellular connection; 2G, 3G, etc. -// Main thread only. -bool OnCellularConnection(); - } // end namespace mozilla #endif diff --git a/mobile/android/app/mobile.js b/mobile/android/app/mobile.js index ded15f7a823a..8d77f1243556 100644 --- a/mobile/android/app/mobile.js +++ b/mobile/android/app/mobile.js @@ -550,10 +550,12 @@ pref("browser.chrome.toolbar_tips", false); // don't allow meta-refresh when backgrounded pref("browser.meta_refresh_when_inactive.disabled", true); -// On mobile we throttle the download once the readahead_limit is hit -// if we're using a cellular connection, even if the download is slow. -// This is to preserve battery and data. -pref("media.throttle-cellular-regardless-of-download-rate", true); +// prevent video elements from preloading too much data +pref("media.preload.default", 1); // default to preload none +pref("media.preload.auto", 2); // preload metadata if preload=auto +// On mobile we'll throttle the download once the readahead_limit is hit, +// even if the download is slow. This is to preserve battery and data. +pref("media.throttle-regardless-of-download-rate", true); // Number of video frames we buffer while decoding video. // On Android this is decided by a similar value which varies for diff --git a/mobile/android/geckoview/src/main/java/org/mozilla/geckoview/GeckoRuntime.java b/mobile/android/geckoview/src/main/java/org/mozilla/geckoview/GeckoRuntime.java index f7705e15788c..ec102038ce76 100644 --- a/mobile/android/geckoview/src/main/java/org/mozilla/geckoview/GeckoRuntime.java +++ b/mobile/android/geckoview/src/main/java/org/mozilla/geckoview/GeckoRuntime.java @@ -6,11 +6,6 @@ package org.mozilla.geckoview; -import android.arch.lifecycle.ProcessLifecycleOwner; -import android.arch.lifecycle.Lifecycle; -import android.arch.lifecycle.LifecycleObserver; -import android.arch.lifecycle.OnLifecycleEvent; - import android.app.ActivityManager; import android.content.ComponentName; import android.content.Context; @@ -31,7 +26,6 @@ import android.util.Log; import org.mozilla.gecko.EventDispatcher; import org.mozilla.gecko.GeckoAppShell; -import org.mozilla.gecko.GeckoNetworkManager; import org.mozilla.gecko.GeckoScreenOrientation; import org.mozilla.gecko.GeckoSystemStateListener; import org.mozilla.gecko.GeckoThread; @@ -99,36 +93,6 @@ public final class GeckoRuntime implements Parcelable { */ public static final String EXTRA_CRASH_FATAL = "fatal"; - private final class LifecycleListener implements LifecycleObserver { - public LifecycleListener() { - } - - @OnLifecycleEvent(Lifecycle.Event.ON_CREATE) - void onCreate() { - Log.d(LOGTAG, "Lifecycle: onCreate"); - } - - @OnLifecycleEvent(Lifecycle.Event.ON_START) - void onStart() { - Log.d(LOGTAG, "Lifecycle: onStart"); - } - - @OnLifecycleEvent(Lifecycle.Event.ON_RESUME) - void onResume() { - Log.d(LOGTAG, "Lifecycle: onResume"); - // Monitor network status and send change notifications to Gecko - // while active. - GeckoNetworkManager.getInstance().start(GeckoAppShell.getApplicationContext()); - } - - @OnLifecycleEvent(Lifecycle.Event.ON_PAUSE) - void onPause() { - Log.d(LOGTAG, "Lifecycle: onPause"); - // Stop monitoring network status while inactive. - GeckoNetworkManager.getInstance().stop(); - } - } - private static GeckoRuntime sDefaultRuntime; /** @@ -302,9 +266,6 @@ public final class GeckoRuntime implements Parcelable { // Initialize the system ClipboardManager by accessing it on the main thread. GeckoAppShell.getApplicationContext().getSystemService(Context.CLIPBOARD_SERVICE); - - // Add process lifecycle listener to react to backgrounding events. - ProcessLifecycleOwner.get().getLifecycle().addObserver(new LifecycleListener()); return true; } diff --git a/modules/libpref/init/StaticPrefList.h b/modules/libpref/init/StaticPrefList.h index f0d579672c4e..5ea803bd6fd9 100644 --- a/modules/libpref/init/StaticPrefList.h +++ b/modules/libpref/init/StaticPrefList.h @@ -1441,18 +1441,17 @@ VARCACHE_PREF( // reviewer had an unshakeable preference for that. // File-backed MediaCache size. +#ifdef ANDROID +# define PREF_VALUE 32768 // Measured in KiB +#else +# define PREF_VALUE 512000 // Measured in KiB +#endif VARCACHE_PREF( "media.cache_size", MediaCacheSize, - uint32_t, 512000 // Measured in KiB -) -// Size of file backed MediaCache while on a connection which is cellular (3G, etc), -// and thus assumed to be "expensive". -VARCACHE_PREF( - "media.cache_size.cellular", - MediaCacheCellularSize, - uint32_t, 32768 // Measured in KiB + RelaxedAtomicUint32, PREF_VALUE ) +#undef PREF_VALUE // If a resource is known to be smaller than this size (in kilobytes), a // memory-backed MediaCache may be used; otherwise the (single shared global) @@ -1481,30 +1480,32 @@ VARCACHE_PREF( // When a network connection is suspended, don't resume it until the amount of // buffered data falls below this threshold (in seconds). +#ifdef ANDROID +# define PREF_VALUE 10 // Use a smaller limit to save battery. +#else +# define PREF_VALUE 30 +#endif VARCACHE_PREF( "media.cache_resume_threshold", MediaCacheResumeThreshold, - uint32_t, 30 -) -VARCACHE_PREF( - "media.cache_resume_threshold.cellular", - MediaCacheCellularResumeThreshold, - uint32_t, 10 + RelaxedAtomicInt32, PREF_VALUE ) +#undef PREF_VALUE // Stop reading ahead when our buffered data is this many seconds ahead of the // current playback position. This limit can stop us from using arbitrary // amounts of network bandwidth prefetching huge videos. +#ifdef ANDROID +# define PREF_VALUE 30 // Use a smaller limit to save battery. +#else +# define PREF_VALUE 60 +#endif VARCACHE_PREF( "media.cache_readahead_limit", MediaCacheReadaheadLimit, - uint32_t, 60 -) -VARCACHE_PREF( - "media.cache_readahead_limit.cellular", - MediaCacheCellularReadaheadLimit, - uint32_t, 30 + RelaxedAtomicInt32, PREF_VALUE ) +#undef PREF_VALUE // AudioSink VARCACHE_PREF(