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_slice_track');
92da489cd246702bee5938545b18a6f710ed214bcJamie Gennisbase.require('timeline_filter');
102da489cd246702bee5938545b18a6f710ed214bcJamie Gennisbase.require('timeline_model');
112da489cd246702bee5938545b18a6f710ed214bcJamie Gennisbase.require('ui');
122da489cd246702bee5938545b18a6f710ed214bcJamie Gennisbase.exportTo('tracks', function() {
132da489cd246702bee5938545b18a6f710ed214bcJamie Gennis
142da489cd246702bee5938545b18a6f710ed214bcJamie Gennis  /**
152da489cd246702bee5938545b18a6f710ed214bcJamie Gennis   * Visualizes a TimelineCpu using a series of of TimelineSliceTracks.
162da489cd246702bee5938545b18a6f710ed214bcJamie Gennis   * @constructor
172da489cd246702bee5938545b18a6f710ed214bcJamie Gennis   */
182da489cd246702bee5938545b18a6f710ed214bcJamie Gennis  var TimelineCpuTrack = base.ui.define(tracks.TimelineContainerTrack);
192da489cd246702bee5938545b18a6f710ed214bcJamie Gennis  TimelineCpuTrack.prototype = {
202da489cd246702bee5938545b18a6f710ed214bcJamie Gennis    __proto__: tracks.TimelineContainerTrack.prototype,
212da489cd246702bee5938545b18a6f710ed214bcJamie Gennis
222da489cd246702bee5938545b18a6f710ed214bcJamie Gennis    decorate: function() {
232da489cd246702bee5938545b18a6f710ed214bcJamie Gennis      this.classList.add('timeline-cpu-track');
242da489cd246702bee5938545b18a6f710ed214bcJamie Gennis    },
252da489cd246702bee5938545b18a6f710ed214bcJamie Gennis
262da489cd246702bee5938545b18a6f710ed214bcJamie Gennis    get cpu() {
272da489cd246702bee5938545b18a6f710ed214bcJamie Gennis      return this.cpu_;
282da489cd246702bee5938545b18a6f710ed214bcJamie Gennis    },
292da489cd246702bee5938545b18a6f710ed214bcJamie Gennis
302da489cd246702bee5938545b18a6f710ed214bcJamie Gennis    set cpu(cpu) {
312da489cd246702bee5938545b18a6f710ed214bcJamie Gennis      this.cpu_ = cpu;
322da489cd246702bee5938545b18a6f710ed214bcJamie Gennis      this.updateChildTracks_();
332da489cd246702bee5938545b18a6f710ed214bcJamie Gennis    },
342da489cd246702bee5938545b18a6f710ed214bcJamie Gennis
352da489cd246702bee5938545b18a6f710ed214bcJamie Gennis    get tooltip() {
362da489cd246702bee5938545b18a6f710ed214bcJamie Gennis      return this.tooltip_;
372da489cd246702bee5938545b18a6f710ed214bcJamie Gennis    },
382da489cd246702bee5938545b18a6f710ed214bcJamie Gennis
392da489cd246702bee5938545b18a6f710ed214bcJamie Gennis    set tooltip(value) {
402da489cd246702bee5938545b18a6f710ed214bcJamie Gennis      this.tooltip_ = value;
412da489cd246702bee5938545b18a6f710ed214bcJamie Gennis      this.updateChildTracks_();
422da489cd246702bee5938545b18a6f710ed214bcJamie Gennis    },
432da489cd246702bee5938545b18a6f710ed214bcJamie Gennis
442da489cd246702bee5938545b18a6f710ed214bcJamie Gennis    get heading() {
452da489cd246702bee5938545b18a6f710ed214bcJamie Gennis      return this.heading_;
462da489cd246702bee5938545b18a6f710ed214bcJamie Gennis    },
472da489cd246702bee5938545b18a6f710ed214bcJamie Gennis
482da489cd246702bee5938545b18a6f710ed214bcJamie Gennis    set heading(h) {
492da489cd246702bee5938545b18a6f710ed214bcJamie Gennis      this.heading_ = h;
502da489cd246702bee5938545b18a6f710ed214bcJamie Gennis      this.updateChildTracks_();
512da489cd246702bee5938545b18a6f710ed214bcJamie Gennis    },
522da489cd246702bee5938545b18a6f710ed214bcJamie Gennis
532da489cd246702bee5938545b18a6f710ed214bcJamie Gennis    applyCategoryFilter_: function() {
542da489cd246702bee5938545b18a6f710ed214bcJamie Gennis      if (this.categoryFilter.matchCpu(this.cpu_))
552da489cd246702bee5938545b18a6f710ed214bcJamie Gennis        this.updateChildTracks_();
562da489cd246702bee5938545b18a6f710ed214bcJamie Gennis      else
572da489cd246702bee5938545b18a6f710ed214bcJamie Gennis        this.visible = false;
582da489cd246702bee5938545b18a6f710ed214bcJamie Gennis    },
592da489cd246702bee5938545b18a6f710ed214bcJamie Gennis
602da489cd246702bee5938545b18a6f710ed214bcJamie Gennis    updateChildTracks_: function() {
612da489cd246702bee5938545b18a6f710ed214bcJamie Gennis      this.detach();
622da489cd246702bee5938545b18a6f710ed214bcJamie Gennis      if (this.cpu_) {
632da489cd246702bee5938545b18a6f710ed214bcJamie Gennis        var slices = tracing.filterSliceArray(this.categoryFilter_,
642da489cd246702bee5938545b18a6f710ed214bcJamie Gennis                                              this.cpu_.slices);
652da489cd246702bee5938545b18a6f710ed214bcJamie Gennis        if (slices.length) {
662da489cd246702bee5938545b18a6f710ed214bcJamie Gennis          var track = new tracks.TimelineSliceTrack();
672da489cd246702bee5938545b18a6f710ed214bcJamie Gennis          track.slices = slices;
682da489cd246702bee5938545b18a6f710ed214bcJamie Gennis          track.heading = this.heading_;
692da489cd246702bee5938545b18a6f710ed214bcJamie Gennis          track.tooltip = this.tooltip_;
702da489cd246702bee5938545b18a6f710ed214bcJamie Gennis          this.addTrack_(track);
712da489cd246702bee5938545b18a6f710ed214bcJamie Gennis        }
722da489cd246702bee5938545b18a6f710ed214bcJamie Gennis
732da489cd246702bee5938545b18a6f710ed214bcJamie Gennis        for (var counterName in this.cpu_.counters) {
742da489cd246702bee5938545b18a6f710ed214bcJamie Gennis          var counter = this.cpu_.counters[counterName];
752da489cd246702bee5938545b18a6f710ed214bcJamie Gennis          track = new tracks.TimelineCounterTrack();
762da489cd246702bee5938545b18a6f710ed214bcJamie Gennis          track.heading = 'CPU ' + this.cpu_.cpuNumber + ' ' +
772da489cd246702bee5938545b18a6f710ed214bcJamie Gennis              counter.name + ':';
782da489cd246702bee5938545b18a6f710ed214bcJamie Gennis          track.counter = counter;
792da489cd246702bee5938545b18a6f710ed214bcJamie Gennis          this.addTrack_(track);
802da489cd246702bee5938545b18a6f710ed214bcJamie Gennis        }
812da489cd246702bee5938545b18a6f710ed214bcJamie Gennis      }
822da489cd246702bee5938545b18a6f710ed214bcJamie Gennis      this.addControlButtonElements_(false);
832da489cd246702bee5938545b18a6f710ed214bcJamie Gennis    }
842da489cd246702bee5938545b18a6f710ed214bcJamie Gennis  };
852da489cd246702bee5938545b18a6f710ed214bcJamie Gennis
862da489cd246702bee5938545b18a6f710ed214bcJamie Gennis  return {
872da489cd246702bee5938545b18a6f710ed214bcJamie Gennis    TimelineCpuTrack: TimelineCpuTrack
882da489cd246702bee5938545b18a6f710ed214bcJamie Gennis  };
892da489cd246702bee5938545b18a6f710ed214bcJamie Gennis});
90