Upstream version 9.38.198.0
[platform/framework/web/crosswalk.git] / src / third_party / trace-viewer / trace_viewer / tracing / tracks / async_slice_group_track.html
1 <!DOCTYPE html>
2 <!--
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.
6 -->
7
8 <link rel="import" href="/tracing/tracks/slice_group_track.html">
9 <link rel="import" href="/tvcm/ui.html">
10
11 <script>
12 'use strict';
13
14 tvcm.exportTo('tracing.tracks', function() {
15   /**
16    * A track that displays a AsyncSliceGroup.
17    * @constructor
18    * @extends {SliceGroup}
19    */
20   var AsyncSliceGroupTrack = tvcm.ui.define(
21       'async-slice-group-track',
22       tracing.tracks.SliceGroupTrack);
23
24   AsyncSliceGroupTrack.prototype = {
25
26     __proto__: tracing.tracks.SliceGroupTrack.prototype,
27
28     decorate: function(viewport) {
29       tracing.tracks.SliceGroupTrack.prototype.decorate.call(this, viewport);
30       this.classList.add('async-slice-group-track');
31     },
32
33     addSubTrack_: function(slices) {
34       var track =
35           tracing.tracks.SliceGroupTrack.prototype.addSubTrack_.call(
36               this, slices);
37       track.asyncStyle = true;
38       return track;
39     },
40
41     /**
42      * Breaks up the list of slices into N rows, each of which is a list of
43      * slices that are non overlapping.
44      *
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.
48      */
49     buildSubRows_: function(slices) {
50       slices.sort(function(x, y) {
51         return x.start - y.start;
52       });
53
54       var subRows = [];
55       for (var i = 0; i < slices.length; i++) {
56         var slice = slices[i];
57
58         var found = false;
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) {
63             found = true;
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: ') +
68                   slice.name;
69             for (var k = 0; k < slice.subSlices.length; k++)
70               subRow.push(slice.subSlices[k]);
71             break;
72           }
73         }
74         if (!found) {
75           var subRow = [];
76           if (slice.subSlices !== undefined) {
77             for (var k = 0; k < slice.subSlices.length; k++)
78               subRow.push(slice.subSlices[k]);
79             subRows.push(subRow);
80           }
81         }
82       }
83       return subRows;
84     }
85   };
86
87   return {
88     AsyncSliceGroupTrack: AsyncSliceGroupTrack
89   };
90 });
91 </script>