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

Commit 5ee489b0 authored by Peiyong Lin's avatar Peiyong Lin Committed by Automerger Merge Worker
Browse files

Merge "[Cherry-pick] Revert^3 "Revert "Load native GLES driver when...

Merge "[Cherry-pick] Revert^3 "Revert "Load native GLES driver when specified.""" into main am: 25f82c5e am: 17c86a59

Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/2794214



Change-Id: I505d35de88ddb831e0f1b727d7dcef8e7b98f470
Signed-off-by: default avatarAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
parents f866570c 17c86a59
Loading
Loading
Loading
Loading
+33 −25
Original line number Original line Diff line number Diff line
@@ -115,6 +115,7 @@ public class GraphicsEnvironment {
    private static final String ANGLE_GL_DRIVER_CHOICE_DEFAULT = "default";
    private static final String ANGLE_GL_DRIVER_CHOICE_DEFAULT = "default";
    private static final String ANGLE_GL_DRIVER_CHOICE_ANGLE = "angle";
    private static final String ANGLE_GL_DRIVER_CHOICE_ANGLE = "angle";
    private static final String ANGLE_GL_DRIVER_CHOICE_NATIVE = "native";
    private static final String ANGLE_GL_DRIVER_CHOICE_NATIVE = "native";
    private static final String SYSTEM_ANGLE_STRING = "system";


    private static final String PROPERTY_RO_ANGLE_SUPPORTED = "ro.gfx.angle.supported";
    private static final String PROPERTY_RO_ANGLE_SUPPORTED = "ro.gfx.angle.supported";


@@ -124,7 +125,6 @@ public class GraphicsEnvironment {
    private GameManager mGameManager;
    private GameManager mGameManager;


    private int mAngleOptInIndex = -1;
    private int mAngleOptInIndex = -1;
    private boolean mEnabledByGameMode = false;
    private boolean mShouldUseAngle = false;
    private boolean mShouldUseAngle = false;


    /**
    /**
@@ -195,15 +195,16 @@ public class GraphicsEnvironment {
    }
    }


    /**
    /**
     * Query to determine if ANGLE should be used
     * Query to determine the ANGLE driver choice.
     */
     */
    private boolean shouldUseAngle(Context context, Bundle coreSettings, String packageName) {
    private String queryAngleChoice(Context context, Bundle coreSettings,
                                               String packageName) {
        if (TextUtils.isEmpty(packageName)) {
        if (TextUtils.isEmpty(packageName)) {
            Log.v(TAG, "No package name specified; use the system driver");
            Log.v(TAG, "No package name specified; use the system driver");
            return false;
            return ANGLE_GL_DRIVER_CHOICE_DEFAULT;
        }
        }


        return shouldUseAngleInternal(context, coreSettings, packageName);
        return queryAngleChoiceInternal(context, coreSettings, packageName);
    }
    }


    private int getVulkanVersion(PackageManager pm) {
    private int getVulkanVersion(PackageManager pm) {
@@ -424,10 +425,11 @@ public class GraphicsEnvironment {
     *    forces a choice;
     *    forces a choice;
     * 3) Use ANGLE if isAngleEnabledByGameMode() returns true;
     * 3) Use ANGLE if isAngleEnabledByGameMode() returns true;
     */
     */
    private boolean shouldUseAngleInternal(Context context, Bundle bundle, String packageName) {
    private String queryAngleChoiceInternal(Context context, Bundle bundle,
                                                       String packageName) {
        // Make sure we have a good package name
        // Make sure we have a good package name
        if (TextUtils.isEmpty(packageName)) {
        if (TextUtils.isEmpty(packageName)) {
            return false;
            return ANGLE_GL_DRIVER_CHOICE_DEFAULT;
        }
        }


        // Check the semi-global switch (i.e. once system has booted enough) for whether ANGLE
        // Check the semi-global switch (i.e. once system has booted enough) for whether ANGLE
@@ -442,7 +444,7 @@ public class GraphicsEnvironment {
        }
        }
        if (allUseAngle == ANGLE_GL_DRIVER_ALL_ANGLE_ON) {
        if (allUseAngle == ANGLE_GL_DRIVER_ALL_ANGLE_ON) {
            Log.v(TAG, "Turn on ANGLE for all applications.");
            Log.v(TAG, "Turn on ANGLE for all applications.");
            return true;
            return ANGLE_GL_DRIVER_CHOICE_ANGLE;
        }
        }


        // Get the per-application settings lists
        // Get the per-application settings lists
@@ -455,17 +457,19 @@ public class GraphicsEnvironment {
        Log.v(TAG, "  angle_gl_driver_selection_pkgs=" + optInPackages);
        Log.v(TAG, "  angle_gl_driver_selection_pkgs=" + optInPackages);
        Log.v(TAG, "  angle_gl_driver_selection_values=" + optInValues);
        Log.v(TAG, "  angle_gl_driver_selection_values=" + optInValues);


        mEnabledByGameMode = isAngleEnabledByGameMode(context, packageName);
        final String gameModeChoice = isAngleEnabledByGameMode(context, packageName)
                                      ? ANGLE_GL_DRIVER_CHOICE_ANGLE
                                      : ANGLE_GL_DRIVER_CHOICE_DEFAULT;


        // Make sure we have good settings to use
        // Make sure we have good settings to use
        if (optInPackages.size() != optInValues.size()) {
        if (optInPackages.size() == 0 || optInPackages.size() != optInValues.size()) {
            Log.v(TAG,
            Log.v(TAG,
                    "Global.Settings values are invalid: "
                    "Global.Settings values are invalid: "
                        + "number of packages: "
                        + "number of packages: "
                            + optInPackages.size() + ", "
                            + optInPackages.size() + ", "
                        + "number of values: "
                        + "number of values: "
                            + optInValues.size());
                            + optInValues.size());
            return mEnabledByGameMode;
            return gameModeChoice;
        }
        }


        // See if this application is listed in the per-application settings list
        // See if this application is listed in the per-application settings list
@@ -473,7 +477,7 @@ public class GraphicsEnvironment {


        if (pkgIndex < 0) {
        if (pkgIndex < 0) {
            Log.v(TAG, packageName + " is not listed in per-application setting");
            Log.v(TAG, packageName + " is not listed in per-application setting");
            return mEnabledByGameMode;
            return gameModeChoice;
        }
        }
        mAngleOptInIndex = pkgIndex;
        mAngleOptInIndex = pkgIndex;


@@ -484,13 +488,13 @@ public class GraphicsEnvironment {
                "ANGLE Developer option for '" + packageName + "' "
                "ANGLE Developer option for '" + packageName + "' "
                        + "set to: '" + optInValue + "'");
                        + "set to: '" + optInValue + "'");
        if (optInValue.equals(ANGLE_GL_DRIVER_CHOICE_ANGLE)) {
        if (optInValue.equals(ANGLE_GL_DRIVER_CHOICE_ANGLE)) {
            return true;
            return ANGLE_GL_DRIVER_CHOICE_ANGLE;
        } else if (optInValue.equals(ANGLE_GL_DRIVER_CHOICE_NATIVE)) {
        } else if (optInValue.equals(ANGLE_GL_DRIVER_CHOICE_NATIVE)) {
            return false;
            return ANGLE_GL_DRIVER_CHOICE_NATIVE;
        } else {
        } else {
            // The user either chose default or an invalid value; go with the default driver or what
            // The user either chose default or an invalid value; go with the default driver or what
            // the game mode indicates
            // the game mode indicates
            return mEnabledByGameMode;
            return gameModeChoice;
        }
        }
    }
    }


@@ -557,8 +561,12 @@ public class GraphicsEnvironment {
     */
     */
    private boolean setupAngle(Context context, Bundle bundle, PackageManager packageManager,
    private boolean setupAngle(Context context, Bundle bundle, PackageManager packageManager,
            String packageName) {
            String packageName) {

        final String angleChoice = queryAngleChoice(context, bundle, packageName);
        if (!shouldUseAngle(context, bundle, packageName)) {
        if (angleChoice.equals(ANGLE_GL_DRIVER_CHOICE_DEFAULT)) {
            return false;
        }
        if (angleChoice.equals(ANGLE_GL_DRIVER_CHOICE_NATIVE)) {
            nativeSetAngleInfo("", true, packageName, null);
            return false;
            return false;
        }
        }


@@ -627,10 +635,10 @@ public class GraphicsEnvironment {
            Log.d(TAG, "ANGLE package libs: " + paths);
            Log.d(TAG, "ANGLE package libs: " + paths);
        }
        }


        // If we make it to here, ANGLE will be used.  Call setAngleInfo() with the package name,
        // If we make it to here, ANGLE apk will be used.  Call nativeSetAngleInfo() with the
        // and features to use.
        // application package name and ANGLE features to use.
        final String[] features = getAngleEglFeatures(context, bundle);
        final String[] features = getAngleEglFeatures(context, bundle);
        setAngleInfo(paths, false, packageName, features);
        nativeSetAngleInfo(paths, false, packageName, features);


        return true;
        return true;
    }
    }
@@ -652,10 +660,10 @@ public class GraphicsEnvironment {
            return false;
            return false;
        }
        }


        // If we make it to here, ANGLE will be used.  Call setAngleInfo() with the package name,
        // If we make it to here, system ANGLE will be used.  Call nativeSetAngleInfo() with
        // and features to use.
        // the application package name and ANGLE features to use.
        final String[] features = getAngleEglFeatures(context, bundle);
        final String[] features = getAngleEglFeatures(context, bundle);
        setAngleInfo("", true, packageName, features);
        nativeSetAngleInfo(SYSTEM_ANGLE_STRING, false, packageName, features);
        return true;
        return true;
    }
    }


