Upstream version 5.34.104.0
[platform/framework/web/crosswalk.git] / src / third_party / trace-viewer / src / tracing / importer / linux_perf / exynos_parser.js
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 'use strict';
6
7 /**
8  * @fileoverview Parses exynos events in the Linux event trace format.
9  */
10 tvcm.require('tracing.importer.linux_perf.parser');
11 tvcm.exportTo('tracing.importer.linux_perf', function() {
12
13   var Parser = tracing.importer.linux_perf.Parser;
14
15   /**
16    * Parses linux exynos trace events.
17    * @constructor
18    */
19   function ExynosParser(importer) {
20     Parser.call(this, importer);
21
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));
26
27     importer.registerEventHandler('exynos_page_flip_state',
28         ExynosParser.prototype.pageFlipStateEvent.bind(this));
29   }
30
31   ExynosParser.prototype = {
32     __proto__: Parser.prototype,
33
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')));
40       }
41       counter.series.forEach(function(series) {
42         series.addSample(ts, frequency);
43       });
44     },
45
46     /**
47      * Parses exynos_busfreq_target_int events and sets up state.
48      */
49     busfreqTargetIntEvent: function(eventName, cpuNumber, pid, ts, eventBase) {
50       var event = /frequency=(\d+)/.exec(eventBase.details);
51       if (!event)
52         return false;
53
54       this.exynosBusfreqSample('INT Frequency', ts, parseInt(event[1]));
55       return true;
56     },
57
58     /**
59      * Parses exynos_busfreq_target_mif events and sets up state.
60      */
61     busfreqTargetMifEvent: function(eventName, cpuNumber, pid, ts, eventBase) {
62       var event = /frequency=(\d+)/.exec(eventBase.details);
63       if (!event)
64         return false;
65
66       this.exynosBusfreqSample('MIF Frequency', ts, parseInt(event[1]));
67       return true;
68     },
69
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;
75     },
76
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),
83             kthread.openSliceTS,
84             args,
85             ts - kthread.openSliceTS);
86         kthread.thread.sliceGroup.pushSlice(slice);
87       }
88       kthread.openSlice = undefined;
89     },
90
91     /**
92      * Parses page_flip_state events and sets up state in the importer.
93      */
94     pageFlipStateEvent: function(eventName, cpuNumber, pid, ts, eventBase) {
95       var event = /pipe=(\d+), fb=(\d+), state=(.*)/.exec(eventBase.details);
96       if (!event)
97         return false;
98
99       var pipe = parseInt(event[1]);
100       var fb = parseInt(event[2]);
101       var state = event[3];
102
103       this.exynosPageFlipStateCloseSlice(ts, pipe, fb,
104           {
105             pipe: pipe,
106             fb: fb
107           });
108       if (state !== 'flipped')
109         this.exynosPageFlipStateOpenSlice(ts, pipe, fb, state);
110       return true;
111     }
112   };
113
114   Parser.registerSubtype(ExynosParser);
115
116   return {
117     ExynosParser: ExynosParser
118   };
119 });