ayoutTasks': 20,..}},
  *     v8_runtime: {
  *         total: 500,
  *         events: {'String::NewExternalTwoByte': 0.5,..}},
  *     ...
  *   }
  */
  function generateTimeBreakdownTree(mainThread, rangeOfInterest,
      getEventSelfTime) {
    if (mainThread === null) return;
    const breakdownTree = {};
    for (const title of
      tr.e.chrome.ChromeUserFriendlyCategoryDriver.ALL_TITLES) {
      breakdownTree[title] = {total: 0, events: {}};
    }
    // We do not look at async slices here.
    for