drm_hwcomposer: move header files into source directory

... to improve navigation between source/header file.
Unnecessary dependencies also removed.

Signed-off-by: Roman Stratiienko <r.stratiienko@gmail.com>
Change-Id: I2c3bf993b8c5f356490433fd94e90011487a1276
diff --git a/platform/platform.cpp b/platform/platform.cpp
index b7a47c7..9fb91e7 100644
--- a/platform/platform.cpp
+++ b/platform/platform.cpp
@@ -17,10 +17,11 @@
 #define LOG_TAG "hwc-platform"
 
 #include "platform.h"
-#include "drmdevice.h"
 
 #include <log/log.h>
 
+#include "drm/drmdevice.h"
+
 namespace android {
 
 std::vector<DrmPlane *> Planner::GetUsablePlanes(
diff --git a/platform/platform.h b/platform/platform.h
new file mode 100644
index 0000000..e0befdb
--- /dev/null
+++ b/platform/platform.h
@@ -0,0 +1,161 @@
+/*
+ * Copyright (C) 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef ANDROID_DRM_PLATFORM_H_
+#define ANDROID_DRM_PLATFORM_H_
+
+#include <hardware/hardware.h>
+#include <hardware/hwcomposer.h>
+
+#include <map>
+#include <vector>
+
+#include "compositor/drmdisplaycomposition.h"
+#include "drmhwcomposer.h"
+
+namespace android {
+
+class DrmDevice;
+
+class Importer {
+ public:
+  virtual ~Importer() {
+  }
+
+  // Creates a platform-specific importer instance
+  static Importer *CreateInstance(DrmDevice *drm);
+
+  // Imports the buffer referred to by handle into bo.
+  //
+  // Note: This can be called from a different thread than ReleaseBuffer. The
+  //       implementation is responsible for ensuring thread safety.
+  virtual int ImportBuffer(buffer_handle_t handle, hwc_drm_bo_t *bo) = 0;
+
+  // Releases the buffer object (ie: does the inverse of ImportBuffer)
+  //
+  // Note: This can be called from a different thread than ImportBuffer. The
+  //       implementation is responsible for ensuring thread safety.
+  virtual int ReleaseBuffer(hwc_drm_bo_t *bo) = 0;
+
+  // Checks if importer can import the buffer.
+  virtual bool CanImportBuffer(buffer_handle_t handle) = 0;
+
+  // Convert platform-dependent buffer format to drm_hwc internal format.
+  virtual int ConvertBoInfo(buffer_handle_t handle, hwc_drm_bo_t *bo) = 0;
+};
+
+class Planner {
+ public:
+  class PlanStage {
+   public:
+    virtual ~PlanStage() {
+    }
+
+    virtual int ProvisionPlanes(std::vector<DrmCompositionPlane> *composition,
+                                std::map<size_t, DrmHwcLayer *> &layers,
+                                DrmCrtc *crtc,
+                                std::vector<DrmPlane *> *planes) = 0;
+
+   protected:
+    // Removes and returns the next available plane from planes
+    static DrmPlane *PopPlane(std::vector<DrmPlane *> *planes) {
+      if (planes->empty())
+        return NULL;
+      DrmPlane *plane = planes->front();
+      planes->erase(planes->begin());
+      return plane;
+    }
+
+    static int ValidatePlane(DrmPlane *plane, DrmHwcLayer *layer);
+
+    // Inserts the given layer:plane in the composition at the back
+    static int Emplace(std::vector<DrmCompositionPlane> *composition,
+                       std::vector<DrmPlane *> *planes,
+                       DrmCompositionPlane::Type type, DrmCrtc *crtc,
+                       std::pair<size_t, DrmHwcLayer *> layer) {
+      DrmPlane *plane = PopPlane(planes);
+      std::vector<DrmPlane *> unused_planes;
+      int ret = -ENOENT;
+      while (plane) {
+        ret = ValidatePlane(plane, layer.second);
+        if (!ret)
+          break;
+        if (!plane->zpos_property().is_immutable())
+          unused_planes.push_back(plane);
+        plane = PopPlane(planes);
+      }
+
+      if (!ret) {
+        composition->emplace_back(type, plane, crtc, layer.first);
+        planes->insert(planes->begin(), unused_planes.begin(),
+                       unused_planes.end());
+      }
+
+      return ret;
+    }
+  };
+
+  // Creates a planner instance with platform-specific planning stages
+  static std::unique_ptr<Planner> CreateInstance(DrmDevice *drm);
+
+  // Takes a stack of layers and provisions hardware planes for them. If the
+  // entire stack can't fit in hardware, FIXME
+  //
+  // @layers: a map of index:layer of layers to composite
+  // @primary_planes: a vector of primary planes available for this frame
+  // @overlay_planes: a vector of overlay planes available for this frame
+  //
+  // Returns: A tuple with the status of the operation (0 for success) and
+  //          a vector of the resulting plan (ie: layer->plane mapping).
+  std::tuple<int, std::vector<DrmCompositionPlane>> ProvisionPlanes(
+      std::map<size_t, DrmHwcLayer *> &layers, DrmCrtc *crtc,
+      std::vector<DrmPlane *> *primary_planes,
+      std::vector<DrmPlane *> *overlay_planes);
+
+  template <typename T, typename... A>
+  void AddStage(A &&... args) {
+    stages_.emplace_back(
+        std::unique_ptr<PlanStage>(new T(std::forward(args)...)));
+  }
+
+ private:
+  std::vector<DrmPlane *> GetUsablePlanes(
+      DrmCrtc *crtc, std::vector<DrmPlane *> *primary_planes,
+      std::vector<DrmPlane *> *overlay_planes);
+
+  std::vector<std::unique_ptr<PlanStage>> stages_;
+};
+
+// This plan stage extracts all protected layers and places them on dedicated
+// planes.
+class PlanStageProtected : public Planner::PlanStage {
+ public:
+  int ProvisionPlanes(std::vector<DrmCompositionPlane> *composition,
+                      std::map<size_t, DrmHwcLayer *> &layers, DrmCrtc *crtc,
+                      std::vector<DrmPlane *> *planes);
+};
+
+// This plan stage places as many layers on dedicated planes as possible (first
+// come first serve), and then sticks the rest in a precomposition plane (if
+// needed).
+class PlanStageGreedy : public Planner::PlanStage {
+ public:
+  int ProvisionPlanes(std::vector<DrmCompositionPlane> *composition,
+                      std::map<size_t, DrmHwcLayer *> &layers, DrmCrtc *crtc,
+                      std::vector<DrmPlane *> *planes);
+};
+}  // namespace android
+#endif
diff --git a/platform/platformdrmgeneric.cpp b/platform/platformdrmgeneric.cpp
index b9dafb3..d903031 100644
--- a/platform/platformdrmgeneric.cpp
+++ b/platform/platformdrmgeneric.cpp
@@ -17,8 +17,6 @@
 #define LOG_TAG "hwc-platform-drm-generic"
 
 #include "platformdrmgeneric.h"
-#include "drmdevice.h"
-#include "platform.h"
 
 #include <xf86drm.h>
 #include <xf86drmMode.h>
diff --git a/platform/platformdrmgeneric.h b/platform/platformdrmgeneric.h
index ad74de4..4284093 100644
--- a/platform/platformdrmgeneric.h
+++ b/platform/platformdrmgeneric.h
@@ -17,13 +17,13 @@
 #ifndef ANDROID_PLATFORM_DRM_GENERIC_H_
 #define ANDROID_PLATFORM_DRM_GENERIC_H_
 
-#include "drmdevice.h"
-#include "platform.h"
-
+#include <drm/drm_fourcc.h>
 #include <hardware/gralloc.h>
+
 #include <map>
 
-#include <drm/drm_fourcc.h>
+#include "drm/drmdevice.h"
+#include "platform.h"
 
 #ifndef DRM_FORMAT_INVALID
 #define DRM_FORMAT_INVALID 0
diff --git a/platform/platformhisi.cpp b/platform/platformhisi.cpp
index 1f1478f..8c10e34 100644
--- a/platform/platformhisi.cpp
+++ b/platform/platformhisi.cpp
@@ -17,15 +17,11 @@
 #define LOG_TAG "hwc-platform-hisi"
 
 #include "platformhisi.h"
-#include "drmdevice.h"
-#include "platform.h"
 
-#include <stdatomic.h>
 #include <xf86drm.h>
 #include <xf86drmMode.h>
 #include <cinttypes>
 
-#include <hardware/gralloc.h>
 #include <log/log.h>
 #include "gralloc_priv.h"
 
diff --git a/platform/platformhisi.h b/platform/platformhisi.h
index f127bdb..272e547 100644
--- a/platform/platformhisi.h
+++ b/platform/platformhisi.h
@@ -17,7 +17,6 @@
 #ifndef ANDROID_PLATFORM_HISI_H_
 #define ANDROID_PLATFORM_HISI_H_
 
-#include "drmdevice.h"
 #include "platform.h"
 #include "platformdrmgeneric.h"
 
diff --git a/platform/platformimagination.cpp b/platform/platformimagination.cpp
index bd4a4c3..83cebf3 100644
--- a/platform/platformimagination.cpp
+++ b/platform/platformimagination.cpp
@@ -1,6 +1,7 @@
 #define LOG_TAG "hwc-platform-imagination"
 
 #include "platformimagination.h"
+
 #include <log/log.h>
 #include <xf86drm.h>
 
diff --git a/platform/platformimagination.h b/platform/platformimagination.h
index f2a7cb7..4eec698 100644
--- a/platform/platformimagination.h
+++ b/platform/platformimagination.h
@@ -1,7 +1,6 @@
 #ifndef PLATFORMIMAGINATION_H
 #define PLATFORMIMAGINATION_H
 
-#include "drmdevice.h"
 #include "platform.h"
 #include "platformdrmgeneric.h"
 
diff --git a/platform/platformmeson.cpp b/platform/platformmeson.cpp
index ad3aff1..ecace29 100644
--- a/platform/platformmeson.cpp
+++ b/platform/platformmeson.cpp
@@ -17,15 +17,11 @@
 #define LOG_TAG "hwc-platform-meson"
 
 #include "platformmeson.h"
-#include "drmdevice.h"
-#include "platform.h"
 
-#include <stdatomic.h>
 #include <xf86drm.h>
 #include <xf86drmMode.h>
 #include <cinttypes>
 
-#include <hardware/gralloc.h>
 #include <log/log.h>
 #include "gralloc_priv.h"
 
diff --git a/platform/platformmeson.h b/platform/platformmeson.h
index f29b796..1b428a4 100644
--- a/platform/platformmeson.h
+++ b/platform/platformmeson.h
@@ -17,7 +17,6 @@
 #ifndef ANDROID_PLATFORM_HISI_H_
 #define ANDROID_PLATFORM_HISI_H_
 
-#include "drmdevice.h"
 #include "platform.h"
 #include "platformdrmgeneric.h"
 
diff --git a/platform/platformminigbm.cpp b/platform/platformminigbm.cpp
index df195d3..39decab 100644
--- a/platform/platformminigbm.cpp
+++ b/platform/platformminigbm.cpp
@@ -17,13 +17,10 @@
 #define LOG_TAG "hwc-platform-drm-minigbm"
 
 #include "platformminigbm.h"
-#include "drmdevice.h"
-#include "platform.h"
 
 #include <xf86drm.h>
 #include <xf86drmMode.h>
 
-#include <hardware/gralloc.h>
 #include <log/log.h>
 
 #include "cros_gralloc_handle.h"
diff --git a/platform/platformminigbm.h b/platform/platformminigbm.h
index 053b2aa..1eea6ca 100644
--- a/platform/platformminigbm.h
+++ b/platform/platformminigbm.h
@@ -17,7 +17,6 @@
 #ifndef ANDROID_PLATFORM_DRM_MINIGBM_H_
 #define ANDROID_PLATFORM_DRM_MINIGBM_H_
 
-#include "drmdevice.h"
 #include "platform.h"
 #include "platformdrmgeneric.h"