Loading libs/graphicsenv/GraphicsEnv.cpp +26 −5 Original line number Diff line number Diff line Loading @@ -146,14 +146,18 @@ int GraphicsEnv::getCanLoadSystemLibraries() { return 0; } 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::setGpuStats(const std::string& driverPackageName, Loading Loading @@ -536,6 +540,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 @@ -77,7 +77,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 setGpuStats(const std::string& driverPackageName, const std::string& driverVersionName, uint64_t versionCode, int64_t driverBuildTime, Loading Loading @@ -118,6 +121,7 @@ private: GraphicsEnv() = default; std::string mDriverPath; std::string mSphalLibraries; std::mutex mStatsLock; GpuStats mGpuStats; std::string mAnglePath; Loading Loading
libs/graphicsenv/GraphicsEnv.cpp +26 −5 Original line number Diff line number Diff line Loading @@ -146,14 +146,18 @@ int GraphicsEnv::getCanLoadSystemLibraries() { return 0; } 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::setGpuStats(const std::string& driverPackageName, Loading Loading @@ -536,6 +540,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 @@ -77,7 +77,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 setGpuStats(const std::string& driverPackageName, const std::string& driverVersionName, uint64_t versionCode, int64_t driverBuildTime, Loading Loading @@ -118,6 +121,7 @@ private: GraphicsEnv() = default; std::string mDriverPath; std::string mSphalLibraries; std::mutex mStatsLock; GpuStats mGpuStats; std::string mAnglePath; Loading