From cb55857bbde34a06c19dde3db5064d1717a0173e Mon Sep 17 00:00:00 2001 From: Mathias Agopian Date: Thu, 4 Oct 2012 15:58:54 -0700 Subject: [PATCH] fix dumpsys Layer name when using multiple displays Bug: 7288401 Change-Id: I14beeef58fac5270cef3b611e18c163060efe6c3 --- services/surfaceflinger/DisplayHardware/HWComposer.cpp | 7 +++++-- services/surfaceflinger/DisplayHardware/HWComposer.h | 3 +-- services/surfaceflinger/SurfaceFlinger.cpp | 7 ++++++- services/surfaceflinger/SurfaceFlinger.h | 4 ++++ 4 files changed, 16 insertions(+), 5 deletions(-) diff --git a/services/surfaceflinger/DisplayHardware/HWComposer.cpp b/services/surfaceflinger/DisplayHardware/HWComposer.cpp index dd9a762f9..be4af517f 100644 --- a/services/surfaceflinger/DisplayHardware/HWComposer.cpp +++ b/services/surfaceflinger/DisplayHardware/HWComposer.cpp @@ -901,14 +901,16 @@ HWComposer::LayerListIterator HWComposer::end(int32_t id) { return getLayerIterator(id, numLayers); } -void HWComposer::dump(String8& result, char* buffer, size_t SIZE, - const Vector< sp >& visibleLayersSortedByZ) const { +void HWComposer::dump(String8& result, char* buffer, size_t SIZE) const { if (mHwc) { result.appendFormat("Hardware Composer state (version %8x):\n", hwcApiVersion(mHwc)); result.appendFormat(" mDebugForceFakeVSync=%d\n", mDebugForceFakeVSync); for (size_t i=0 ; i >& visibleLayersSortedByZ = + mFlinger->getLayerSortedByZForHwcDisplay(i); + if (disp.connected) { result.appendFormat( " Display[%d] : %ux%u, xdpi=%f, ydpi=%f, refresh=%lld\n", @@ -928,6 +930,7 @@ void HWComposer::dump(String8& result, char* buffer, size_t SIZE, const hwc_layer_1_t&l = disp.list->hwLayers[i]; int32_t format = -1; String8 name("unknown"); + if (i < visibleLayersSortedByZ.size()) { const sp& layer(visibleLayersSortedByZ[i]); if (layer->getLayer() != NULL) { diff --git a/services/surfaceflinger/DisplayHardware/HWComposer.h b/services/surfaceflinger/DisplayHardware/HWComposer.h index 269e1472a..a78ffacf8 100644 --- a/services/surfaceflinger/DisplayHardware/HWComposer.h +++ b/services/surfaceflinger/DisplayHardware/HWComposer.h @@ -258,8 +258,7 @@ public: friend class VSyncThread; // for debugging ---------------------------------------------------------- - void dump(String8& out, char* scratch, size_t SIZE, - const Vector< sp >& visibleLayersSortedByZ) const; + void dump(String8& out, char* scratch, size_t SIZE) const; private: void loadHwcModule(); diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp index 11031759e..83674172f 100644 --- a/services/surfaceflinger/SurfaceFlinger.cpp +++ b/services/surfaceflinger/SurfaceFlinger.cpp @@ -2333,7 +2333,7 @@ void SurfaceFlinger::dumpAllLocked( hwc.initCheck()==NO_ERROR ? "present" : "not present", (mDebugDisableHWC || mDebugRegion) ? "disabled" : "enabled"); result.append(buffer); - hwc.dump(result, buffer, SIZE, hw->getVisibleLayersSortedByZ()); + hwc.dump(result, buffer, SIZE); /* * Dump gralloc state @@ -2342,6 +2342,11 @@ void SurfaceFlinger::dumpAllLocked( alloc.dump(result); } +const Vector< sp >& +SurfaceFlinger::getLayerSortedByZForHwcDisplay(int disp) { + return getDisplayDevice( getBuiltInDisplay(disp) )->getVisibleLayersSortedByZ(); +} + bool SurfaceFlinger::startDdmConnection() { void* libddmconnection_dso = diff --git a/services/surfaceflinger/SurfaceFlinger.h b/services/surfaceflinger/SurfaceFlinger.h index 5bb370368..6d36719fa 100644 --- a/services/surfaceflinger/SurfaceFlinger.h +++ b/services/surfaceflinger/SurfaceFlinger.h @@ -130,6 +130,10 @@ public: // TODO: this should be made accessible only to MessageQueue void onMessageReceived(int32_t what); + // for debugging only + // TODO: this should be made accessible only to HWComposer + const Vector< sp >& getLayerSortedByZForHwcDisplay(int disp); + private: friend class Client; friend class DisplayEventConnection;