drm_hwcomposer: Plumb frame number through display composition
Having frame number in the composition is very useful for
debugging transient issues, plumb it through the drm compositor
stack.
Change-Id: Ibc7555c89bea79c580b3201b11db4ced6360efb9
Signed-off-by: Sean Paul <seanpaul@chromium.org>
diff --git a/drmcomposition.cpp b/drmcomposition.cpp
index 3612972..864c5e5 100644
--- a/drmcomposition.cpp
+++ b/drmcomposition.cpp
@@ -45,7 +45,7 @@
}
}
-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();
@@ -58,7 +58,8 @@
// 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;
diff --git a/drmcomposition.h b/drmcomposition.h
index ee2e258..426ced0 100644
--- a/drmcomposition.h
+++ b/drmcomposition.h
@@ -42,7 +42,7 @@
public:
DrmComposition(DrmResources *drm, Importer *importer);
- int Init();
+ int Init(uint64_t frame_no);
int SetLayers(size_t num_displays,
const DrmCompositionDisplayLayersMap *maps);
diff --git a/drmcompositor.cpp b/drmcompositor.cpp
index c61e60c..ad4cf88 100644
--- a/drmcompositor.cpp
+++ b/drmcompositor.cpp
@@ -27,7 +27,7 @@
namespace android {
-DrmCompositor::DrmCompositor(DrmResources *drm) : drm_(drm) {
+DrmCompositor::DrmCompositor(DrmResources *drm) : drm_(drm), frame_no_(0) {
}
DrmCompositor::~DrmCompositor() {
@@ -53,7 +53,7 @@
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;
diff --git a/drmcompositor.h b/drmcompositor.h
index 3fc2bb1..0741932 100644
--- a/drmcompositor.h
+++ b/drmcompositor.h
@@ -45,6 +45,8 @@
DrmResources *drm_;
+ uint64_t frame_no_;
+
// mutable for Dump() propagation
mutable std::map<int, DrmDisplayCompositor> compositor_map_;
};
diff --git a/drmdisplaycomposition.cpp b/drmdisplaycomposition.cpp
index 465a318..c1848e0 100644
--- a/drmdisplaycomposition.cpp
+++ b/drmdisplaycomposition.cpp
@@ -74,7 +74,8 @@
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() {
@@ -100,10 +101,11 @@
}
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_);
@@ -372,6 +374,10 @@
return dpms_mode_;
}
+uint64_t DrmDisplayComposition::frame_no() const {
+ return frame_no_;
+}
+
Importer *DrmDisplayComposition::importer() const {
return importer_;
}
diff --git a/drmdisplaycomposition.h b/drmdisplaycomposition.h
index 4d4f2df..be4ecef 100644
--- a/drmdisplaycomposition.h
+++ b/drmdisplaycomposition.h
@@ -53,7 +53,8 @@
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;
@@ -71,6 +72,8 @@
int pre_composition_layer_index() const;
uint32_t dpms_mode() const;
+ uint64_t frame_no() const;
+
Importer *importer() const;
private:
@@ -97,6 +100,8 @@
DrmCompositionLayerVector_t layers_;
int pre_composition_layer_index_;
uint32_t dpms_mode_;
+
+ uint64_t frame_no_;
};
}
diff --git a/drmdisplaycompositor.cpp b/drmdisplaycompositor.cpp
index 9130085..c923526 100644
--- a/drmdisplaycompositor.cpp
+++ b/drmdisplaycompositor.cpp
@@ -41,7 +41,6 @@
: drm_(NULL),
display_(-1),
worker_(this),
- frame_no_(0),
initialized_(false),
active_(false),
framebuffer_index_(0),
diff --git a/drmdisplaycompositor.h b/drmdisplaycompositor.h
index 46d71ae..50109b3 100644
--- a/drmdisplaycompositor.h
+++ b/drmdisplaycompositor.h
@@ -63,8 +63,6 @@
std::queue<std::unique_ptr<DrmDisplayComposition>> composite_queue_;
std::unique_ptr<DrmDisplayComposition> active_composition_;
- uint64_t frame_no_;
-
bool initialized_;
bool active_;