157a636a44b62b6d8aece3b27aee6ddac2c8c4d8bErik Gilling// Copyright (c) 2012 The Chromium Authors. All rights reserved. 257a636a44b62b6d8aece3b27aee6ddac2c8c4d8bErik Gilling// Use of this source code is governed by a BSD-style license that can be 357a636a44b62b6d8aece3b27aee6ddac2c8c4d8bErik Gilling// found in the LICENSE file. 457a636a44b62b6d8aece3b27aee6ddac2c8c4d8bErik Gilling 566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis'use strict'; 666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 757a636a44b62b6d8aece3b27aee6ddac2c8c4d8bErik Gilling/** 857a636a44b62b6d8aece3b27aee6ddac2c8c4d8bErik Gilling * @fileoverview Parses trace_marker events that were inserted in the trace by 957a636a44b62b6d8aece3b27aee6ddac2c8c4d8bErik Gilling * userland. 1057a636a44b62b6d8aece3b27aee6ddac2c8c4d8bErik Gilling */ 1166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennisbase.require('tracing.importer.linux_perf.parser'); 126833e18b1d4077bf3a727b4422cc2acdbeee35a7Jamie Gennisbase.require('tracing.trace_model.counter_series'); 136833e18b1d4077bf3a727b4422cc2acdbeee35a7Jamie Gennis 1488448d9ae4dfff1805045790ef5f32495d62abccJeff Brownbase.exportTo('tracing.importer.linux_perf', function() { 1557a636a44b62b6d8aece3b27aee6ddac2c8c4d8bErik Gilling 1688448d9ae4dfff1805045790ef5f32495d62abccJeff Brown var Parser = tracing.importer.linux_perf.Parser; 1757a636a44b62b6d8aece3b27aee6ddac2c8c4d8bErik Gilling 1857a636a44b62b6d8aece3b27aee6ddac2c8c4d8bErik Gilling /** 1957a636a44b62b6d8aece3b27aee6ddac2c8c4d8bErik Gilling * Parses linux trace mark events that were inserted in the trace by userland. 2057a636a44b62b6d8aece3b27aee6ddac2c8c4d8bErik Gilling * @constructor 2157a636a44b62b6d8aece3b27aee6ddac2c8c4d8bErik Gilling */ 2288448d9ae4dfff1805045790ef5f32495d62abccJeff Brown function ClockParser(importer) { 2388448d9ae4dfff1805045790ef5f32495d62abccJeff Brown Parser.call(this, importer); 2457a636a44b62b6d8aece3b27aee6ddac2c8c4d8bErik Gilling 2557a636a44b62b6d8aece3b27aee6ddac2c8c4d8bErik Gilling importer.registerEventHandler('clock_set_rate', 2688448d9ae4dfff1805045790ef5f32495d62abccJeff Brown ClockParser.prototype.traceMarkWriteClockEvent.bind(this)); 2757a636a44b62b6d8aece3b27aee6ddac2c8c4d8bErik Gilling 2857a636a44b62b6d8aece3b27aee6ddac2c8c4d8bErik Gilling this.model_ = importer.model_; 2957a636a44b62b6d8aece3b27aee6ddac2c8c4d8bErik Gilling this.ppids_ = {}; 3057a636a44b62b6d8aece3b27aee6ddac2c8c4d8bErik Gilling } 3157a636a44b62b6d8aece3b27aee6ddac2c8c4d8bErik Gilling 3288448d9ae4dfff1805045790ef5f32495d62abccJeff Brown ClockParser.prototype = { 3388448d9ae4dfff1805045790ef5f32495d62abccJeff Brown __proto__: Parser.prototype, 3457a636a44b62b6d8aece3b27aee6ddac2c8c4d8bErik Gilling 3557a636a44b62b6d8aece3b27aee6ddac2c8c4d8bErik Gilling traceMarkWriteClockEvent: function(eventName, cpuNumber, pid, ts, 3666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis eventBase, threadName) { 3766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var event = /(\S+) state=(\d+) cpu_id=(\d+)/.exec(eventBase.details); 3857a636a44b62b6d8aece3b27aee6ddac2c8c4d8bErik Gilling 3957a636a44b62b6d8aece3b27aee6ddac2c8c4d8bErik Gilling 4066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var name = event[1]; 4166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var rate = parseInt(event[2]); 4257a636a44b62b6d8aece3b27aee6ddac2c8c4d8bErik Gilling 4366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var ctr = this.model_.getOrCreateProcess(0) 4457a636a44b62b6d8aece3b27aee6ddac2c8c4d8bErik Gilling .getOrCreateCounter(null, name); 4566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis // Initialize the counter's series fields if needed. 466833e18b1d4077bf3a727b4422cc2acdbeee35a7Jamie Gennis if (ctr.numSeries === 0) { 476833e18b1d4077bf3a727b4422cc2acdbeee35a7Jamie Gennis ctr.addSeries(new tracing.trace_model.CounterSeries('value', 486833e18b1d4077bf3a727b4422cc2acdbeee35a7Jamie Gennis tracing.getStringColorId(ctr.name + '.' + 'value'))); 4966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis } 506833e18b1d4077bf3a727b4422cc2acdbeee35a7Jamie Gennis ctr.series.forEach(function(series) { 516833e18b1d4077bf3a727b4422cc2acdbeee35a7Jamie Gennis series.addSample(ts, rate); 526833e18b1d4077bf3a727b4422cc2acdbeee35a7Jamie Gennis }); 5366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 5466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis return true; 5566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis } 5657a636a44b62b6d8aece3b27aee6ddac2c8c4d8bErik Gilling }; 5757a636a44b62b6d8aece3b27aee6ddac2c8c4d8bErik Gilling 5888448d9ae4dfff1805045790ef5f32495d62abccJeff Brown Parser.registerSubtype(ClockParser); 5957a636a44b62b6d8aece3b27aee6ddac2c8c4d8bErik Gilling 6057a636a44b62b6d8aece3b27aee6ddac2c8c4d8bErik Gilling return { 6188448d9ae4dfff1805045790ef5f32495d62abccJeff Brown ClockParser: ClockParser 6257a636a44b62b6d8aece3b27aee6ddac2c8c4d8bErik Gilling }; 6357a636a44b62b6d8aece3b27aee6ddac2c8c4d8bErik Gilling}); 64