Upstream version 9.38.198.0
[platform/framework/web/crosswalk.git] / src / third_party / trace-viewer / trace_viewer / tracing / importer / linux_perf / workqueue_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 workqueue 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 workqueue trace events.
22    * @constructor
23    */
24   function WorkqueueParser(importer) {
25     Parser.call(this, importer);
26
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));
35   }
36
37   // Matches the workqueue_execute_start record
38   //  workqueue_execute_start: work struct c7a8a89c: function MISRWrapper
39   var workqueueExecuteStartRE = /work struct (.+): function (\S+)/;
40
41   // Matches the workqueue_execute_start record
42   //  workqueue_execute_end: work struct c7a8a89c
43   var workqueueExecuteEndRE = /work struct (.+)/;
44
45   WorkqueueParser.prototype = {
46     __proto__: Parser.prototype,
47
48     /**
49      * Parses workqueue events and sets up state in the importer.
50      */
51     executeStartEvent: function(eventName, cpuNumber, pid, ts, eventBase) {
52       var event = workqueueExecuteStartRE.exec(eventBase.details);
53       if (!event)
54         return false;
55
56       var kthread = this.importer.getOrCreateKernelThread(eventBase.threadName,
57           pid, pid);
58       kthread.openSliceTS = ts;
59       kthread.openSlice = event[2];
60       return true;
61     },
62
63     executeEndEvent: function(eventName, cpuNumber, pid, ts, eventBase) {
64       var event = workqueueExecuteEndRE.exec(eventBase.details);
65       if (!event)
66         return false;
67
68       var kthread = this.importer.getOrCreateKernelThread(eventBase.threadName,
69           pid, pid);
70       if (kthread.openSlice) {
71         var slice = new tracing.trace_model.Slice('', kthread.openSlice,
72             tvcm.ui.getStringColorId(kthread.openSlice),
73             kthread.openSliceTS,
74             {},
75             ts - kthread.openSliceTS);
76
77         kthread.thread.sliceGroup.pushSlice(slice);
78       }
79       kthread.openSlice = undefined;
80       return true;
81     },
82
83     executeQueueWork: function(eventName, cpuNumber, pid, ts, eventBase) {
84       // TODO: Do something with this event?
85       return true;
86     },
87
88     executeActivateWork: function(eventName, cpuNumber, pid, ts, eventBase) {
89       // TODO: Do something with this event?
90       return true;
91     }
92
93   };
94
95   Parser.registerSubtype(WorkqueueParser);
96
97   return {
98     WorkqueueParser: WorkqueueParser
99   };
100 });
101 </script>
102