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"