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

Commit a069f032 authored by Peiyong Lin's avatar Peiyong Lin
Browse files

Revert^2 "Revert "Load native GLES driver when specified.""

Revert reason: PcmaPhotoEditingV3 regressed, see b/293486861.

Original change id: I6a2e716d340d9be3610c31abbcbe7984bf472f9f

Bug: b/283858001
Bug: b/293486861
Test: atest CtsAngleDeveloperOptionHostTest -c with ANGLE being default
Test: atest CtsAngleDeveloperOptionHostTest -c with native being default
Change-Id: Id08acb6e18db095c632aa8d1a7810ede0c1a1ad2
parent f87833e0
Loading
Loading
Loading
Loading
+3 −16
Original line number Diff line number Diff line
@@ -512,11 +512,7 @@ bool GraphicsEnv::shouldUseAngle() {
    return mShouldUseAngle;
}

// Set ANGLE information.
// If path is "system", it means system ANGLE must be used for the process.
// If shouldUseNativeDriver is true, it means native GLES drivers must be used for the process.
// If path is set to nonempty and shouldUseNativeDriver is true, ANGLE will be used regardless.
void GraphicsEnv::setAngleInfo(const std::string& path, const bool shouldUseNativeDriver,
void GraphicsEnv::setAngleInfo(const std::string& path, const bool shouldUseSystemAngle,
                               const std::string& packageName,
                               const std::vector<std::string> eglFeatures) {
    if (mShouldUseAngle) {
@@ -533,13 +529,8 @@ void GraphicsEnv::setAngleInfo(const std::string& path, const bool shouldUseNati
    mAnglePath = std::move(path);
    ALOGV("setting app package name to '%s'", packageName.c_str());
    mPackageName = std::move(packageName);
    if (mAnglePath == "system") {
        mShouldUseSystemAngle = true;
    }
    if (!mAnglePath.empty()) {
    mShouldUseAngle = true;
    }
    mShouldUseNativeDriver = shouldUseNativeDriver;
    mShouldUseSystemAngle = shouldUseSystemAngle;
}

std::string& GraphicsEnv::getPackageName() {
@@ -616,10 +607,6 @@ bool GraphicsEnv::shouldUseSystemAngle() {
    return mShouldUseSystemAngle;
}

bool GraphicsEnv::shouldUseNativeDriver() {
    return mShouldUseNativeDriver;
}

/**
 * APIs for debuggable layers
 */
+1 −7
Original line number Diff line number Diff line
@@ -108,10 +108,7 @@ public:
    // (libraries must be stored uncompressed and page aligned); such elements
    // in the search path must have a '!' after the zip filename, e.g.
    //     /system/app/ANGLEPrebuilt/ANGLEPrebuilt.apk!/lib/arm64-v8a
    // If the search patch is "system", then it means the system ANGLE should be used.
    // If shouldUseNativeDriver is true, it means native GLES drivers must be used for the process.
    // If path is set to nonempty and shouldUseNativeDriver is true, ANGLE will be used regardless.
    void setAngleInfo(const std::string& path, const bool shouldUseNativeDriver,
    void setAngleInfo(const std::string& path, const bool useSystemAngle,
                      const std::string& packageName, const std::vector<std::string> eglFeatures);
    // Get the ANGLE driver namespace.
    android_namespace_t* getAngleNamespace();
@@ -121,7 +118,6 @@ public:
    // Set the persist.graphics.egl system property value.
    void nativeToggleAngleAsSystemDriver(bool enabled);
    bool shouldUseSystemAngle();
    bool shouldUseNativeDriver();

    /*
     * Apis for debug layer
@@ -179,8 +175,6 @@ private:
    bool mShouldUseAngle = false;
    // Whether loader should load system ANGLE.
    bool mShouldUseSystemAngle = false;
    // Whether loader should load native GLES driver.
    bool mShouldUseNativeDriver = false;
    // ANGLE namespace.
    android_namespace_t* mAngleNamespace = nullptr;

+6 −23
Original line number Diff line number Diff line
@@ -169,11 +169,6 @@ static bool should_unload_system_driver(egl_connection_t* cnx) {
        }
    }

    // Return true if native GLES drivers should be used and ANGLE is already loaded.
    if (android::GraphicsEnv::getInstance().shouldUseNativeDriver() && cnx->angleLoaded) {
        return true;
    }

    // Return true if updated driver namespace is set.
    ns = android::GraphicsEnv::getInstance().getDriverNamespace();
    if (ns) {
@@ -245,28 +240,16 @@ void* Loader::open(egl_connection_t* cnx) {
    if (!hnd) {
        // Secondly, try to load from driver apk.
        hnd = attempt_to_load_updated_driver(cnx);

        // If updated driver apk is set but fail to load, abort here.
        LOG_ALWAYS_FATAL_IF(android::GraphicsEnv::getInstance().getDriverNamespace(),
                            "couldn't find an OpenGL ES implementation from %s",
                            android::GraphicsEnv::getInstance().getDriverPath().c_str());
    }

    // Attempt to load native GLES drivers specified by ro.hardware.egl if native is selected.
    // If native is selected but fail to load, abort.
    if (!hnd && android::GraphicsEnv::getInstance().shouldUseNativeDriver()) {
        auto driverSuffix = base::GetProperty(RO_DRIVER_SUFFIX_PROPERTY, "");
        LOG_ALWAYS_FATAL_IF(driverSuffix.empty(),
                            "Native GLES driver is selected but not specified in %s",
                            RO_DRIVER_SUFFIX_PROPERTY);
        hnd = attempt_to_load_system_driver(cnx, driverSuffix.c_str(), true);
        LOG_ALWAYS_FATAL_IF(!hnd, "Native GLES driver is selected but failed to load. %s=%s",
                            RO_DRIVER_SUFFIX_PROPERTY, driverSuffix.c_str());
    }

    // Finally, try to load default driver.
    bool failToLoadFromDriverSuffixProperty = false;
    if (!hnd) {
        // If updated driver apk is set but fail to load, abort here.
        if (android::GraphicsEnv::getInstance().getDriverNamespace()) {
            LOG_ALWAYS_FATAL("couldn't find an OpenGL ES implementation from %s",
                             android::GraphicsEnv::getInstance().getDriverPath().c_str());
        }
        // Finally, try to load system driver.
        // Start by searching for the library name appended by the system
        // properties of the GLES userspace driver in both locations.
        // i.e.: