Update To 11.40.268.0
[platform/framework/web/crosswalk.git] / src / third_party / trace-viewer / trace_viewer / tracing / importer / linux_perf / power_parser.html
1 <!DOCTYPE html>
2 <!--
3 Copyright (c) 2012 The Chromium Authors. All rights reserved.
4 Use of this source code is governed by a BSD-style license that can be
5 found in the LICENSE file.
6 -->
7
8 <link rel="import" href="/tracing/importer/linux_perf/parser.html">
9 <link rel="import" href="/tracing/trace_model/counter_series.html">
10
11 <script>
12 'use strict';
13
14 /**
15  * @fileoverview Parses power events in the Linux event trace format.
16  */
17 tv.exportTo('tracing.importer.linux_perf', function() {
18
19   var Parser = tracing.importer.linux_perf.Parser;
20
21   /**
22    * Parses linux power trace events.
23    * @constructor
24    */
25   function PowerParser(importer) {
26     Parser.call(this, importer);
27
28     // NB: old-style power events, deprecated
29     importer.registerEventHandler('power_start',
30         PowerParser.prototype.powerStartEvent.bind(this));
31     importer.registerEventHandler('power_frequency',
32         PowerParser.prototype.powerFrequencyEvent.bind(this));
33
34     importer.registerEventHandler('cpu_frequency',
35         PowerParser.prototype.cpuFrequencyEvent.bind(this));
36     importer.registerEventHandler('cpu_idle',
37         PowerParser.prototype.cpuIdleEvent.bind(this));
38   }
39
40   PowerParser.prototype = {
41     __proto__: Parser.prototype,
42
43     cpuStateSlice: function(ts, targetCpuNumber, eventType, cpuState) {
44       var targetCpu = this.importer.getOrCreateCpu(targetCpuNumber);
45       var powerCounter;
46       if (eventType != '1') {
47         this.importer.model.importWarning({
48           type: 'parse_error',
49           message: 'Don\'t understand power_start events of ' +
50               'type ' + eventType
51         });
52         return;
53       }
54       powerCounter = targetCpu.getOrCreateCounter('', 'C-State');
55       if (powerCounter.numSeries === 0) {
56         powerCounter.addSeries(new tracing.trace_model.CounterSeries('state',
57             tv.ui.getStringColorId(powerCounter.name + '.' + 'state')));
58       }
59       powerCounter.series.forEach(function(series) {
60         series.addCounterSample(ts, cpuState);
61       });
62     },
63
64     cpuIdleSlice: function(ts, targetCpuNumber, cpuState) {
65       var targetCpu = this.importer.getOrCreateCpu(targetCpuNumber);
66       var powerCounter = targetCpu.getOrCreateCounter('', 'C-State');
67       if (powerCounter.numSeries === 0) {
68         powerCounter.addSeries(new tracing.trace_model.CounterSeries('state',
69             tv.ui.getStringColorId(powerCounter.name)));
70       }
71       // NB: 4294967295/-1 means an exit from the current state
72       var val = (cpuState != 4294967295 ? cpuState : 0);
73       powerCounter.series.forEach(function(series) {
74         series.addCounterSample(ts, val);
75       });
76     },
77
78     cpuFrequencySlice: function(ts, targetCpuNumber, powerState) {
79       var targetCpu = this.importer.getOrCreateCpu(targetCpuNumber);
80       var powerCounter =
81           targetCpu.getOrCreateCounter('', 'Clock Frequency');
82       if (powerCounter.numSeries === 0) {
83         powerCounter.addSeries(new tracing.trace_model.CounterSeries('state',
84             tv.ui.getStringColorId(powerCounter.name + '.' + 'state')));
85       }
86       powerCounter.series.forEach(function(series) {
87         series.addCounterSample(ts, powerState);
88       });
89     },
90
91     /**
92      * Parses power events and sets up state in the importer.
93      */
94     powerStartEvent: function(eventName, cpuNumber, pid, ts, eventBase) {
95       var event = /type=(\d+) state=(\d) cpu_id=(\d)+/.exec(eventBase.details);
96       if (!event)
97         return false;
98
99       var targetCpuNumber = parseInt(event[3]);
100       var cpuState = parseInt(event[2]);
101       this.cpuStateSlice(ts, targetCpuNumber, event[1], cpuState);
102       return true;
103     },
104
105     powerFrequencyEvent: function(eventName, cpuNumber, pid, ts, eventBase) {
106       var event = /type=(\d+) state=(\d+) cpu_id=(\d)+/
107           .exec(eventBase.details);
108       if (!event)
109         return false;
110
111       var targetCpuNumber = parseInt(event[3]);
112       var powerState = parseInt(event[2]);
113       this.cpuFrequencySlice(ts, targetCpuNumber, powerState);
114       return true;
115     },
116
117     cpuFrequencyEvent: function(eventName, cpuNumber, pid, ts, eventBase) {
118       var event = /state=(\d+) cpu_id=(\d)+/.exec(eventBase.details);
119       if (!event)
120         return false;
121
122       var targetCpuNumber = parseInt(event[2]);
123       var powerState = parseInt(event[1]);
124       this.cpuFrequencySlice(ts, targetCpuNumber, powerState);
125       return true;
126     },
127
128     cpuIdleEvent: function(eventName, cpuNumber, pid, ts, eventBase) {
129       var event = /state=(\d+) cpu_id=(\d)+/.exec(eventBase.details);
130       if (!event)
131         return false;
132
133       var targetCpuNumber = parseInt(event[2]);
134       var cpuState = parseInt(event[1]);
135       this.cpuIdleSlice(ts, targetCpuNumber, cpuState);
136       return true;
137     }
138   };
139
140   Parser.registerSubtype(PowerParser);
141
142   return {
143     PowerParser: PowerParser
144   };
145 });
146 </script>