• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1// Copyright (c) 2012 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5'use strict';
6
7base.require('tracing.tracks.track');
8base.require('tracing.filter');
9base.require('ui');
10
11base.exportTo('tracing.tracks', function() {
12
13  /**
14   * A generic track that contains other tracks as its children.
15   * @constructor
16   */
17  var ContainerTrack = ui.define('container-track', tracing.tracks.Track);
18  ContainerTrack.prototype = {
19    __proto__: tracing.tracks.Track.prototype,
20
21    decorate: function(viewport) {
22      tracing.tracks.Track.prototype.decorate.call(this, viewport);
23    },
24
25    detach: function() {
26      this.textContent = '';
27    },
28
29    get tracks_() {
30      var tracks = [];
31      for (var i = 0; i < this.children.length; i++) {
32        if (this.children[i].classList.contains('track'))
33          tracks.push(this.children[i]);
34      }
35      return tracks;
36    },
37
38    drawTrack: function(type) {
39      for (var i = 0; i < this.children.length; ++i) {
40        if (!(this.children[i] instanceof tracing.tracks.Track))
41          continue;
42        this.children[i].drawTrack(type);
43      }
44    },
45
46    /**
47     * Adds items intersecting the given range to a selection.
48     * @param {number} loVX Lower X bound of the interval to search, in
49     *     viewspace.
50     * @param {number} hiVX Upper X bound of the interval to search, in
51     *     viewspace.
52     * @param {number} loY Lower Y bound of the interval to search, in
53     *     viewspace space.
54     * @param {number} hiY Upper Y bound of the interval to search, in
55     *     viewspace space.
56     * @param {Selection} selection Selection to which to add hits.
57     */
58    addIntersectingItemsInRangeToSelection: function(
59        loVX, hiVX, loY, hiY, selection) {
60      for (var i = 0; i < this.tracks_.length; i++) {
61        var trackClientRect = this.tracks_[i].getBoundingClientRect();
62        var a = Math.max(loY, trackClientRect.top);
63        var b = Math.min(hiY, trackClientRect.bottom);
64        if (a <= b)
65          this.tracks_[i].addIntersectingItemsInRangeToSelection(
66              loVX, hiVX, loY, hiY, selection);
67      }
68
69      tracing.tracks.Track.prototype.addIntersectingItemsInRangeToSelection.
70          apply(this, arguments);
71    },
72
73    addAllObjectsMatchingFilterToSelection: function(filter, selection) {
74      for (var i = 0; i < this.tracks_.length; i++)
75        this.tracks_[i].addAllObjectsMatchingFilterToSelection(
76            filter, selection);
77    }
78  };
79
80  return {
81    ContainerTrack: ContainerTrack
82  };
83});
84