@@ -936,8 +944,8 @@ public class GraphicsEnvironment {
    private static native void setDriverPathAndSphalLibraries(String path, String sphalLibraries);
    private static native void setDriverPathAndSphalLibraries(String path, String sphalLibraries);
    private static native void setGpuStats(String driverPackageName, String driverVersionName,
    private static native void setGpuStats(String driverPackageName, String driverVersionName,
            long driverVersionCode, long driverBuildTime, String appPackageName, int vulkanVersion);
            long driverVersionCode, long driverBuildTime, String appPackageName, int vulkanVersion);
    private static native void setAngleInfo(String path, boolean useSystemAngle, String packageName,
    private static native void nativeSetAngleInfo(String path, boolean useNativeDriver,
            String[] features);
            String packageName, String[] features);
    private static native boolean setInjectLayersPrSetDumpable();
    private static native boolean setInjectLayersPrSetDumpable();
    private static native void nativeToggleAngleAsSystemDriver(boolean enabled);
    private static native void nativeToggleAngleAsSystemDriver(boolean enabled);


+3 −3
Original line number Original line Diff line number Diff line
@@ -50,7 +50,7 @@ void setGpuStats_native(JNIEnv* env, jobject clazz, jstring driverPackageName,
                                                    appPackageNameChars.c_str(), vulkanVersion);
                                                    appPackageNameChars.c_str(), vulkanVersion);
}
}


