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