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 72da489cd246702bee5938545b18a6f710ed214bcJamie Gennisbase.require('tracks.timeline_container_track'); 82da489cd246702bee5938545b18a6f710ed214bcJamie Gennisbase.require('tracks.timeline_counter_track'); 92da489cd246702bee5938545b18a6f710ed214bcJamie Gennisbase.require('tracks.timeline_thread_track'); 102da489cd246702bee5938545b18a6f710ed214bcJamie Gennisbase.require('timeline_filter'); 112da489cd246702bee5938545b18a6f710ed214bcJamie Gennisbase.require('ui'); 122da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 132da489cd246702bee5938545b18a6f710ed214bcJamie Gennisbase.exportTo('tracks', function() { 142da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 152da489cd246702bee5938545b18a6f710ed214bcJamie Gennis /** 162da489cd246702bee5938545b18a6f710ed214bcJamie Gennis * Visualizes a TimelineProcess by building TimelineThreadTracks and 172da489cd246702bee5938545b18a6f710ed214bcJamie Gennis * TimelineCounterTracks. 182da489cd246702bee5938545b18a6f710ed214bcJamie Gennis * @constructor 192da489cd246702bee5938545b18a6f710ed214bcJamie Gennis */ 202da489cd246702bee5938545b18a6f710ed214bcJamie Gennis var TimelineProcessTrack = base.ui.define(tracks.TimelineContainerTrack); 212da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 222da489cd246702bee5938545b18a6f710ed214bcJamie Gennis TimelineProcessTrack.prototype = { 232da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 242da489cd246702bee5938545b18a6f710ed214bcJamie Gennis __proto__: tracks.TimelineContainerTrack.prototype, 252da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 262da489cd246702bee5938545b18a6f710ed214bcJamie Gennis decorate: function() { 272da489cd246702bee5938545b18a6f710ed214bcJamie Gennis this.classList.add('timeline-process-track'); 282da489cd246702bee5938545b18a6f710ed214bcJamie Gennis this.categoryFilter_ = new tracing.TimelineFilter(); 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 } 532da489cd246702bee5938545b18a6f710ed214bcJamie Gennis counters.sort(tracing.TimelineCounter.compare); 542da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 552da489cd246702bee5938545b18a6f710ed214bcJamie Gennis // Create the counters for this process. 562da489cd246702bee5938545b18a6f710ed214bcJamie Gennis counters.forEach(function(counter) { 572da489cd246702bee5938545b18a6f710ed214bcJamie Gennis var track = new tracks.TimelineCounterTrack(); 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]); 672da489cd246702bee5938545b18a6f710ed214bcJamie Gennis threads.sort(tracing.TimelineThread.compare); 682da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 692da489cd246702bee5938545b18a6f710ed214bcJamie Gennis // Create the threads. 702da489cd246702bee5938545b18a6f710ed214bcJamie Gennis threads.forEach(function(thread) { 712da489cd246702bee5938545b18a6f710ed214bcJamie Gennis var track = new tracks.TimelineThreadTrack(); 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 { 822da489cd246702bee5938545b18a6f710ed214bcJamie Gennis TimelineProcessTrack: TimelineProcessTrack 832da489cd246702bee5938545b18a6f710ed214bcJamie Gennis }; 842da489cd246702bee5938545b18a6f710ed214bcJamie Gennis}); 85