summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHarrison Lingren <hlingren@google.com>2020-07-01 17:51:18 +0000
committerAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>2020-07-01 17:51:18 +0000
commitf015b568b581ac2decb91f5218abc00cb541bd3e (patch)
tree41fc518d81e56956e90ac906833f9f86fc6f262a
parente405305ac94d2874072c966f762b99b1043b26ee (diff)
parentb69900fa73f2f88226b02aa161bb2a0994995466 (diff)
downloadplatform_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.cpp18
-rw-r--r--sdm/libs/hwc2/hwc_callbacks.h6
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