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.
8 * @fileoverview Parses workqueue events in the Linux event trace format.
10 base.require('tracing.importer.linux_perf.parser');
11 base.exportTo('tracing.importer.linux_perf', function() {
13 var Parser = tracing.importer.linux_perf.Parser;
16 * Parses linux workqueue trace events.
19 function WorkqueueParser(importer) {
20 Parser.call(this, importer);
22 importer.registerEventHandler('workqueue_execute_start',
23 WorkqueueParser.prototype.executeStartEvent.bind(this));
24 importer.registerEventHandler('workqueue_execute_end',
25 WorkqueueParser.prototype.executeEndEvent.bind(this));
26 importer.registerEventHandler('workqueue_queue_work',
27 WorkqueueParser.prototype.executeQueueWork.bind(this));
28 importer.registerEventHandler('workqueue_activate_work',
29 WorkqueueParser.prototype.executeActivateWork.bind(this));
32 // Matches the workqueue_execute_start record
33 // workqueue_execute_start: work struct c7a8a89c: function MISRWrapper
34 var workqueueExecuteStartRE = /work struct (.+): function (\S+)/;
36 // Matches the workqueue_execute_start record
37 // workqueue_execute_end: work struct c7a8a89c
38 var workqueueExecuteEndRE = /work struct (.+)/;
40 WorkqueueParser.prototype = {
41 __proto__: Parser.prototype,
44 * Parses workqueue events and sets up state in the importer.
46 executeStartEvent: function(eventName, cpuNumber, pid, ts, eventBase) {
47 var event = workqueueExecuteStartRE.exec(eventBase.details);
51 var kthread = this.importer.getOrCreateKernelThread(eventBase.threadName,
53 kthread.openSliceTS = ts;
54 kthread.openSlice = event[2];
58 executeEndEvent: function(eventName, cpuNumber, pid, ts, eventBase) {
59 var event = workqueueExecuteEndRE.exec(eventBase.details);
63 var kthread = this.importer.getOrCreateKernelThread(eventBase.threadName,
65 if (kthread.openSlice) {
66 var slice = new tracing.trace_model.Slice('', kthread.openSlice,
67 tracing.getStringColorId(kthread.openSlice),
70 ts - kthread.openSliceTS);
72 kthread.thread.sliceGroup.pushSlice(slice);
74 kthread.openSlice = undefined;
78 executeQueueWork: function(eventName, cpuNumber, pid, ts, eventBase) {
79 // TODO: Do something with this event?
83 executeActivateWork: function(eventName, cpuNumber, pid, ts, eventBase) {
84 // TODO: Do something with this event?
90 Parser.registerSubtype(WorkqueueParser);
93 WorkqueueParser: WorkqueueParser