OSDN Git Service

drm_hwcomposer: Plumb frame number through display composition
authorSean Paul <seanpaul@chromium.org>
Mon, 21 Sep 2015 14:04:02 +0000 (10:04 -0400)
committerSean Paul <seanpaul@chromium.org>
Mon, 21 Sep 2015 14:08:37 +0000 (10:08 -0400)
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>
drmcomposition.cpp
drmcomposition.h
drmcompositor.cpp
drmcompositor.h
drmdisplaycomposition.cpp
drmdisplaycomposition.h
drmdisplaycompositor.cpp
drmdisplaycompositor.h

index 3612972..864c5e5 100644 (file)
@@ -45,7 +45,7 @@ DrmComposition::DrmComposition(DrmResources *drm, Importer *importer)
   }
 }
 
-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 @@ int DrmComposition::Init() {
     // 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;
index ee2e258..426ced0 100644 (file)
@@ -42,7 +42,7 @@ class DrmComposition {
  public:
   DrmComposition(DrmResources *drm, Importer *importer);
 
-  int Init();
+  int Init(uint64_t frame_no);
 
   int SetLayers(size_t num_displays,
                 const DrmCompositionDisplayLayersMap *maps);
index c61e60c..ad4cf88 100644 (file)
@@ -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 @@ DrmComposition *DrmCompositor::CreateComposition(Importer *importer) {
     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;
index 3fc2bb1..0741932 100644 (file)
@@ -45,6 +45,8 @@ class DrmCompositor {
 
   DrmResources *drm_;
 
+  uint64_t frame_no_;
+
   // mutable for Dump() propagation
   mutable std::map<int, DrmDisplayCompositor> compositor_map_;
 };
index 465a318..c1848e0 100644 (file)
@@ -74,7 +74,8 @@ DrmDisplayComposition::DrmDisplayComposition()
       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 @@ 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_);
@@ -372,6 +374,10 @@ uint32_t DrmDisplayComposition::dpms_mode() const {
   return dpms_mode_;
 }
 
+uint64_t DrmDisplayComposition::frame_no() const {
+  return frame_no_;
+}
+
 Importer *DrmDisplayComposition::importer() const {
   return importer_;
 }
index 4d4f2df..be4ecef 100644 (file)
@@ -53,7 +53,8 @@ class DrmDisplayComposition {
   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 @@ class DrmDisplayComposition {
   int pre_composition_layer_index() const;
   uint32_t dpms_mode() const;
 
+  uint64_t frame_no() const;
+
   Importer *importer() const;
 
  private:
@@ -97,6 +100,8 @@ class DrmDisplayComposition {
   DrmCompositionLayerVector_t layers_;
   int pre_composition_layer_index_;
   uint32_t dpms_mode_;
+
+  uint64_t frame_no_;
 };
 }
 
index 9130085..c923526 100644 (file)
@@ -41,7 +41,6 @@ DrmDisplayCompositor::DrmDisplayCompositor()
     : drm_(NULL),
       display_(-1),
       worker_(this),
-      frame_no_(0),
       initialized_(false),
       active_(false),
       framebuffer_index_(0),
index 46d71ae..50109b3 100644 (file)
@@ -63,8 +63,6 @@ class DrmDisplayCompositor {
   std::queue<std::unique_ptr<DrmDisplayComposition>> composite_queue_;
   std::unique_ptr<DrmDisplayComposition> active_composition_;
 
-  uint64_t frame_no_;
-
   bool initialized_;
   bool active_;