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

Commit a95de938 authored by Yiwei Zhang's avatar Yiwei Zhang Committed by android-build-merger
Browse files

Merge "Game Driver: add required sphal libraries to game driver namespace"

am: d771b090

Change-Id: I6cc0ebeb247579cc4da66ab50a8adf5e0c409401
parents 9c82f661 d771b090
Loading
Loading
Loading
Loading
+26 −5
Original line number Original line Diff line number Diff line
@@ -115,14 +115,18 @@ static const std::string getSystemNativeLibraries(NativeLibrary type) {
    return env;
    return env;
}
}


void GraphicsEnv::setDriverPath(const std::string path) {
void GraphicsEnv::setDriverPathAndSphalLibraries(const std::string path,
    if (!mDriverPath.empty()) {
                                                 const std::string sphalLibraries) {
        ALOGV("ignoring attempt to change driver path from '%s' to '%s'", mDriverPath.c_str(),
    if (!mDriverPath.empty() || !mSphalLibraries.empty()) {
              path.c_str());
        ALOGV("ignoring attempt to change driver path from '%s' to '%s' or change sphal libraries "
              "from '%s' to '%s'",
              mDriverPath.c_str(), path.c_str(), mSphalLibraries.c_str(), sphalLibraries.c_str());
        return;
        return;
    }
    }
    ALOGV("setting driver path to '%s'", path.c_str());
    ALOGV("setting driver path to '%s' and sphal libraries to '%s'", path.c_str(),
          sphalLibraries.c_str());
    mDriverPath = path;
    mDriverPath = path;
    mSphalLibraries = sphalLibraries;
}
}


void GraphicsEnv::setLayerPaths(NativeLoaderNamespace* appNamespace, const std::string layerPaths) {
void GraphicsEnv::setLayerPaths(NativeLoaderNamespace* appNamespace, const std::string layerPaths) {
@@ -187,6 +191,23 @@ android_namespace_t* GraphicsEnv::getDriverNamespace() {
            mDriverNamespace = nullptr;
            mDriverNamespace = nullptr;
            return;
            return;
        }
        }

        if (mSphalLibraries.empty()) return;

        // Make additional libraries in sphal to be accessible
        auto sphalNamespace = android_get_exported_namespace("sphal");
        if (!sphalNamespace) {
            ALOGE("Depend on these libraries[%s] in sphal, but failed to get sphal namespace",
                  mSphalLibraries.c_str());
            mDriverNamespace = nullptr;
            return;
        }

        if (!android_link_namespaces(mDriverNamespace, sphalNamespace, mSphalLibraries.c_str())) {
            ALOGE("Failed to link sphal namespace[%s]", dlerror());
            mDriverNamespace = nullptr;
            return;
        }
    });
    });


    return mDriverNamespace;
    return mDriverNamespace;
+5 −1
Original line number Original line Diff line number Diff line
@@ -34,7 +34,10 @@ public:
    // (drivers must be stored uncompressed and page aligned); such elements
    // (drivers must be stored uncompressed and page aligned); such elements
    // in the search path must have a '!' after the zip filename, e.g.
    // in the search path must have a '!' after the zip filename, e.g.
    //     /data/app/com.example.driver/base.apk!/lib/arm64-v8a
    //     /data/app/com.example.driver/base.apk!/lib/arm64-v8a
    void setDriverPath(const std::string path);
    // Also set additional required sphal libraries to the linker for loading
    // graphics drivers. The string is a list of libraries separated by ':',
    // which is required by android_link_namespaces.
    void setDriverPathAndSphalLibraries(const std::string path, const std::string sphalLibraries);
    android_namespace_t* getDriverNamespace();
    android_namespace_t* getDriverNamespace();


    void setLayerPaths(NativeLoaderNamespace* appNamespace, const std::string layerPaths);
    void setLayerPaths(NativeLoaderNamespace* appNamespace, const std::string layerPaths);
@@ -47,6 +50,7 @@ public:
private:
private:
    GraphicsEnv() = default;
    GraphicsEnv() = default;
    std::string mDriverPath;
    std::string mDriverPath;
    std::string mSphalLibraries;
    std::string mDebugLayers;
    std::string mDebugLayers;
    std::string mLayerPaths;
    std::string mLayerPaths;
    android_namespace_t* mDriverNamespace = nullptr;
    android_namespace_t* mDriverNamespace = nullptr;