drm_hwcomposer: Add support for VSYNC_2_4 callback

Increase composer@2.4 implemented API coverage.

Signed-off-by: Roman Stratiienko <roman.o.stratiienko@globallogic.com>
diff --git a/DrmHwcTwo.cpp b/DrmHwcTwo.cpp
index b7e20f0..10177e9 100644
--- a/DrmHwcTwo.cpp
+++ b/DrmHwcTwo.cpp
@@ -202,6 +202,12 @@
       vsync_callback_ = std::make_pair(HWC2_PFN_VSYNC(function), data);
       break;
     }
+#if PLATFORM_SDK_VERSION > 29
+    case HWC2::Callback::Vsync_2_4: {
+      vsync_2_4_callback_ = std::make_pair(HWC2_PFN_VSYNC_2_4(function), data);
+      break;
+    }
+#endif
     default:
       break;
   }
@@ -279,10 +285,19 @@
   }
 
   ret = vsync_worker_.Init(drm_, display, [this](int64_t timestamp) {
-    /* vsync callback */
     const std::lock_guard<std::mutex> lock(hwc2_->callback_lock_);
-    if (hwc2_->vsync_callback_.first != nullptr &&
-        hwc2_->vsync_callback_.second != nullptr) {
+    /* vsync callback */
+#if PLATFORM_SDK_VERSION > 29
+    if (hwc2_->vsync_2_4_callback_.first != nullptr &&
+        hwc2_->vsync_2_4_callback_.second != nullptr) {
+      hwc2_vsync_period_t period_ns{};
+      GetDisplayVsyncPeriod(&period_ns);
+      hwc2_->vsync_2_4_callback_.first(hwc2_->vsync_2_4_callback_.second,
+                                       handle_, timestamp, period_ns);
+    } else
+#endif
+        if (hwc2_->vsync_callback_.first != nullptr &&
+            hwc2_->vsync_callback_.second != nullptr) {
       hwc2_->vsync_callback_.first(hwc2_->vsync_callback_.second, handle_,
                                    timestamp);
     }