blob: ed45818be7280d55799feee483993d856e7496ec [file] [log] [blame]
// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
'use strict';
base.require('tracks.container_track');
base.require('tracks.counter_track');
base.require('tracks.thread_track');
base.require('filter');
base.require('ui');
base.exportTo('tracing.tracks', function() {
/**
* Visualizes a Process by building ThreadTracks and CounterTracks.
* @constructor
*/
var ProcessTrack =
tracing.ui.define(tracing.tracks.ContainerTrack);
ProcessTrack.prototype = {
__proto__: tracing.tracks.ContainerTrack.prototype,
decorate: function() {
this.classList.add('process-track');
this.categoryFilter_ = new tracing.Filter();
},
get process() {
return this.process_;
},
set process(process) {
this.process_ = process;
this.updateChildTracks_();
},
applyCategoryFilter_: function() {
this.visible = (this.categoryFilter.matchProcess(this.process) &&
!!this.numVisibleChildTracks);
},
updateChildTracks_: function() {
this.detach();
if (this.process_) {
// Add counter tracks for this process.
var counters = [];
for (var tid in this.process.counters) {
counters.push(this.process.counters[tid]);
}
counters.sort(tracing.model.Counter.compare);
// Create the counters for this process.
counters.forEach(function(counter) {
var track = new tracing.tracks.CounterTrack();
track.heading = counter.name + ':';
track.counter = counter;
this.addTrack_(track);
}.bind(this));
// Get a sorted list of threads.
var threads = [];
for (var tid in this.process.threads)
threads.push(this.process.threads[tid]);
threads.sort(tracing.model.Thread.compare);
// Create the threads.
threads.forEach(function(thread) {
var track = new tracing.tracks.ThreadTrack();
track.heading = thread.userFriendlyName + ':';
track.tooltip = thread.userFriendlyDetails;
track.thread = thread;
this.addTrack_(track);
}.bind(this));
}
}
};
return {
ProcessTrack: ProcessTrack
};
});