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/** 6 * @fileoverview Parses trace_marker events that were inserted in the trace by 7 * userland. 8 */ 9base.require('linux_perf_parser'); 10base.exportTo('tracing', function() { 11 12 var LinuxPerfParser = tracing.LinuxPerfParser; 13 14 /** 15 * Parses linux trace mark events that were inserted in the trace by userland. 16 * @constructor 17 */ 18 function LinuxPerfBusParser(importer) { 19 LinuxPerfParser.call(this, importer); 20 21 importer.registerEventHandler('memory_bus_usage', 22 LinuxPerfBusParser.prototype.traceMarkWriteBusEvent.bind(this)); 23 24 this.model_ = importer.model_; 25 this.ppids_ = {}; 26 } 27 28 LinuxPerfBusParser.prototype = { 29 __proto__: LinuxPerfParser.prototype, 30 31 traceMarkWriteBusEvent: function(eventName, cpuNumber, pid, ts, 32 eventBase, threadName) { 33 var re = new RegExp('bus=(\\S+) rw_bytes=(\\d+) r_bytes=(\\d+) ' + 34 'w_bytes=(\\d+) cycles=(\\d+) ns=(\\d+)'); 35 var event = re.exec(eventBase[5]); 36 37 var name = event[1]; 38 var rw_bytes = parseInt(event[2]); 39 var r_bytes = parseInt(event[3]); 40 var w_bytes = parseInt(event[4]); 41 var cycles = parseInt(event[5]); 42 var ns = parseInt(event[6]); 43 44 // BW in MB/s 45 var r_bw = r_bytes * 1000000000 / ns; 46 r_bw /= 1024 * 1024; 47 var w_bw = w_bytes * 1000000000 / ns; 48 w_bw /= 1024 * 1024; 49 50 var ctr = this.model_.getOrCreateProcess(0) 51 .getOrCreateCounter(null, 'bus ' + name + ' read'); 52 // Initialize the counter's series fields if needed. 53 if (ctr.numSeries == 0) { 54 ctr.seriesNames.push('value'); 55 ctr.seriesColors.push( 56 tracing.getStringColorId(ctr.name + '.' + 'value')); 57 } 58 59 // Add the sample value. 60 ctr.timestamps.push(ts); 61 ctr.samples.push(r_bw); 62 63 ctr = this.model_.getOrCreateProcess(0) 64 .getOrCreateCounter(null, 'bus ' + name + ' write'); 65 // Initialize the counter's series fields if needed. 66 if (ctr.numSeries == 0) { 67 ctr.seriesNames.push('value'); 68 ctr.seriesColors.push( 69 tracing.getStringColorId(ctr.name + '.' + 'value')); 70 } 71 72 // Add the sample value. 73 ctr.timestamps.push(ts); 74 ctr.samples.push(w_bw); 75 76 return true; 77 }, 78 }; 79 80 LinuxPerfParser.registerSubtype(LinuxPerfBusParser); 81 82 return { 83 LinuxPerfBusParser: LinuxPerfBusParser 84 }; 85}); 86