aboutsummaryrefslogtreecommitdiff
path: root/drm/UEventListener.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'drm/UEventListener.cpp')
-rw-r--r--drm/UEventListener.cpp36
1 files changed, 19 insertions, 17 deletions
diff --git a/drm/UEventListener.cpp b/drm/UEventListener.cpp
index b56b8e1..a05ec65 100644
--- a/drm/UEventListener.cpp
+++ b/drm/UEventListener.cpp
@@ -18,37 +18,37 @@
#include "UEventListener.h"
-#include <cerrno>
+#include <thread>
#include "utils/log.h"
-/* Originally defined in system/core/libsystem/include/system/graphics.h as
- * #define HAL_PRIORITY_URGENT_DISPLAY (-8)*/
-constexpr int kHalPriorityUrgentDisplay = -8;
-
namespace android {
-UEventListener::UEventListener()
- : Worker("uevent-listener", kHalPriorityUrgentDisplay){};
+auto UEventListener::CreateInstance() -> std::shared_ptr<UEventListener> {
+ auto uel = std::shared_ptr<UEventListener>(new UEventListener());
-int UEventListener::Init() {
- uevent_ = UEvent::CreateInstance();
- if (!uevent_) {
- return -ENODEV;
- }
+ uel->uevent_ = UEvent::CreateInstance();
+ if (!uel->uevent_)
+ return {};
+
+ std::thread(&UEventListener::ThreadFn, uel.get(), uel).detach();
- return InitWorker();
+ return uel;
}
-void UEventListener::Routine() {
+void UEventListener::ThreadFn(const std::shared_ptr<UEventListener> &uel) {
+ // TODO(nobody): Rework code to allow stopping the thread (low priority)
while (true) {
- auto uevent_str = uevent_->ReadNext();
+ if (uel.use_count() == 1)
+ break;
+
+ auto uevent_str = uel->uevent_->ReadNext();
if (!hotplug_handler_ || !uevent_str)
continue;
- bool drm_event = uevent_str->find("DEVTYPE=drm_minor") != std::string::npos;
- bool hotplug_event = uevent_str->find("HOTPLUG=1") != std::string::npos;
+ auto drm_event = uevent_str->find("DEVTYPE=drm_minor") != std::string::npos;
+ auto hotplug_event = uevent_str->find("HOTPLUG=1") != std::string::npos;
if (drm_event && hotplug_event) {
constexpr useconds_t kDelayAfterUeventUs = 200000;
@@ -58,5 +58,7 @@ void UEventListener::Routine() {
hotplug_handler_();
}
}
+
+ ALOGI("UEvent thread exit");
}
} // namespace android