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.
8 * @fileoverview Parses exynos events in the Linux event trace format.
10 tvcm.require('tracing.importer.linux_perf.parser');
11 tvcm.exportTo('tracing.importer.linux_perf', function() {
13 var Parser = tracing.importer.linux_perf.Parser;
16 * Parses linux exynos trace events.
19 function ExynosParser(importer) {
20 Parser.call(this, importer);
22 importer.registerEventHandler('exynos_busfreq_target_int',
23 ExynosParser.prototype.busfreqTargetIntEvent.bind(this));
24 importer.registerEventHandler('exynos_busfreq_target_mif',
25 ExynosParser.prototype.busfreqTargetMifEvent.bind(this));
27 importer.registerEventHandler('exynos_page_flip_state',
28 ExynosParser.prototype.pageFlipStateEvent.bind(this));
31 ExynosParser.prototype = {
32 __proto__: Parser.prototype,
34 exynosBusfreqSample: function(name, ts, frequency) {
35 var targetCpu = this.importer.getOrCreateCpuState(0);
36 var counter = targetCpu.cpu.getOrCreateCounter('', name);
37 if (counter.numSeries === 0) {
38 counter.addSeries(new tracing.trace_model.CounterSeries('frequency',
39 tracing.getStringColorId(counter.name + '.' + 'frequency')));
41 counter.series.forEach(function(series) {
42 series.addSample(ts, frequency);
47 * Parses exynos_busfreq_target_int events and sets up state.
49 busfreqTargetIntEvent: function(eventName, cpuNumber, pid, ts, eventBase) {
50 var event = /frequency=(\d+)/.exec(eventBase.details);
54 this.exynosBusfreqSample('INT Frequency', ts, parseInt(event[1]));
59 * Parses exynos_busfreq_target_mif events and sets up state.
61 busfreqTargetMifEvent: function(eventName, cpuNumber, pid, ts, eventBase) {
62 var event = /frequency=(\d+)/.exec(eventBase.details);
66 this.exynosBusfreqSample('MIF Frequency', ts, parseInt(event[1]));
70 exynosPageFlipStateOpenSlice: function(ts, pipe, fb, state) {
71 var kthread = this.importer.getOrCreatePseudoThread(
72 'exynos_flip_state (pipe:' + pipe + ', fb:' + fb + ')');
73 kthread.openSliceTS = ts;
74 kthread.openSlice = state;
77 exynosPageFlipStateCloseSlice: function(ts, pipe, fb, args) {
78 var kthread = this.importer.getOrCreatePseudoThread(
79 'exynos_flip_state (pipe:' + pipe + ', fb:' + fb + ')');
80 if (kthread.openSlice) {
81 var slice = new tracing.trace_model.Slice('', kthread.openSlice,
82 tracing.getStringColorId(kthread.openSlice),
85 ts - kthread.openSliceTS);
86 kthread.thread.sliceGroup.pushSlice(slice);
88 kthread.openSlice = undefined;
92 * Parses page_flip_state events and sets up state in the importer.
94 pageFlipStateEvent: function(eventName, cpuNumber, pid, ts, eventBase) {
95 var event = /pipe=(\d+), fb=(\d+), state=(.*)/.exec(eventBase.details);
99 var pipe = parseInt(event[1]);
100 var fb = parseInt(event[2]);
101 var state = event[3];
103 this.exynosPageFlipStateCloseSlice(ts, pipe, fb,
108 if (state !== 'flipped')
109 this.exynosPageFlipStateOpenSlice(ts, pipe, fb, state);
114 Parser.registerSubtype(ExynosParser);
117 ExynosParser: ExynosParser