Add location information to ProtoLog message if available

Bug: 356347453

Test: atset FlickerLibTest
Change-Id: If833737eb297f349b1d7de1735954d7c390e0919
diff --git a/libraries/flicker/utils/src/android/tools/traces/parsers/perfetto/ProtoLogTraceParser.kt b/libraries/flicker/utils/src/android/tools/traces/parsers/perfetto/ProtoLogTraceParser.kt
index af5a468..12cad84 100644
--- a/libraries/flicker/utils/src/android/tools/traces/parsers/perfetto/ProtoLogTraceParser.kt
+++ b/libraries/flicker/utils/src/android/tools/traces/parsers/perfetto/ProtoLogTraceParser.kt
@@ -43,15 +43,28 @@
                 input.query(getSqlQueryProtoLogMessages()) { rows ->
                     this.addAll(
                         rows.map {
+                            val entryDebugString =
+                                it.entries.joinToString { entry -> "${entry.key}: ${entry.value}" }
+                            requireNotNull(it["ts"]) {
+                                "Timestamp was null. Entry: $entryDebugString"
+                            }
+                            requireNotNull(it["level"]) {
+                                "Level was null. Entry: $entryDebugString"
+                            }
+                            requireNotNull(it["tag"]) { "Tag was null. Entry: $entryDebugString" }
+                            requireNotNull(it["message"]) {
+                                "Message was null. Entry: $entryDebugString"
+                            }
+
                             ProtoLogMessage(
                                 it["ts"] as Long,
                                 LogLevel.entries.firstOrNull { entry ->
                                     it["level"] == entry.toString()
-                                }
-                                    ?: error("Failed to convert ${it["level"]} to LogLevel enum"),
+                                } ?: error("Failed to convert ${it["level"]} to LogLevel enum"),
                                 it["tag"] as String,
                                 it["message"] as String,
                                 it["stacktrace"]?.let { it as String },
+                                it["location"]?.let { it as String },
                             )
                         }
                     )
diff --git a/libraries/flicker/utils/src/android/tools/traces/protolog/ProtoLogMessage.kt b/libraries/flicker/utils/src/android/tools/traces/protolog/ProtoLogMessage.kt
index 889a79f..dc7c405 100644
--- a/libraries/flicker/utils/src/android/tools/traces/protolog/ProtoLogMessage.kt
+++ b/libraries/flicker/utils/src/android/tools/traces/protolog/ProtoLogMessage.kt
@@ -26,6 +26,7 @@
     val tag: String,
     val message: String,
     val stacktrace: String?,
+    val location: String?,
 ) : TraceEntry {
     override val timestamp = Timestamps.from(elapsedNanos = elapsedTimestamp)
 }