From 8833aaa73a47f2e9c5b30b83acbd58c492d6f41c Mon Sep 17 00:00:00 2001 From: ShaoboFeng Date: Fri, 13 Oct 2023 16:29:07 +0800 Subject: [PATCH] fix hardware vsync in real machine --- .../drm_backend/display_device/drm_display.cpp | 18 +++++++++++++----- .../drm_backend/display_device/drm_display.h | 3 ++- 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/display_server/drivers/hal/drm_backend/display_device/drm_display.cpp b/display_server/drivers/hal/drm_backend/display_device/drm_display.cpp index 7805260..64c56a4 100644 --- a/display_server/drivers/hal/drm_backend/display_device/drm_display.cpp +++ b/display_server/drivers/hal/drm_backend/display_device/drm_display.cpp @@ -266,14 +266,22 @@ void DrmDisplay::OnVSync(uint32_t sequence, uint64_t timeStamp) cb = vSyncCallBack_; data = vsyncUserData_; } - + #ifdef ENABLE_HARDWARE_VSYNC + if (enableVsync_) { + if (cb != nullptr) { + cb(sequence, timeStamp, data); + } + if (sampleVsync > 0) { + int32_t fenceFd = -1; + Commit(&fenceFd); + sampleVsync--; + } + } +#else if (cb != nullptr) { cb(sequence, timeStamp, data); } - if (enableVsync_) { - int32_t fenceFd = -1; - Commit(&fenceFd); - } +#endif } int32_t DrmDisplay::SetDisplayVsyncEnabled(bool enabled) diff --git a/display_server/drivers/hal/drm_backend/display_device/drm_display.h b/display_server/drivers/hal/drm_backend/display_device/drm_display.h index 9a11b98..b478669 100644 --- a/display_server/drivers/hal/drm_backend/display_device/drm_display.h +++ b/display_server/drivers/hal/drm_backend/display_device/drm_display.h @@ -91,7 +91,8 @@ private: void *vsyncUserData_ = nullptr; // guarded by mutex_; bool vSyncCbEverReged_ = false; // guarded by mutex_; #ifdef ENABLE_HARDWARE_VSYNC - bool enableVsync_ = true; + int sampleVsync = 6; // same with MIN_SAMPLES_FOR_UPDATE in vsync_sampler.h + bool enableVsync_ = false; #endif // ENABLE_HARDWARE_VSYNC void InitReservedFb(); -- Gitee