Upstream version 7.36.149.0
[platform/framework/web/crosswalk.git] / src / third_party / trace-viewer / trace_viewer / tracing / importer / linux_perf / bus_parser.js
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 Parses trace_marker events that were inserted in the trace by
9  * userland.
10  */
11 tvcm.require('tracing.importer.linux_perf.parser');
12 tvcm.require('tracing.trace_model.counter_series');
13
14 tvcm.exportTo('tracing.importer.linux_perf', function() {
15
16   var Parser = tracing.importer.linux_perf.Parser;
17
18   /**
19    * Parses linux trace mark events that were inserted in the trace by userland.
20    * @constructor
21    */
22   function BusParser(importer) {
23     Parser.call(this, importer);
24
25     importer.registerEventHandler('memory_bus_usage',
26         BusParser.prototype.traceMarkWriteBusEvent.bind(this));
27
28     this.model_ = importer.model_;
29     this.ppids_ = {};
30   }
31
32   BusParser.prototype = {
33     __proto__: Parser.prototype,
34
35     traceMarkWriteBusEvent: function(eventName, cpuNumber, pid, ts,
36                                   eventBase, threadName) {
37       var re = new RegExp('bus=(\\S+) rw_bytes=(\\d+) r_bytes=(\\d+) ' +
38                             'w_bytes=(\\d+) cycles=(\\d+) ns=(\\d+)');
39       var event = re.exec(eventBase.details);
40
41       var name = event[1];
42       var rw_bytes = parseInt(event[2]);
43       var r_bytes = parseInt(event[3]);
44       var w_bytes = parseInt(event[4]);
45       var cycles = parseInt(event[5]);
46       var ns = parseInt(event[6]);
47
48       // BW in MB/s
49       var r_bw = r_bytes * 1000000000 / ns;
50       r_bw /= 1024 * 1024;
51       var w_bw = w_bytes * 1000000000 / ns;
52       w_bw /= 1024 * 1024;
53
54       var ctr = this.model_.getOrCreateProcess(0)
55               .getOrCreateCounter(null, 'bus ' + name + ' read');
56       if (ctr.numSeries === 0) {
57         ctr.addSeries(new tracing.trace_model.CounterSeries('value',
58             tvcm.ui.getStringColorId(ctr.name + '.' + 'value')));
59       }
60       ctr.series.forEach(function(series) {
61         series.addCounterSample(ts, r_bw);
62       });
63
64       ctr = this.model_.getOrCreateProcess(0)
65               .getOrCreateCounter(null, 'bus ' + name + ' write');
66       if (ctr.numSeries === 0) {
67         ctr.addSeries(new tracing.trace_model.CounterSeries('value',
68             tvcm.ui.getStringColorId(ctr.name + '.' + 'value')));
69       }
70       ctr.series.forEach(function(series) {
71         series.addCounterSample(ts, r_bw);
72       });
73
74       return true;
75     }
76   };
77
78   Parser.registerSubtype(BusParser);
79
80   return {
81     BusParser: BusParser
82   };
83 });