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 workqueue 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 workqueue trace events.
24 function WorkqueueParser(importer) {
25 Parser.call(this, importer);
27 importer.registerEventHandler('workqueue_execute_start',
28 WorkqueueParser.prototype.executeStartEvent.bind(this));
29 importer.registerEventHandler('workqueue_execute_end',
30 WorkqueueParser.prototype.executeEndEvent.bind(this));
31 importer.registerEventHandler('workqueue_queue_work',
32 WorkqueueParser.prototype.executeQueueWork.bind(this));
33 importer.registerEventHandler('workqueue_activate_work',
34 WorkqueueParser.prototype.executeActivateWork.bind(this));
37 // Matches the workqueue_execute_start record
38 // workqueue_execute_start: work struct c7a8a89c: function MISRWrapper
39 var workqueueExecuteStartRE = /work struct (.+): function (\S+)/;
41 // Matches the workqueue_execute_start record
42 // workqueue_execute_end: work struct c7a8a89c
43 var workqueueExecuteEndRE = /work struct (.+)/;
45 WorkqueueParser.prototype = {
46 __proto__: Parser.prototype,
49 * Parses workqueue events and sets up state in the importer.
51 executeStartEvent: function(eventName, cpuNumber, pid, ts, eventBase) {
52 var event = workqueueExecuteStartRE.exec(eventBase.details);
56 var kthread = this.importer.getOrCreateKernelThread(eventBase.threadName,
58 kthread.openSliceTS = ts;
59 kthread.openSlice = event[2];
63 executeEndEvent: function(eventName, cpuNumber, pid, ts, eventBase) {
64 var event = workqueueExecuteEndRE.exec(eventBase.details);
68 var kthread = this.importer.getOrCreateKernelThread(eventBase.threadName,
70 if (kthread.openSlice) {
71 var slice = new tracing.trace_model.Slice('', kthread.openSlice,
72 tvcm.ui.getStringColorId(kthread.openSlice),
75 ts - kthread.openSliceTS);
77 kthread.thread.sliceGroup.pushSlice(slice);
79 kthread.openSlice = undefined;
83 executeQueueWork: function(eventName, cpuNumber, pid, ts, eventBase) {
84 // TODO: Do something with this event?
88 executeActivateWork: function(eventName, cpuNumber, pid, ts, eventBase) {
89 // TODO: Do something with this event?
95 Parser.registerSubtype(WorkqueueParser);
98 WorkqueueParser: WorkqueueParser