void setAngleInfo_native(JNIEnv* env, jobject clazz, jstring path, jboolean useSystemAngle,
void setAngleInfo_native(JNIEnv* env, jobject clazz, jstring path, jboolean useNativeDriver,
                         jstring packageName, jobjectArray featuresObj) {
                         jstring packageName, jobjectArray featuresObj) {
    ScopedUtfChars pathChars(env, path);
    ScopedUtfChars pathChars(env, path);
    ScopedUtfChars packageNameChars(env, packageName);
    ScopedUtfChars packageNameChars(env, packageName);
@@ -73,7 +73,7 @@ void setAngleInfo_native(JNIEnv* env, jobject clazz, jstring path, jboolean useS
        }
        }
    }
    }


    android::GraphicsEnv::getInstance().setAngleInfo(pathChars.c_str(), useSystemAngle,
    android::GraphicsEnv::getInstance().setAngleInfo(pathChars.c_str(), useNativeDriver,
                                                     packageNameChars.c_str(), features);
                                                     packageNameChars.c_str(), features);
}
}


@@ -118,7 +118,7 @@ const JNINativeMethod g_methods[] = {
         reinterpret_cast<void*>(setGpuStats_native)},
         reinterpret_cast<void*>(setGpuStats_native)},
        {"setInjectLayersPrSetDumpable", "()Z",
        {"setInjectLayersPrSetDumpable", "()Z",
         reinterpret_cast<void*>(setInjectLayersPrSetDumpable_native)},
         reinterpret_cast<void*>(setInjectLayersPrSetDumpable_native)},
        {"setAngleInfo", "(Ljava/lang/String;ZLjava/lang/String;[Ljava/lang/String;)V",
        {"nativeSetAngleInfo", "(Ljava/lang/String;ZLjava/lang/String;[Ljava/lang/String;)V",
         reinterpret_cast<void*>(setAngleInfo_native)},
         reinterpret_cast<void*>(setAngleInfo_native)},
        {"setLayerPaths", "(Ljava/lang/ClassLoader;Ljava/lang/String;)V",
        {"setLayerPaths", "(Ljava/lang/ClassLoader;Ljava/lang/String;)V",
         reinterpret_cast<void*>(setLayerPaths_native)},
         reinterpret_cast<void*>(setLayerPaths_native)},