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.
8 <link rel="import" href="/tracing/importer/linux_perf/parser.html">
14 * @fileoverview Parses scheduler events in the Linux event trace format.
16 tvcm.exportTo('tracing.importer.linux_perf', function() {
18 var Parser = tracing.importer.linux_perf.Parser;
21 * Parses linux sched trace events.
24 function SchedParser(importer) {
25 Parser.call(this, importer);
27 importer.registerEventHandler('sched_switch',
28 SchedParser.prototype.schedSwitchEvent.bind(this));
29 importer.registerEventHandler('sched_wakeup',
30 SchedParser.prototype.schedWakeupEvent.bind(this));
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;
42 // Matches the sched_wakeup record
44 /comm=(.+) pid=(\d+) prio=(\d+) success=(\d+) target_cpu=(\d+)/;
45 TestExports.schedWakeupRE = schedWakeupRE;
47 SchedParser.prototype = {
48 __proto__: Parser.prototype,
51 * Parses scheduler events and sets up state in the CPUs of the importer.
53 schedSwitchEvent: function(eventName, cpuNumber, pid, ts, eventBase) {
54 var event = schedSwitchRE.exec(eventBase.details);
58 var prevState = event[4];
59 var nextComm = event[5];
60 var nextPid = parseInt(event[6]);
61 var nextPrio = parseInt(event[7]);
63 var nextThread = this.importer.threadsByLinuxPid[nextPid];
66 nextName = nextThread.userFriendlyName;
70 var cpu = this.importer.getOrCreateCpu(cpuNumber);
71 cpu.switchActiveThread(
73 {stateWhenDescheduled: prevState},
85 schedWakeupEvent: function(eventName, cpuNumber, pid, ts, eventBase) {
86 var event = schedWakeupRE.exec(eventBase.details);
92 var pid = parseInt(event[2]);
93 var prio = parseInt(event[3]);
94 this.importer.markPidRunnable(ts, pid, comm, prio, fromPid);
99 Parser.registerSubtype(SchedParser);
102 SchedParser: SchedParser,
103 _SchedParserTestExports: TestExports