[SurfaceFlinger]Use configStore useContextPriority
Change-Id: I329b5da0e92822eb0878c8866c8ab87ea13f7e07
diff --git a/services/surfaceflinger/Android.mk b/services/surfaceflinger/Android.mk
index 1c1db74..5ea3445 100644
--- a/services/surfaceflinger/Android.mk
+++ b/services/surfaceflinger/Android.mk
@@ -65,13 +65,6 @@
DisplayHardware/HWComposer_hwc1.cpp
endif
-ifeq ($(TARGET_BOARD_PLATFORM),omap4)
- LOCAL_CFLAGS += -DHAS_CONTEXT_PRIORITY
-endif
-ifeq ($(TARGET_BOARD_PLATFORM),s5pc110)
- LOCAL_CFLAGS += -DHAS_CONTEXT_PRIORITY
-endif
-
ifeq ($(TARGET_FORCE_HWC_FOR_VIRTUAL_DISPLAYS),true)
LOCAL_CFLAGS += -DFORCE_HWC_COPY_FOR_VIRTUAL_DISPLAYS
endif
diff --git a/services/surfaceflinger/RenderEngine/RenderEngine.cpp b/services/surfaceflinger/RenderEngine/RenderEngine.cpp
index 9909bf9..e3dbecc 100644
--- a/services/surfaceflinger/RenderEngine/RenderEngine.cpp
+++ b/services/surfaceflinger/RenderEngine/RenderEngine.cpp
@@ -23,6 +23,9 @@
#include "GLExtensions.h"
#include "Mesh.h"
+#include <vector>
+#include <SurfaceFlinger.h>
+
EGLAPI const char* eglQueryStringImplementationANDROID(EGLDisplay dpy, EGLint name);
// ---------------------------------------------------------------------------
@@ -76,18 +79,21 @@
LOG_ALWAYS_FATAL("no supported EGL_RENDERABLE_TYPEs");
}
- // Also create our EGLContext
- EGLint contextAttributes[] = {
- EGL_CONTEXT_CLIENT_VERSION, contextClientVersion, // MUST be first
+ std::vector<EGLint> contextAttributes;
+ contextAttributes.reserve(6);
+ contextAttributes.push_back(EGL_CONTEXT_CLIENT_VERSION);
+ contextAttributes.push_back(contextClientVersion);
#ifdef EGL_IMG_context_priority
-#ifdef HAS_CONTEXT_PRIORITY
-#warning "using EGL_IMG_context_priority"
- EGL_CONTEXT_PRIORITY_LEVEL_IMG, EGL_CONTEXT_PRIORITY_HIGH_IMG,
+ if (SurfaceFlinger::useContextPriority) {
+ contextAttributes.push_back(EGL_CONTEXT_PRIORITY_LEVEL_IMG);
+ contextAttributes.push_back(EGL_CONTEXT_PRIORITY_HIGH_IMG);
+ }
#endif
-#endif
- EGL_NONE, EGL_NONE
- };
- EGLContext ctxt = eglCreateContext(display, config, NULL, contextAttributes);
+ contextAttributes.push_back(EGL_NONE);
+ contextAttributes.push_back(EGL_NONE);
+
+ EGLContext ctxt = eglCreateContext(display, config, NULL,
+ contextAttributes.data());
// if can't create a GL context, we can only abort.
LOG_ALWAYS_FATAL_IF(ctxt==EGL_NO_CONTEXT, "EGLContext creation failed");
diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp
index ca6d941..3677c2e 100644
--- a/services/surfaceflinger/SurfaceFlinger.cpp
+++ b/services/surfaceflinger/SurfaceFlinger.cpp
@@ -111,6 +111,7 @@
// ---------------------------------------------------------------------------
int64_t SurfaceFlinger::vsyncPhaseOffsetNs;
int64_t SurfaceFlinger::sfVsyncPhaseOffsetNs;
+bool SurfaceFlinger::useContextPriority;
SurfaceFlinger::SurfaceFlinger()
: BnSurfaceComposer(),
@@ -163,6 +164,9 @@
ALOGI("SurfaceFlinger is starting");
+ useContextPriority = getBool< ISurfaceFlingerConfigs,
+ &ISurfaceFlingerConfigs::useContextPriority>(false);
+
// debugging stuff...
char value[PROPERTY_VALUE_MAX];
@@ -3215,9 +3219,8 @@
void SurfaceFlinger::appendSfConfigString(String8& result) const
{
result.append(" [sf");
-#ifdef HAS_CONTEXT_PRIORITY
- result.append(" HAS_CONTEXT_PRIORITY");
-#endif
+ result.appendFormat(" HAS_CONTEXT_PRIORITY=%d", useContextPriority);
+
#ifdef NEVER_DEFAULT_TO_ASYNC_MODE
result.append(" NEVER_DEFAULT_TO_ASYNC_MODE");
#endif
diff --git a/services/surfaceflinger/SurfaceFlinger.h b/services/surfaceflinger/SurfaceFlinger.h
index e5aa0bb..11d7c6f 100644
--- a/services/surfaceflinger/SurfaceFlinger.h
+++ b/services/surfaceflinger/SurfaceFlinger.h
@@ -128,6 +128,9 @@
static int64_t vsyncPhaseOffsetNs;
static int64_t sfVsyncPhaseOffsetNs;
+ // Instruct the Render Engine to use EGL_IMG_context_priority is available.
+ static bool useContextPriority;
+
static char const* getServiceName() ANDROID_API {
return "SurfaceFlinger";
}
diff --git a/services/surfaceflinger/SurfaceFlinger_hwc1.cpp b/services/surfaceflinger/SurfaceFlinger_hwc1.cpp
index 147232c..f37fa6c 100644
--- a/services/surfaceflinger/SurfaceFlinger_hwc1.cpp
+++ b/services/surfaceflinger/SurfaceFlinger_hwc1.cpp
@@ -110,6 +110,7 @@
// ---------------------------------------------------------------------------
int64_t SurfaceFlinger::vsyncPhaseOffsetNs;
int64_t SurfaceFlinger::sfVsyncPhaseOffsetNs;
+bool SurfaceFlinger::useContextPriority;
SurfaceFlinger::SurfaceFlinger()
: BnSurfaceComposer(),
@@ -154,6 +155,9 @@
ALOGI("SurfaceFlinger is starting");
+ useContextPriority = getBool< ISurfaceFlingerConfigs,
+ &ISurfaceFlingerConfigs::useContextPriority>(false);
+
char value[PROPERTY_VALUE_MAX];
property_get("ro.bq.gpu_to_cpu_unsupported", value, "0");
@@ -2987,9 +2991,8 @@
void SurfaceFlinger::appendSfConfigString(String8& result) const
{
result.append(" [sf");
-#ifdef HAS_CONTEXT_PRIORITY
- result.append(" HAS_CONTEXT_PRIORITY");
-#endif
+ result.appendFormat(" HAS_CONTEXT_PRIORITY=%d", useContextPriority);
+
#ifdef NEVER_DEFAULT_TO_ASYNC_MODE
result.append(" NEVER_DEFAULT_TO_ASYNC_MODE");
#endif