166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis// Copyright (c) 2012 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 Gennis/** 866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis * @fileoverview Parses trace_marker events that were inserted in the trace by 966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis * userland. 1066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis */ 1166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennisbase.require('tracing.importer.linux_perf.parser'); 126833e18b1d4077bf3a727b4422cc2acdbeee35a7Jamie Gennisbase.require('tracing.trace_model.counter_series'); 1366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 1466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennisbase.exportTo('tracing.importer.linux_perf', function() { 1566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 1666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var Parser = tracing.importer.linux_perf.Parser; 1766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 1866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis /** 1966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis * Parses linux trace mark events that were inserted in the trace by userland. 2066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis * @constructor 2166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis */ 2266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis function BusParser(importer) { 2366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis Parser.call(this, importer); 2466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 2566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis importer.registerEventHandler('memory_bus_usage', 2666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis BusParser.prototype.traceMarkWriteBusEvent.bind(this)); 2766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 2866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis this.model_ = importer.model_; 2966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis this.ppids_ = {}; 3066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis } 3166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 3266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis BusParser.prototype = { 3366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis __proto__: Parser.prototype, 3466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 3566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis traceMarkWriteBusEvent: function(eventName, cpuNumber, pid, ts, 3666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis eventBase, threadName) { 3766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var re = new RegExp('bus=(\\S+) rw_bytes=(\\d+) r_bytes=(\\d+) ' + 3866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 'w_bytes=(\\d+) cycles=(\\d+) ns=(\\d+)'); 3966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var event = re.exec(eventBase.details); 4066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 4166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var name = event[1]; 4266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var rw_bytes = parseInt(event[2]); 4366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var r_bytes = parseInt(event[3]); 4466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var w_bytes = parseInt(event[4]); 4566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var cycles = parseInt(event[5]); 4666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var ns = parseInt(event[6]); 4766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 4866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis // BW in MB/s 4966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var r_bw = r_bytes * 1000000000 / ns; 5066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis r_bw /= 1024 * 1024; 5166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var w_bw = w_bytes * 1000000000 / ns; 5266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis w_bw /= 1024 * 1024; 5366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 5466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var ctr = this.model_.getOrCreateProcess(0) 5566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis .getOrCreateCounter(null, 'bus ' + name + ' read'); 566833e18b1d4077bf3a727b4422cc2acdbeee35a7Jamie Gennis if (ctr.numSeries === 0) { 576833e18b1d4077bf3a727b4422cc2acdbeee35a7Jamie Gennis ctr.addSeries(new tracing.trace_model.CounterSeries('value', 586833e18b1d4077bf3a727b4422cc2acdbeee35a7Jamie Gennis tracing.getStringColorId(ctr.name + '.' + 'value'))); 5966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis } 606833e18b1d4077bf3a727b4422cc2acdbeee35a7Jamie Gennis ctr.series.forEach(function(series) { 616833e18b1d4077bf3a727b4422cc2acdbeee35a7Jamie Gennis series.addSample(ts, r_bw); 626833e18b1d4077bf3a727b4422cc2acdbeee35a7Jamie Gennis }); 6366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 6466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis ctr = this.model_.getOrCreateProcess(0) 6566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis .getOrCreateCounter(null, 'bus ' + name + ' write'); 666833e18b1d4077bf3a727b4422cc2acdbeee35a7Jamie Gennis if (ctr.numSeries === 0) { 676833e18b1d4077bf3a727b4422cc2acdbeee35a7Jamie Gennis ctr.addSeries(new tracing.trace_model.CounterSeries('value', 686833e18b1d4077bf3a727b4422cc2acdbeee35a7Jamie Gennis tracing.getStringColorId(ctr.name + '.' + 'value'))); 6966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis } 706833e18b1d4077bf3a727b4422cc2acdbeee35a7Jamie Gennis ctr.series.forEach(function(series) { 716833e18b1d4077bf3a727b4422cc2acdbeee35a7Jamie Gennis series.addSample(ts, r_bw); 726833e18b1d4077bf3a727b4422cc2acdbeee35a7Jamie Gennis }); 7366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 7466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis return true; 7566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis } 7666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }; 7766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 7866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis Parser.registerSubtype(BusParser); 7966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 8066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis return { 8166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis BusParser: BusParser 8266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }; 8366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis}); 84