}
}
-int DrmComposition::Init() {
+int DrmComposition::Init(uint64_t frame_no) {
for (DrmResources::ConnectorIter iter = drm_->begin_connectors();
iter != drm_->end_connectors(); ++iter) {
int display = (*iter)->display();
// If the display hasn't been modeset yet, this will be NULL
DrmCrtc *crtc = drm_->GetCrtcForDisplay(display);
- int ret = composition_map_[(*iter)->display()]->Init(drm_, crtc, importer_);
+ int ret = composition_map_[(*iter)->display()]->Init(drm_, crtc, importer_,
+ frame_no);
if (ret) {
ALOGE("Failed to init display composition for %d", (*iter)->display());
return ret;
public:
DrmComposition(DrmResources *drm, Importer *importer);
- int Init();
+ int Init(uint64_t frame_no);
int SetLayers(size_t num_displays,
const DrmCompositionDisplayLayersMap *maps);
namespace android {
-DrmCompositor::DrmCompositor(DrmResources *drm) : drm_(drm) {
+DrmCompositor::DrmCompositor(DrmResources *drm) : drm_(drm), frame_no_(0) {
}
DrmCompositor::~DrmCompositor() {
ALOGE("Failed to allocate drm composition");
return NULL;
}
- int ret = composition->Init();
+ int ret = composition->Init(++frame_no_);
if (ret) {
ALOGE("Failed to initialize drm composition %d", ret);
delete composition;
DrmResources *drm_;
+ uint64_t frame_no_;
+
// mutable for Dump() propagation
mutable std::map<int, DrmDisplayCompositor> compositor_map_;
};
timeline_current_(0),
timeline_pre_comp_done_(0),
pre_composition_layer_index_(-1),
- dpms_mode_(DRM_MODE_DPMS_ON) {
+ dpms_mode_(DRM_MODE_DPMS_ON),
+ frame_no_(0) {
}
DrmDisplayComposition::~DrmDisplayComposition() {
}
int DrmDisplayComposition::Init(DrmResources *drm, DrmCrtc *crtc,
- Importer *importer) {
+ Importer *importer, uint64_t frame_no) {
drm_ = drm;
crtc_ = crtc; // Can be NULL if we haven't modeset yet
importer_ = importer;
+ frame_no_ = frame_no;
int ret = hw_get_module(GRALLOC_HARDWARE_MODULE_ID,
(const hw_module_t **)&gralloc_);
return dpms_mode_;
}
+uint64_t DrmDisplayComposition::frame_no() const {
+ return frame_no_;
+}
+
Importer *DrmDisplayComposition::importer() const {
return importer_;
}
DrmDisplayComposition();
~DrmDisplayComposition();
- int Init(DrmResources *drm, DrmCrtc *crtc, Importer *importer);
+ int Init(DrmResources *drm, DrmCrtc *crtc, Importer *importer,
+ uint64_t frame_no);
DrmCompositionType type() const;
int pre_composition_layer_index() const;
uint32_t dpms_mode() const;
+ uint64_t frame_no() const;
+
Importer *importer() const;
private:
DrmCompositionLayerVector_t layers_;
int pre_composition_layer_index_;
uint32_t dpms_mode_;
+
+ uint64_t frame_no_;
};
}
: drm_(NULL),
display_(-1),
worker_(this),
- frame_no_(0),
initialized_(false),
active_(false),
framebuffer_index_(0),
std::queue<std::unique_ptr<DrmDisplayComposition>> composite_queue_;
std::unique_ptr<DrmDisplayComposition> active_composition_;
- uint64_t frame_no_;
-
bool initialized_;
bool active_;