// 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.requireStylesheet('tracks.model_track'); base.require('tracks.container_track'); base.require('tracks.cpu_track'); base.require('tracks.process_track'); base.require('ui'); base.exportTo('tracing.tracks', function() { /** * Visualizes a Model by building ProcessTracks and * CpuTracks. * @constructor */ var ModelTrack = tracing.ui.define(tracing.tracks.ContainerTrack); ModelTrack.prototype = { __proto__: tracing.tracks.ContainerTrack.prototype, decorate: function() { this.classList.add('model-track'); this.measuringStick_ = new tracing.MeasuringStick(); this.measuringStick_.attach(); }, detach: function() { tracing.tracks.ContainerTrack.prototype.detach.call(this); this.measuringStick_.detach(); }, get model() { return this.model_; }, set model(model) { this.model_ = model; this.updateHeadingWidth_(); this.updateChildTracks_(); }, updateHeadingWidth_: function() { // Figure out all the headings. var allHeadings = []; this.model.getAllThreads().forEach(function(t) { allHeadings.push(t.userFriendlyName); }); this.model.getAllCounters().forEach(function(c) { allHeadings.push(c.name); }); this.model.getAllCpus().forEach(function(c) { allHeadings.push('CPU ' + c.cpuNumber); }); // Figure out the maximum heading size. var maxHeadingWidth = 0; var headingEl = document.createElement('div'); headingEl.style.position = 'fixed'; headingEl.className = 'canvas-based-track-title'; for (var i = 0; i < allHeadings.length; i++) { var text = allHeadings[i]; headingEl.textContent = text + ':__'; var w = this.measuringStick_.measure(headingEl).width; // Limit heading width to 300px. if (w > 300) w = 300; if (w > maxHeadingWidth) maxHeadingWidth = w; } this.headingWidth = maxHeadingWidth + 'px'; }, updateChildTracks_: function() { this.detachAllChildren(); if (this.model_) { var cpus = this.model_.getAllCpus(); cpus.sort(tracing.model.Cpu.compare); for (var i = 0; i < cpus.length; ++i) { var cpu = cpus[i]; var track = new tracing.tracks.CpuTrack(); track.heading = 'CPU ' + cpu.cpuNumber + ':'; track.cpu = cpu; this.addTrack_(track); } // Get a sorted list of processes. var processes = this.model_.getAllProcesses(); processes.sort(tracing.model.Process.compare); for (var i = 0; i < processes.length; ++i) { var process = processes[i]; var track = new tracing.tracks.ProcessTrack(); track.process = process; this.addTrack_(track); } } } }; return { ModelTrack: ModelTrack }; });