summaryrefslogtreecommitdiff
path: root/chromium/third_party/trace-viewer/src/tracing/tracks/kernel_track.js
blob: e7fdcd9ef501a0f2f7e9b48227abfd7192d8aff4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
// Copyright (c) 2013 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.require('tracing.tracks.process_track_base');
base.require('tracing.tracks.cpu_track');
base.require('tracing.tracks.spacing_track');

base.exportTo('tracing.tracks', function() {
  var Cpu = tracing.trace_model.Cpu;
  var CpuTrack = tracing.tracks.cpu_track;
  var ProcessTrackBase = tracing.tracks.ProcessTrackBase;
  var SpacingTrack = tracing.tracks.SpacingTrack;

  /**
   * @constructor
   */
  var KernelTrack = ui.define('kernel-track', ProcessTrackBase);

  KernelTrack.prototype = {
    __proto__: ProcessTrackBase.prototype,

    decorate: function(viewport) {
      tracing.tracks.ProcessTrackBase.prototype.decorate.call(this, viewport);
    },


    // Kernel maps to processBase because we derive from ProcessTrackBase.
    set kernel(kernel) {
      this.processBase = kernel;
    },

    get kernel() {
      return this.processBase;
    },

    willAppendTracks_: function() {
      var cpus = base.dictionaryValues(this.kernel.cpus);
      cpus.sort(tracing.trace_model.Cpu.compare);

      var didAppendAtLeastOneTrack = false;
      for (var i = 0; i < cpus.length; ++i) {
        var cpu = cpus[i];
        var track = new tracing.tracks.CpuTrack(this.viewport);
        track.cpu = cpu;
        if (!track.hasVisibleContent)
          continue;
        this.appendChild(track);
        didAppendAtLeastOneTrack = true;
      }
      if (didAppendAtLeastOneTrack)
        this.appendChild(new SpacingTrack(this.viewport));
    }
  };


  return {
    KernelTrack: KernelTrack
  };
});