12da489cd246702bee5938545b18a6f710ed214bcJamie Gennis// Copyright (c) 2012 The Chromium Authors. All rights reserved. 22da489cd246702bee5938545b18a6f710ed214bcJamie Gennis// Use of this source code is governed by a BSD-style license that can be 32da489cd246702bee5938545b18a6f710ed214bcJamie Gennis// found in the LICENSE file. 42da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis'use strict'; 666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 72da489cd246702bee5938545b18a6f710ed214bcJamie Gennis/** 82da489cd246702bee5938545b18a6f710ed214bcJamie Gennis * @fileoverview Parses exynos events in the Linux event trace format. 92da489cd246702bee5938545b18a6f710ed214bcJamie Gennis */ 1066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennisbase.require('tracing.importer.linux_perf.parser'); 1188448d9ae4dfff1805045790ef5f32495d62abccJeff Brownbase.exportTo('tracing.importer.linux_perf', function() { 122da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 1388448d9ae4dfff1805045790ef5f32495d62abccJeff Brown var Parser = tracing.importer.linux_perf.Parser; 142da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 152da489cd246702bee5938545b18a6f710ed214bcJamie Gennis /** 162da489cd246702bee5938545b18a6f710ed214bcJamie Gennis * Parses linux exynos trace events. 172da489cd246702bee5938545b18a6f710ed214bcJamie Gennis * @constructor 182da489cd246702bee5938545b18a6f710ed214bcJamie Gennis */ 1988448d9ae4dfff1805045790ef5f32495d62abccJeff Brown function ExynosParser(importer) { 2088448d9ae4dfff1805045790ef5f32495d62abccJeff Brown Parser.call(this, importer); 212da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 222da489cd246702bee5938545b18a6f710ed214bcJamie Gennis importer.registerEventHandler('exynos_flip_request', 2388448d9ae4dfff1805045790ef5f32495d62abccJeff Brown ExynosParser.prototype.flipEvent.bind(this)); 242da489cd246702bee5938545b18a6f710ed214bcJamie Gennis importer.registerEventHandler('exynos_flip_complete', 2588448d9ae4dfff1805045790ef5f32495d62abccJeff Brown ExynosParser.prototype.flipEvent.bind(this)); 262da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 272da489cd246702bee5938545b18a6f710ed214bcJamie Gennis importer.registerEventHandler('exynos_busfreq_target_int', 2888448d9ae4dfff1805045790ef5f32495d62abccJeff Brown ExynosParser.prototype.busfreqTargetIntEvent.bind(this)); 292da489cd246702bee5938545b18a6f710ed214bcJamie Gennis importer.registerEventHandler('exynos_busfreq_target_mif', 3088448d9ae4dfff1805045790ef5f32495d62abccJeff Brown ExynosParser.prototype.busfreqTargetMifEvent.bind(this)); 312da489cd246702bee5938545b18a6f710ed214bcJamie Gennis } 322da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 3388448d9ae4dfff1805045790ef5f32495d62abccJeff Brown ExynosParser.prototype = { 3488448d9ae4dfff1805045790ef5f32495d62abccJeff Brown __proto__: Parser.prototype, 352da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 362da489cd246702bee5938545b18a6f710ed214bcJamie Gennis exynosFlipOpenSlice: function(ts, pipe) { 372da489cd246702bee5938545b18a6f710ed214bcJamie Gennis // use pipe? 382da489cd246702bee5938545b18a6f710ed214bcJamie Gennis var kthread = this.importer.getOrCreatePseudoThread('exynos_flip'); 392da489cd246702bee5938545b18a6f710ed214bcJamie Gennis kthread.openSliceTS = ts; 402da489cd246702bee5938545b18a6f710ed214bcJamie Gennis kthread.openSlice = 'flip:' + pipe; 412da489cd246702bee5938545b18a6f710ed214bcJamie Gennis }, 422da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 432da489cd246702bee5938545b18a6f710ed214bcJamie Gennis exynosFlipCloseSlice: function(ts, args) { 442da489cd246702bee5938545b18a6f710ed214bcJamie Gennis var kthread = this.importer.getOrCreatePseudoThread('exynos_flip'); 452da489cd246702bee5938545b18a6f710ed214bcJamie Gennis if (kthread.openSlice) { 4666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var slice = new tracing.trace_model.Slice('', kthread.openSlice, 472da489cd246702bee5938545b18a6f710ed214bcJamie Gennis tracing.getStringColorId(kthread.openSlice), 482da489cd246702bee5938545b18a6f710ed214bcJamie Gennis kthread.openSliceTS, 492da489cd246702bee5938545b18a6f710ed214bcJamie Gennis args, 502da489cd246702bee5938545b18a6f710ed214bcJamie Gennis ts - kthread.openSliceTS); 512da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 5266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis kthread.thread.sliceGroup.pushSlice(slice); 532da489cd246702bee5938545b18a6f710ed214bcJamie Gennis } 542da489cd246702bee5938545b18a6f710ed214bcJamie Gennis kthread.openSlice = undefined; 552da489cd246702bee5938545b18a6f710ed214bcJamie Gennis }, 562da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 572da489cd246702bee5938545b18a6f710ed214bcJamie Gennis /** 582da489cd246702bee5938545b18a6f710ed214bcJamie Gennis * Parses exynos events and sets up state in the importer. 592da489cd246702bee5938545b18a6f710ed214bcJamie Gennis */ 602da489cd246702bee5938545b18a6f710ed214bcJamie Gennis flipEvent: function(eventName, cpuNumber, pid, ts, eventBase) { 6188448d9ae4dfff1805045790ef5f32495d62abccJeff Brown var event = /pipe=(\d+)/.exec(eventBase.details); 622da489cd246702bee5938545b18a6f710ed214bcJamie Gennis if (!event) 632da489cd246702bee5938545b18a6f710ed214bcJamie Gennis return false; 642da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 652da489cd246702bee5938545b18a6f710ed214bcJamie Gennis var pipe = parseInt(event[1]); 662da489cd246702bee5938545b18a6f710ed214bcJamie Gennis if (eventName == 'exynos_flip_request') 672da489cd246702bee5938545b18a6f710ed214bcJamie Gennis this.exynosFlipOpenSlice(ts, pipe); 682da489cd246702bee5938545b18a6f710ed214bcJamie Gennis else 692da489cd246702bee5938545b18a6f710ed214bcJamie Gennis this.exynosFlipCloseSlice(ts, 702da489cd246702bee5938545b18a6f710ed214bcJamie Gennis { 712da489cd246702bee5938545b18a6f710ed214bcJamie Gennis pipe: pipe 722da489cd246702bee5938545b18a6f710ed214bcJamie Gennis }); 732da489cd246702bee5938545b18a6f710ed214bcJamie Gennis return true; 742da489cd246702bee5938545b18a6f710ed214bcJamie Gennis }, 752da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 762da489cd246702bee5938545b18a6f710ed214bcJamie Gennis exynosBusfreqSample: function(name, ts, frequency) { 772da489cd246702bee5938545b18a6f710ed214bcJamie Gennis var targetCpu = this.importer.getOrCreateCpuState(0); 782da489cd246702bee5938545b18a6f710ed214bcJamie Gennis var counter = targetCpu.cpu.getOrCreateCounter('', name); 796833e18b1d4077bf3a727b4422cc2acdbeee35a7Jamie Gennis if (counter.numSeries === 0) { 806833e18b1d4077bf3a727b4422cc2acdbeee35a7Jamie Gennis counter.addSeries(new tracing.trace_model.CounterSeries('frequency', 816833e18b1d4077bf3a727b4422cc2acdbeee35a7Jamie Gennis tracing.getStringColorId(counter.name + '.' + 'frequency'))); 822da489cd246702bee5938545b18a6f710ed214bcJamie Gennis } 836833e18b1d4077bf3a727b4422cc2acdbeee35a7Jamie Gennis counter.series.forEach(function(series) { 846833e18b1d4077bf3a727b4422cc2acdbeee35a7Jamie Gennis series.addSample(ts, frequency); 856833e18b1d4077bf3a727b4422cc2acdbeee35a7Jamie Gennis }); 862da489cd246702bee5938545b18a6f710ed214bcJamie Gennis }, 872da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 882da489cd246702bee5938545b18a6f710ed214bcJamie Gennis /** 892da489cd246702bee5938545b18a6f710ed214bcJamie Gennis * Parses exynos_busfreq_target_int events and sets up state. 902da489cd246702bee5938545b18a6f710ed214bcJamie Gennis */ 912da489cd246702bee5938545b18a6f710ed214bcJamie Gennis busfreqTargetIntEvent: function(eventName, cpuNumber, pid, ts, eventBase) { 9288448d9ae4dfff1805045790ef5f32495d62abccJeff Brown var event = /frequency=(\d+)/.exec(eventBase.details); 932da489cd246702bee5938545b18a6f710ed214bcJamie Gennis if (!event) 942da489cd246702bee5938545b18a6f710ed214bcJamie Gennis return false; 952da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 962da489cd246702bee5938545b18a6f710ed214bcJamie Gennis this.exynosBusfreqSample('INT Frequency', ts, parseInt(event[1])); 972da489cd246702bee5938545b18a6f710ed214bcJamie Gennis return true; 982da489cd246702bee5938545b18a6f710ed214bcJamie Gennis }, 992da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 1002da489cd246702bee5938545b18a6f710ed214bcJamie Gennis /** 1012da489cd246702bee5938545b18a6f710ed214bcJamie Gennis * Parses exynos_busfreq_target_mif events and sets up state. 1022da489cd246702bee5938545b18a6f710ed214bcJamie Gennis */ 1032da489cd246702bee5938545b18a6f710ed214bcJamie Gennis busfreqTargetMifEvent: function(eventName, cpuNumber, pid, ts, eventBase) { 10488448d9ae4dfff1805045790ef5f32495d62abccJeff Brown var event = /frequency=(\d+)/.exec(eventBase.details); 1052da489cd246702bee5938545b18a6f710ed214bcJamie Gennis if (!event) 1062da489cd246702bee5938545b18a6f710ed214bcJamie Gennis return false; 1072da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 1082da489cd246702bee5938545b18a6f710ed214bcJamie Gennis this.exynosBusfreqSample('MIF Frequency', ts, parseInt(event[1])); 1092da489cd246702bee5938545b18a6f710ed214bcJamie Gennis return true; 11066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis } 1112da489cd246702bee5938545b18a6f710ed214bcJamie Gennis }; 1122da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 11388448d9ae4dfff1805045790ef5f32495d62abccJeff Brown Parser.registerSubtype(ExynosParser); 1142da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 1152da489cd246702bee5938545b18a6f710ed214bcJamie Gennis return { 11688448d9ae4dfff1805045790ef5f32495d62abccJeff Brown ExynosParser: ExynosParser 1172da489cd246702bee5938545b18a6f710ed214bcJamie Gennis }; 1182da489cd246702bee5938545b18a6f710ed214bcJamie Gennis}); 119