drm_hwcomposer: Add DrmEventListener worker

This patch adds a worker which listens to drm events. If the
drm event has a handler associated with it, the listener will
call the handler.

BUG=chrome-os-partner:41682
TEST=Tested on ryu with DP

Change-Id: I5d691d191425604766a00be3e72111095d025d06
Signed-off-by: Sean Paul <seanpaul@chromium.org>
diff --git a/drmresources.cpp b/drmresources.cpp
index 80e61ec..81381c3 100644
--- a/drmresources.cpp
+++ b/drmresources.cpp
@@ -19,6 +19,7 @@
 #include "drmconnector.h"
 #include "drmcrtc.h"
 #include "drmencoder.h"
+#include "drmeventlistener.h"
 #include "drmplane.h"
 #include "drmresources.h"
 
@@ -33,7 +34,11 @@
 
 namespace android {
 
-DrmResources::DrmResources() : compositor_(this) {
+DrmResources::DrmResources() : compositor_(this), event_listener_(this) {
+}
+
+DrmResources::~DrmResources() {
+  event_listener_.Exit();
 }
 
 int DrmResources::Init() {
@@ -194,6 +199,12 @@
   if (ret)
     return ret;
 
+  ret = event_listener_.Init();
+  if (ret) {
+    ALOGE("Can't initialize event listener %d", ret);
+    return ret;
+  }
+
   for (auto &conn : connectors_) {
     ret = CreateDisplayPipe(conn.get());
     if (ret) {
@@ -363,6 +374,10 @@
   return &compositor_;
 }
 
+DrmEventListener *DrmResources::event_listener() {
+  return &event_listener_;
+}
+
 int DrmResources::GetProperty(uint32_t obj_id, uint32_t obj_type,
                               const char *prop_name, DrmProperty *property) {
   drmModeObjectPropertiesPtr props;