166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis// Copyright (c) 2013 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.require('tracing.tracks.process_track_base');
866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis
966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennisbase.exportTo('tracing.tracks', function() {
1066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  var ProcessTrackBase = tracing.tracks.ProcessTrackBase;
1166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis
1266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  /**
1366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis   * @constructor
1466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis   */
1566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  var ProcessTrack = ui.define('process-track', ProcessTrackBase);
1666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis
1766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  ProcessTrack.prototype = {
1866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    __proto__: ProcessTrackBase.prototype,
1966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis
2066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    decorate: function(viewport) {
2166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis      tracing.tracks.ProcessTrackBase.prototype.decorate.call(this, viewport);
2266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    },
2366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis
246833e18b1d4077bf3a727b4422cc2acdbeee35a7Jamie Gennis    drawTrack: function(type) {
256833e18b1d4077bf3a727b4422cc2acdbeee35a7Jamie Gennis      switch (type) {
266833e18b1d4077bf3a727b4422cc2acdbeee35a7Jamie Gennis        case tracing.tracks.DrawType.INSTANT_EVENT:
276833e18b1d4077bf3a727b4422cc2acdbeee35a7Jamie Gennis          if (!this.processBase.instantEvents ||
286833e18b1d4077bf3a727b4422cc2acdbeee35a7Jamie Gennis              this.processBase.instantEvents.length === 0)
296833e18b1d4077bf3a727b4422cc2acdbeee35a7Jamie Gennis            break;
306833e18b1d4077bf3a727b4422cc2acdbeee35a7Jamie Gennis
316833e18b1d4077bf3a727b4422cc2acdbeee35a7Jamie Gennis          var ctx = this.context();
326833e18b1d4077bf3a727b4422cc2acdbeee35a7Jamie Gennis          if (ctx === undefined)
336833e18b1d4077bf3a727b4422cc2acdbeee35a7Jamie Gennis            break;
346833e18b1d4077bf3a727b4422cc2acdbeee35a7Jamie Gennis
356833e18b1d4077bf3a727b4422cc2acdbeee35a7Jamie Gennis          ctx.save();
366833e18b1d4077bf3a727b4422cc2acdbeee35a7Jamie Gennis          var worldBounds = this.setupCanvasForDraw_();
376833e18b1d4077bf3a727b4422cc2acdbeee35a7Jamie Gennis          this.drawInstantEvents_(
386833e18b1d4077bf3a727b4422cc2acdbeee35a7Jamie Gennis              this.processBase.instantEvents,
396833e18b1d4077bf3a727b4422cc2acdbeee35a7Jamie Gennis              worldBounds.left,
406833e18b1d4077bf3a727b4422cc2acdbeee35a7Jamie Gennis              worldBounds.right);
416833e18b1d4077bf3a727b4422cc2acdbeee35a7Jamie Gennis          ctx.restore();
426833e18b1d4077bf3a727b4422cc2acdbeee35a7Jamie Gennis          break;
436833e18b1d4077bf3a727b4422cc2acdbeee35a7Jamie Gennis      }
446833e18b1d4077bf3a727b4422cc2acdbeee35a7Jamie Gennis
456833e18b1d4077bf3a727b4422cc2acdbeee35a7Jamie Gennis      tracing.tracks.ContainerTrack.prototype.drawTrack.call(this, type);
466833e18b1d4077bf3a727b4422cc2acdbeee35a7Jamie Gennis    },
476833e18b1d4077bf3a727b4422cc2acdbeee35a7Jamie Gennis
4866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    // Process maps to processBase because we derive from ProcessTrackBase.
4966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    set process(process) {
5066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis      this.processBase = process;
5166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    },
5266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis
5366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    get process() {
5466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis      return this.processBase;
556833e18b1d4077bf3a727b4422cc2acdbeee35a7Jamie Gennis    },
566833e18b1d4077bf3a727b4422cc2acdbeee35a7Jamie Gennis
576833e18b1d4077bf3a727b4422cc2acdbeee35a7Jamie Gennis    addIntersectingItemsInRangeToSelectionInWorldSpace: function(
586833e18b1d4077bf3a727b4422cc2acdbeee35a7Jamie Gennis        loWX, hiWX, viewPixWidthWorld, selection) {
596833e18b1d4077bf3a727b4422cc2acdbeee35a7Jamie Gennis      function onPickHit(instantEvent) {
606833e18b1d4077bf3a727b4422cc2acdbeee35a7Jamie Gennis        var hit = selection.addSlice(this, instantEvent);
616833e18b1d4077bf3a727b4422cc2acdbeee35a7Jamie Gennis        this.decorateHit(hit);
626833e18b1d4077bf3a727b4422cc2acdbeee35a7Jamie Gennis      }
636833e18b1d4077bf3a727b4422cc2acdbeee35a7Jamie Gennis      base.iterateOverIntersectingIntervals(this.processBase.instantEvents,
646833e18b1d4077bf3a727b4422cc2acdbeee35a7Jamie Gennis          function(x) { return x.start; },
656833e18b1d4077bf3a727b4422cc2acdbeee35a7Jamie Gennis          function(x) { return x.duration; },
666833e18b1d4077bf3a727b4422cc2acdbeee35a7Jamie Gennis          loWX, hiWX,
676833e18b1d4077bf3a727b4422cc2acdbeee35a7Jamie Gennis          onPickHit.bind(this));
686833e18b1d4077bf3a727b4422cc2acdbeee35a7Jamie Gennis
696833e18b1d4077bf3a727b4422cc2acdbeee35a7Jamie Gennis      tracing.tracks.ContainerTrack.prototype.
706833e18b1d4077bf3a727b4422cc2acdbeee35a7Jamie Gennis          addIntersectingItemsInRangeToSelectionInWorldSpace.
716833e18b1d4077bf3a727b4422cc2acdbeee35a7Jamie Gennis          apply(this, arguments);
7266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    }
7366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  };
7466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis
7566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  return {
7666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    ProcessTrack: ProcessTrack
7766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  };
7866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis});
79