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.requireStylesheet('tracks.model_track'); 888448d9ae4dfff1805045790ef5f32495d62abccJeff Brownbase.require('tracks.container_track'); 988448d9ae4dfff1805045790ef5f32495d62abccJeff Brownbase.require('tracks.cpu_track'); 1088448d9ae4dfff1805045790ef5f32495d62abccJeff Brownbase.require('tracks.process_track'); 112da489cd246702bee5938545b18a6f710ed214bcJamie Gennisbase.require('ui'); 122da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 1388448d9ae4dfff1805045790ef5f32495d62abccJeff Brownbase.exportTo('tracing.tracks', function() { 142da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 152da489cd246702bee5938545b18a6f710ed214bcJamie Gennis /** 1688448d9ae4dfff1805045790ef5f32495d62abccJeff Brown * Visualizes a Model by building ProcessTracks and 1788448d9ae4dfff1805045790ef5f32495d62abccJeff Brown * CpuTracks. 182da489cd246702bee5938545b18a6f710ed214bcJamie Gennis * @constructor 192da489cd246702bee5938545b18a6f710ed214bcJamie Gennis */ 2088448d9ae4dfff1805045790ef5f32495d62abccJeff Brown var ModelTrack = tracing.ui.define(tracing.tracks.ContainerTrack); 212da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 2288448d9ae4dfff1805045790ef5f32495d62abccJeff Brown ModelTrack.prototype = { 232da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 2488448d9ae4dfff1805045790ef5f32495d62abccJeff Brown __proto__: tracing.tracks.ContainerTrack.prototype, 252da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 262da489cd246702bee5938545b18a6f710ed214bcJamie Gennis decorate: function() { 2788448d9ae4dfff1805045790ef5f32495d62abccJeff Brown this.classList.add('model-track'); 282da489cd246702bee5938545b18a6f710ed214bcJamie Gennis this.measuringStick_ = new tracing.MeasuringStick(); 292da489cd246702bee5938545b18a6f710ed214bcJamie Gennis this.measuringStick_.attach(); 302da489cd246702bee5938545b18a6f710ed214bcJamie Gennis }, 312da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 322da489cd246702bee5938545b18a6f710ed214bcJamie Gennis detach: function() { 3388448d9ae4dfff1805045790ef5f32495d62abccJeff Brown tracing.tracks.ContainerTrack.prototype.detach.call(this); 342da489cd246702bee5938545b18a6f710ed214bcJamie Gennis this.measuringStick_.detach(); 352da489cd246702bee5938545b18a6f710ed214bcJamie Gennis }, 362da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 372da489cd246702bee5938545b18a6f710ed214bcJamie Gennis get model() { 382da489cd246702bee5938545b18a6f710ed214bcJamie Gennis return this.model_; 392da489cd246702bee5938545b18a6f710ed214bcJamie Gennis }, 402da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 412da489cd246702bee5938545b18a6f710ed214bcJamie Gennis set model(model) { 422da489cd246702bee5938545b18a6f710ed214bcJamie Gennis this.model_ = model; 432da489cd246702bee5938545b18a6f710ed214bcJamie Gennis this.updateHeadingWidth_(); 442da489cd246702bee5938545b18a6f710ed214bcJamie Gennis this.updateChildTracks_(); 452da489cd246702bee5938545b18a6f710ed214bcJamie Gennis }, 462da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 472da489cd246702bee5938545b18a6f710ed214bcJamie Gennis updateHeadingWidth_: function() { 482da489cd246702bee5938545b18a6f710ed214bcJamie Gennis // Figure out all the headings. 492da489cd246702bee5938545b18a6f710ed214bcJamie Gennis var allHeadings = []; 502da489cd246702bee5938545b18a6f710ed214bcJamie Gennis this.model.getAllThreads().forEach(function(t) { 512da489cd246702bee5938545b18a6f710ed214bcJamie Gennis allHeadings.push(t.userFriendlyName); 522da489cd246702bee5938545b18a6f710ed214bcJamie Gennis }); 532da489cd246702bee5938545b18a6f710ed214bcJamie Gennis this.model.getAllCounters().forEach(function(c) { 542da489cd246702bee5938545b18a6f710ed214bcJamie Gennis allHeadings.push(c.name); 552da489cd246702bee5938545b18a6f710ed214bcJamie Gennis }); 562da489cd246702bee5938545b18a6f710ed214bcJamie Gennis this.model.getAllCpus().forEach(function(c) { 572da489cd246702bee5938545b18a6f710ed214bcJamie Gennis allHeadings.push('CPU ' + c.cpuNumber); 582da489cd246702bee5938545b18a6f710ed214bcJamie Gennis }); 592da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 602da489cd246702bee5938545b18a6f710ed214bcJamie Gennis // Figure out the maximum heading size. 612da489cd246702bee5938545b18a6f710ed214bcJamie Gennis var maxHeadingWidth = 0; 622da489cd246702bee5938545b18a6f710ed214bcJamie Gennis var headingEl = document.createElement('div'); 632da489cd246702bee5938545b18a6f710ed214bcJamie Gennis headingEl.style.position = 'fixed'; 6488448d9ae4dfff1805045790ef5f32495d62abccJeff Brown headingEl.className = 'canvas-based-track-title'; 652da489cd246702bee5938545b18a6f710ed214bcJamie Gennis for (var i = 0; i < allHeadings.length; i++) { 662da489cd246702bee5938545b18a6f710ed214bcJamie Gennis var text = allHeadings[i]; 672da489cd246702bee5938545b18a6f710ed214bcJamie Gennis headingEl.textContent = text + ':__'; 682da489cd246702bee5938545b18a6f710ed214bcJamie Gennis var w = this.measuringStick_.measure(headingEl).width; 692da489cd246702bee5938545b18a6f710ed214bcJamie Gennis // Limit heading width to 300px. 702da489cd246702bee5938545b18a6f710ed214bcJamie Gennis if (w > 300) 712da489cd246702bee5938545b18a6f710ed214bcJamie Gennis w = 300; 722da489cd246702bee5938545b18a6f710ed214bcJamie Gennis if (w > maxHeadingWidth) 732da489cd246702bee5938545b18a6f710ed214bcJamie Gennis maxHeadingWidth = w; 742da489cd246702bee5938545b18a6f710ed214bcJamie Gennis } 752da489cd246702bee5938545b18a6f710ed214bcJamie Gennis this.headingWidth = maxHeadingWidth + 'px'; 762da489cd246702bee5938545b18a6f710ed214bcJamie Gennis }, 772da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 782da489cd246702bee5938545b18a6f710ed214bcJamie Gennis updateChildTracks_: function() { 792da489cd246702bee5938545b18a6f710ed214bcJamie Gennis this.detachAllChildren(); 802da489cd246702bee5938545b18a6f710ed214bcJamie Gennis if (this.model_) { 812da489cd246702bee5938545b18a6f710ed214bcJamie Gennis var cpus = this.model_.getAllCpus(); 8206db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis cpus.sort(tracing.model.Cpu.compare); 832da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 842da489cd246702bee5938545b18a6f710ed214bcJamie Gennis for (var i = 0; i < cpus.length; ++i) { 852da489cd246702bee5938545b18a6f710ed214bcJamie Gennis var cpu = cpus[i]; 8688448d9ae4dfff1805045790ef5f32495d62abccJeff Brown var track = new tracing.tracks.CpuTrack(); 872da489cd246702bee5938545b18a6f710ed214bcJamie Gennis track.heading = 'CPU ' + cpu.cpuNumber + ':'; 882da489cd246702bee5938545b18a6f710ed214bcJamie Gennis track.cpu = cpu; 892da489cd246702bee5938545b18a6f710ed214bcJamie Gennis this.addTrack_(track); 902da489cd246702bee5938545b18a6f710ed214bcJamie Gennis } 912da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 922da489cd246702bee5938545b18a6f710ed214bcJamie Gennis // Get a sorted list of processes. 932da489cd246702bee5938545b18a6f710ed214bcJamie Gennis var processes = this.model_.getAllProcesses(); 9406db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis processes.sort(tracing.model.Process.compare); 952da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 962da489cd246702bee5938545b18a6f710ed214bcJamie Gennis for (var i = 0; i < processes.length; ++i) { 972da489cd246702bee5938545b18a6f710ed214bcJamie Gennis var process = processes[i]; 9888448d9ae4dfff1805045790ef5f32495d62abccJeff Brown var track = new tracing.tracks.ProcessTrack(); 992da489cd246702bee5938545b18a6f710ed214bcJamie Gennis track.process = process; 1002da489cd246702bee5938545b18a6f710ed214bcJamie Gennis this.addTrack_(track); 1012da489cd246702bee5938545b18a6f710ed214bcJamie Gennis } 1022da489cd246702bee5938545b18a6f710ed214bcJamie Gennis } 1032da489cd246702bee5938545b18a6f710ed214bcJamie Gennis } 1042da489cd246702bee5938545b18a6f710ed214bcJamie Gennis }; 1052da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 1062da489cd246702bee5938545b18a6f710ed214bcJamie Gennis return { 10788448d9ae4dfff1805045790ef5f32495d62abccJeff Brown ModelTrack: ModelTrack 1082da489cd246702bee5938545b18a6f710ed214bcJamie Gennis }; 1092da489cd246702bee5938545b18a6f710ed214bcJamie Gennis}); 110