From c8e387edfcead55b6e6fb1d05db279c264b644fa Mon Sep 17 00:00:00 2001 From: Fabien Sanglard Date: Fri, 10 Mar 2017 10:30:28 -0800 Subject: [PATCH] Use configStore for maxVirtualDisplay Size Test: Manual and AUPT Change-Id: I17ec13f782a7c7c693d84d11c9b5e87624ee71d0 --- services/surfaceflinger/Android.mk | 6 ------ services/surfaceflinger/DisplayHardware/HWComposer.cpp | 10 +++++----- services/surfaceflinger/SurfaceFlinger.cpp | 6 ++++++ services/surfaceflinger/SurfaceFlinger.h | 5 ++++- services/surfaceflinger/SurfaceFlinger_hwc1.cpp | 14 ++++++++++---- 5 files changed, 25 insertions(+), 16 deletions(-) diff --git a/services/surfaceflinger/Android.mk b/services/surfaceflinger/Android.mk index 3aab4cfbda..1b13ea9fed 100644 --- a/services/surfaceflinger/Android.mk +++ b/services/surfaceflinger/Android.mk @@ -73,12 +73,6 @@ ifeq ($(TARGET_RUNNING_WITHOUT_SYNC_FRAMEWORK),true) LOCAL_CFLAGS += -DRUNNING_WITHOUT_SYNC_FRAMEWORK endif -ifneq ($(MAX_VIRTUAL_DISPLAY_DIMENSION),) - LOCAL_CFLAGS += -DMAX_VIRTUAL_DISPLAY_DIMENSION=$(MAX_VIRTUAL_DISPLAY_DIMENSION) -else - LOCAL_CFLAGS += -DMAX_VIRTUAL_DISPLAY_DIMENSION=0 -endif - LOCAL_CFLAGS += -fvisibility=hidden -Werror=format LOCAL_HEADER_LIBRARIES := \ diff --git a/services/surfaceflinger/DisplayHardware/HWComposer.cpp b/services/surfaceflinger/DisplayHardware/HWComposer.cpp index 6644bd9fe3..23b7a45772 100644 --- a/services/surfaceflinger/DisplayHardware/HWComposer.cpp +++ b/services/surfaceflinger/DisplayHardware/HWComposer.cpp @@ -267,12 +267,12 @@ status_t HWComposer::allocateVirtualDisplay(uint32_t width, uint32_t height, return NO_MEMORY; } - if (MAX_VIRTUAL_DISPLAY_DIMENSION != 0 && - (width > MAX_VIRTUAL_DISPLAY_DIMENSION || - height > MAX_VIRTUAL_DISPLAY_DIMENSION)) { + if (SurfaceFlinger::maxVirtualDisplaySize != 0 && + (width > SurfaceFlinger::maxVirtualDisplaySize || + height > SurfaceFlinger::maxVirtualDisplaySize)) { ALOGE("createVirtualDisplay: Can't create a virtual display with" - " a dimension > %u (tried %u x %u)", - MAX_VIRTUAL_DISPLAY_DIMENSION, width, height); + " a dimension > %" PRIu64 " (tried %u x %u)", + SurfaceFlinger::maxVirtualDisplaySize, width, height); return INVALID_OPERATION; } diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp index 5f1d16f214..cfde375d0a 100644 --- a/services/surfaceflinger/SurfaceFlinger.cpp +++ b/services/surfaceflinger/SurfaceFlinger.cpp @@ -99,6 +99,7 @@ EGLAPI const char* eglQueryStringImplementationANDROID(EGLDisplay dpy, EGLint na namespace android { + using namespace android::hardware::configstore; using namespace android::hardware::configstore::V1_0; @@ -115,6 +116,7 @@ int64_t SurfaceFlinger::sfVsyncPhaseOffsetNs; bool SurfaceFlinger::useContextPriority; int64_t SurfaceFlinger::dispSyncPresentTimeOffset; bool SurfaceFlinger::useHwcForRgbToYuv; +uint64_t SurfaceFlinger::maxVirtualDisplaySize; SurfaceFlinger::SurfaceFlinger() : BnSurfaceComposer(), @@ -176,6 +178,9 @@ SurfaceFlinger::SurfaceFlinger() useHwcForRgbToYuv = getBool< ISurfaceFlingerConfigs, &ISurfaceFlingerConfigs::useHwcForRGBtoYUV>(false); + maxVirtualDisplaySize = getUInt64(0); + // debugging stuff... char value[PROPERTY_VALUE_MAX]; @@ -3243,6 +3248,7 @@ void SurfaceFlinger::appendSfConfigString(String8& result) const result.appendFormat(" PRESENT_TIME_OFFSET=%" PRId64 , dispSyncPresentTimeOffset); result.appendFormat(" FORCE_HWC_FOR_RBG_TO_YUV=%d", useHwcForRgbToYuv); + result.appendFormat(" MAX_VIRT_DISPLAY_DIM=%" PRIu64, maxVirtualDisplaySize); result.append("]"); } diff --git a/services/surfaceflinger/SurfaceFlinger.h b/services/surfaceflinger/SurfaceFlinger.h index e6ccc41391..85b6f2a15c 100644 --- a/services/surfaceflinger/SurfaceFlinger.h +++ b/services/surfaceflinger/SurfaceFlinger.h @@ -105,7 +105,6 @@ class SurfaceFlinger : public BnSurfaceComposer, { public: - // This is the phase offset in nanoseconds of the software vsync event // relative to the vsync event reported by HWComposer. The software vsync // event is when SurfaceFlinger and Choreographer-based applications run each @@ -142,6 +141,10 @@ public: // GL composition. static bool useHwcForRgbToYuv; + // Maximum dimension supported by HWC for virtual display. + // Equal to min(max_height, max_width). + static uint64_t maxVirtualDisplaySize; + static char const* getServiceName() ANDROID_API { return "SurfaceFlinger"; } diff --git a/services/surfaceflinger/SurfaceFlinger_hwc1.cpp b/services/surfaceflinger/SurfaceFlinger_hwc1.cpp index 6f6c08be29..c184cd27ad 100644 --- a/services/surfaceflinger/SurfaceFlinger_hwc1.cpp +++ b/services/surfaceflinger/SurfaceFlinger_hwc1.cpp @@ -114,6 +114,7 @@ int64_t SurfaceFlinger::sfVsyncPhaseOffsetNs; bool SurfaceFlinger::useContextPriority; int64_t SurfaceFlinger::dispSyncPresentTimeOffset; bool SurfaceFlinger::useHwcForRgbToYuv; +uint64_t SurfaceFlinger::maxVirtualDisplaySize; SurfaceFlinger::SurfaceFlinger() : BnSurfaceComposer(), @@ -150,13 +151,17 @@ SurfaceFlinger::SurfaceFlinger() mLastSwapTime(0), mNumLayers(0) { + + ALOGI("SurfaceFlinger is starting"); + vsyncPhaseOffsetNs = getInt64< ISurfaceFlingerConfigs, &ISurfaceFlingerConfigs::vsyncEventPhaseOffsetNs>(1000000); sfVsyncPhaseOffsetNs = getInt64< ISurfaceFlingerConfigs, &ISurfaceFlingerConfigs::vsyncSfEventPhaseOffsetNs>(1000000); - ALOGI("SurfaceFlinger is starting"); + maxVirtualDisplaySize = getUInt64(0); useContextPriority = getBool< ISurfaceFlingerConfigs, &ISurfaceFlingerConfigs::useContextPriority>(false); @@ -1701,9 +1706,9 @@ void SurfaceFlinger::handleTransactionLocked(uint32_t transactionFlags) ALOGE_IF(status != NO_ERROR, "Unable to query height (%d)", status); if (mUseHwcVirtualDisplays && - (MAX_VIRTUAL_DISPLAY_DIMENSION == 0 || - (width <= MAX_VIRTUAL_DISPLAY_DIMENSION && - height <= MAX_VIRTUAL_DISPLAY_DIMENSION))) { + (SurfaceFlinger::maxVirtualDisplaySize == 0 || + (width <= static_cast(SurfaceFlinger::maxVirtualDisplaySize) && + height <= static_cast(SurfaceFlinger::maxVirtualDisplaySize)))) { hwcDisplayId = allocateHwcDisplayId(state.type); } @@ -3015,6 +3020,7 @@ void SurfaceFlinger::appendSfConfigString(String8& result) const result.appendFormat(" PRESENT_TIME_OFFSET=%" PRId64, dispSyncPresentTimeOffset); result.appendFormat(" FORCE_HWC_FOR_RBG_TO_YUV=%d", useHwcForRgbToYuv); + result.appendFormat(" MAX_VIRT_DISPLAY_DIM=%" PRIu64, maxVirtualDisplaySize); result.append("]"); } -- 2.11.0