SF: Add frame-composition info dumping
Add frame-composition info as part of command-line option and
as part of dumpAll
Bug: 112259502
Test: manual test
Change-Id: I8dbb4d31918415779f909df658a3c7f32b11452d
diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp
index 8cee8d7..4df62af 100644
--- a/services/surfaceflinger/SurfaceFlinger.cpp
+++ b/services/surfaceflinger/SurfaceFlinger.cpp
@@ -91,6 +91,8 @@
#include <cutils/compiler.h>
+#include "android-base/stringprintf.h"
+
#include <android/hardware/configstore/1.0/ISurfaceFlingerConfigs.h>
#include <android/hardware/configstore/1.1/ISurfaceFlingerConfigs.h>
#include <android/hardware/configstore/1.1/types.h>
@@ -1463,13 +1465,15 @@
mVsyncModulator.onRefreshed(mHadClientComposition);
- mLayersWithQueuedFrames.clear();
+ getBE().mEndOfFrameCompositionInfo = std::move(getBE().mCompositionInfo);
for (const auto& [token, display] : mDisplays) {
const auto displayId = display->getId();
- for (auto& compositionInfo : getBE().mCompositionInfo[displayId]) {
+ for (auto& compositionInfo : getBE().mEndOfFrameCompositionInfo[displayId]) {
compositionInfo.hwc.hwcLayer = nullptr;
}
}
+
+ mLayersWithQueuedFrames.clear();
}
@@ -3911,6 +3915,13 @@
}
if ((index < numArgs) &&
+ (args[index] == String16("--frame-composition"))) {
+ index++;
+ dumpFrameCompositionInfo(result);
+ dumpAll = false;
+ }
+
+ if ((index < numArgs) &&
(args[index] == String16("--display-identification"))) {
index++;
dumpDisplayIdentificationData(result);
@@ -4167,6 +4178,31 @@
result.append("\n");
}
+void SurfaceFlinger::dumpFrameCompositionInfo(String8& result) const {
+ std::string stringResult;
+
+ for (const auto& [token, display] : mDisplays) {
+ const auto displayId = display->getId();
+ if (displayId == DisplayDevice::DISPLAY_ID_INVALID) {
+ continue;
+ }
+
+ const auto& compositionInfoIt = getBE().mEndOfFrameCompositionInfo.find(displayId);
+ if (compositionInfoIt == getBE().mEndOfFrameCompositionInfo.end()) {
+ break;
+ }
+ const auto& compositionInfoList = compositionInfoIt->second;
+ stringResult += base::StringPrintf("Display: %d\n", displayId);
+ stringResult += base::StringPrintf("numComponents: %zu\n", compositionInfoList.size());
+ for (const auto& compositionInfo : compositionInfoList) {
+ compositionInfo.dump(stringResult, nullptr);
+ stringResult += base::StringPrintf("\n");
+ }
+ }
+
+ result.append(stringResult.c_str());
+}
+
LayersProto SurfaceFlinger::dumpProtoInfo(LayerVector::StateSet stateSet) const {
LayersProto layersProto;
const bool useDrawing = stateSet == LayerVector::StateSet::Drawing;
@@ -4293,6 +4329,10 @@
result.append(LayerProtoParser::layersToString(std::move(layerTree)).c_str());
result.append("\n");
+ result.append("\nFrame-Composition information:\n");
+ dumpFrameCompositionInfo(result);
+ result.append("\n");
+
/*
* Dump Display state
*/