166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis// Copyright (c) 2012 The Chromium Authors. All rights reserved. 266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis// Use of this source code is governed by a BSD-style license that can be 366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis// found in the LICENSE file. 466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis'use strict'; 666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennisbase.requireStylesheet('tracing.tracks.thread_track'); 866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennisbase.require('tracing.tracks.container_track'); 1066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennisbase.require('tracing.tracks.slice_track'); 1166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennisbase.require('tracing.tracks.slice_group_track'); 1266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennisbase.require('tracing.tracks.async_slice_group_track'); 1366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennisbase.require('tracing.filter'); 1466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennisbase.require('ui'); 1566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 1666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennisbase.exportTo('tracing.tracks', function() { 1766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 1866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis /** 1966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis * Visualizes a Thread using a series of of SliceTracks. 2066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis * @constructor 2166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis */ 2266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var ThreadTrack = ui.define('thread-track', tracing.tracks.ContainerTrack); 2366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis ThreadTrack.prototype = { 2466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis __proto__: tracing.tracks.ContainerTrack.prototype, 2566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 2666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis decorate: function(viewport) { 2766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis tracing.tracks.ContainerTrack.prototype.decorate.call(this, viewport); 2866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis this.classList.add('thread-track'); 2966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }, 3066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 3166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis get thread() { 3266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis return this.thread_; 3366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }, 3466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 3566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis set thread(thread) { 3666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis this.thread_ = thread; 3766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis this.updateContents_(); 3866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }, 3966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 4066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis get hasVisibleContent() { 4166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis return this.tracks_.length > 0; 4266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }, 4366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 4466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis updateContents_: function() { 4566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis this.detach(); 4666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 4766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis if (!this.thread_) 4866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis return; 4966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 5066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis this.heading = this.thread_.userFriendlyName + ': '; 5166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis this.tooltip = this.thread_.userFriendlyDetails; 5266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 5366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis if (this.thread_.asyncSliceGroup.length) { 5466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var asyncTrack = new tracing.tracks.AsyncSliceGroupTrack(this.viewport); 5566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis asyncTrack.categoryFilter = this.categoryFilter; 5666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis asyncTrack.decorateHit = function(hit) { 5766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis // TODO(simonjam): figure out how to associate subSlice hits back 5866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis // to their parent slice. 5966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }; 6066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis asyncTrack.group = this.thread_.asyncSliceGroup; 6166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis if (asyncTrack.hasVisibleContent) 6266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis this.appendChild(asyncTrack); 6366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis } 6466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 6566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis if (this.thread_.samples.length) { 6666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var samplesTrack = new tracing.tracks.SliceTrack(this.viewport); 6766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis samplesTrack.categoryFilter = samplesTrack; 6866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis samplesTrack.group = this.thread_; 6966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis samplesTrack.slices = this.thread_.samples; 7066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis samplesTrack.decorateHit = function(hit) { 7166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis // TODO(johnmccutchan): Figure out what else should be associated 7266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis // with the hit. 7366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis hit.thread = this.thread_; 7466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis } 7566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis this.appendChild(samplesTrack); 7666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis } 7766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 7866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis if (this.thread_.cpuSlices) { 7966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var cpuTrack = new tracing.tracks.SliceTrack(this.viewport); 8066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis cpuTrack.categoryFilter = this.categoryFilter; 8166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis cpuTrack.heading = ''; 8266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis cpuTrack.height = '4px'; 8366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis cpuTrack.decorateHit = function(hit) { 8466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis hit.thread = this.thread_; 8566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis } 8666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis cpuTrack.slices = this.thread_.cpuSlices; 8766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis if (cpuTrack.hasVisibleContent) 8866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis this.appendChild(cpuTrack); 8966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis } 9066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 9166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis if (this.thread_.sliceGroup.length) { 9266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var track = new tracing.tracks.SliceGroupTrack(this.viewport); 9366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis track.categoryFilter = this.categoryFilter; 9466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis track.heading = this.thread_.userFriendlyName; 9566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis track.tooltip = this.thread_.userFriendlyDetails; 9666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 9766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis track.decorateHit = function(hit) { 9866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis hit.thread = this.thread_; 9966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }; 10066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis track.group = this.thread_.sliceGroup; 10166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis if (track.hasVisibleContent) 10266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis this.appendChild(track); 10366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis } 10466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }, 10566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 10666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis collapsedDidChange: function(collapsed) { 10766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis if (collapsed) { 10866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var h = parseInt(this.tracks[0].height); 10966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis for (var i = 0; i < this.tracks.length; ++i) { 11066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis if (h > 2) { 11166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis this.tracks[i].height = Math.floor(h) + 'px'; 11266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis } else { 11366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis this.tracks[i].style.display = 'none'; 11466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis } 11566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis h = h * 0.5; 11666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis } 11766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis } else { 11866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis for (var i = 0; i < this.tracks.length; ++i) { 11966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis this.tracks[i].height = this.tracks[0].height; 12066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis this.tracks[i].style.display = ''; 12166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis } 12266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis } 12366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis } 12466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }; 12566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 12666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis return { 12766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis ThreadTrack: ThreadTrack 12866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }; 12966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis}); 130