#include "drm_hwcomposer.h"
#include "drmcomposition.h"
#include "drmcompositorworker.h"
+#include "drmframebuffer.h"
#include <pthread.h>
#include <queue>
#include <hardware/hardware.h>
#include <hardware/hwcomposer.h>
+#define DRM_DISPLAY_BUFFERS 2
+
namespace android {
+class GLWorkerCompositor;
+
class DrmDisplayCompositor {
public:
DrmDisplayCompositor();
private:
DrmDisplayCompositor(const DrmDisplayCompositor &) = delete;
+ // We'll wait for acquire fences to fire for kAcquireWaitTimeoutMs,
+ // kAcquireWaitTries times, logging a warning in between.
+ static const int kAcquireWaitTries = 5;
+ static const int kAcquireWaitTimeoutMs = 100;
+
+ int ApplyPreComposite(DrmDisplayComposition *display_comp);
int ApplyFrame(DrmDisplayComposition *display_comp);
+ int ApplyDpms(DrmDisplayComposition *display_comp);
+ int DisablePlanes(DrmDisplayComposition *display_comp);
DrmResources *drm_;
int display_;
std::queue<std::unique_ptr<DrmDisplayComposition>> composite_queue_;
std::unique_ptr<DrmDisplayComposition> active_composition_;
- uint64_t frame_no_;
-
bool initialized_;
+ bool active_;
+
+ DrmMode next_mode_;
+ bool needs_modeset_;
+
+ int framebuffer_index_;
+ DrmFramebuffer framebuffers_[DRM_DISPLAY_BUFFERS];
+ std::unique_ptr<GLWorkerCompositor> pre_compositor_;
// mutable since we need to acquire in HaveQueuedComposites
mutable pthread_mutex_t lock_;