Add display topology to input dump

Add display topology to dump in Dispatcher and Choreographer for
debugging.

Bug: 245989146
Test: dumpsys input
Flag: EXEMPT log only update
Change-Id: I8e9eb4d5c3c88e1cb6aeaa35db07006b003aad93
diff --git a/libs/input/DisplayTopologyGraph.cpp b/libs/input/DisplayTopologyGraph.cpp
index 7ad9f16..934f2e8 100644
--- a/libs/input/DisplayTopologyGraph.cpp
+++ b/libs/input/DisplayTopologyGraph.cpp
@@ -17,15 +17,20 @@
 #define LOG_TAG "DisplayTopologyValidator"
 
 #include <android-base/logging.h>
+#include <android-base/stringprintf.h>
 #include <ftl/enum.h>
 #include <input/DisplayTopologyGraph.h>
+#include <input/PrintTools.h>
 #include <ui/LogicalDisplayId.h>
 
 #include <algorithm>
 
+#define INDENT "  "
+
 namespace android {
 
 namespace {
+
 DisplayTopologyPosition getOppositePosition(DisplayTopologyPosition position) {
     switch (position) {
         case DisplayTopologyPosition::LEFT:
@@ -95,11 +100,45 @@
     return true;
 }
 
+std::string logicalDisplayIdToString(const ui::LogicalDisplayId& displayId) {
+    return base::StringPrintf("displayId(%d)", displayId.val());
+}
+
+std::string adjacentDisplayToString(const DisplayTopologyAdjacentDisplay& adjacentDisplay) {
+    return adjacentDisplay.dump();
+}
+
+std::string adjacentDisplayVectorToString(
+        const std::vector<DisplayTopologyAdjacentDisplay>& adjacentDisplays) {
+    return dumpVector(adjacentDisplays, adjacentDisplayToString);
+}
+
 } // namespace
 
+std::string DisplayTopologyAdjacentDisplay::dump() const {
+    std::string dump;
+    dump += base::StringPrintf("DisplayTopologyAdjacentDisplay: {displayId: %d, position: %s, "
+                               "offsetDp: %f}",
+                               displayId.val(), ftl::enum_string(position).c_str(), offsetDp);
+    return dump;
+}
+
 bool DisplayTopologyGraph::isValid() const {
     return validatePrimaryDisplay(*this) && validateTopologyGraph(*this) &&
             validateDensities(*this);
 }
 
+std::string DisplayTopologyGraph::dump() const {
+    std::string dump;
+    dump += base::StringPrintf("PrimaryDisplayId: %d\n", primaryDisplayId.val());
+    dump += base::StringPrintf("TopologyGraph:\n");
+    dump += addLinePrefix(dumpMap(graph, logicalDisplayIdToString, adjacentDisplayVectorToString),
+                          INDENT);
+    dump += "\n";
+    dump += base::StringPrintf("DisplaysDensity:\n");
+    dump += addLinePrefix(dumpMap(displaysDensity, logicalDisplayIdToString), INDENT);
+    dump += "\n";
+    return dump;
+}
+
 } // namespace android