hwc2: Register Composer 2.4 callbacks
Register SEAMLESS_POSSIBLE callback for Composer 2.4.
Change-Id: Iafbd37833df7d89e1d4d8fbc6efb3d2ba033dcee
diff --git a/sdm/libs/hwc2/hwc_callbacks.cpp b/sdm/libs/hwc2/hwc_callbacks.cpp
index 8085dcb..aec1d32 100644
--- a/sdm/libs/hwc2/hwc_callbacks.cpp
+++ b/sdm/libs/hwc2/hwc_callbacks.cpp
@@ -81,6 +81,16 @@
return HWC2::Error::None;
}
+HWC2::Error HWCCallbacks::SeamlessPossible(hwc2_display_t display) {
+ DTRACE_SCOPED();
+ if (!seamless_possible_) {
+ return HWC2::Error::NoResources;
+ }
+
+ seamless_possible_(seamless_possible_data_, display);
+ return HWC2::Error::None;
+}
+
HWC2::Error HWCCallbacks::Register(HWC2::Callback descriptor, hwc2_callback_data_t callback_data,
hwc2_function_pointer_t pointer) {
switch (descriptor) {
@@ -105,6 +115,10 @@
vsync_period_timing_changed_ =
reinterpret_cast<HWC2_PFN_VSYNC_PERIOD_TIMING_CHANGED>(pointer);
break;
+ case HWC2::Callback::SeamlessPossible:
+ seamless_possible_data_ = callback_data;
+ seamless_possible_ = reinterpret_cast<HWC2_PFN_SEAMLESS_POSSIBLE>(pointer);
+ break;
default:
return HWC2::Error::BadParameter;
}
diff --git a/sdm/libs/hwc2/hwc_callbacks.h b/sdm/libs/hwc2/hwc_callbacks.h
index baec40d..5e59550 100644
--- a/sdm/libs/hwc2/hwc_callbacks.h
+++ b/sdm/libs/hwc2/hwc_callbacks.h
@@ -56,6 +56,7 @@
HWC2::Error Vsync_2_4(hwc2_display_t display, int64_t timestamp, uint32_t period);
HWC2::Error VsyncPeriodTimingChanged(hwc2_display_t display,
hwc_vsync_period_change_timeline_t *updated_timeline);
+ HWC2::Error SeamlessPossible(hwc2_display_t display);
HWC2::Error Register(HWC2::Callback, hwc2_callback_data_t callback_data,
hwc2_function_pointer_t pointer);
void UpdateVsyncSource(hwc2_display_t from) {
@@ -74,12 +75,14 @@
hwc2_callback_data_t vsync_data_ = nullptr;
hwc2_callback_data_t vsync_2_4_data_ = nullptr;
hwc2_callback_data_t vsync_period_timing_changed_data_ = nullptr;
+ hwc2_callback_data_t seamless_possible_data_ = nullptr;
HWC2_PFN_HOTPLUG hotplug_ = nullptr;
HWC2_PFN_REFRESH refresh_ = nullptr;
HWC2_PFN_VSYNC vsync_ = nullptr;
HWC2_PFN_VSYNC_2_4 vsync_2_4_ = nullptr;
HWC2_PFN_VSYNC_PERIOD_TIMING_CHANGED vsync_period_timing_changed_ = nullptr;
+ HWC2_PFN_SEAMLESS_POSSIBLE seamless_possible_ = nullptr;
hwc2_display_t vsync_source_ = HWC_DISPLAY_PRIMARY; // hw vsync is active on this display
std::bitset<kNumDisplays> pending_refresh_; // Displays waiting to get refreshed
};