summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Tim Van Patten <timvp@google.com> 2025-01-13 14:41:59 -0700
committer Tim Van Patten <timvp@google.com> 2025-02-19 10:04:14 -0700
commit8bba22be40afdb7f7fcfd5a663be6fc0856c899e (patch)
treea9184d7d0b220c04e5596319c5a324ad055c7f1f
parent7ad24b9b794b282aa25d28c42832fd50815f0816 (diff)
GraphicsEnv: Get feature overrides from GpuService
Query GpuService for the latest ANGLE feature overrides and store them in GraphicsEnv. This must be done separately, because Zygote cannot perform Binder calls and GraphicsEnv must be able to handle being called at Zygote creation and App launch. This also helps minimize the boot time impact of this feature. Bug: 372694741 Test: CQ, Manual verification Flag: com.android.graphics.graphicsenv.flags.feature_overrides Change-Id: I9bfd295e57593074262a77fc8e2abe91b5d18791
-rw-r--r--libs/graphicsenv/GraphicsEnv.cpp20
-rw-r--r--libs/graphicsenv/include/graphicsenv/GraphicsEnv.h1
2 files changed, 21 insertions, 0 deletions
diff --git a/libs/graphicsenv/GraphicsEnv.cpp b/libs/graphicsenv/GraphicsEnv.cpp
index 4bc261106a..626581cc2a 100644
--- a/libs/graphicsenv/GraphicsEnv.cpp
+++ b/libs/graphicsenv/GraphicsEnv.cpp
@@ -621,6 +621,10 @@ void GraphicsEnv::setAngleInfo(const std::string& path, const bool shouldUseNati
mShouldUseAngle = true;
}
mShouldUseNativeDriver = shouldUseNativeDriver;
+
+ if (mShouldUseAngle) {
+ updateAngleFeatureOverrides();
+ }
}
std::string& GraphicsEnv::getPackageName() {
@@ -632,6 +636,22 @@ const std::vector<std::string>& GraphicsEnv::getAngleEglFeatures() {
return mAngleEglFeatures;
}
+// List of ANGLE features to override (enabled or disable).
+// The list of overrides is loaded and parsed by GpuService.
+void GraphicsEnv::updateAngleFeatureOverrides() {
+ if (!graphicsenv_flags::feature_overrides()) {
+ return;
+ }
+
+ const sp<IGpuService> gpuService = getGpuService();
+ if (!gpuService) {
+ ALOGE("No GPU service");
+ return;
+ }
+
+ mFeatureOverrides = gpuService->getFeatureOverrides();
+}
+
void GraphicsEnv::getAngleFeatureOverrides(std::vector<const char*>& enabled,
std::vector<const char*>& disabled) {
if (!graphicsenv_flags::feature_overrides()) {
diff --git a/libs/graphicsenv/include/graphicsenv/GraphicsEnv.h b/libs/graphicsenv/include/graphicsenv/GraphicsEnv.h
index 55fa13abb5..68219008e8 100644
--- a/libs/graphicsenv/include/graphicsenv/GraphicsEnv.h
+++ b/libs/graphicsenv/include/graphicsenv/GraphicsEnv.h
@@ -121,6 +121,7 @@ public:
// Get the app package name.
std::string& getPackageName();
const std::vector<std::string>& getAngleEglFeatures();
+ void updateAngleFeatureOverrides();
void getAngleFeatureOverrides(std::vector<const char*>& enabled,
std::vector<const char*>& disabled);
// Set the persist.graphics.egl system property value.