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 78052600d21c05f49392cec9d9cff1ff19d1100a..64c56a4311d9b09881a89a8acd46186c30a6e0b8 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 9a11b988963256b6d422822646831bd39dbc7b35..b4786696e0713b8d6836926b86d5db7afd2b62c5 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();