diff --git a/configstore/1.0/ISurfaceFlingerConfigs.hal b/configstore/1.0/ISurfaceFlingerConfigs.hal index f9a49ce47e..58cb9f1b7f 100644 --- a/configstore/1.0/ISurfaceFlingerConfigs.hal +++ b/configstore/1.0/ISurfaceFlingerConfigs.hal @@ -70,4 +70,10 @@ interface ISurfaceFlingerConfigs { * TARGET_HAS_HDR_DISPLAY to true in BoardConfig.mk */ hasHDRDisplay() generates (OptionalBool value); + + /* + * Specify the offset in nanoseconds to add to vsync time when timestamping + * present fences. + */ + presentTimeOffsetFromVSyncNs() generates(OptionalInt64 value); }; diff --git a/configstore/1.0/default/SurfaceFlingerConfigs.cpp b/configstore/1.0/default/SurfaceFlingerConfigs.cpp index 035479cb89..86e9b357b8 100644 --- a/configstore/1.0/default/SurfaceFlingerConfigs.cpp +++ b/configstore/1.0/default/SurfaceFlingerConfigs.cpp @@ -69,6 +69,16 @@ Return SurfaceFlingerConfigs::hasHDRDisplay(hasHDRDisplay_cb _hidl_cb) { return Void(); } +Return SurfaceFlingerConfigs::presentTimeOffsetFromVSyncNs(presentTimeOffsetFromVSyncNs_cb _hidl_cb) { +#ifdef PRESENT_TIME_OFFSET_FROM_VSYNC_NS + _hidl_cb({true, PRESENT_TIME_OFFSET_FROM_VSYNC_NS}); + LOG(INFO) << "SurfaceFlinger presentTimeStampOffsetNs = " << PRESENT_TIME_OFFSET_FROM_VSYNC_NS; +#else + _hidl_cb({false, 0}); +#endif + return Void(); +} + // Methods from ::android::hidl::base::V1_0::IBase follow. ISurfaceFlingerConfigs* HIDL_FETCH_ISurfaceFlingerConfigs(const char* /* name */) { diff --git a/configstore/1.0/default/SurfaceFlingerConfigs.h b/configstore/1.0/default/SurfaceFlingerConfigs.h index aa7fb8bbeb..837838358f 100644 --- a/configstore/1.0/default/SurfaceFlingerConfigs.h +++ b/configstore/1.0/default/SurfaceFlingerConfigs.h @@ -30,6 +30,7 @@ struct SurfaceFlingerConfigs : public ISurfaceFlingerConfigs { Return useContextPriority(useContextPriority_cb _hidl_cb) override; Return hasWideColorDisplay(hasWideColorDisplay_cb _hidl_cb) override; Return hasHDRDisplay(hasHDRDisplay_cb _hidl_cb) override; + Return presentTimeOffsetFromVSyncNs(presentTimeOffsetFromVSyncNs_cb _hidl_cb) override; // Methods from ::android::hidl::base::V1_0::IBase follow. diff --git a/configstore/1.0/default/surfaceflinger.mk b/configstore/1.0/default/surfaceflinger.mk index 8ee3686c27..d824072375 100644 --- a/configstore/1.0/default/surfaceflinger.mk +++ b/configstore/1.0/default/surfaceflinger.mk @@ -29,3 +29,8 @@ ifeq ($(TARGET_HAS_HDR_DISPLAY),true) LOCAL_CFLAGS += -DHAS_HDR_DISPLAY endif +ifneq ($(PRESENT_TIME_OFFSET_FROM_VSYNC_NS),) + LOCAL_CFLAGS += -DPRESENT_TIME_OFFSET_FROM_VSYNC_NS=$(PRESENT_TIME_OFFSET_FROM_VSYNC_NS) +else + LOCAL_CFLAGS += -DPRESENT_TIME_OFFSET_FROM_VSYNC_NS=0 +endif