Upstream version 9.38.198.0
[platform/framework/web/crosswalk.git] / src / third_party / trace-viewer / trace_viewer / tracing / importer / linux_perf / sched_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
10 <script>
11 'use strict';
12
13 /**
14  * @fileoverview Parses scheduler events in the Linux event trace format.
15  */
16 tvcm.exportTo('tracing.importer.linux_perf', function() {
17
18   var Parser = tracing.importer.linux_perf.Parser;
19
20   /**
21    * Parses linux sched trace events.
22    * @constructor
23    */
24   function SchedParser(importer) {
25     Parser.call(this, importer);
26
27     importer.registerEventHandler('sched_switch',
28         SchedParser.prototype.schedSwitchEvent.bind(this));
29     importer.registerEventHandler('sched_wakeup',
30         SchedParser.prototype.schedWakeupEvent.bind(this));
31   }
32
33   var TestExports = {};
34
35   // Matches the sched_switch record
36   var schedSwitchRE = new RegExp(
37       'prev_comm=(.+) prev_pid=(\\d+) prev_prio=(\\d+) ' +
38       'prev_state=(\\S\\+?|\\S\\|\\S) ==> ' +
39       'next_comm=(.+) next_pid=(\\d+) next_prio=(\\d+)');
40   TestExports.schedSwitchRE = schedSwitchRE;
41
42   // Matches the sched_wakeup record
43   var schedWakeupRE =
44       /comm=(.+) pid=(\d+) prio=(\d+) success=(\d+) target_cpu=(\d+)/;
45   TestExports.schedWakeupRE = schedWakeupRE;
46
47   SchedParser.prototype = {
48     __proto__: Parser.prototype,
49
50     /**
51      * Parses scheduler events and sets up state in the CPUs of the importer.
52      */
53     schedSwitchEvent: function(eventName, cpuNumber, pid, ts, eventBase) {
54       var event = schedSwitchRE.exec(eventBase.details);
55       if (!event)
56         return false;
57
58       var prevState = event[4];
59       var nextComm = event[5];
60       var nextPid = parseInt(event[6]);
61       var nextPrio = parseInt(event[7]);
62
63       var nextThread = this.importer.threadsByLinuxPid[nextPid];
64       var nextName;
65       if (nextThread)
66         nextName = nextThread.userFriendlyName;
67       else
68         nextName = nextComm;
69
70       var cpu = this.importer.getOrCreateCpu(cpuNumber);
71       cpu.switchActiveThread(
72           ts,
73           {stateWhenDescheduled: prevState},
74           nextPid,
75           nextName,
76           {
77             comm: nextComm,
78             tid: nextPid,
79             prio: nextPrio
80           });
81
82       return true;
83     },
84
85     schedWakeupEvent: function(eventName, cpuNumber, pid, ts, eventBase) {
86       var event = schedWakeupRE.exec(eventBase.details);
87       if (!event)
88         return false;
89
90       var fromPid = pid;
91       var comm = event[1];
92       var pid = parseInt(event[2]);
93       var prio = parseInt(event[3]);
94       this.importer.markPidRunnable(ts, pid, comm, prio, fromPid);
95       return true;
96     }
97   };
98
99   Parser.registerSubtype(SchedParser);
100
101   return {
102     SchedParser: SchedParser,
103     _SchedParserTestExports: TestExports
104   };
105 });
106 </script>
107