// Copyright (c) 2012 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'; /** * @fileoverview Provides the TimelineCpu class. */ base.require('timeline_slice'); base.require('timeline_counter'); base.exportTo('tracing', function() { var TimelineCounter = tracing.TimelineCounter; /** * The TimelineCpu represents a Cpu from the kernel's point of view. * @constructor */ function TimelineCpu(number) { this.cpuNumber = number; this.slices = []; this.counters = {}; }; TimelineCpu.prototype = { /** * @return {TimlineCounter} The counter on this process named 'name', * creating it if it doesn't exist. */ getOrCreateCounter: function(cat, name) { var id; if (cat.length) id = cat + '.' + name; else id = name; if (!this.counters[id]) this.counters[id] = new TimelineCounter(this, id, cat, name); return this.counters[id]; }, /** * Shifts all the timestamps inside this CPU forward by the amount * specified. */ shiftTimestampsForward: function(amount) { for (var sI = 0; sI < this.slices.length; sI++) this.slices[sI].start = (this.slices[sI].start + amount); for (var id in this.counters) this.counters[id].shiftTimestampsForward(amount); }, /** * Updates the minTimestamp and maxTimestamp fields based on the * current slices attached to the cpu. */ updateBounds: function() { var values = []; if (this.slices.length) { this.minTimestamp = this.slices[0].start; this.maxTimestamp = this.slices[this.slices.length - 1].end; } else { this.minTimestamp = undefined; this.maxTimestamp = undefined; } } }; /** * Comparison between processes that orders by cpuNumber. */ TimelineCpu.compare = function(x, y) { return x.cpuNumber - y.cpuNumber; }; return { TimelineCpu: TimelineCpu }; });