diff options
| author | Harrison Lingren <hlingren@google.com> | 2020-07-01 17:51:18 +0000 |
|---|---|---|
| committer | Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> | 2020-07-01 17:51:18 +0000 |
| commit | f015b568b581ac2decb91f5218abc00cb541bd3e (patch) | |
| tree | 41fc518d81e56956e90ac906833f9f86fc6f262a | |
| parent | e405305ac94d2874072c966f762b99b1043b26ee (diff) | |
| parent | b69900fa73f2f88226b02aa161bb2a0994995466 (diff) | |
| download | platform_hardware_qcom_sdm845_display-f015b568b581ac2decb91f5218abc00cb541bd3e.tar.gz platform_hardware_qcom_sdm845_display-f015b568b581ac2decb91f5218abc00cb541bd3e.tar.bz2 platform_hardware_qcom_sdm845_display-f015b568b581ac2decb91f5218abc00cb541bd3e.zip | |
Merge "hwc2: add locks for callback functions" into rvc-dev am: fbed8adaff am: f04cf61a55 am: b69900fa73
Original change: https://googleplex-android-review.googlesource.com/c/platform/hardware/qcom/sdm845/display/+/11837781
Change-Id: I1799c706bb9b7b7d87a9cc971004d07cf61fd640
| -rw-r--r-- | sdm/libs/hwc2/hwc_callbacks.cpp | 18 | ||||
| -rw-r--r-- | sdm/libs/hwc2/hwc_callbacks.h | 6 |
2 files changed, 18 insertions, 6 deletions
diff --git a/sdm/libs/hwc2/hwc_callbacks.cpp b/sdm/libs/hwc2/hwc_callbacks.cpp index 48593f1e..806214b6 100644 --- a/sdm/libs/hwc2/hwc_callbacks.cpp +++ b/sdm/libs/hwc2/hwc_callbacks.cpp @@ -35,6 +35,7 @@ namespace sdm { HWC2::Error HWCCallbacks::Hotplug(hwc2_display_t display, HWC2::Connection state) { + std::lock_guard<std::mutex> hotplug_lock(hotplug_mutex_); if (!hotplug_) { return HWC2::Error::NoResources; } @@ -43,6 +44,7 @@ HWC2::Error HWCCallbacks::Hotplug(hwc2_display_t display, HWC2::Connection state } HWC2::Error HWCCallbacks::Refresh(hwc2_display_t display) { + std::lock_guard<std::mutex> refresh_lock(refresh_mutex_); if (!refresh_) { return HWC2::Error::NoResources; } @@ -51,6 +53,7 @@ HWC2::Error HWCCallbacks::Refresh(hwc2_display_t display) { } HWC2::Error HWCCallbacks::Vsync(hwc2_display_t display, int64_t timestamp) { + std::lock_guard<std::mutex> vsync_lock(vsync_mutex_); if (!vsync_) { return HWC2::Error::NoResources; } @@ -62,18 +65,21 @@ HWC2::Error HWCCallbacks::Vsync(hwc2_display_t display, int64_t timestamp) { HWC2::Error HWCCallbacks::Register(HWC2::Callback descriptor, hwc2_callback_data_t callback_data, hwc2_function_pointer_t pointer) { switch (descriptor) { - case HWC2::Callback::Hotplug: + case HWC2::Callback::Hotplug: { + std::lock_guard<std::mutex> hotplug_lock(hotplug_mutex_); hotplug_data_ = callback_data; hotplug_ = reinterpret_cast<HWC2_PFN_HOTPLUG>(pointer); - break; - case HWC2::Callback::Refresh: + } break; + case HWC2::Callback::Refresh: { + std::lock_guard<std::mutex> refresh_lock(refresh_mutex_); refresh_data_ = callback_data; refresh_ = reinterpret_cast<HWC2_PFN_REFRESH>(pointer); - break; - case HWC2::Callback::Vsync: + } break; + case HWC2::Callback::Vsync: { + std::lock_guard<std::mutex> vsync_lock(vsync_mutex_); vsync_data_ = callback_data; vsync_ = reinterpret_cast<HWC2_PFN_VSYNC>(pointer); - break; + } break; default: return HWC2::Error::BadParameter; } diff --git a/sdm/libs/hwc2/hwc_callbacks.h b/sdm/libs/hwc2/hwc_callbacks.h index d3f4e529..8cb60fcf 100644 --- a/sdm/libs/hwc2/hwc_callbacks.h +++ b/sdm/libs/hwc2/hwc_callbacks.h @@ -36,6 +36,8 @@ #undef HWC2_INCLUDE_STRINGIFICATION #undef HWC2_USE_CPP11 +#include <mutex> + namespace sdm { class HWCCallbacks { @@ -56,6 +58,10 @@ class HWCCallbacks { HWC2_PFN_HOTPLUG hotplug_ = nullptr; HWC2_PFN_REFRESH refresh_ = nullptr; HWC2_PFN_VSYNC vsync_ = nullptr; + + std::mutex hotplug_mutex_; + std::mutex refresh_mutex_; + std::mutex vsync_mutex_; }; } // namespace sdm |
