Loading cmds/statsd/tools/localtools/src/com/android/statsd/shelltools/testdrive/TestDrive.java +55 −4 Original line number Diff line number Diff line Loading @@ -25,6 +25,7 @@ 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.Atom; import com.android.os.StatsLog; import com.android.os.StatsLog.ConfigMetricsReport; import com.android.os.StatsLog.ConfigMetricsReportList; import com.android.os.StatsLog.StatsLogReport; Loading Loading @@ -78,11 +79,12 @@ public class TestDrive { @VisibleForTesting String mDeviceSerial = null; @VisibleForTesting Dumper mDumper = new BasicDumper(); public static void main(String[] args) { final Configuration configuration = new Configuration(); TestDrive testDrive = new TestDrive(); final TestDrive testDrive = new TestDrive(); Utils.setUpLogger(LOGGER, false); if (!testDrive.processArgs(configuration, args, Loading @@ -94,7 +96,7 @@ public class TestDrive { configuration.createConfig(), configuration.hasPulledAtoms(), configuration.hasPushedAtoms()); if (reports != null) { configuration.dumpMetrics(reports); configuration.dumpMetrics(reports, testDrive.mDumper); } } Loading @@ -116,6 +118,9 @@ public class TestDrive { if (remaining_args >= 2 && arg.equals("-one")) { LOGGER.info("Creating one event metric to catch all pushed atoms."); configuration.mOnePushedAtomEvent = true; } else if (remaining_args >= 2 && arg.equals("-terse")) { LOGGER.info("Terse output format."); mDumper = new TerseDumper(); } else if (remaining_args >= 3 && arg.equals("-p")) { configuration.mAdditionalAllowedPackage = args[++first_arg]; } else if (remaining_args >= 3 && arg.equals("-s")) { Loading Loading @@ -198,12 +203,13 @@ public class TestDrive { String mAdditionalAllowedPackage = null; private final Set<Long> mTrackedMetrics = new HashSet<>(); private void dumpMetrics(ConfigMetricsReportList reportList) { 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())) { LOGGER.info(statsLog.toString()); dumper.dump(statsLog); } } } Loading Loading @@ -341,6 +347,51 @@ public class TestDrive { } } interface Dumper { void dump(StatsLogReport report); } static class BasicDumper implements Dumper { @Override public void dump(StatsLogReport report) { System.out.println(report.toString()); } } static class TerseDumper extends BasicDumper { @Override public void dump(StatsLogReport report) { if (report.hasGaugeMetrics()) { dumpGaugeMetrics(report); } if (report.hasEventMetrics()) { dumpEventMetrics(report); } } void dumpEventMetrics(StatsLogReport report) { final List<StatsLog.EventMetricData> data = report.getEventMetrics().getDataList(); if (data.isEmpty()) { return; } long firstTimestampNanos = data.get(0).getElapsedTimestampNanos(); for (StatsLog.EventMetricData event : data) { final double deltaSec = (event.getElapsedTimestampNanos() - firstTimestampNanos) / 1e9; System.out.println( String.format("+%.3fs: %s", deltaSec, event.getAtom().toString())); } } void dumpGaugeMetrics(StatsLogReport report) { final List<StatsLog.GaugeMetricData> data = report.getGaugeMetrics().getDataList(); if (data.isEmpty()) { return; } for (StatsLog.GaugeMetricData gauge : data) { System.out.println(gauge.toString()); } } } private static String pushConfig(StatsdConfig config, String deviceSerial) throws IOException, InterruptedException { File configFile = File.createTempFile("statsdconfig", ".config"); Loading cmds/statsd/tools/localtools/test/com/android/statsd/shelltools/testdrive/TestDriveTest.java +36 −10 Original line number Diff line number Diff line Loading @@ -41,24 +41,21 @@ public class TestDriveTest { static class Expect { public boolean success; public Integer[] atoms; public boolean onePushedAtomEvent; public String extraPackage; public boolean onePushedAtomEvent = false; public String extraPackage = null; public String target; public boolean terse = false; static Expect success(Integer... atoms) { return new Expect(true, atoms, false, null, return new Expect(true, atoms, TARGET); } Expect(boolean success, Integer[] atoms, boolean onePushedAtomEvent, String extraPackage, String target) { Expect(boolean success, Integer[] atoms, String target) { this.success = success; this.atoms = atoms; this.onePushedAtomEvent = onePushedAtomEvent; this.extraPackage = extraPackage; this.target = target; } static final Expect FAILURE = new Expect(false, null, false, null, null); static final Expect FAILURE = new Expect(false, null, null); Expect onePushedAtomEvent() { this.onePushedAtomEvent = true; return this; Loading @@ -67,6 +64,10 @@ public class TestDriveTest { this.extraPackage = TestDriveTest.PACKAGE; return this; } Expect terse() { this.terse = true; return this; } } @Parameterized.Parameter(0) Loading Loading @@ -118,6 +119,10 @@ public class TestDriveTest { Expect.FAILURE}, // Two connected devices, no indication of which to use new Object[]{new String[]{"-one", "244", "245"}, TARGET_ONLY, null, Expect.success(244, 245).onePushedAtomEvent()}, new Object[]{new String[]{"-terse", "-one", "244", "245"}, TARGET_ONLY, null, Expect.success(244, 245).onePushedAtomEvent().terse()}, new Object[]{new String[]{"-one", "-terse", "244", "245"}, TARGET_ONLY, null, Expect.success(244, 245).onePushedAtomEvent().terse()}, new Object[]{new String[]{"-p", PACKAGE, "244", "245"}, TARGET_ONLY, null, Expect.success(244, 245).extraPackage()}, new Object[]{new String[]{"-p", PACKAGE, "-one", "244", "245"}, TARGET_ONLY, null, Loading @@ -132,7 +137,23 @@ public class TestDriveTest { Expect.success(244, 245).extraPackage().onePushedAtomEvent()}, new Object[]{new String[]{"-one", "-p", PACKAGE, "-s", TARGET, "244", "245"}, TARGET_AND_OTHER, null, Expect.success(244, 245).extraPackage().onePushedAtomEvent()} Expect.success(244, 245).extraPackage().onePushedAtomEvent()}, new Object[]{new String[]{"-terse", "-one", "-p", PACKAGE, "-s", TARGET, "244", "245"}, TARGET_AND_OTHER, null, Expect.success(244, 245).extraPackage().onePushedAtomEvent().terse()}, new Object[]{new String[]{"-one", "-terse", "-p", PACKAGE, "-s", TARGET, "244", "245"}, TARGET_AND_OTHER, null, Expect.success(244, 245).extraPackage().onePushedAtomEvent().terse()}, new Object[]{new String[]{"-one", "-p", PACKAGE, "-terse", "-s", TARGET, "244", "245"}, TARGET_AND_OTHER, null, Expect.success(244, 245).extraPackage().onePushedAtomEvent().terse()}, new Object[]{new String[]{"-one", "-p", PACKAGE, "-s", TARGET, "-terse", "244", "245"}, TARGET_AND_OTHER, null, Expect.success(244, 245).extraPackage().onePushedAtomEvent().terse()} ); } Loading Loading @@ -162,6 +183,11 @@ public class TestDriveTest { assertArrayEquals(mExpect.atoms, collectAtoms(mConfiguration)); assertEquals(mExpect.onePushedAtomEvent, mConfiguration.mOnePushedAtomEvent); assertEquals(mExpect.target, mTestDrive.mDeviceSerial); if (mExpect.terse) { assertEquals(TestDrive.TerseDumper.class, mTestDrive.mDumper.getClass()); } else { assertEquals(TestDrive.BasicDumper.class, mTestDrive.mDumper.getClass()); } } else { assertFalse(result); } Loading Loading
cmds/statsd/tools/localtools/src/com/android/statsd/shelltools/testdrive/TestDrive.java +55 −4 Original line number Diff line number Diff line Loading @@ -25,6 +25,7 @@ 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.Atom; import com.android.os.StatsLog; import com.android.os.StatsLog.ConfigMetricsReport; import com.android.os.StatsLog.ConfigMetricsReportList; import com.android.os.StatsLog.StatsLogReport; Loading Loading @@ -78,11 +79,12 @@ public class TestDrive { @VisibleForTesting String mDeviceSerial = null; @VisibleForTesting Dumper mDumper = new BasicDumper(); public static void main(String[] args) { final Configuration configuration = new Configuration(); TestDrive testDrive = new TestDrive(); final TestDrive testDrive = new TestDrive(); Utils.setUpLogger(LOGGER, false); if (!testDrive.processArgs(configuration, args, Loading @@ -94,7 +96,7 @@ public class TestDrive { configuration.createConfig(), configuration.hasPulledAtoms(), configuration.hasPushedAtoms()); if (reports != null) { configuration.dumpMetrics(reports); configuration.dumpMetrics(reports, testDrive.mDumper); } } Loading @@ -116,6 +118,9 @@ public class TestDrive { if (remaining_args >= 2 && arg.equals("-one")) { LOGGER.info("Creating one event metric to catch all pushed atoms."); configuration.mOnePushedAtomEvent = true; } else if (remaining_args >= 2 && arg.equals("-terse")) { LOGGER.info("Terse output format."); mDumper = new TerseDumper(); } else if (remaining_args >= 3 && arg.equals("-p")) { configuration.mAdditionalAllowedPackage = args[++first_arg]; } else if (remaining_args >= 3 && arg.equals("-s")) { Loading Loading @@ -198,12 +203,13 @@ public class TestDrive { String mAdditionalAllowedPackage = null; private final Set<Long> mTrackedMetrics = new HashSet<>(); private void dumpMetrics(ConfigMetricsReportList reportList) { 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())) { LOGGER.info(statsLog.toString()); dumper.dump(statsLog); } } } Loading Loading @@ -341,6 +347,51 @@ public class TestDrive { } } interface Dumper { void dump(StatsLogReport report); } static class BasicDumper implements Dumper { @Override public void dump(StatsLogReport report) { System.out.println(report.toString()); } } static class TerseDumper extends BasicDumper { @Override public void dump(StatsLogReport report) { if (report.hasGaugeMetrics()) { dumpGaugeMetrics(report); } if (report.hasEventMetrics()) { dumpEventMetrics(report); } } void dumpEventMetrics(StatsLogReport report) { final List<StatsLog.EventMetricData> data = report.getEventMetrics().getDataList(); if (data.isEmpty()) { return; } long firstTimestampNanos = data.get(0).getElapsedTimestampNanos(); for (StatsLog.EventMetricData event : data) { final double deltaSec = (event.getElapsedTimestampNanos() - firstTimestampNanos) / 1e9; System.out.println( String.format("+%.3fs: %s", deltaSec, event.getAtom().toString())); } } void dumpGaugeMetrics(StatsLogReport report) { final List<StatsLog.GaugeMetricData> data = report.getGaugeMetrics().getDataList(); if (data.isEmpty()) { return; } for (StatsLog.GaugeMetricData gauge : data) { System.out.println(gauge.toString()); } } } private static String pushConfig(StatsdConfig config, String deviceSerial) throws IOException, InterruptedException { File configFile = File.createTempFile("statsdconfig", ".config"); Loading
cmds/statsd/tools/localtools/test/com/android/statsd/shelltools/testdrive/TestDriveTest.java +36 −10 Original line number Diff line number Diff line Loading @@ -41,24 +41,21 @@ public class TestDriveTest { static class Expect { public boolean success; public Integer[] atoms; public boolean onePushedAtomEvent; public String extraPackage; public boolean onePushedAtomEvent = false; public String extraPackage = null; public String target; public boolean terse = false; static Expect success(Integer... atoms) { return new Expect(true, atoms, false, null, return new Expect(true, atoms, TARGET); } Expect(boolean success, Integer[] atoms, boolean onePushedAtomEvent, String extraPackage, String target) { Expect(boolean success, Integer[] atoms, String target) { this.success = success; this.atoms = atoms; this.onePushedAtomEvent = onePushedAtomEvent; this.extraPackage = extraPackage; this.target = target; } static final Expect FAILURE = new Expect(false, null, false, null, null); static final Expect FAILURE = new Expect(false, null, null); Expect onePushedAtomEvent() { this.onePushedAtomEvent = true; return this; Loading @@ -67,6 +64,10 @@ public class TestDriveTest { this.extraPackage = TestDriveTest.PACKAGE; return this; } Expect terse() { this.terse = true; return this; } } @Parameterized.Parameter(0) Loading Loading @@ -118,6 +119,10 @@ public class TestDriveTest { Expect.FAILURE}, // Two connected devices, no indication of which to use new Object[]{new String[]{"-one", "244", "245"}, TARGET_ONLY, null, Expect.success(244, 245).onePushedAtomEvent()}, new Object[]{new String[]{"-terse", "-one", "244", "245"}, TARGET_ONLY, null, Expect.success(244, 245).onePushedAtomEvent().terse()}, new Object[]{new String[]{"-one", "-terse", "244", "245"}, TARGET_ONLY, null, Expect.success(244, 245).onePushedAtomEvent().terse()}, new Object[]{new String[]{"-p", PACKAGE, "244", "245"}, TARGET_ONLY, null, Expect.success(244, 245).extraPackage()}, new Object[]{new String[]{"-p", PACKAGE, "-one", "244", "245"}, TARGET_ONLY, null, Loading @@ -132,7 +137,23 @@ public class TestDriveTest { Expect.success(244, 245).extraPackage().onePushedAtomEvent()}, new Object[]{new String[]{"-one", "-p", PACKAGE, "-s", TARGET, "244", "245"}, TARGET_AND_OTHER, null, Expect.success(244, 245).extraPackage().onePushedAtomEvent()} Expect.success(244, 245).extraPackage().onePushedAtomEvent()}, new Object[]{new String[]{"-terse", "-one", "-p", PACKAGE, "-s", TARGET, "244", "245"}, TARGET_AND_OTHER, null, Expect.success(244, 245).extraPackage().onePushedAtomEvent().terse()}, new Object[]{new String[]{"-one", "-terse", "-p", PACKAGE, "-s", TARGET, "244", "245"}, TARGET_AND_OTHER, null, Expect.success(244, 245).extraPackage().onePushedAtomEvent().terse()}, new Object[]{new String[]{"-one", "-p", PACKAGE, "-terse", "-s", TARGET, "244", "245"}, TARGET_AND_OTHER, null, Expect.success(244, 245).extraPackage().onePushedAtomEvent().terse()}, new Object[]{new String[]{"-one", "-p", PACKAGE, "-s", TARGET, "-terse", "244", "245"}, TARGET_AND_OTHER, null, Expect.success(244, 245).extraPackage().onePushedAtomEvent().terse()} ); } Loading Loading @@ -162,6 +183,11 @@ public class TestDriveTest { assertArrayEquals(mExpect.atoms, collectAtoms(mConfiguration)); assertEquals(mExpect.onePushedAtomEvent, mConfiguration.mOnePushedAtomEvent); assertEquals(mExpect.target, mTestDrive.mDeviceSerial); if (mExpect.terse) { assertEquals(TestDrive.TerseDumper.class, mTestDrive.mDumper.getClass()); } else { assertEquals(TestDrive.BasicDumper.class, mTestDrive.mDumper.getClass()); } } else { assertFalse(result); } Loading