SF: Add dumpsys flag to dump raw EDID
Bug: 140429990
Test: adb shell dumpsys SurfaceFlinger --edid <hwc-id> | xxd
Test: adb shell dumpsys SurfaceFlinger --edid <hwc-id> | parse-edid
Change-Id: Iccfaf3a0ac7c4b0eb05f0ac6a9d0de31a8de46dc
diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp
index 3498419..191cfe8 100644
--- a/services/surfaceflinger/SurfaceFlinger.cpp
+++ b/services/surfaceflinger/SurfaceFlinger.cpp
@@ -112,6 +112,7 @@
#include <cutils/compiler.h>
+#include "android-base/parseint.h"
#include "android-base/stringprintf.h"
#include <android/hardware/configstore/1.0/ISurfaceFlingerConfigs.h>
@@ -4053,6 +4054,7 @@
{"--display-id"s, dumper(&SurfaceFlinger::dumpDisplayIdentificationData)},
{"--dispsync"s,
dumper([this](std::string& s) { mScheduler->getPrimaryDispSync().dump(s); })},
+ {"--edid"s, argsDumper(&SurfaceFlinger::dumpRawDisplayIdentificationData)},
{"--frame-events"s, dumper(&SurfaceFlinger::dumpFrameEventsLocked)},
{"--latency"s, argsDumper(&SurfaceFlinger::dumpStatsLocked)},
{"--latency-clear"s, argsDumper(&SurfaceFlinger::clearStatsLocked)},
@@ -4281,21 +4283,13 @@
}
if (!isEdid(data)) {
- result.append("unknown identification data: ");
- for (uint8_t byte : data) {
- StringAppendF(&result, "%x ", byte);
- }
- result.append("\n");
+ result.append("unknown identification data\n");
continue;
}
const auto edid = parseEdid(data);
if (!edid) {
- result.append("invalid EDID: ");
- for (uint8_t byte : data) {
- StringAppendF(&result, "%x ", byte);
- }
- result.append("\n");
+ result.append("invalid EDID\n");
continue;
}
@@ -4305,6 +4299,18 @@
}
}
+void SurfaceFlinger::dumpRawDisplayIdentificationData(const DumpArgs& args,
+ std::string& result) const {
+ hwc2_display_t hwcDisplayId;
+ uint8_t port;
+ DisplayIdentificationData data;
+
+ if (args.size() > 1 && base::ParseUint(String8(args[1]), &hwcDisplayId) &&
+ getHwComposer().getDisplayIdentificationData(hwcDisplayId, &port, &data)) {
+ result.append(reinterpret_cast<const char*>(data.data()), data.size());
+ }
+}
+
void SurfaceFlinger::dumpWideColorInfo(std::string& result) const {
StringAppendF(&result, "Device has wide color built-in display: %d\n", hasWideColorDisplay);
StringAppendF(&result, "Device uses color management: %d\n", useColorManagement);