From 25e66fc324bbc004fa8902b2d4699e41bb601104 Mon Sep 17 00:00:00 2001 From: Mathias Agopian Date: Sat, 28 Jan 2012 22:31:55 -0800 Subject: [PATCH] added a few more commands to SF's dumpsys --latency-clear [name] clears the latency data for the specified layer or for all layers if none is specified --list prints the list of all layers regardless of their visibility Change-Id: I7c07ae020f838c173b98ee50f3fb3e93da78acbb --- services/surfaceflinger/Layer.cpp | 8 +++- services/surfaceflinger/Layer.h | 1 + services/surfaceflinger/LayerBase.cpp | 9 ++-- services/surfaceflinger/LayerBase.h | 1 + services/surfaceflinger/SurfaceFlinger.cpp | 50 +++++++++++++++++++++- services/surfaceflinger/SurfaceFlinger.h | 4 ++ 6 files changed, 65 insertions(+), 8 deletions(-) diff --git a/services/surfaceflinger/Layer.cpp b/services/surfaceflinger/Layer.cpp index a29428142..8e87b88ee 100644 --- a/services/surfaceflinger/Layer.cpp +++ b/services/surfaceflinger/Layer.cpp @@ -553,8 +553,6 @@ void Layer::dump(String8& result, char* buffer, size_t SIZE) const result.append(buffer); - LayerBase::dumpStats(result, buffer, SIZE); - if (mSurfaceTexture != 0) { mSurfaceTexture->dump(result, " ", buffer, SIZE); } @@ -580,6 +578,12 @@ void Layer::dumpStats(String8& result, char* buffer, size_t SIZE) const result.append("\n"); } +void Layer::clearStats() +{ + LayerBaseClient::clearStats(); + memset(mFrameStats, 0, sizeof(mFrameStats)); +} + uint32_t Layer::getEffectiveUsage(uint32_t usage) const { // TODO: should we do something special if mSecure is set? diff --git a/services/surfaceflinger/Layer.h b/services/surfaceflinger/Layer.h index b3fa5e739..2dd4da130 100644 --- a/services/surfaceflinger/Layer.h +++ b/services/surfaceflinger/Layer.h @@ -88,6 +88,7 @@ protected: virtual void onFirstRef(); virtual void dump(String8& result, char* scratch, size_t size) const; virtual void dumpStats(String8& result, char* buffer, size_t SIZE) const; + virtual void clearStats(); private: friend class SurfaceTextureLayer; diff --git a/services/surfaceflinger/LayerBase.cpp b/services/surfaceflinger/LayerBase.cpp index 1e2c4cb54..d32fcdd62 100644 --- a/services/surfaceflinger/LayerBase.cpp +++ b/services/surfaceflinger/LayerBase.cpp @@ -489,13 +489,14 @@ void LayerBase::dump(String8& result, char* buffer, size_t SIZE) const result.append(buffer); } -void LayerBase::shortDump(String8& result, char* scratch, size_t size) const -{ +void LayerBase::shortDump(String8& result, char* scratch, size_t size) const { LayerBase::dump(result, scratch, size); } -void LayerBase::dumpStats(String8& result, char* scratch, size_t SIZE) const -{ +void LayerBase::dumpStats(String8& result, char* scratch, size_t SIZE) const { +} + +void LayerBase::clearStats() { } // --------------------------------------------------------------------------- diff --git a/services/surfaceflinger/LayerBase.h b/services/surfaceflinger/LayerBase.h index 03d2cc6a8..6b62c9db7 100644 --- a/services/surfaceflinger/LayerBase.h +++ b/services/surfaceflinger/LayerBase.h @@ -212,6 +212,7 @@ public: virtual void dump(String8& result, char* scratch, size_t size) const; virtual void shortDump(String8& result, char* scratch, size_t size) const; virtual void dumpStats(String8& result, char* buffer, size_t SIZE) const; + virtual void clearStats(); enum { // flags for doTransaction() diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp index 883b642ca..056399983 100644 --- a/services/surfaceflinger/SurfaceFlinger.cpp +++ b/services/surfaceflinger/SurfaceFlinger.cpp @@ -1486,12 +1486,27 @@ status_t SurfaceFlinger::dump(int fd, const Vector& args) bool dumpAll = true; size_t index = 0; - if (args.size()) { + size_t numArgs = args.size(); + if (numArgs) { dumpAll = false; - if (args[index] == String16("--latency")) { + + if ((index < numArgs) && + (args[index] == String16("--list"))) { + index++; + listLayersLocked(args, index, result, buffer, SIZE); + } + + if ((index < numArgs) && + (args[index] == String16("--latency"))) { index++; dumpStatsLocked(args, index, result, buffer, SIZE); } + + if ((index < numArgs) && + (args[index] == String16("--latency-clear"))) { + index++; + clearStatsLocked(args, index, result, buffer, SIZE); + } } if (dumpAll) { @@ -1506,6 +1521,18 @@ status_t SurfaceFlinger::dump(int fd, const Vector& args) return NO_ERROR; } +void SurfaceFlinger::listLayersLocked(const Vector& args, size_t& index, + String8& result, char* buffer, size_t SIZE) const +{ + const LayerVector& currentLayers = mCurrentState.layersSortedByZ; + const size_t count = currentLayers.size(); + for (size_t i=0 ; i& layer(currentLayers[i]); + snprintf(buffer, SIZE, "%s\n", layer->getName().string()); + result.append(buffer); + } +} + void SurfaceFlinger::dumpStatsLocked(const Vector& args, size_t& index, String8& result, char* buffer, size_t SIZE) const { @@ -1529,6 +1556,25 @@ void SurfaceFlinger::dumpStatsLocked(const Vector& args, size_t& index } } +void SurfaceFlinger::clearStatsLocked(const Vector& args, size_t& index, + String8& result, char* buffer, size_t SIZE) const +{ + String8 name; + if (index < args.size()) { + name = String8(args[index]); + index++; + } + + const LayerVector& currentLayers = mCurrentState.layersSortedByZ; + const size_t count = currentLayers.size(); + for (size_t i=0 ; i& layer(currentLayers[i]); + if (name.isEmpty() || (name == layer->getName())) { + layer->clearStats(); + } + } +} + void SurfaceFlinger::dumpAllLocked( String8& result, char* buffer, size_t SIZE) const { diff --git a/services/surfaceflinger/SurfaceFlinger.h b/services/surfaceflinger/SurfaceFlinger.h index c976e5a00..b1b611671 100644 --- a/services/surfaceflinger/SurfaceFlinger.h +++ b/services/surfaceflinger/SurfaceFlinger.h @@ -337,8 +337,12 @@ private: void debugFlashRegions(); void drawWormhole() const; + void listLayersLocked(const Vector& args, size_t& index, + String8& result, char* buffer, size_t SIZE) const; void dumpStatsLocked(const Vector& args, size_t& index, String8& result, char* buffer, size_t SIZE) const; + void clearStatsLocked(const Vector& args, size_t& index, + String8& result, char* buffer, size_t SIZE) const; void dumpAllLocked(String8& result, char* buffer, size_t SIZE) const; mutable MessageQueue mEventQueue;