drm_hwcomposer: Use hw planes + drm atomic interface

Replace the basic, single overlay, modeset/flip implementation with
a new Compositor instantiation for drm. The new compositor uses the
drm atomic interface to composite layers to multiple hardware planes.

This change also introduces an importer argument in
Compositor::CreateComposition. By specifying the importer, Compositor
instances are responsible for cleaning up buffer objects submitted
via Composition::AddLayer.

Change-Id: Ic292829cd93475d754294b00428de132301092b2
Signed-off-by: Sean Paul <seanpaul@chromium.org>
diff --git a/drmresources.cpp b/drmresources.cpp
index 3da0f04..3429abc 100644
--- a/drmresources.cpp
+++ b/drmresources.cpp
@@ -33,7 +33,7 @@
 
 namespace android {
 
-DrmResources::DrmResources() : fd_(-1), mode_id_(0) {
+DrmResources::DrmResources() : fd_(-1), mode_id_(0), compositor_(this) {
 }
 
 DrmResources::~DrmResources() {
@@ -235,7 +235,7 @@
   if (ret)
     return ret;
 
-  return 0;
+  return compositor_.Init();
 }
 
 int DrmResources::fd() const {
@@ -383,6 +383,10 @@
   return 0;
 }
 
+DrmCompositor *DrmResources::compositor() {
+  return &compositor_;
+}
+
 int DrmResources::GetProperty(uint32_t obj_id, uint32_t obj_type,
                               const char *prop_name, DrmProperty *property) {
   drmModeObjectPropertiesPtr props;