From 0e72f130abb5ac52b8cdafe32ab85c43ac3a3f71 Mon Sep 17 00:00:00 2001 From: Jesse Hall Date: Mon, 8 May 2017 11:28:01 -0700 Subject: Require targetSdkVersion>=O for updated graphics driver packages In O, graphics drivers are loaded into a new restricted linker namespace. Drivers built for previous versions of the OS may not work under those restrictions, so require an updated driver package to declare compatibility by setting targetSdkVersion >= O. Bug: 34228255 Test: manually construct packages with and without targetSdkVersion >= O, confirm driver is used/not-used as expected. Change-Id: I4518360433a6de5c6e1e792a6eedddf8c6bf4394 --- core/java/android/os/GraphicsEnvironment.java | 7 +++++++ core/jni/android_app_ApplicationLoaders.cpp | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/core/java/android/os/GraphicsEnvironment.java b/core/java/android/os/GraphicsEnvironment.java index e4cdbce09796..f9eaba921cc1 100644 --- a/core/java/android/os/GraphicsEnvironment.java +++ b/core/java/android/os/GraphicsEnvironment.java @@ -20,6 +20,7 @@ import android.content.Context; import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; import android.opengl.EGL14; +import android.os.Build; import android.os.SystemProperties; import android.util.Log; @@ -81,6 +82,12 @@ public final class GraphicsEnvironment { } return; } + if (driverInfo.targetSdkVersion < Build.VERSION_CODES.O) { + // 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. + Log.w(TAG, "updated driver package is not known to be compatible with O"); + return; + } StringBuilder sb = new StringBuilder(); sb.append(driverInfo.nativeLibraryDir) diff --git a/core/jni/android_app_ApplicationLoaders.cpp b/core/jni/android_app_ApplicationLoaders.cpp index 3e7c039e2129..8bbf24a606e4 100644 --- a/core/jni/android_app_ApplicationLoaders.cpp +++ b/core/jni/android_app_ApplicationLoaders.cpp @@ -32,7 +32,7 @@ static void setupVulkanLayerPath_native(JNIEnv* env, jobject clazz, loader_data.layer_path = layerPathChars.c_str(); loader_data.app_namespace = ns; } else { - ALOGD("ignored Vulkan layer search path %s for namespace %p", + ALOGV("Vulkan layer search path already set, not clobbering with '%s' for namespace %p'", layerPathChars.c_str(), ns); } } -- cgit v1.2.3-59-g8ed1b