drm_hwcomposer: Add composition type to DrmComposition

This allows us to have different types of compositions. This will
enable injection of non-frame related compositions such as dpms
and mode.

Change-Id: Ia62421c114c0c6bebccef3ce6ae936366b6aafe2
Signed-off-by: Sean Paul <seanpaul@chromium.org>
diff --git a/drmdisplaycompositor.cpp b/drmdisplaycompositor.cpp
index 2b4b4df..2a11ee7 100644
--- a/drmdisplaycompositor.cpp
+++ b/drmdisplaycompositor.cpp
@@ -93,8 +93,15 @@
 
 int DrmDisplayCompositor::QueueComposition(
     std::unique_ptr<DrmDisplayComposition> composition) {
-  if (composition->GetCompositionLayers()->empty())
+  switch (composition->type()) {
+  case DRM_COMPOSITION_TYPE_FRAME:
+    break;
+  case DRM_COMPOSITION_TYPE_EMPTY:
     return 0;
+  default:
+    ALOGE("Unknown composition type %d/%d", composition->type(), display_);
+    return -ENOENT;
+  }
 
   int ret = pthread_mutex_lock(&lock_);
   if (ret) {
@@ -206,12 +213,19 @@
     return ret;
   }
 
-  ret = ApplyFrame(composition.get());
-  if (ret) {
-    ALOGE("Composite failed for display %d", display_);
-    return ret;
+  switch (composition->type()) {
+  case DRM_COMPOSITION_TYPE_FRAME:
+    ret = ApplyFrame(composition.get());
+    if (ret) {
+      ALOGE("Composite failed for display %d", display_);
+      return ret;
+    }
+    ++dump_frames_composited_;
+    break;
+  default:
+    ALOGE("Unknown composition type %d", composition->type());
+    return -EINVAL;
   }
-  ++dump_frames_composited_;
 
   if (active_composition_)
     active_composition_->FinishComposition();