| // Copyright 2019 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| import 'dart:convert'; |
| import 'dart:io'; |
| |
| /// Outputs the time intervals between adjacent cpu samples. |
| /// |
| /// A json file path is required as a command line argument. |
| /// Ex: dart cpu_sample_intervals.dart ~/Downloads/example_json.dart |
| void main(List<String> arguments) async { |
| if (arguments.isEmpty) { |
| print('You must specify a json input file path.\n' |
| 'Ex: dart cpu_sample_intervals.dart ~/Downloads/example.json'); |
| return; |
| } |
| |
| final File file = File(arguments.first); |
| final Map<String, dynamic> timelineDump = |
| (jsonDecode(await file.readAsString()) as Map).cast<String, dynamic>(); |
| final List<dynamic> cpuSampleTraceEvents = |
| timelineDump['cpuProfile']['traceEvents'] as List; |
| |
| final List<int> deltas = []; |
| for (int i = 0; i < cpuSampleTraceEvents.length - 1; i++) { |
| final Map<String, dynamic> current = |
| (cpuSampleTraceEvents[i] as Map).cast<String, dynamic>(); |
| final Map<String, dynamic> next = |
| (cpuSampleTraceEvents[i + 1] as Map).cast<String, dynamic>(); |
| deltas.add((next['ts'] as int) - (current['ts'] as int)); |
| } |
| print(deltas); |
| } |