diff --git a/drm/VSyncWorker.cpp b/drm/VSyncWorker.cpp
index c120af6..6123e5c 100644
--- a/drm/VSyncWorker.cpp
+++ b/drm/VSyncWorker.cpp
@@ -78,6 +78,12 @@
   return last_vsync_timestamp_;
 }
 
+void VSyncWorker::SetTimestampCallback(
+    std::optional<VsyncTimestampCallback> &&callback) {
+  const std::lock_guard<std::mutex> lock(mutex_);
+  callback_ = std::move(callback);
+}
+
 void VSyncWorker::StopThread() {
   {
     const std::lock_guard<std::mutex> lock(mutex_);
@@ -173,6 +179,7 @@
     }
 
     decltype(callbacks_.out_event) callback;
+    std::optional<VsyncTimestampCallback> vsync_callback;
 
     {
       const std::lock_guard<std::mutex> lock(mutex_);
@@ -182,6 +189,11 @@
       if (enable_vsync_timestamps_) {
         last_vsync_timestamp_ = timestamp;
       }
+      vsync_callback = callback_;
+    }
+
+    if (vsync_callback) {
+      vsync_callback.value()(timestamp, vsync_period_ns_);
     }
 
     if (callback)
diff --git a/drm/VSyncWorker.h b/drm/VSyncWorker.h
index f0367ae..f032d79 100644
--- a/drm/VSyncWorker.h
+++ b/drm/VSyncWorker.h
@@ -32,6 +32,9 @@
 
 class VSyncWorker {
  public:
+  using VsyncTimestampCallback = std::function<void(int64_t /*timestamp*/,
+                                                    uint32_t /*period*/)>;
+
   ~VSyncWorker() = default;
 
   auto static CreateInstance(std::shared_ptr<DrmDisplayPipeline> &pipe,
@@ -43,6 +46,9 @@
   // Set the expected vsync period.
   void SetVsyncPeriodNs(uint32_t vsync_period_ns);
 
+  // Set or clear a callback to be fired on vsync.
+  void SetTimestampCallback(std::optional<VsyncTimestampCallback> &&callback);
+
   // Enable vsync timestamp tracking. GetLastVsyncTimestamp will return 0 if
   // vsync tracking is disabled, or if no vsync has happened since it was
   // enabled.
@@ -74,6 +80,7 @@
   uint32_t vsync_period_ns_ = kDefaultVSPeriodNs;
   bool enable_vsync_timestamps_ = false;
   uint32_t last_vsync_timestamp_ = 0;
+  std::optional<VsyncTimestampCallback> callback_;
 
   std::condition_variable cv_;
   std::thread vswt_;
diff --git a/hwc2_device/HwcDisplay.cpp b/hwc2_device/HwcDisplay.cpp
index 8d6b0a3..5dff79c 100644
--- a/hwc2_device/HwcDisplay.cpp
+++ b/hwc2_device/HwcDisplay.cpp
@@ -318,11 +318,6 @@
       .out_event =
           [this](int64_t timestamp) {
             const std::unique_lock lock(hwc_->GetResMan().GetMainLock());
-            if (vsync_event_en_) {
-              uint32_t period_ns{};
-              GetDisplayVsyncPeriod(&period_ns);
-              hwc_->SendVsyncEventToClient(handle_, timestamp, period_ns);
-            }
             if (!vsync_event_en_) {
               vsync_worker_->VSyncControl(false);
             }
@@ -1067,8 +1062,18 @@
   }
 
   vsync_event_en_ = HWC2_VSYNC_ENABLE == enabled;
+
   if (vsync_event_en_) {
+    DrmHwc *hwc = hwc_;
+    hwc2_display_t id = handle_;
+    // Callback will be called from the vsync thread.
+    auto callback = [hwc, id](int64_t timestamp, uint32_t period_ns) {
+      hwc->SendVsyncEventToClient(id, timestamp, period_ns);
+    };
+    vsync_worker_->SetTimestampCallback(callback);
     vsync_worker_->VSyncControl(true);
+  } else {
+    vsync_worker_->SetTimestampCallback(std::nullopt);
   }
   return HWC2::Error::None;
 }
