LOCAL_CPPFLAGS += \
-DHWC2_USE_CPP11 \
-DHWC2_INCLUDE_STRINGIFICATION
+else
+LOCAL_SRC_FILES += hwcomposer.cpp
+endif
+
+ ifeq ($(TARGET_PRODUCT),hikey960)
+ LOCAL_CPPFLAGS += -DUSE_HISI_IMPORTER
+ LOCAL_SRC_FILES += platformhisi.cpp
+ LOCAL_C_INCLUDES += device/linaro/hikey/gralloc960/
+ else ifeq ($(TARGET_PRODUCT),hikey)
+ LOCAL_CPPFLAGS += -DUSE_HISI_IMPORTER
+ LOCAL_SRC_FILES += platformhisi.cpp
+ LOCAL_C_INCLUDES += device/linaro/hikey/gralloc/
+ else ifeq ($(strip $(BOARD_DRM_HWCOMPOSER_BUFFER_IMPORTER)),minigbm)
+ LOCAL_SRC_FILES += platformminigbm.cpp
+ LOCAL_C_INCLUDES += external/minigbm/cros_gralloc/
+ else
LOCAL_CPPFLAGS += -DUSE_DRM_GENERIC_IMPORTER
+ endif
LOCAL_MODULE := hwcomposer.drm
LOCAL_MODULE_TAGS := optional
#include <errno.h>
#include <stdint.h>
- #include <cutils/log.h>
+ #include <log/log.h>
+#include <cutils/properties.h>
#include <xf86drmMode.h>
namespace android {
ALOGE("Failed to initialize drm compositor lock %d\n", ret);
return ret;
}
+ ret = worker_.Init();
+ if (ret) {
+ pthread_mutex_destroy(&lock_);
+ ALOGE("Failed to initialize compositor worker %d\n", ret);
+ return ret;
+ }
+ ret = frame_worker_.Init();
+ if (ret) {
+ pthread_mutex_destroy(&lock_);
+ ALOGE("Failed to initialize frame worker %d\n", ret);
+ return ret;
+ }
+ pre_compositor_.reset(new GLWorkerCompositor());
+ ret = pre_compositor_->Init();
+ if (ret) {
+ ALOGE("Failed to initialize OpenGL compositor %d", ret);
+ pre_compositor_.reset();
+ }
+
initialized_ = true;
return 0;
}
return &squash_state_;
}
+ bool uses_GL() {
+ return !!pre_compositor_;
+ }
private:
+ struct FrameState {
+ std::unique_ptr<DrmDisplayComposition> composition;
+ int status = 0;
+ };
+
+ class FrameWorker : public Worker {
+ public:
+ FrameWorker(DrmDisplayCompositor *compositor);
+ ~FrameWorker() override;
+
+ int Init();
+ void QueueFrame(std::unique_ptr<DrmDisplayComposition> composition,
+ int status);
+
+ protected:
+ void Routine() override;
+
+ private:
+ DrmDisplayCompositor *compositor_;
+ std::queue<FrameState> frame_queue_;
+ };
+
struct ModeState {
bool needs_modeset = false;
DrmMode mode;
#include <linux/netlink.h>
#include <sys/socket.h>
- #include <cutils/log.h>
+ #include <log/log.h>
-#include <hardware/hardware.h>
-#include <hardware/hwcomposer.h>
#include <xf86drm.h>
+#include <assert.h>
namespace android {