Home | History | Annotate | Download | only in trace_model
      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 
      7 /**
      8  * @fileoverview Provides the Cpu class.
      9  */
     10 base.require('base.range');
     11 base.require('tracing.trace_model.slice');
     12 base.require('tracing.trace_model.counter');
     13 base.exportTo('tracing.trace_model', function() {
     14 
     15   var Counter = tracing.trace_model.Counter;
     16 
     17   /**
     18    * The Cpu represents a Cpu from the kernel's point of view.
     19    * @constructor
     20    */
     21   function Cpu(number) {
     22     this.cpuNumber = number;
     23     this.slices = [];
     24     this.counters = {};
     25     this.bounds = new base.Range();
     26   };
     27 
     28   Cpu.prototype = {
     29     /**
     30      * @return {TimlineCounter} The counter on this process named 'name',
     31      * creating it if it doesn't exist.
     32      */
     33     getOrCreateCounter: function(cat, name) {
     34       var id;
     35       if (cat.length)
     36         id = cat + '.' + name;
     37       else
     38         id = name;
     39       if (!this.counters[id])
     40         this.counters[id] = new Counter(this, id, cat, name);
     41       return this.counters[id];
     42     },
     43 
     44     /**
     45      * Shifts all the timestamps inside this CPU forward by the amount
     46      * specified.
     47      */
     48     shiftTimestampsForward: function(amount) {
     49       for (var sI = 0; sI < this.slices.length; sI++)
     50         this.slices[sI].start = (this.slices[sI].start + amount);
     51       for (var id in this.counters)
     52         this.counters[id].shiftTimestampsForward(amount);
     53     },
     54 
     55     /**
     56      * Updates the range based on the current slices attached to the cpu.
     57      */
     58     updateBounds: function() {
     59       this.bounds.reset();
     60       if (this.slices.length) {
     61         this.bounds.addValue(this.slices[0].start);
     62         this.bounds.addValue(this.slices[this.slices.length - 1].end);
     63       }
     64       for (var id in this.counters) {
     65         this.counters[id].updateBounds();
     66         this.bounds.addRange(this.counters[id].bounds);
     67       }
     68     },
     69 
     70     addCategoriesToDict: function(categoriesDict) {
     71       for (var i = 0; i < this.slices.length; i++)
     72         categoriesDict[this.slices[i].category] = true;
     73       for (var id in this.counters)
     74         categoriesDict[this.counters[id].category] = true;
     75     }
     76 
     77   };
     78 
     79   /**
     80    * Comparison between processes that orders by cpuNumber.
     81    */
     82   Cpu.compare = function(x, y) {
     83     return x.cpuNumber - y.cpuNumber;
     84   };
     85 
     86 
     87   return {
     88     Cpu: Cpu
     89   };
     90 });
     91