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

Commit 4ce7aa17 authored by Peiyong Lin's avatar Peiyong Lin Committed by android-build-merger
Browse files

Add global property to store opt-in application package name.

am: e23f59aa

Change-Id: I2dcd31f5110a5f65cb52a501b2dcfc5b3de75c83
parents 7808ff2c e23f59aa
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -5594,7 +5594,7 @@ public final class ActivityThread extends ClientTransactionHandler {
            }
        }

        GraphicsEnvironment.getInstance().setup(context);
        GraphicsEnvironment.getInstance().setup(context, mCoreSettings);
        Trace.traceEnd(Trace.TRACE_TAG_ACTIVITY_MANAGER);
    }

+28 −23
Original line number Diff line number Diff line
@@ -33,8 +33,6 @@ import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.HashSet;
import java.util.Set;

/** @hide */
public class GraphicsEnvironment {
@@ -60,9 +58,9 @@ public class GraphicsEnvironment {
    /**
     * Set up GraphicsEnvironment
     */
    public void setup(Context context) {
    public void setup(Context context, Bundle coreSettings) {
        setupGpuLayers(context);
        chooseDriver(context);
        chooseDriver(context, coreSettings);
    }

    /**
@@ -141,11 +139,12 @@ public class GraphicsEnvironment {
    /**
     * Choose whether the current process should use the builtin or an updated driver.
     */
    private static void chooseDriver(Context context) {
    private static void chooseDriver(Context context, Bundle coreSettings) {
        String driverPackageName = SystemProperties.get(PROPERTY_GFX_DRIVER);
        if (driverPackageName == null || driverPackageName.isEmpty()) {
            return;
        }

        // To minimize risk of driver updates crippling the device beyond user repair, never use an
        // updated driver for privileged or non-updated system apps. Presumably pre-installed apps
        // were tested thoroughly with the pre-installed driver.
@@ -154,12 +153,16 @@ public class GraphicsEnvironment {
            if (DEBUG) Log.v(TAG, "ignoring driver package for privileged/non-updated system app");
            return;
        }
        Set<String> whitelist = loadWhitelist(context, driverPackageName);

        // Empty whitelist implies no updatable graphics driver. Typically, the pre-installed
        // updatable graphics driver is supposed to be a place holder and contains no graphics
        // driver and whitelist.
        if (whitelist == null || whitelist.isEmpty()) {
        String applicationPackageName = context.getPackageName();
        String devOptInApplicationName = coreSettings.getString(
                Settings.Global.UPDATED_GFX_DRIVER_DEV_OPT_IN_APP);
        boolean devOptIn = applicationPackageName.equals(devOptInApplicationName);
        boolean whitelisted = onWhitelist(context, driverPackageName, ai.packageName);
        if (!devOptIn && !whitelisted) {
            if (DEBUG) {
                Log.w(TAG, applicationPackageName + " is not on the whitelist.");
            }
            return;
        }

@@ -171,12 +174,6 @@ public class GraphicsEnvironment {
            Log.w(TAG, "driver package '" + driverPackageName + "' not installed");
            return;
        }
        if (!whitelist.contains(context.getPackageName())) {
            if (DEBUG) {
                Log.w(TAG, context.getPackageName() + " is not on the whitelist.");
            }
            return;
        }

        // O drivers are restricted to the sphal linker namespace, so don't try to use
        // packages unless they declare they're compatible with that restriction.
@@ -242,10 +239,18 @@ public class GraphicsEnvironment {
        return null;
    }

    private static Set<String> loadWhitelist(Context context, String driverPackageName) {
    private static boolean onWhitelist(Context context, String driverPackageName,
            String applicationPackageName) {
        String whitelistName = SystemProperties.get(PROPERTY_GFX_DRIVER_WHITELIST);

        // Empty whitelist implies no updatable graphics driver. Typically, the pre-installed
        // updatable graphics driver is supposed to be a place holder and contains no graphics
        // driver and whitelist.
        if (whitelistName == null || whitelistName.isEmpty()) {
            return null;
            if (DEBUG) {
                Log.w(TAG, "No whitelist found.");
            }
            return false;
        }
        try {
            Context driverContext = context.createPackageContext(driverPackageName,
@@ -253,11 +258,11 @@ public class GraphicsEnvironment {
            AssetManager assets = driverContext.getAssets();
            InputStream stream = assets.open(whitelistName);
            BufferedReader reader = new BufferedReader(new InputStreamReader(stream));
            Set<String> whitelist = new HashSet<>();
            for (String line; (line = reader.readLine()) != null; ) {
                whitelist.add(line);
            for (String packageName; (packageName = reader.readLine()) != null; ) {
                if (packageName.equals(applicationPackageName)) {
                    return true;
                }
            }
            return whitelist;
        } catch (PackageManager.NameNotFoundException e) {
            if (DEBUG) {
                Log.w(TAG, "driver package '" + driverPackageName + "' not installed");
@@ -267,7 +272,7 @@ public class GraphicsEnvironment {
                Log.w(TAG, "Failed to load whitelist driver package, abort.");
            }
        }
        return null;
        return false;
    }

    private static native void setLayerPaths(ClassLoader classLoader, String layerPaths);
+7 −0
Original line number Diff line number Diff line
@@ -11445,6 +11445,13 @@ public final class Settings {
         */
        public static final String GPU_DEBUG_APP = "gpu_debug_app";
        /**
         * App that is selected to use updated graphics driver.
         * @hide
         */
        public static final String UPDATED_GFX_DRIVER_DEV_OPT_IN_APP =
                "updated_gfx_driver_dev_opt_in_app";
        /**
         * Ordered GPU debug layer list
         * i.e. <layer1>:<layer2>:...:<layerN>
+3 −0
Original line number Diff line number Diff line
@@ -384,6 +384,9 @@ message GlobalSettingsProto {
        // App allowed to load GPU debug layers.
        optional SettingProto debug_app = 1;
        optional SettingProto debug_layers = 2 [ (android.privacy).dest = DEST_AUTOMATIC ];
        // App opt in to load updated graphics driver instead of
        // native graphcis driver through developer options.
        optional SettingProto updated_gfx_driver_dev_opt_in_app = 6;
    }
    optional Gpu gpu = 59;

+1 −0
Original line number Diff line number Diff line
@@ -444,6 +444,7 @@ public class SettingsBackupTest {
                    Settings.Global.ENABLE_GPU_DEBUG_LAYERS,
                    Settings.Global.GPU_DEBUG_APP,
                    Settings.Global.GPU_DEBUG_LAYERS,
                    Settings.Global.UPDATED_GFX_DRIVER_DEV_OPT_IN_APP,
                    Settings.Global.ENABLE_GNSS_RAW_MEAS_FULL_TRACKING,
                    Settings.Global.INSTALL_CARRIER_APP_NOTIFICATION_PERSISTENT,
                    Settings.Global.INSTALL_CARRIER_APP_NOTIFICATION_SLEEP_MILLIS,
Loading