From 27a2743685936cb67e29b587d1f50662c6b4aee6 Mon Sep 17 00:00:00 2001 From: Yiwei Zhang Date: Mon, 6 May 2019 17:13:05 -0700 Subject: GpuStats: Plumb Vulkan api version This change plumbs the advertised Vulkan api version into GraphicsEnv. GLES api version and CPU Vulkan api version will be appended when statd pulls GpuStatsGlobalInfo from GpuStats to save app launch overhead. Bug: 131866357 Test: build, flash and boot Change-Id: I7faa924eccc81499cd4f1fd54803e3a62bd3153a --- core/java/android/os/GraphicsEnvironment.java | 23 ++++++++++++++++++++--- core/jni/android_os_GraphicsEnvironment.cpp | 6 +++--- 2 files changed, 23 insertions(+), 6 deletions(-) diff --git a/core/java/android/os/GraphicsEnvironment.java b/core/java/android/os/GraphicsEnvironment.java index 232869d7aefc..7dbc16a56a7b 100644 --- a/core/java/android/os/GraphicsEnvironment.java +++ b/core/java/android/os/GraphicsEnvironment.java @@ -71,6 +71,8 @@ public class GraphicsEnvironment { "android.app.action.ANGLE_FOR_ANDROID_TOAST_MESSAGE"; private static final String INTENT_KEY_A4A_TOAST_MESSAGE = "A4A Toast Message"; private static final String GAME_DRIVER_WHITELIST_ALL = "*"; + private static final int VULKAN_1_0 = 0x00400000; + private static final int VULKAN_1_1 = 0x00401000; // GAME_DRIVER_ALL_APPS // 0: Default (Invalid values fallback to default as well) @@ -99,7 +101,8 @@ public class GraphicsEnvironment { Trace.traceBegin(Trace.TRACE_TAG_GRAPHICS, "chooseDriver"); if (!chooseDriver(context, coreSettings, pm, packageName)) { setGpuStats(SYSTEM_DRIVER_NAME, SYSTEM_DRIVER_VERSION_NAME, SYSTEM_DRIVER_VERSION_CODE, - SystemProperties.getLong(PROPERTY_GFX_DRIVER_BUILD_TIME, 0), packageName); + SystemProperties.getLong(PROPERTY_GFX_DRIVER_BUILD_TIME, 0), packageName, + getVulkanVersion(pm)); } Trace.traceEnd(Trace.TRACE_TAG_GRAPHICS); } @@ -200,6 +203,20 @@ public class GraphicsEnvironment { return true; } + private static int getVulkanVersion(PackageManager pm) { + // PackageManager doesn't have an API to retrieve the version of a specific feature, and we + // need to avoid retrieving all system features here and looping through them. + if (pm.hasSystemFeature(PackageManager.FEATURE_VULKAN_HARDWARE_VERSION, VULKAN_1_1)) { + return VULKAN_1_1; + } + + if (pm.hasSystemFeature(PackageManager.FEATURE_VULKAN_HARDWARE_VERSION, VULKAN_1_0)) { + return VULKAN_1_0; + } + + return 0; + } + /** * Check whether application is debuggable */ @@ -791,7 +808,7 @@ public class GraphicsEnvironment { // driver_build_time in the meta-data is in "L" format. e.g. L123456. // Long.parseLong will throw if the meta-data "driver_build_time" is not set properly. setGpuStats(driverPackageName, driverPackageInfo.versionName, driverAppInfo.longVersionCode, - Long.parseLong(driverBuildTime.substring(1)), packageName); + Long.parseLong(driverBuildTime.substring(1)), packageName, 0); return true; } @@ -815,7 +832,7 @@ public class GraphicsEnvironment { private static native void setDebugLayersGLES(String layers); private static native void setDriverPathAndSphalLibraries(String path, String sphalLibraries); private static native void setGpuStats(String driverPackageName, String driverVersionName, - long driverVersionCode, long driverBuildTime, String appPackageName); + long driverVersionCode, long driverBuildTime, String appPackageName, int vulkanVersion); private static native void setAngleInfo(String path, String appPackage, String devOptIn, FileDescriptor rulesFd, long rulesOffset, long rulesLength); private static native boolean getShouldUseAngle(String packageName); diff --git a/core/jni/android_os_GraphicsEnvironment.cpp b/core/jni/android_os_GraphicsEnvironment.cpp index 72e3d3495e37..74ebb95b58c7 100644 --- a/core/jni/android_os_GraphicsEnvironment.cpp +++ b/core/jni/android_os_GraphicsEnvironment.cpp @@ -37,14 +37,14 @@ void setDriverPathAndSphalLibraries_native(JNIEnv* env, jobject clazz, jstring p void setGpuStats_native(JNIEnv* env, jobject clazz, jstring driverPackageName, jstring driverVersionName, jlong driverVersionCode, - jlong driverBuildTime, jstring appPackageName) { + jlong driverBuildTime, jstring appPackageName, jint vulkanVersion) { ScopedUtfChars driverPackageNameChars(env, driverPackageName); ScopedUtfChars driverVersionNameChars(env, driverVersionName); ScopedUtfChars appPackageNameChars(env, appPackageName); android::GraphicsEnv::getInstance().setGpuStats(driverPackageNameChars.c_str(), driverVersionNameChars.c_str(), driverVersionCode, driverBuildTime, - appPackageNameChars.c_str()); + appPackageNameChars.c_str(), vulkanVersion); } void setAngleInfo_native(JNIEnv* env, jobject clazz, jstring path, jstring appName, jstring devOptIn, @@ -88,7 +88,7 @@ void setDebugLayersGLES_native(JNIEnv* env, jobject clazz, jstring layers) { const JNINativeMethod g_methods[] = { { "getCanLoadSystemLibraries", "()I", reinterpret_cast(getCanLoadSystemLibraries_native) }, { "setDriverPathAndSphalLibraries", "(Ljava/lang/String;Ljava/lang/String;)V", reinterpret_cast(setDriverPathAndSphalLibraries_native) }, - { "setGpuStats", "(Ljava/lang/String;Ljava/lang/String;JJLjava/lang/String;)V", reinterpret_cast(setGpuStats_native) }, + { "setGpuStats", "(Ljava/lang/String;Ljava/lang/String;JJLjava/lang/String;I)V", reinterpret_cast(setGpuStats_native) }, { "setAngleInfo", "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/io/FileDescriptor;JJ)V", reinterpret_cast(setAngleInfo_native) }, { "getShouldUseAngle", "(Ljava/lang/String;)Z", reinterpret_cast(shouldUseAngle_native) }, { "setLayerPaths", "(Ljava/lang/ClassLoader;Ljava/lang/String;)V", reinterpret_cast(setLayerPaths_native) }, -- cgit v1.2.3-59-g8ed1b