summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author TreeHugger Robot <treehugger-gerrit@google.com> 2018-11-10 04:26:23 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2018-11-10 04:26:23 +0000
commitcc88db5a9d7771738d0458dc52f7b3bc1d69d4ae (patch)
tree7d359f9060b60ff82060433abf9cd6c393efde0d
parent08f7dbbc75d22113c8f2b7d67fff1e3da327f0cd (diff)
parent2d5a2bb0ad544b38b41cdd4a2494b0b082131741 (diff)
Merge "Add global property to store opt-in application package name."
-rw-r--r--core/java/android/os/GraphicsEnvironment.java49
-rw-r--r--core/java/android/provider/Settings.java7
-rw-r--r--core/proto/android/providers/settings/global.proto3
-rw-r--r--core/tests/coretests/src/android/provider/SettingsBackupTest.java1
-rw-r--r--packages/SettingsLib/res/values/strings.xml3
-rw-r--r--packages/SettingsProvider/src/com/android/providers/settings/SettingsProtoDumpUtil.java3
-rw-r--r--services/core/java/com/android/server/am/CoreSettingsObserver.java2
7 files changed, 46 insertions, 22 deletions
diff --git a/core/java/android/os/GraphicsEnvironment.java b/core/java/android/os/GraphicsEnvironment.java
index b25707a0be63..8c5c415614f9 100644
--- a/core/java/android/os/GraphicsEnvironment.java
+++ b/core/java/android/os/GraphicsEnvironment.java
@@ -37,8 +37,6 @@ import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
-import java.util.HashSet;
-import java.util.Set;
/** @hide */
public class GraphicsEnvironment {
@@ -70,7 +68,7 @@ public class GraphicsEnvironment {
public void setup(Context context, Bundle coreSettings) {
setupGpuLayers(context, coreSettings);
setupAngle(context, coreSettings);
- chooseDriver(context);
+ chooseDriver(context, coreSettings);
}
/**
@@ -312,11 +310,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.
@@ -325,12 +324,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;
}
@@ -342,12 +345,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.
@@ -413,10 +410,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,
@@ -424,11 +429,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");
@@ -438,7 +443,7 @@ public class GraphicsEnvironment {
Log.w(TAG, "Failed to load whitelist driver package, abort.");
}
}
- return null;
+ return false;
}
private static native int getCanLoadSystemLibraries();
diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java
index 7a444e0bf2c8..0aa3a7b28829 100644
--- a/core/java/android/provider/Settings.java
+++ b/core/java/android/provider/Settings.java
@@ -11759,6 +11759,13 @@ public final class Settings {
public static final String ANGLE_ENABLED_APP = "angle_enabled_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 for Vulkan
* i.e. <layer1>:<layer2>:...:<layerN>
* @hide
diff --git a/core/proto/android/providers/settings/global.proto b/core/proto/android/providers/settings/global.proto
index e0e7b6f105b3..72892fa07381 100644
--- a/core/proto/android/providers/settings/global.proto
+++ b/core/proto/android/providers/settings/global.proto
@@ -405,6 +405,9 @@ message GlobalSettingsProto {
// Ordered GPU debug layer list for GLES
// i.e. <layer1>:<layer2>:...:<layerN>
optional SettingProto debug_layers_gles = 5;
+ // 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;
diff --git a/core/tests/coretests/src/android/provider/SettingsBackupTest.java b/core/tests/coretests/src/android/provider/SettingsBackupTest.java
index 63dd59a0eea8..78d45d05af93 100644
--- a/core/tests/coretests/src/android/provider/SettingsBackupTest.java
+++ b/core/tests/coretests/src/android/provider/SettingsBackupTest.java
@@ -457,6 +457,7 @@ public class SettingsBackupTest {
Settings.Global.GPU_DEBUG_LAYERS,
Settings.Global.GPU_DEBUG_LAYERS_GLES,
Settings.Global.ANGLE_ENABLED_APP,
+ Settings.Global.UPDATED_GFX_DRIVER_DEV_OPT_IN_APP,
Settings.Global.GPU_DEBUG_LAYER_APP,
Settings.Global.ENABLE_GNSS_RAW_MEAS_FULL_TRACKING,
Settings.Global.INSTALL_CARRIER_APP_NOTIFICATION_PERSISTENT,
diff --git a/packages/SettingsLib/res/values/strings.xml b/packages/SettingsLib/res/values/strings.xml
index e2a34f42369a..738d72920a2f 100644
--- a/packages/SettingsLib/res/values/strings.xml
+++ b/packages/SettingsLib/res/values/strings.xml
@@ -1130,4 +1130,7 @@
<!-- The notice header of Third-party licenses. not translatable -->
<string name="notice_header" translatable="false"></string>
+
+ <!-- UI debug setting: opt in to use updated graphics driver? [CHAR LIMIT=100] -->
+ <string name="updated_gfx_driver_dev_opt_in_app_summary">Opt in app to use updated graphcis driver in developement</string>
</resources>
diff --git a/packages/SettingsProvider/src/com/android/providers/settings/SettingsProtoDumpUtil.java b/packages/SettingsProvider/src/com/android/providers/settings/SettingsProtoDumpUtil.java
index f1295e03a82d..1371a5c2e310 100644
--- a/packages/SettingsProvider/src/com/android/providers/settings/SettingsProtoDumpUtil.java
+++ b/packages/SettingsProvider/src/com/android/providers/settings/SettingsProtoDumpUtil.java
@@ -678,6 +678,9 @@ class SettingsProtoDumpUtil {
dumpSetting(s, p,
Settings.Global.GPU_DEBUG_LAYERS_GLES,
GlobalSettingsProto.Gpu.DEBUG_LAYERS_GLES);
+ dumpSetting(s, p,
+ Settings.Global.UPDATED_GFX_DRIVER_DEV_OPT_IN_APP,
+ GlobalSettingsProto.Gpu.UPDATED_GFX_DRIVER_DEV_OPT_IN_APP);
p.end(gpuToken);
final long hdmiToken = p.start(GlobalSettingsProto.HDMI);
diff --git a/services/core/java/com/android/server/am/CoreSettingsObserver.java b/services/core/java/com/android/server/am/CoreSettingsObserver.java
index 8ac19d5b2159..9cfd39ced294 100644
--- a/services/core/java/com/android/server/am/CoreSettingsObserver.java
+++ b/services/core/java/com/android/server/am/CoreSettingsObserver.java
@@ -62,6 +62,8 @@ final class CoreSettingsObserver extends ContentObserver {
sGlobalSettingToTypeMap.put(Settings.Global.GPU_DEBUG_LAYERS_GLES, String.class);
sGlobalSettingToTypeMap.put(Settings.Global.GPU_DEBUG_LAYER_APP, String.class);
sGlobalSettingToTypeMap.put(Settings.Global.SMS_ACCESS_RESTRICTION_ENABLED, int.class);
+ sGlobalSettingToTypeMap.put(Settings.Global.UPDATED_GFX_DRIVER_DEV_OPT_IN_APP,
+ String.class);
// add other global settings here...
}