blob: b07f204209d52f17bd32b20093e911e17a4112e0 [file] [log] [blame]
Chris Craikb122baf2015-03-05 13:58:42 -08001<!DOCTYPE html>
2<!--
3Copyright (c) 2013 The Chromium Authors. All rights reserved.
4Use of this source code is governed by a BSD-style license that can be
5found in the LICENSE file.
6-->
7
8<link rel="import" href="/core/tracks/container_track.html">
9<link rel="import" href="/core/tracks/slice_track.html">
10<link rel="import" href="/core/filter.html">
Chris Craikb122baf2015-03-05 13:58:42 -080011<link rel="import" href="/base/ui.html">
Chris Craik24385db2015-06-11 11:16:26 -070012<link rel="import" href="/model/model.html">
Chris Craikb122baf2015-03-05 13:58:42 -080013
14<script>
15'use strict';
16
Chris Craik24385db2015-06-11 11:16:26 -070017tr.exportTo('tr.c.tracks', function() {
Chris Craikb122baf2015-03-05 13:58:42 -080018
19 /**
20 * Visualizes a Cpu using a series of of SliceTracks.
21 * @constructor
22 */
23 var CpuTrack =
Chris Craik24385db2015-06-11 11:16:26 -070024 tr.b.ui.define('cpu-track', tr.c.tracks.ContainerTrack);
Chris Craikb122baf2015-03-05 13:58:42 -080025 CpuTrack.prototype = {
Chris Craik24385db2015-06-11 11:16:26 -070026 __proto__: tr.c.tracks.ContainerTrack.prototype,
Chris Craikb122baf2015-03-05 13:58:42 -080027
28 decorate: function(viewport) {
Chris Craik24385db2015-06-11 11:16:26 -070029 tr.c.tracks.ContainerTrack.prototype.decorate.call(this, viewport);
Chris Craikb122baf2015-03-05 13:58:42 -080030 this.classList.add('cpu-track');
Chris Craik19832152015-04-16 15:43:38 -070031 this.detailedMode_ = true;
Chris Craikb122baf2015-03-05 13:58:42 -080032 },
33
34 get cpu() {
35 return this.cpu_;
36 },
37
38 set cpu(cpu) {
39 this.cpu_ = cpu;
40 this.updateContents_();
41 },
42
Chris Craik19832152015-04-16 15:43:38 -070043 get detailedMode() {
44 return this.detailedMode_;
45 },
46
47 set detailedMode(detailedMode) {
48 this.detailedMode_ = detailedMode;
49 this.updateContents_();
50 },
51
Chris Craikb122baf2015-03-05 13:58:42 -080052 get tooltip() {
53 return this.tooltip_;
54 },
55
56 set tooltip(value) {
57 this.tooltip_ = value;
58 this.updateContents_();
59 },
60
61 get hasVisibleContent() {
Chris Craik44c28202015-05-12 17:25:16 -070062 if (this.cpu_ === undefined)
63 return false;
64 var cpu = this.cpu_;
65 if (cpu.slices.length)
66 return true;
67 if (cpu.samples && cpu.samples.length)
68 return true;
Chris Craik24385db2015-06-11 11:16:26 -070069 if (tr.b.dictionaryLength(cpu.counters) > 0)
Chris Craik44c28202015-05-12 17:25:16 -070070 return true;
71 return false;
Chris Craikb122baf2015-03-05 13:58:42 -080072 },
73
74 updateContents_: function() {
75 this.detach();
76 if (!this.cpu_)
77 return;
78 var slices = this.cpu_.slices;
79 if (slices.length) {
Chris Craik24385db2015-06-11 11:16:26 -070080 var track = new tr.c.tracks.SliceTrack(this.viewport);
Chris Craikb122baf2015-03-05 13:58:42 -080081 track.slices = slices;
82 track.heading = this.cpu_.userFriendlyName + ':';
83 this.appendChild(track);
84 }
85
Chris Craik19832152015-04-16 15:43:38 -070086 if (this.detailedMode_) {
87 this.appendSamplesTracks_();
Chris Craikb122baf2015-03-05 13:58:42 -080088
Chris Craik19832152015-04-16 15:43:38 -070089 for (var counterName in this.cpu_.counters) {
90 var counter = this.cpu_.counters[counterName];
Chris Craik24385db2015-06-11 11:16:26 -070091 track = new tr.c.tracks.CounterTrack(this.viewport);
Chris Craik19832152015-04-16 15:43:38 -070092 track.heading = this.cpu_.userFriendlyName + ' ' +
93 counter.name + ':';
94 track.counter = counter;
95 this.appendChild(track);
96 }
Chris Craikb122baf2015-03-05 13:58:42 -080097 }
98 },
99
100 appendSamplesTracks_: function() {
101 var samples = this.cpu_.samples;
102 if (samples === undefined || samples.length === 0)
103 return;
104 var samplesByTitle = {};
105 samples.forEach(function(sample) {
106 if (samplesByTitle[sample.title] === undefined)
107 samplesByTitle[sample.title] = [];
108 samplesByTitle[sample.title].push(sample);
109 });
110
Chris Craik24385db2015-06-11 11:16:26 -0700111 var sampleTitles = tr.b.dictionaryKeys(samplesByTitle);
Chris Craikb122baf2015-03-05 13:58:42 -0800112 sampleTitles.sort();
113
114 sampleTitles.forEach(function(sampleTitle) {
115 var samples = samplesByTitle[sampleTitle];
Chris Craik24385db2015-06-11 11:16:26 -0700116 var samplesTrack = new tr.c.tracks.SliceTrack(this.viewport);
Chris Craikb122baf2015-03-05 13:58:42 -0800117 samplesTrack.group = this.cpu_;
118 samplesTrack.slices = samples;
119 samplesTrack.heading = this.cpu_.userFriendlyName + ': ' +
120 sampleTitle;
121 samplesTrack.tooltip = this.cpu_.userFriendlyDetails;
122 samplesTrack.selectionGenerator = function() {
Chris Craik24385db2015-06-11 11:16:26 -0700123 var selection = new tr.c.Selection();
Chris Craikb122baf2015-03-05 13:58:42 -0800124 for (var i = 0; i < samplesTrack.slices.length; i++) {
125 selection.push(samplesTrack.slices[i]);
126 }
127 return selection;
128 };
129 this.appendChild(samplesTrack);
130 }, this);
131 }
132 };
133
134 return {
135 CpuTrack: CpuTrack
136 };
137});
138</script>