12da489cd246702bee5938545b18a6f710ed214bcJamie Gennis// Copyright (c) 2012 The Chromium Authors. All rights reserved.
22da489cd246702bee5938545b18a6f710ed214bcJamie Gennis// Use of this source code is governed by a BSD-style license that can be
32da489cd246702bee5938545b18a6f710ed214bcJamie Gennis// found in the LICENSE file.
42da489cd246702bee5938545b18a6f710ed214bcJamie Gennis
52da489cd246702bee5938545b18a6f710ed214bcJamie Gennis'use strict';
62da489cd246702bee5938545b18a6f710ed214bcJamie Gennis
788448d9ae4dfff1805045790ef5f32495d62abccJeff Brownbase.require('tracks.container_track');
888448d9ae4dfff1805045790ef5f32495d62abccJeff Brownbase.require('tracks.counter_track');
988448d9ae4dfff1805045790ef5f32495d62abccJeff Brownbase.require('tracks.thread_track');
1088448d9ae4dfff1805045790ef5f32495d62abccJeff Brownbase.require('filter');
112da489cd246702bee5938545b18a6f710ed214bcJamie Gennisbase.require('ui');
122da489cd246702bee5938545b18a6f710ed214bcJamie Gennis
1388448d9ae4dfff1805045790ef5f32495d62abccJeff Brownbase.exportTo('tracing.tracks', function() {
142da489cd246702bee5938545b18a6f710ed214bcJamie Gennis
152da489cd246702bee5938545b18a6f710ed214bcJamie Gennis  /**
1688448d9ae4dfff1805045790ef5f32495d62abccJeff Brown   * Visualizes a Process by building ThreadTracks and CounterTracks.
172da489cd246702bee5938545b18a6f710ed214bcJamie Gennis   * @constructor
182da489cd246702bee5938545b18a6f710ed214bcJamie Gennis   */
1988448d9ae4dfff1805045790ef5f32495d62abccJeff Brown  var ProcessTrack =
2088448d9ae4dfff1805045790ef5f32495d62abccJeff Brown      tracing.ui.define(tracing.tracks.ContainerTrack);
212da489cd246702bee5938545b18a6f710ed214bcJamie Gennis
2288448d9ae4dfff1805045790ef5f32495d62abccJeff Brown  ProcessTrack.prototype = {
232da489cd246702bee5938545b18a6f710ed214bcJamie Gennis
2488448d9ae4dfff1805045790ef5f32495d62abccJeff Brown    __proto__: tracing.tracks.ContainerTrack.prototype,
252da489cd246702bee5938545b18a6f710ed214bcJamie Gennis
262da489cd246702bee5938545b18a6f710ed214bcJamie Gennis    decorate: function() {
2788448d9ae4dfff1805045790ef5f32495d62abccJeff Brown      this.classList.add('process-track');
2888448d9ae4dfff1805045790ef5f32495d62abccJeff Brown      this.categoryFilter_ = new tracing.Filter();
292da489cd246702bee5938545b18a6f710ed214bcJamie Gennis    },
302da489cd246702bee5938545b18a6f710ed214bcJamie Gennis
312da489cd246702bee5938545b18a6f710ed214bcJamie Gennis    get process() {
322da489cd246702bee5938545b18a6f710ed214bcJamie Gennis      return this.process_;
332da489cd246702bee5938545b18a6f710ed214bcJamie Gennis    },
342da489cd246702bee5938545b18a6f710ed214bcJamie Gennis
352da489cd246702bee5938545b18a6f710ed214bcJamie Gennis    set process(process) {
362da489cd246702bee5938545b18a6f710ed214bcJamie Gennis      this.process_ = process;
372da489cd246702bee5938545b18a6f710ed214bcJamie Gennis      this.updateChildTracks_();
382da489cd246702bee5938545b18a6f710ed214bcJamie Gennis    },
392da489cd246702bee5938545b18a6f710ed214bcJamie Gennis
402da489cd246702bee5938545b18a6f710ed214bcJamie Gennis    applyCategoryFilter_: function() {
412da489cd246702bee5938545b18a6f710ed214bcJamie Gennis      this.visible = (this.categoryFilter.matchProcess(this.process) &&
422da489cd246702bee5938545b18a6f710ed214bcJamie Gennis                      !!this.numVisibleChildTracks);
432da489cd246702bee5938545b18a6f710ed214bcJamie Gennis    },
442da489cd246702bee5938545b18a6f710ed214bcJamie Gennis
452da489cd246702bee5938545b18a6f710ed214bcJamie Gennis    updateChildTracks_: function() {
462da489cd246702bee5938545b18a6f710ed214bcJamie Gennis      this.detach();
472da489cd246702bee5938545b18a6f710ed214bcJamie Gennis      if (this.process_) {
482da489cd246702bee5938545b18a6f710ed214bcJamie Gennis        // Add counter tracks for this process.
492da489cd246702bee5938545b18a6f710ed214bcJamie Gennis        var counters = [];
502da489cd246702bee5938545b18a6f710ed214bcJamie Gennis        for (var tid in this.process.counters) {
512da489cd246702bee5938545b18a6f710ed214bcJamie Gennis          counters.push(this.process.counters[tid]);
522da489cd246702bee5938545b18a6f710ed214bcJamie Gennis        }
5306db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis        counters.sort(tracing.model.Counter.compare);
542da489cd246702bee5938545b18a6f710ed214bcJamie Gennis
552da489cd246702bee5938545b18a6f710ed214bcJamie Gennis        // Create the counters for this process.
562da489cd246702bee5938545b18a6f710ed214bcJamie Gennis        counters.forEach(function(counter) {
5788448d9ae4dfff1805045790ef5f32495d62abccJeff Brown          var track = new tracing.tracks.CounterTrack();
582da489cd246702bee5938545b18a6f710ed214bcJamie Gennis          track.heading = counter.name + ':';
592da489cd246702bee5938545b18a6f710ed214bcJamie Gennis          track.counter = counter;
602da489cd246702bee5938545b18a6f710ed214bcJamie Gennis          this.addTrack_(track);
612da489cd246702bee5938545b18a6f710ed214bcJamie Gennis        }.bind(this));
622da489cd246702bee5938545b18a6f710ed214bcJamie Gennis
632da489cd246702bee5938545b18a6f710ed214bcJamie Gennis        // Get a sorted list of threads.
642da489cd246702bee5938545b18a6f710ed214bcJamie Gennis        var threads = [];
652da489cd246702bee5938545b18a6f710ed214bcJamie Gennis        for (var tid in this.process.threads)
662da489cd246702bee5938545b18a6f710ed214bcJamie Gennis          threads.push(this.process.threads[tid]);
6706db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis        threads.sort(tracing.model.Thread.compare);
682da489cd246702bee5938545b18a6f710ed214bcJamie Gennis
692da489cd246702bee5938545b18a6f710ed214bcJamie Gennis        // Create the threads.
702da489cd246702bee5938545b18a6f710ed214bcJamie Gennis        threads.forEach(function(thread) {
7188448d9ae4dfff1805045790ef5f32495d62abccJeff Brown          var track = new tracing.tracks.ThreadTrack();
722da489cd246702bee5938545b18a6f710ed214bcJamie Gennis          track.heading = thread.userFriendlyName + ':';
732da489cd246702bee5938545b18a6f710ed214bcJamie Gennis          track.tooltip = thread.userFriendlyDetails;
742da489cd246702bee5938545b18a6f710ed214bcJamie Gennis          track.thread = thread;
752da489cd246702bee5938545b18a6f710ed214bcJamie Gennis          this.addTrack_(track);
762da489cd246702bee5938545b18a6f710ed214bcJamie Gennis        }.bind(this));
772da489cd246702bee5938545b18a6f710ed214bcJamie Gennis      }
782da489cd246702bee5938545b18a6f710ed214bcJamie Gennis    }
792da489cd246702bee5938545b18a6f710ed214bcJamie Gennis  };
802da489cd246702bee5938545b18a6f710ed214bcJamie Gennis
812da489cd246702bee5938545b18a6f710ed214bcJamie Gennis  return {
8288448d9ae4dfff1805045790ef5f32495d62abccJeff Brown    ProcessTrack: ProcessTrack
832da489cd246702bee5938545b18a6f710ed214bcJamie Gennis  };
842da489cd246702bee5938545b18a6f710ed214bcJamie Gennis});
85