@@ -57,6 +57,24 @@ class IAVsyncCallback : public hwcomposer::VsyncCallback {
5757 hwc2_function_pointer_t hook_;
5858};
5959
60+ class IAVsyncPeriodCallback : public hwcomposer ::VsyncPeriodCallback {
61+ public:
62+ IAVsyncPeriodCallback (hwc2_callback_data_t data, hwc2_function_pointer_t hook)
63+ : data_(data), hook_(hook) {
64+ }
65+
66+ void Callback (uint32_t display, int64_t timestamp, uint32_t vsyncPeriodNanos) {
67+ if (hook_ != NULL ) {
68+ auto hook = reinterpret_cast <HWC2_PFN_VSYNC_2_4>(hook_);
69+ hook (data_, display, timestamp, vsyncPeriodNanos);
70+ }
71+ }
72+
73+ private:
74+ hwc2_callback_data_t data_;
75+ hwc2_function_pointer_t hook_;
76+ };
77+
6078class IARefreshCallback : public hwcomposer ::RefreshCallback {
6179 public:
6280 IARefreshCallback (hwc2_callback_data_t data, hwc2_function_pointer_t hook)
@@ -335,6 +353,15 @@ HWC2::Error IAHWC2::RegisterCallback(int32_t descriptor,
335353
336354 break ;
337355 }
356+ case HWC2::Callback::Vsync_2_4: {
357+ primary_display_.RegisterVsyncPeriodCallback (data, function);
358+ for (size_t i = 0 ; i < size; ++i) {
359+ IAHWC2::HwcDisplay *display = extended_displays_.at (i).get ();
360+ display->RegisterVsyncPeriodCallback (data, function);
361+ }
362+
363+ break ;
364+ }
338365 case HWC2::Callback::Refresh: {
339366 primary_display_.RegisterRefreshCallback (data, function);
340367 for (size_t i = 0 ; i < size; ++i) {
@@ -425,6 +452,19 @@ HWC2::Error IAHWC2::HwcDisplay::RegisterVsyncCallback(
425452 return HWC2::Error::None;
426453}
427454
455+ HWC2::Error IAHWC2::HwcDisplay::RegisterVsyncPeriodCallback (
456+ hwc2_callback_data_t data, hwc2_function_pointer_t func) {
457+ supported (__func__);
458+ auto callback = std::make_shared<IAVsyncPeriodCallback>(data, func);
459+ int ret = display_->RegisterVsyncPeriodCallback (std::move (callback),
460+ static_cast <int >(handle_));
461+ if (ret) {
462+ ALOGE (" Failed to register callback d=%" PRIu64 " ret=%d" , handle_, ret);
463+ return HWC2::Error::BadDisplay;
464+ }
465+ return HWC2::Error::None;
466+ }
467+
428468HWC2::Error IAHWC2::HwcDisplay::RegisterRefreshCallback (
429469 hwc2_callback_data_t data, hwc2_function_pointer_t func) {
430470 supported (__func__);
@@ -815,6 +855,25 @@ HWC2::Error IAHWC2::HwcDisplay::SetActiveConfig(hwc2_config_t config) {
815855 return HWC2::Error::None;
816856}
817857
858+ HWC2::Error IAHWC2::HwcDisplay::SetActiveConfigWithConstraints (
859+ hwc2_config_t config,
860+ hwc_vsync_period_change_constraints_t * vsyncPeriodChangeConstraints,
861+ hwc_vsync_period_change_timeline_t * outTimeline
862+ ) {
863+ supported (__func__);
864+ return SetActiveConfig (config);
865+ }
866+
867+ HWC2::Error IAHWC2::HwcDisplay::GetDisplayVsyncPeriod (hwc2_vsync_period_t * outVsyncPeriod) {
868+ supported (__func__);
869+ // *outVsyncPeriod = 16666667;
870+ // return HWC2::Error::None;
871+ if (display_->GetDisplayVsyncPeriod (outVsyncPeriod))
872+ return HWC2::Error::None;
873+ else
874+ return HWC2::Error::BadConfig;
875+ }
876+
818877HWC2::Error IAHWC2::HwcDisplay::SetClientTarget (buffer_handle_t target,
819878 int32_t acquire_fence,
820879 int32_t dataspace,
@@ -951,6 +1010,11 @@ HWC2::Error IAHWC2::HwcDisplay::SetVsyncEnabled(int32_t enabled) {
9511010 return HWC2::Error::None;
9521011}
9531012
1013+ HWC2::Error IAHWC2::HwcDisplay::SetDisplayBrightness (float brightness) {
1014+ supported (__func__);
1015+ return HWC2::Error::None;
1016+ }
1017+
9541018HWC2::Error IAHWC2::HwcDisplay::ValidateDisplay (uint32_t *num_types,
9551019 uint32_t *num_requests) {
9561020 std::map<uint32_t , hwc2_layer_t > z_map;
@@ -1439,6 +1503,16 @@ hwc2_function_pointer_t IAHWC2::HookDevGetFunction(struct hwc2_device * /*dev*/,
14391503 return ToHook<HWC2_PFN_SET_ACTIVE_CONFIG>(
14401504 DisplayHook<decltype (&HwcDisplay::SetActiveConfig),
14411505 &HwcDisplay::SetActiveConfig, hwc2_config_t >);
1506+ case HWC2::FunctionDescriptor::SetActiveConfigWithConstraints:
1507+ return ToHook<HWC2_PFN_SET_ACTIVE_CONFIG_WITH_CONSTRAINTS>(
1508+ DisplayHook<decltype (&HwcDisplay::SetActiveConfigWithConstraints),
1509+ &HwcDisplay::SetActiveConfigWithConstraints, hwc2_config_t ,
1510+ hwc_vsync_period_change_constraints_t *,
1511+ hwc_vsync_period_change_timeline_t *>);
1512+ case HWC2::FunctionDescriptor::GetDisplayVsyncPeriod:
1513+ return ToHook<HWC2_PFN_GET_DISPLAY_VSYNC_PERIOD>(
1514+ DisplayHook<decltype (&HwcDisplay::GetDisplayVsyncPeriod),
1515+ &HwcDisplay::GetDisplayVsyncPeriod, hwc2_vsync_period_t *>);
14421516 case HWC2::FunctionDescriptor::SetClientTarget:
14431517 return ToHook<HWC2_PFN_SET_CLIENT_TARGET>(DisplayHook<
14441518 decltype (&HwcDisplay::SetClientTarget), &HwcDisplay::SetClientTarget,
@@ -1473,6 +1547,10 @@ hwc2_function_pointer_t IAHWC2::HookDevGetFunction(struct hwc2_device * /*dev*/,
14731547 return ToHook<HWC2_PFN_SET_VSYNC_ENABLED>(
14741548 DisplayHook<decltype (&HwcDisplay::SetVsyncEnabled),
14751549 &HwcDisplay::SetVsyncEnabled, int32_t >);
1550+ case HWC2::FunctionDescriptor::SetDisplayBrightness:
1551+ return ToHook<HWC2_PFN_SET_DISPLAY_BRIGHTNESS>(
1552+ DisplayHook<decltype (&HwcDisplay::SetDisplayBrightness),
1553+ &HwcDisplay::SetDisplayBrightness, float >);
14761554 case HWC2::FunctionDescriptor::ValidateDisplay:
14771555 return ToHook<HWC2_PFN_VALIDATE_DISPLAY>(
14781556 DisplayHook<decltype (&HwcDisplay::ValidateDisplay),
0 commit comments