diff options
| author | 2019-09-04 14:06:28 -0700 | |
|---|---|---|
| committer | 2019-09-06 14:46:46 -0700 | |
| commit | b6e543718a0421a8a821c44a4d15cde23d4ddd35 (patch) | |
| tree | 59867dd7af2e256288777bf369489eda8d220ee5 | |
| parent | 1ba4b2517b89874ad08396d3e51abe5d3f967d54 (diff) | |
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
| -rw-r--r-- | services/surfaceflinger/SurfaceFlinger.cpp | 26 | ||||
| -rw-r--r-- | services/surfaceflinger/SurfaceFlinger.h | 1 |
2 files changed, 17 insertions, 10 deletions
diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp index 3498419cdf..191cfe85cb 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 @@ status_t SurfaceFlinger::doDump(int fd, const DumpArgs& args, {"--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 @@ void SurfaceFlinger::dumpDisplayIdentificationData(std::string& result) const { } 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::dumpDisplayIdentificationData(std::string& result) const { } } +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); diff --git a/services/surfaceflinger/SurfaceFlinger.h b/services/surfaceflinger/SurfaceFlinger.h index f220c26bdf..beb43d0d9d 100644 --- a/services/surfaceflinger/SurfaceFlinger.h +++ b/services/surfaceflinger/SurfaceFlinger.h @@ -865,6 +865,7 @@ private: std::vector<OccupancyTracker::Segment>&& history); void dumpBufferingStats(std::string& result) const; void dumpDisplayIdentificationData(std::string& result) const; + void dumpRawDisplayIdentificationData(const DumpArgs&, std::string& result) const; void dumpWideColorInfo(std::string& result) const; LayersProto dumpDrawingStateProto(uint32_t traceFlags = SurfaceTracing::TRACE_ALL) const; void dumpOffscreenLayersProto(LayersProto& layersProto, |