Bug 1896780 - Change IsGpuProcessEnabled() as to complete soon r=gfx-reviewers,bradwerth,jnicol

config state of gfx::Feature::GPU_PROCESS is mirrored to gfx::gfxVars::GPUProcessEnabled(). It is threadsafe.

Differential Revision: https://phabricator.services.mozilla.com/D210386
This commit is contained in:
sotaro 2024-05-16 00:06:33 +00:00
parent e4ac07652e
commit c17ebc98c2
6 changed files with 14 additions and 20 deletions

View file

@ -102,7 +102,8 @@ class gfxVarReceiver;
_(WebglUseHardware, bool, true) \
_(WebRenderOverlayVpAutoHDR, bool, false) \
_(WebRenderOverlayVpSuperResolution, bool, false) \
_(AllowWebGPUPresentWithoutReadback, bool, false)
_(AllowWebGPUPresentWithoutReadback, bool, false) \
_(GPUProcessEnabled, bool, false)
/* Add new entries above this line. */

View file

@ -306,6 +306,7 @@ bool GPUProcessManager::MaybeDisableGPUProcess(const char* aMessage,
if (!aAllowRestart) {
gfxConfig::SetFailed(Feature::GPU_PROCESS, FeatureStatus::Failed, aMessage);
gfxVars::SetGPUProcessEnabled(false);
}
bool wantRestart;
@ -326,6 +327,7 @@ bool GPUProcessManager::MaybeDisableGPUProcess(const char* aMessage,
if (aAllowRestart) {
gfxConfig::SetFailed(Feature::GPU_PROCESS, FeatureStatus::Failed, aMessage);
gfxVars::SetGPUProcessEnabled(false);
}
MOZ_ASSERT(!gfxConfig::IsEnabled(Feature::GPU_PROCESS));

View file

@ -2644,6 +2644,10 @@ void gfxPlatform::InitWebRenderConfig() {
manager.Init();
manager.ConfigureWebRender();
if (gfxConfig::IsEnabled(Feature::GPU_PROCESS)) {
gfxVars::SetGPUProcessEnabled(true);
}
bool hasHardware = gfxConfig::IsEnabled(Feature::WEBRENDER);
#ifdef MOZ_WIDGET_GTK

View file

@ -71,7 +71,6 @@ import org.mozilla.gecko.util.ProxySelector;
import org.mozilla.gecko.util.ThreadUtils;
import org.mozilla.geckoview.BuildConfig;
import org.mozilla.geckoview.CrashHandler;
import org.mozilla.geckoview.GeckoResult;
import org.mozilla.geckoview.R;
public class GeckoAppShell {
@ -1583,12 +1582,8 @@ public class GeckoAppShell {
@WrapForJNI
public static native boolean isParentProcess();
/**
* Returns a GeckoResult that will be completed to true if the GPU process is enabled and false if
* it is disabled.
*/
@WrapForJNI
public static native GeckoResult<Boolean> isGpuProcessEnabled();
public static native boolean isGpuProcessEnabled();
@SuppressLint("NewApi")
public static boolean isIsolatedProcess() {

View file

@ -72,11 +72,11 @@ public final class GeckoProcessManager extends IProcessManager.Stub {
*/
@Override // IProcessManager
public ISurfaceAllocator getSurfaceAllocator() {
final GeckoResult<Boolean> gpuEnabled = GeckoAppShell.isGpuProcessEnabled();
final boolean gpuEnabled = GeckoAppShell.isGpuProcessEnabled();
try {
final GeckoResult<ISurfaceAllocator> allocator = new GeckoResult<>();
if (gpuEnabled.poll(1000)) {
if (gpuEnabled) {
// The GPU process is enabled, so look it up and ask it for its surface allocator.
XPCOMEventTarget.runOnLauncherThread(
() -> {

View file

@ -34,6 +34,7 @@
#include "mozilla/Hal.h"
#include "mozilla/dom/BrowserChild.h"
#include "mozilla/dom/Document.h"
#include "mozilla/gfx/gfxVars.h"
#include "mozilla/intl/OSPreferences.h"
#include "mozilla/ipc/GeckoChildProcessHost.h"
#include "mozilla/java/GeckoAppShellNatives.h"
@ -332,17 +333,8 @@ class GeckoAppShellSupport final
static bool IsParentProcess() { return XRE_IsParentProcess(); }
static jni::Object::LocalRef IsGpuProcessEnabled() {
java::GeckoResult::GlobalRef result = java::GeckoResult::New();
NS_DispatchToMainThread(NS_NewRunnableFunction(
"GeckoAppShellSupport::IsGpuProcessEnabled", [result]() {
result->Complete(gfx::gfxConfig::IsEnabled(gfx::Feature::GPU_PROCESS)
? java::sdk::Boolean::TRUE()
: java::sdk::Boolean::FALSE());
}));
return jni::Object::Ref::From(result);
static bool IsGpuProcessEnabled() {
return gfx::gfxVars::GPUProcessEnabled();
}
};