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

Commit f7b0a5f4 authored by Yiwei Zhang's avatar Yiwei Zhang
Browse files

Game Driver: update the format of driver build date

The string based driver build date has been updated to Unix epoch
timestamp based driver build time. This change updates the corresponding
apis and throw exceptions when the meta-data timestamp in the game
driver apk is not set properly.

Bug: 123156461
Test: Build, flash and boot. Verify the GpuService receiver side.
Change-Id: Id4fb3ade31fa5944dcb32fedf5ca926b497e82dc
parent 1671308c
Loading
Loading
Loading
Loading
+15 −8
Original line number Diff line number Diff line
@@ -60,7 +60,8 @@ public class GraphicsEnvironment {
    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 PROPERTY_GFX_DRIVER_BUILD_TIME = "ro.gfx.driver_build_time";
    private static final String METADATA_DRIVER_BUILD_TIME = "driver_build_time";
    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,9 +80,8 @@ public class GraphicsEnvironment {
        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,
                    driverBuildDate == null ? "" : driverBuildDate, packageName);
                    SystemProperties.getLong(PROPERTY_GFX_DRIVER_BUILD_TIME, 0), packageName);
        }
    }

@@ -667,11 +667,18 @@ public class GraphicsEnvironment {
        if (DEBUG) Log.v(TAG, "gfx driver package libs: " + paths);
        setDriverPath(paths);

        final String driverBuildDate = driverAppInfo.metaData == null
                ? ""
                : driverAppInfo.metaData.getString("driver_build_date");
        if (driverAppInfo.metaData == null) {
            throw new NullPointerException("apk's meta-data cannot be null");
        }

        final String driverBuildTime = driverAppInfo.metaData.getString(METADATA_DRIVER_BUILD_TIME);
        if (driverBuildTime == null || driverBuildTime.isEmpty()) {
            throw new IllegalArgumentException("driver_build_time meta-data is not set");
        }
        // driver_build_time in the meta-data is in "L<Unix epoch timestamp>" 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,
                driverBuildDate == null ? "" : driverBuildDate, packageName);
                Long.parseLong(driverBuildTime.substring(1)), packageName);

        return true;
    }
@@ -695,7 +702,7 @@ public class GraphicsEnvironment {
    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 driverBuildDate, String appPackageName);
            long driverVersionCode, long driverBuildTime, 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);
+3 −5
Original line number Diff line number Diff line
@@ -34,15 +34,13 @@ void setDriverPath(JNIEnv* env, jobject clazz, jstring path) {

void setGpuStats_native(JNIEnv* env, jobject clazz, jstring driverPackageName,
                        jstring driverVersionName, jlong driverVersionCode,
                        jstring driverBuildDate, jstring appPackageName) {
                        jlong driverBuildTime, 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,
                                                    driverBuildDateChars.c_str(),
                                                    driverVersionCode, driverBuildTime,
                                                    appPackageNameChars.c_str());
}

@@ -87,7 +85,7 @@ void setDebugLayersGLES_native(JNIEnv* env, jobject clazz, jstring layers) {
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;Ljava/lang/String;)V", reinterpret_cast<void*>(setGpuStats_native) },
    { "setGpuStats", "(Ljava/lang/String;Ljava/lang/String;JJLjava/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) },