diff options
author | Vova Sharaienko <sharaienko@google.com> | 2023-03-01 03:24:03 +0000 |
---|---|---|
committer | Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> | 2023-03-01 03:24:03 +0000 |
commit | d55cc2cd1fa51b0ee2efc4eb83e2876755b4ba4b (patch) | |
tree | a10502a1c1c94364c10589f6acb4e216c5a55346 | |
parent | 721069f057be4ca1cc6bf116c0e9c6e567c66e95 (diff) | |
parent | 35af3a7c3ab901b77cae31d504baac937325a338 (diff) | |
download | StatsD-d55cc2cd1fa51b0ee2efc4eb83e2876755b4ba4b.tar.gz |
Merge "[statsd_testdrive] pretty-print support for vendor atoms" am: 35af3a7c3a
Original change: https://android-review.googlesource.com/c/platform/packages/modules/StatsD/+/2451062
Change-Id: I3151855a6e106761bb765ee948bf8e1f0080f9a1
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
-rw-r--r-- | statsd/tools/localtools/src/com/android/statsd/shelltools/testdrive/TestDrive.java | 55 |
1 files changed, 46 insertions, 9 deletions
diff --git a/statsd/tools/localtools/src/com/android/statsd/shelltools/testdrive/TestDrive.java b/statsd/tools/localtools/src/com/android/statsd/shelltools/testdrive/TestDrive.java index 501dc402..7a18cda3 100644 --- a/statsd/tools/localtools/src/com/android/statsd/shelltools/testdrive/TestDrive.java +++ b/statsd/tools/localtools/src/com/android/statsd/shelltools/testdrive/TestDrive.java @@ -24,6 +24,7 @@ import com.android.internal.os.StatsdConfigProto.PullAtomPackages; import com.android.internal.os.StatsdConfigProto.SimpleAtomMatcher; import com.android.internal.os.StatsdConfigProto.StatsdConfig; import com.android.internal.os.StatsdConfigProto.TimeUnit; +import com.android.os.AtomsProto; import com.android.os.AtomsProto.Atom; import com.android.os.StatsLog; import com.android.os.StatsLog.ConfigMetricsReport; @@ -33,9 +34,14 @@ import com.android.statsd.shelltools.Utils; import com.google.common.annotations.VisibleForTesting; import com.google.common.io.Files; +import com.google.protobuf.CodedInputStream; +import com.google.protobuf.CodedOutputStream; import com.google.protobuf.DescriptorProtos; import com.google.protobuf.Descriptors; +import com.google.protobuf.DynamicMessage; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.IOException; @@ -275,12 +281,14 @@ public class TestDrive { private final Set<Long> mTrackedMetrics = new HashSet<>(); private final String mAndroidBuildTop = System.getenv("ANDROID_BUILD_TOP"); + private Descriptors.Descriptor externalDescriptor = null; + private void dumpMetrics(ConfigMetricsReportList reportList, Dumper dumper) { // We may get multiple reports. Take the last one. ConfigMetricsReport report = reportList.getReports(reportList.getReportsCount() - 1); for (StatsLogReport statsLog : report.getMetricsList()) { if (isTrackedMetric(statsLog.getMetricId())) { - dumper.dump(statsLog); + dumper.dump(statsLog, externalDescriptor); } } } @@ -296,7 +304,7 @@ public class TestDrive { void addAtom(Integer atom, List<String> protoIncludes) { if (Atom.getDescriptor().findFieldByNumber(atom) == null && - Atom.getDescriptor().isExtensionNumber(atom) == false) { + Atom.getDescriptor().isExtensionNumber(atom) == false) { // try to look in alternative locations if (protoIncludes != null) { boolean isAtomDefined = false; @@ -451,6 +459,7 @@ public class TestDrive { } if (atomMsgDesc != null && atomMsgDesc.findFieldByNumber(atom) != null) { + externalDescriptor = atomMsgDesc; return true; } } @@ -590,28 +599,29 @@ public class TestDrive { } interface Dumper { - void dump(StatsLogReport report); + void dump(StatsLogReport report, Descriptors.Descriptor externalDescriptor); } static class BasicDumper implements Dumper { @Override - public void dump(StatsLogReport report) { + public void dump(StatsLogReport report, Descriptors.Descriptor externalDescriptor) { System.out.println(report.toString()); } } static class TerseDumper extends BasicDumper { @Override - public void dump(StatsLogReport report) { + public void dump(StatsLogReport report, Descriptors.Descriptor externalDescriptor) { if (report.hasGaugeMetrics()) { dumpGaugeMetrics(report); } if (report.hasEventMetrics()) { - dumpEventMetrics(report); + dumpEventMetrics(report, externalDescriptor); } } - void dumpEventMetrics(StatsLogReport report) { + void dumpEventMetrics(StatsLogReport report, + Descriptors.Descriptor externalDescriptor) { final List<StatsLog.EventMetricData> data = Utils.getEventMetricData(report); if (data.isEmpty()) { return; @@ -620,8 +630,8 @@ public class TestDrive { for (StatsLog.EventMetricData event : data) { final double deltaSec = (event.getElapsedTimestampNanos() - firstTimestampNanos) / 1e9; - System.out.println( - String.format("+%.3fs: %s", deltaSec, event.getAtom().toString())); + System.out.println(String.format("+%.3fs: %s", deltaSec, + dumpAtom(event.getAtom(), externalDescriptor))); } } @@ -636,6 +646,33 @@ public class TestDrive { } } + private static String dumpAtom(AtomsProto.Atom atom, + Descriptors.Descriptor externalDescriptor) { + if (atom.getPushedCase().getNumber() != 0 || atom.getPulledCase().getNumber() != 0) { + return atom.toString(); + } else { + try { + return convertToExternalAtom(atom, externalDescriptor).toString(); + } catch (Exception e) { + LOGGER.severe("Failed to parse an atom: " + e.getMessage()); + return ""; + } + } + } + + private static DynamicMessage convertToExternalAtom(AtomsProto.Atom atom, + Descriptors.Descriptor externalDescriptor) throws Exception { + ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); + CodedOutputStream cos = CodedOutputStream.newInstance(outputStream); + atom.writeTo(cos); + cos.flush(); + ByteArrayInputStream inputStream = new ByteArrayInputStream( + outputStream.toByteArray()); + CodedInputStream cis = CodedInputStream.newInstance(inputStream); + return DynamicMessage.parseFrom(externalDescriptor, cis); + } + + private static String pushConfig(StatsdConfig config, String deviceSerial) throws IOException, InterruptedException { File configFile = File.createTempFile("statsdconfig", ".config"); |