[metrics] Use data from system_metrics_logger if available
This sets up a temporary fallback while we migrate all the tests to set
up system_metrics_logger, to get higher frequency CPU usage data.
BUG: b/156300857
TEST: fx test sl4f_client_test
Change-Id: Ic1429bc9b03b744a1f34bc6ad379166b1a08649e
Reviewed-on: https://fuchsia-review.googlesource.com/c/fuchsia/+/512766
Reviewed-by: Nathan Rogers <nathanrogers@google.com>
Commit-Queue: Brian Hamrick <bhamrick@google.com>
diff --git a/sdk/testing/sl4f/client/BUILD.gn b/sdk/testing/sl4f/client/BUILD.gn
index eb0beeb..e082d3c 100644
--- a/sdk/testing/sl4f/client/BUILD.gn
+++ b/sdk/testing/sl4f/client/BUILD.gn
@@ -123,6 +123,7 @@
"${root_out_dir}/fake_zedmon",
"test/trace_processing_test_data/chrome_metadata.json",
"test/trace_processing_test_data/cpu_metric.json",
+ "test/trace_processing_test_data/cpu_metric_system_metrics_logger.json",
"test/trace_processing_test_data/flow_event_binding.json",
"test/trace_processing_test_data/flow_ids.json",
"test/trace_processing_test_data/flutter_app.json",
diff --git a/sdk/testing/sl4f/client/lib/src/trace_processing/metrics/cpu_metrics.dart b/sdk/testing/sl4f/client/lib/src/trace_processing/metrics/cpu_metrics.dart
index 949ace0..5f14bf0 100644
--- a/sdk/testing/sl4f/client/lib/src/trace_processing/metrics/cpu_metrics.dart
+++ b/sdk/testing/sl4f/client/lib/src/trace_processing/metrics/cpu_metrics.dart
@@ -27,11 +27,22 @@
'Trace duration (${duration.toMilliseconds()} milliseconds) is too short to provide CPU information');
return [];
}
- final cpuPercentages = getArgValuesFromEvents<num>(
+ List<double> cpuPercentages = getArgValuesFromEvents<num>(
filterEventsTyped<CounterEvent>(getAllEvents(model),
- category: 'system_metrics', name: 'cpu_usage'),
- 'average_cpu_percentage')
- .map((x) => x.toDouble());
+ category: 'system_metrics_logger', name: 'cpu_usage'),
+ 'cpu_usage')
+ .map((x) => x.toDouble())
+ .toList();
+ // TODO(b/156300857): Remove this fallback after all consumers have been
+ // updated to use system_metrics_logger.
+ if (cpuPercentages.isEmpty) {
+ cpuPercentages = getArgValuesFromEvents<num>(
+ filterEventsTyped<CounterEvent>(getAllEvents(model),
+ category: 'system_metrics', name: 'cpu_usage'),
+ 'average_cpu_percentage')
+ .map((x) => x.toDouble())
+ .toList();
+ }
_log.info('Average CPU Load: ${computeMean(cpuPercentages)}');
final List<TestCaseResults> testCaseResults = [];
if (extraArgs.containsKey(_aggregateMetricsOnly) &&
diff --git a/sdk/testing/sl4f/client/test/trace_processing_test.dart b/sdk/testing/sl4f/client/test/trace_processing_test.dart
index fff4f9e..bcc3152 100644
--- a/sdk/testing/sl4f/client/test/trace_processing_test.dart
+++ b/sdk/testing/sl4f/client/test/trace_processing_test.dart
@@ -539,6 +539,33 @@
expect(aggregatedResults[7].values[0], _closeTo(31.50));
});
+ test('CPU metric after system metrics logger migration', () async {
+ final model = await _modelFromPath(
+ 'runtime_deps/cpu_metric_system_metrics_logger.json');
+ final results = cpuMetricsProcessor(model, {});
+ expect(results[0].values[0], _closeTo(43.00));
+ expect(results[0].values[1], _closeTo(20.00));
+ final aggregatedResults =
+ cpuMetricsProcessor(model, {'aggregateMetricsOnly': true});
+ expect(aggregatedResults.length, equals(8));
+ expect(aggregatedResults[0].label, equals('cpu_p5'));
+ expect(aggregatedResults[0].values[0], _closeTo(21.15));
+ expect(aggregatedResults[1].label, equals('cpu_p25'));
+ expect(aggregatedResults[1].values[0], _closeTo(25.75));
+ expect(aggregatedResults[2].label, equals('cpu_p50'));
+ expect(aggregatedResults[2].values[0], _closeTo(31.50));
+ expect(aggregatedResults[3].label, equals('cpu_p75'));
+ expect(aggregatedResults[3].values[0], _closeTo(37.25));
+ expect(aggregatedResults[4].label, equals('cpu_p95'));
+ expect(aggregatedResults[4].values[0], _closeTo(41.85));
+ expect(aggregatedResults[5].label, equals('cpu_min'));
+ expect(aggregatedResults[5].values[0], _closeTo(20.00));
+ expect(aggregatedResults[6].label, equals('cpu_max'));
+ expect(aggregatedResults[6].values[0], _closeTo(43.00));
+ expect(aggregatedResults[7].label, equals('cpu_average'));
+ expect(aggregatedResults[7].values[0], _closeTo(31.50));
+ });
+
test('GPU metric', () async {
{
final model = await _modelFromPath('runtime_deps/gpu_utilization.json');
diff --git a/sdk/testing/sl4f/client/test/trace_processing_test_data/cpu_metric_system_metrics_logger.json b/sdk/testing/sl4f/client/test/trace_processing_test_data/cpu_metric_system_metrics_logger.json
new file mode 100644
index 0000000..eb3337c
--- /dev/null
+++ b/sdk/testing/sl4f/client/test/trace_processing_test_data/cpu_metric_system_metrics_logger.json
@@ -0,0 +1,43 @@
+{
+ "displayTimeUnit": "ns",
+ "systemTraceEvents": {
+ "events": [
+ {
+ "name": "root_presenter",
+ "ph": "p",
+ "pid": 7009
+ },
+ {
+ "name": "initial-thread",
+ "ph": "t",
+ "pid": 7009,
+ "tid": 7022
+ }
+ ],
+ "type": "fuchsia"
+ },
+ "traceEvents": [
+ {
+ "args": {
+ "cpu_usage": 43
+ },
+ "cat": "system_metrics_logger",
+ "name": "cpu_usage",
+ "ph": "C",
+ "pid": 7009,
+ "tid": 7022,
+ "ts": 3000000000
+ },
+ {
+ "args": {
+ "cpu_usage": 20
+ },
+ "cat": "system_metrics_logger",
+ "name": "cpu_usage",
+ "ph": "C",
+ "pid": 7009,
+ "tid": 7022,
+ "ts": 4100000000
+ }
+ ]
+}