Game Driver: get driver build date info from Game Driver apk
Get the driver build date info from read-only system property
ro.gfx.driver.build_date for apps using system built-in driver, while
getting the Game Driver build date info from the apk's meta-data.
Bug: 123156461
Test: Build, flash and boot. Verify the GpuService receiver side.
Change-Id: Ie4acb658c9b1776179e2bb72d0b434dcf0a9a856
diff --git a/core/java/android/os/GraphicsEnvironment.java b/core/java/android/os/GraphicsEnvironment.java
index cc241b3..ec6da24 100644
--- a/core/java/android/os/GraphicsEnvironment.java
+++ b/core/java/android/os/GraphicsEnvironment.java
@@ -61,6 +61,7 @@
private static final String SYSTEM_DRIVER_VERSION_NAME = "";
private static final long SYSTEM_DRIVER_VERSION_CODE = 0;
private static final String PROPERTY_GFX_DRIVER = "ro.gfx.driver.0";
+ private static final String PROPERTY_GFX_DRIVER_BUILD_DATE = "ro.gfx.driver.build_date";
private static final String ANGLE_RULES_FILE = "a4a_rules.json";
private static final String ANGLE_TEMP_RULES = "debug.angle.rules";
private static final String ACTION_ANGLE_FOR_ANDROID = "android.app.action.ANGLE_FOR_ANDROID";
@@ -79,8 +80,9 @@
setupGpuLayers(context, coreSettings, pm, packageName);
setupAngle(context, coreSettings, pm, packageName);
if (!chooseDriver(context, coreSettings, pm, packageName)) {
+ final String driverBuildDate = SystemProperties.get(PROPERTY_GFX_DRIVER_BUILD_DATE);
setGpuStats(SYSTEM_DRIVER_NAME, SYSTEM_DRIVER_VERSION_NAME, SYSTEM_DRIVER_VERSION_CODE,
- packageName);
+ driverBuildDate == null ? "" : driverBuildDate, packageName);
}
}
@@ -574,8 +576,8 @@
final PackageInfo driverPackageInfo;
try {
- driverPackageInfo =
- pm.getPackageInfo(driverPackageName, PackageManager.MATCH_SYSTEM_ONLY);
+ driverPackageInfo = pm.getPackageInfo(driverPackageName,
+ PackageManager.MATCH_SYSTEM_ONLY | PackageManager.GET_META_DATA);
} catch (PackageManager.NameNotFoundException e) {
Log.w(TAG, "driver package '" + driverPackageName + "' not installed");
return false;
@@ -655,9 +657,6 @@
return false;
}
- setGpuStats(driverPackageName, driverPackageInfo.versionName, driverAppInfo.longVersionCode,
- packageName);
-
final StringBuilder sb = new StringBuilder();
sb.append(driverAppInfo.nativeLibraryDir)
.append(File.pathSeparator);
@@ -669,6 +668,12 @@
if (DEBUG) Log.v(TAG, "gfx driver package libs: " + paths);
setDriverPath(paths);
+ final String driverBuildDate = driverAppInfo.metaData == null
+ ? ""
+ : driverAppInfo.metaData.getString("driver_build_date");
+ setGpuStats(driverPackageName, driverPackageInfo.versionName, driverAppInfo.longVersionCode,
+ driverBuildDate == null ? "" : driverBuildDate, packageName);
+
return true;
}
@@ -710,7 +715,7 @@
private static native void setDebugLayersGLES(String layers);
private static native void setDriverPath(String path);
private static native void setGpuStats(String driverPackageName, String driverVersionName,
- long driverVersionCode, String appPackageName);
+ long driverVersionCode, String driverBuildDate, String appPackageName);
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 95f99b7..0ccc327 100644
--- a/core/jni/android_os_GraphicsEnvironment.cpp
+++ b/core/jni/android_os_GraphicsEnvironment.cpp
@@ -34,13 +34,16 @@
void setGpuStats_native(JNIEnv* env, jobject clazz, jstring driverPackageName,
jstring driverVersionName, jlong driverVersionCode,
- jstring appPackageName) {
+ jstring driverBuildDate, jstring appPackageName) {
ScopedUtfChars driverPackageNameChars(env, driverPackageName);
ScopedUtfChars driverVersionNameChars(env, driverVersionName);
+ ScopedUtfChars driverBuildDateChars(env, driverBuildDate);
ScopedUtfChars appPackageNameChars(env, appPackageName);
android::GraphicsEnv::getInstance().setGpuStats(driverPackageNameChars.c_str(),
driverVersionNameChars.c_str(),
- driverVersionCode, appPackageNameChars.c_str());
+ driverVersionCode,
+ driverBuildDateChars.c_str(),
+ appPackageNameChars.c_str());
}
void setAngleInfo_native(JNIEnv* env, jobject clazz, jstring path, jstring appName, jstring devOptIn,
@@ -84,7 +87,7 @@
const JNINativeMethod g_methods[] = {
{ "getCanLoadSystemLibraries", "()I", reinterpret_cast<void*>(getCanLoadSystemLibraries_native) },
{ "setDriverPath", "(Ljava/lang/String;)V", reinterpret_cast<void*>(setDriverPath) },
- { "setGpuStats", "(Ljava/lang/String;Ljava/lang/String;JLjava/lang/String;)V", reinterpret_cast<void*>(setGpuStats_native) },
+ { "setGpuStats", "(Ljava/lang/String;Ljava/lang/String;JLjava/lang/String;Ljava/lang/String;)V", reinterpret_cast<void*>(setGpuStats_native) },
{ "setAngleInfo", "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/io/FileDescriptor;JJ)V", reinterpret_cast<void*>(setAngleInfo_native) },
{ "getShouldUseAngle", "(Ljava/lang/String;)Z", reinterpret_cast<void*>(shouldUseAngle_native) },
{ "setLayerPaths", "(Ljava/lang/ClassLoader;Ljava/lang/String;)V", reinterpret_cast<void*>(setLayerPaths_native) },