Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4e410298 authored by Peiyong Lin's avatar Peiyong Lin
Browse files

[GPU Service] Query Game driver blacklists from DeviceConfig.

BUG: 121350991
Test: Verified with adb shell device_config put game_driver game_driver_blacklists
Change-Id: I6d029371e9776f6b599c96fefc16bad8a4eb7e9c
parent 623b90d6
Loading
Loading
Loading
Loading
+32 −6
Original line number Original line Diff line number Diff line
@@ -36,6 +36,7 @@ import android.os.Build;
import android.os.Handler;
import android.os.Handler;
import android.os.SystemProperties;
import android.os.SystemProperties;
import android.os.UserHandle;
import android.os.UserHandle;
import android.provider.DeviceConfig;
import android.provider.Settings;
import android.provider.Settings;
import android.util.Base64;
import android.util.Base64;
import android.util.Slog;
import android.util.Slog;
@@ -69,9 +70,11 @@ public class GpuService extends SystemService {
    private final String mDriverPackageName;
    private final String mDriverPackageName;
    private final PackageManager mPackageManager;
    private final PackageManager mPackageManager;
    private final Object mLock = new Object();
    private final Object mLock = new Object();
    private final Object mDeviceConfigLock = new Object();
    private ContentResolver mContentResolver;
    private ContentResolver mContentResolver;
    private long mGameDriverVersionCode;
    private long mGameDriverVersionCode;
    private SettingsObserver mSettingsObserver;
    private SettingsObserver mSettingsObserver;
    private DeviceConfigListener mDeviceConfigListener;
    @GuardedBy("mLock")
    @GuardedBy("mLock")
    private Blacklists mBlacklists;
    private Blacklists mBlacklists;


@@ -101,10 +104,11 @@ public class GpuService extends SystemService {
    public void onBootPhase(int phase) {
    public void onBootPhase(int phase) {
        if (phase == PHASE_BOOT_COMPLETED) {
        if (phase == PHASE_BOOT_COMPLETED) {
            mContentResolver = mContext.getContentResolver();
            mContentResolver = mContext.getContentResolver();
            mSettingsObserver = new SettingsObserver();
            if (mDriverPackageName == null || mDriverPackageName.isEmpty()) {
            if (mDriverPackageName == null || mDriverPackageName.isEmpty()) {
                return;
                return;
            }
            }
            mSettingsObserver = new SettingsObserver();
            mDeviceConfigListener = new DeviceConfigListener();
            fetchGameDriverPackageProperties();
            fetchGameDriverPackageProperties();
            processBlacklists();
            processBlacklists();
            setBlacklist();
            setBlacklist();
@@ -134,6 +138,24 @@ public class GpuService extends SystemService {
        }
        }
    }
    }


    private final class DeviceConfigListener implements DeviceConfig.OnPropertyChangedListener {

        DeviceConfigListener() {
            super();
            DeviceConfig.addOnPropertyChangedListener(DeviceConfig.NAMESPACE_GAME_DRIVER,
                    mContext.getMainExecutor(), this);
        }
        @Override
        public void onPropertyChanged(String namespace, String name, String value) {
            synchronized (mDeviceConfigLock) {
                if (Settings.Global.GAME_DRIVER_BLACKLISTS.equals(name)) {
                    parseBlacklists(value != null ? value : "");
                    setBlacklist();
                }
            }
        }
    }

    private final class PackageReceiver extends BroadcastReceiver {
    private final class PackageReceiver extends BroadcastReceiver {
        @Override
        @Override
        public void onReceive(@NonNull final Context context, @NonNull final Intent intent) {
        public void onReceive(@NonNull final Context context, @NonNull final Intent intent) {
@@ -229,13 +251,17 @@ public class GpuService extends SystemService {
    }
    }


    private void processBlacklists() {
    private void processBlacklists() {
        // TODO(b/121350991) Switch to DeviceConfig with property listener.
        String base64String = DeviceConfig.getProperty(DeviceConfig.NAMESPACE_GAME_DRIVER,
        String base64String =
                Settings.Global.GAME_DRIVER_BLACKLISTS);
                Settings.Global.getString(mContentResolver, Settings.Global.GAME_DRIVER_BLACKLISTS);
        if (base64String == null) {
        if (base64String == null || base64String.isEmpty()) {
            base64String =
            return;
                    Settings.Global.getString(mContentResolver,
                                              Settings.Global.GAME_DRIVER_BLACKLISTS);
        }
        parseBlacklists(base64String != null ? base64String : "");
    }
    }


    private void parseBlacklists(String base64String) {
        synchronized (mLock) {
        synchronized (mLock) {
            // Reset all blacklists
            // Reset all blacklists
            mBlacklists = null;
            mBlacklists = null;