Loading services/surfaceflinger/Android.mk +2 −0 Original line number Diff line number Diff line Loading @@ -106,6 +106,7 @@ endif # [1] https://developer.android.com/studio/profile/systrace.html # [2] https://developer.android.com/training/testing/performance.html # These are left just for non-treble devices ifneq ($(VSYNC_EVENT_PHASE_OFFSET_NS),) LOCAL_CFLAGS += -DVSYNC_EVENT_PHASE_OFFSET_NS=$(VSYNC_EVENT_PHASE_OFFSET_NS) else Loading Loading @@ -137,6 +138,7 @@ LOCAL_SHARED_LIBRARIES := \ android.dvr.composer@1.0 \ android.hardware.graphics.allocator@2.0 \ android.hardware.graphics.composer@2.1 \ android.hardware.configstore@1.0 \ libcutils \ liblog \ libdl \ Loading services/surfaceflinger/SurfaceFlinger.cpp +22 −2 Original line number Diff line number Diff line Loading @@ -83,6 +83,8 @@ #include "RenderEngine/RenderEngine.h" #include <cutils/compiler.h> #include <android/hardware/configstore/1.0/ISurfaceFlingerConfigs.h> #define DISPLAY_COUNT 1 /* Loading @@ -95,6 +97,22 @@ EGLAPI const char* eglQueryStringImplementationANDROID(EGLDisplay dpy, EGLint na namespace android { using namespace android::hardware::configstore::V1_0; static sp<ISurfaceFlingerConfigs> getConfigs() { static sp<ISurfaceFlingerConfigs> configs = ISurfaceFlingerConfigs::getService(); return configs; } static int64_t getVsyncEventPhaseOffsetNs() { int64_t ret = 1000000; // default value getConfigs()->vsyncEventPhaseOffsetNs([&](OptionalInt64 value) { if (value.specified) ret = value.value; }); return ret; } // 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 Loading @@ -115,7 +133,7 @@ namespace android { // the latency will end up being an additional vsync period, and animations // will hiccup. Therefore, this latency should be tuned somewhat // conservatively (or at least with awareness of the trade-off being made). static const int64_t vsyncPhaseOffsetNs = VSYNC_EVENT_PHASE_OFFSET_NS; static int64_t vsyncPhaseOffsetNs = getVsyncEventPhaseOffsetNs(); // This is the phase offset at which SurfaceFlinger's composition runs. static const int64_t sfVsyncPhaseOffsetNs = SF_VSYNC_EVENT_PHASE_OFFSET_NS; Loading Loading @@ -502,6 +520,8 @@ void SurfaceFlinger::init() { ALOGI( "SurfaceFlinger's main thread ready to run. " "Initializing graphics H/W..."); ALOGI("Phase offest NS: %" PRId64 "", vsyncPhaseOffsetNs); { // Autolock scope Mutex::Autolock _l(mStateLock); Loading Loading @@ -682,7 +702,7 @@ status_t SurfaceFlinger::getDisplayConfigs(const sp<IBinder>& display, info.xdpi = xdpi; info.ydpi = ydpi; info.fps = 1e9 / hwConfig->getVsyncPeriod(); info.appVsyncOffset = VSYNC_EVENT_PHASE_OFFSET_NS; info.appVsyncOffset = vsyncPhaseOffsetNs; // This is how far in advance a buffer must be queued for // presentation at a given time. If you want a buffer to appear Loading Loading
services/surfaceflinger/Android.mk +2 −0 Original line number Diff line number Diff line Loading @@ -106,6 +106,7 @@ endif # [1] https://developer.android.com/studio/profile/systrace.html # [2] https://developer.android.com/training/testing/performance.html # These are left just for non-treble devices ifneq ($(VSYNC_EVENT_PHASE_OFFSET_NS),) LOCAL_CFLAGS += -DVSYNC_EVENT_PHASE_OFFSET_NS=$(VSYNC_EVENT_PHASE_OFFSET_NS) else Loading Loading @@ -137,6 +138,7 @@ LOCAL_SHARED_LIBRARIES := \ android.dvr.composer@1.0 \ android.hardware.graphics.allocator@2.0 \ android.hardware.graphics.composer@2.1 \ android.hardware.configstore@1.0 \ libcutils \ liblog \ libdl \ Loading
services/surfaceflinger/SurfaceFlinger.cpp +22 −2 Original line number Diff line number Diff line Loading @@ -83,6 +83,8 @@ #include "RenderEngine/RenderEngine.h" #include <cutils/compiler.h> #include <android/hardware/configstore/1.0/ISurfaceFlingerConfigs.h> #define DISPLAY_COUNT 1 /* Loading @@ -95,6 +97,22 @@ EGLAPI const char* eglQueryStringImplementationANDROID(EGLDisplay dpy, EGLint na namespace android { using namespace android::hardware::configstore::V1_0; static sp<ISurfaceFlingerConfigs> getConfigs() { static sp<ISurfaceFlingerConfigs> configs = ISurfaceFlingerConfigs::getService(); return configs; } static int64_t getVsyncEventPhaseOffsetNs() { int64_t ret = 1000000; // default value getConfigs()->vsyncEventPhaseOffsetNs([&](OptionalInt64 value) { if (value.specified) ret = value.value; }); return ret; } // 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 Loading @@ -115,7 +133,7 @@ namespace android { // the latency will end up being an additional vsync period, and animations // will hiccup. Therefore, this latency should be tuned somewhat // conservatively (or at least with awareness of the trade-off being made). static const int64_t vsyncPhaseOffsetNs = VSYNC_EVENT_PHASE_OFFSET_NS; static int64_t vsyncPhaseOffsetNs = getVsyncEventPhaseOffsetNs(); // This is the phase offset at which SurfaceFlinger's composition runs. static const int64_t sfVsyncPhaseOffsetNs = SF_VSYNC_EVENT_PHASE_OFFSET_NS; Loading Loading @@ -502,6 +520,8 @@ void SurfaceFlinger::init() { ALOGI( "SurfaceFlinger's main thread ready to run. " "Initializing graphics H/W..."); ALOGI("Phase offest NS: %" PRId64 "", vsyncPhaseOffsetNs); { // Autolock scope Mutex::Autolock _l(mStateLock); Loading Loading @@ -682,7 +702,7 @@ status_t SurfaceFlinger::getDisplayConfigs(const sp<IBinder>& display, info.xdpi = xdpi; info.ydpi = ydpi; info.fps = 1e9 / hwConfig->getVsyncPeriod(); info.appVsyncOffset = VSYNC_EVENT_PHASE_OFFSET_NS; info.appVsyncOffset = vsyncPhaseOffsetNs; // This is how far in advance a buffer must be queued for // presentation at a given time. If you want a buffer to appear Loading