Loading libs/graphicsenv/GraphicsEnv.cpp +16 −3 Original line number Diff line number Diff line Loading @@ -530,7 +530,11 @@ bool GraphicsEnv::shouldUseAngle() { return mShouldUseAngle; } void GraphicsEnv::setAngleInfo(const std::string& path, const bool shouldUseSystemAngle, // 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, const std::string& packageName, const std::vector<std::string> eglFeatures) { if (mShouldUseAngle) { Loading @@ -547,8 +551,13 @@ void GraphicsEnv::setAngleInfo(const std::string& path, const bool shouldUseSyst 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; mShouldUseSystemAngle = shouldUseSystemAngle; } mShouldUseNativeDriver = shouldUseNativeDriver; } std::string& GraphicsEnv::getPackageName() { Loading Loading @@ -625,6 +634,10 @@ bool GraphicsEnv::shouldUseSystemAngle() { return mShouldUseSystemAngle; } bool GraphicsEnv::shouldUseNativeDriver() { return mShouldUseNativeDriver; } /** * APIs for debuggable layers */ Loading libs/graphicsenv/include/graphicsenv/GraphicsEnv.h +7 −1 Original line number Diff line number Diff line Loading @@ -108,7 +108,10 @@ 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 void setAngleInfo(const std::string& path, const bool useSystemAngle, // 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, const std::string& packageName, const std::vector<std::string> eglFeatures); // Get the ANGLE driver namespace. android_namespace_t* getAngleNamespace(); Loading @@ -118,6 +121,7 @@ public: // Set the persist.graphics.egl system property value. void nativeToggleAngleAsSystemDriver(bool enabled); bool shouldUseSystemAngle(); bool shouldUseNativeDriver(); /* * Apis for debug layer Loading Loading @@ -175,6 +179,8 @@ 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; Loading opengl/libs/EGL/Loader.cpp +23 −6 Original line number Diff line number Diff line Loading @@ -169,6 +169,11 @@ 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) { Loading Loading @@ -240,16 +245,28 @@ void* Loader::open(egl_connection_t* cnx) { if (!hnd) { // Secondly, try to load from driver apk. hnd = attempt_to_load_updated_driver(cnx); } 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", LOG_ALWAYS_FATAL_IF(android::GraphicsEnv::getInstance().getDriverNamespace(), "couldn't find an OpenGL ES implementation from %s", android::GraphicsEnv::getInstance().getDriverPath().c_str()); } // Finally, try to load system driver. // 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) { // Start by searching for the library name appended by the system // properties of the GLES userspace driver in both locations. // i.e.: Loading Loading
libs/graphicsenv/GraphicsEnv.cpp +16 −3 Original line number Diff line number Diff line Loading @@ -530,7 +530,11 @@ bool GraphicsEnv::shouldUseAngle() { return mShouldUseAngle; } void GraphicsEnv::setAngleInfo(const std::string& path, const bool shouldUseSystemAngle, // 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, const std::string& packageName, const std::vector<std::string> eglFeatures) { if (mShouldUseAngle) { Loading @@ -547,8 +551,13 @@ void GraphicsEnv::setAngleInfo(const std::string& path, const bool shouldUseSyst 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; mShouldUseSystemAngle = shouldUseSystemAngle; } mShouldUseNativeDriver = shouldUseNativeDriver; } std::string& GraphicsEnv::getPackageName() { Loading Loading @@ -625,6 +634,10 @@ bool GraphicsEnv::shouldUseSystemAngle() { return mShouldUseSystemAngle; } bool GraphicsEnv::shouldUseNativeDriver() { return mShouldUseNativeDriver; } /** * APIs for debuggable layers */ Loading
libs/graphicsenv/include/graphicsenv/GraphicsEnv.h +7 −1 Original line number Diff line number Diff line Loading @@ -108,7 +108,10 @@ 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 void setAngleInfo(const std::string& path, const bool useSystemAngle, // 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, const std::string& packageName, const std::vector<std::string> eglFeatures); // Get the ANGLE driver namespace. android_namespace_t* getAngleNamespace(); Loading @@ -118,6 +121,7 @@ public: // Set the persist.graphics.egl system property value. void nativeToggleAngleAsSystemDriver(bool enabled); bool shouldUseSystemAngle(); bool shouldUseNativeDriver(); /* * Apis for debug layer Loading Loading @@ -175,6 +179,8 @@ 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; Loading
opengl/libs/EGL/Loader.cpp +23 −6 Original line number Diff line number Diff line Loading @@ -169,6 +169,11 @@ 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) { Loading Loading @@ -240,16 +245,28 @@ void* Loader::open(egl_connection_t* cnx) { if (!hnd) { // Secondly, try to load from driver apk. hnd = attempt_to_load_updated_driver(cnx); } 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", LOG_ALWAYS_FATAL_IF(android::GraphicsEnv::getInstance().getDriverNamespace(), "couldn't find an OpenGL ES implementation from %s", android::GraphicsEnv::getInstance().getDriverPath().c_str()); } // Finally, try to load system driver. // 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) { // Start by searching for the library name appended by the system // properties of the GLES userspace driver in both locations. // i.e.: Loading