// 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);
}
