summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libs/hwui/Properties.cpp8
-rw-r--r--libs/hwui/Properties.h3
-rw-r--r--libs/hwui/aconfig/hwui_flags.aconfig7
-rw-r--r--libs/hwui/renderthread/RenderThread.cpp12
4 files changed, 28 insertions, 2 deletions
diff --git a/libs/hwui/Properties.cpp b/libs/hwui/Properties.cpp
index 064cac2a6fc6..7d01dfbb446f 100644
--- a/libs/hwui/Properties.cpp
+++ b/libs/hwui/Properties.cpp
@@ -54,6 +54,9 @@ constexpr bool resample_gainmap_regions() {
constexpr bool query_global_priority() {
return false;
}
+constexpr bool early_preload_gl_context() {
+ return false;
+}
} // namespace hwui_flags
#endif
@@ -291,5 +294,10 @@ bool Properties::resampleGainmapRegions() {
return sResampleGainmapRegions;
}
+bool Properties::earlyPreloadGlContext() {
+ return base::GetBoolProperty(PROPERTY_EARLY_PRELOAD_GL_CONTEXT,
+ hwui_flags::early_preload_gl_context());
+}
+
} // namespace uirenderer
} // namespace android
diff --git a/libs/hwui/Properties.h b/libs/hwui/Properties.h
index db930f3904de..280a75a28e65 100644
--- a/libs/hwui/Properties.h
+++ b/libs/hwui/Properties.h
@@ -236,6 +236,8 @@ enum DebugLevel {
#define PROPERTY_SKIP_EGLMANAGER_TELEMETRY "debug.hwui.skip_eglmanager_telemetry"
+#define PROPERTY_EARLY_PRELOAD_GL_CONTEXT "debug.hwui.early_preload_gl_context"
+
///////////////////////////////////////////////////////////////////////////////
// Misc
///////////////////////////////////////////////////////////////////////////////
@@ -381,6 +383,7 @@ public:
static bool initializeGlAlways();
static bool resampleGainmapRegions();
+ static bool earlyPreloadGlContext();
private:
static StretchEffectBehavior stretchEffectBehavior;
diff --git a/libs/hwui/aconfig/hwui_flags.aconfig b/libs/hwui/aconfig/hwui_flags.aconfig
index e497ea1f3cb4..76ad2acccf89 100644
--- a/libs/hwui/aconfig/hwui_flags.aconfig
+++ b/libs/hwui/aconfig/hwui_flags.aconfig
@@ -166,4 +166,11 @@ flag {
metadata {
purpose: PURPOSE_BUGFIX
}
+}
+
+flag {
+ name: "early_preload_gl_context"
+ namespace: "core_graphics"
+ description: "Initialize GL context and GraphicBufferAllocater init on renderThread preload. This improves app startup time for apps using GL."
+ bug: "383612849"
} \ No newline at end of file
diff --git a/libs/hwui/renderthread/RenderThread.cpp b/libs/hwui/renderthread/RenderThread.cpp
index 92c6ad10d1c7..69fe40c755ea 100644
--- a/libs/hwui/renderthread/RenderThread.cpp
+++ b/libs/hwui/renderthread/RenderThread.cpp
@@ -25,6 +25,7 @@
#include <private/android/choreographer.h>
#include <sys/resource.h>
#include <ui/FatVector.h>
+#include <ui/GraphicBufferAllocator.h>
#include <utils/Condition.h>
#include <utils/Log.h>
#include <utils/Mutex.h>
@@ -518,11 +519,18 @@ bool RenderThread::isCurrent() {
void RenderThread::preload() {
// EGL driver is always preloaded only if HWUI renders with GL.
if (Properties::getRenderPipelineType() == RenderPipelineType::SkiaGL) {
- std::thread eglInitThread([]() { eglGetDisplay(EGL_DEFAULT_DISPLAY); });
- eglInitThread.detach();
+ if (Properties::earlyPreloadGlContext()) {
+ queue().post([this]() { requireGlContext(); });
+ } else {
+ std::thread eglInitThread([]() { eglGetDisplay(EGL_DEFAULT_DISPLAY); });
+ eglInitThread.detach();
+ }
} else {
requireVkContext();
}
+ if (Properties::earlyPreloadGlContext()) {
+ queue().post([]() { GraphicBufferAllocator::getInstance(); });
+ }
HardwareBitmapUploader::initialize();
}