3 Copyright (c) 2013 The Chromium Authors. All rights reserved.
4 Use of this source code is governed by a BSD-style license that can be
5 found in the LICENSE file.
8 <link rel="import" href="/tracing/tracks/slice_group_track.html">
9 <link rel="import" href="/tvcm/ui.html">
14 tvcm.exportTo('tracing.tracks', function() {
16 * A track that displays a AsyncSliceGroup.
18 * @extends {SliceGroup}
20 var AsyncSliceGroupTrack = tvcm.ui.define(
21 'async-slice-group-track',
22 tracing.tracks.SliceGroupTrack);
24 AsyncSliceGroupTrack.prototype = {
26 __proto__: tracing.tracks.SliceGroupTrack.prototype,
28 decorate: function(viewport) {
29 tracing.tracks.SliceGroupTrack.prototype.decorate.call(this, viewport);
30 this.classList.add('async-slice-group-track');
33 addSubTrack_: function(slices) {
35 tracing.tracks.SliceGroupTrack.prototype.addSubTrack_.call(
37 track.asyncStyle = true;
42 * Breaks up the list of slices into N rows, each of which is a list of
43 * slices that are non overlapping.
45 * It uses a very simple approach: walk through the slices in sorted order
46 * by start time. For each slice, try to fit it in an existing subRow. If it
47 * doesn't fit in any subrow, make another subRow.
49 buildSubRows_: function(slices) {
50 slices.sort(function(x, y) {
51 return x.start - y.start;
55 for (var i = 0; i < slices.length; i++) {
56 var slice = slices[i];
59 for (var j = 0; j < subRows.length; j++) {
60 var subRow = subRows[j];
61 var lastSliceInSubRow = subRow[subRow.length - 1];
62 if (slice.start >= lastSliceInSubRow.end) {
64 // Instead of plotting one big slice for the entire
65 // AsyncEvent, we plot each of the subSlices.
66 if (slice.subSlices === undefined || slice.subSlices.length < 1)
67 throw new Error('AsyncEvent missing subSlices: ') +
69 for (var k = 0; k < slice.subSlices.length; k++)
70 subRow.push(slice.subSlices[k]);
76 if (slice.subSlices !== undefined) {
77 for (var k = 0; k < slice.subSlices.length; k++)
78 subRow.push(slice.subSlices[k]);
88 AsyncSliceGroupTrack: AsyncSliceGroupTrack