Loading libs/graphicsenv/GraphicsEnv.cpp +26 −5 Original line number Diff line number Diff line Loading @@ -115,14 +115,18 @@ static const std::string getSystemNativeLibraries(NativeLibrary type) { return env; } void GraphicsEnv::setDriverPath(const std::string path) { if (!mDriverPath.empty()) { ALOGV("ignoring attempt to change driver path from '%s' to '%s'", mDriverPath.c_str(), path.c_str()); void GraphicsEnv::setDriverPathAndSphalLibraries(const std::string path, const std::string sphalLibraries) { if (!mDriverPath.empty() || !mSphalLibraries.empty()) { 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; } 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; mSphalLibraries = sphalLibraries; } void GraphicsEnv::setLayerPaths(NativeLoaderNamespace* appNamespace, const std::string layerPaths) { Loading Loading @@ -187,6 +191,23 @@ android_namespace_t* GraphicsEnv::getDriverNamespace() { mDriverNamespace = nullptr; 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; Loading libs/graphicsenv/include/graphicsenv/GraphicsEnv.h +5 −1 Original line number Diff line number Diff line Loading @@ -34,7 +34,10 @@ public: // (drivers must be stored uncompressed and page aligned); such elements // in the search path must have a '!' after the zip filename, e.g. // /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(); void setLayerPaths(NativeLoaderNamespace* appNamespace, const std::string layerPaths); Loading @@ -47,6 +50,7 @@ public: private: GraphicsEnv() = default; std::string mDriverPath; std::string mSphalLibraries; std::string mDebugLayers; std::string mLayerPaths; android_namespace_t* mDriverNamespace = nullptr; Loading Loading
libs/graphicsenv/GraphicsEnv.cpp +26 −5 Original line number Diff line number Diff line Loading @@ -115,14 +115,18 @@ static const std::string getSystemNativeLibraries(NativeLibrary type) { return env; } void GraphicsEnv::setDriverPath(const std::string path) { if (!mDriverPath.empty()) { ALOGV("ignoring attempt to change driver path from '%s' to '%s'", mDriverPath.c_str(), path.c_str()); void GraphicsEnv::setDriverPathAndSphalLibraries(const std::string path, const std::string sphalLibraries) { if (!mDriverPath.empty() || !mSphalLibraries.empty()) { 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; } 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; mSphalLibraries = sphalLibraries; } void GraphicsEnv::setLayerPaths(NativeLoaderNamespace* appNamespace, const std::string layerPaths) { Loading Loading @@ -187,6 +191,23 @@ android_namespace_t* GraphicsEnv::getDriverNamespace() { mDriverNamespace = nullptr; 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; Loading
libs/graphicsenv/include/graphicsenv/GraphicsEnv.h +5 −1 Original line number Diff line number Diff line Loading @@ -34,7 +34,10 @@ public: // (drivers must be stored uncompressed and page aligned); such elements // in the search path must have a '!' after the zip filename, e.g. // /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(); void setLayerPaths(NativeLoaderNamespace* appNamespace, const std::string layerPaths); Loading @@ -47,6 +50,7 @@ public: private: GraphicsEnv() = default; std::string mDriverPath; std::string mSphalLibraries; std::string mDebugLayers; std::string mLayerPaths; android_namespace_t* mDriverNamespace = nullptr; Loading