summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Dominik Laskowski <domlaskowski@google.com> 2019-09-04 14:06:28 -0700
committer Dominik Laskowski <domlaskowski@google.com> 2019-09-06 14:46:46 -0700
commitb6e543718a0421a8a821c44a4d15cde23d4ddd35 (patch)
tree59867dd7af2e256288777bf369489eda8d220ee5
parent1ba4b2517b89874ad08396d3e51abe5d3f967d54 (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.cpp26
-rw-r--r--services/surfaceflinger/SurfaceFlinger.h1
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,