#!/usr/bin/env python2
# -*- coding: utf-8 -*-
# Copyright 2019 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

"""This script is used to generate trace from build_packages eventlog.

Usage:
  $ ./build_packages --withevents --board=${BOARD}
  $ build_trace /mnt/host/source/src/build/events/${date}.json > trace.json
  $ # load trace.json from chrome://tracing
"""

from __future__ import print_function

import argparse
import json
import sys


def get_name(event):
  name = ""
  def append(event, name, key, sep="/"):
    if key in event:
      if name != "":
        name += sep
      name += event[key]
    return name

  name = append(event, name, "task_name")
  name = append(event, name, "category")
  name = append(event, name, "name")
  name = append(event, name, "version", "-")

  return name


def main(argv):
  parser = argparse.ArgumentParser()
  parser.add_argument("eventlogfile")
  args = parser.parse_args(argv)

  with open(args.eventlogfile) as f:
    events = [json.loads(x) for x in f]

  events.sort(key=lambda event: -event["finish_time"])
  threads_starttime = []

  trace_events = []

  for event in events:
    name = get_name(event)
    start_time = int(event["start_time"] * 1e6)
    finish_time = int(event["finish_time"] * 1e6)
    dur = finish_time - start_time

    candidate = [x for x in list(enumerate(threads_starttime))
                 if finish_time <= x[1]]
    candidate.sort(key=lambda x: x[0])
    if len(candidate) == 0:
      tid = len(threads_starttime)
      threads_starttime.append(start_time)
    else:
      tid = candidate[0][0]
      threads_starttime[tid] = start_time

    trace_events.append({
        "name": name,
        "ph": "X",
        "ts": str(start_time),
        "dur": str(dur),
        "pid": "0",
        "tid": str(tid),
    })

  json.dump(trace_events, sys.stdout)


if __name__ == "__main__":
  main(sys.argv[1:])
