Upstream version 9.38.198.0
[platform/framework/web/crosswalk.git] / src / third_party / trace-viewer / trace_viewer / tracing / importer / linux_perf / kfunc_parser.html
1 <!DOCTYPE html>
2 <!--
3 Copyright (c) 2013 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 graph_ent and graph_ret events that were inserted by
15  * the Linux kernel's function graph trace.
16  */
17 tvcm.exportTo('tracing.importer.linux_perf', function() {
18
19   var LinuxPerfParser = tracing.importer.linux_perf.Parser;
20
21   /**
22    * Parses graph_ent and graph_ret events that were inserted by the Linux
23    * kernel's function graph trace.
24    * @constructor
25    */
26   function KernelFuncParser(importer) {
27     LinuxPerfParser.call(this, importer);
28
29     importer.registerEventHandler('graph_ent',
30         KernelFuncParser.prototype.traceKernelFuncEnterEvent.
31             bind(this));
32     importer.registerEventHandler('graph_ret',
33         KernelFuncParser.prototype.traceKernelFuncReturnEvent.
34             bind(this));
35
36     this.model_ = importer.model_;
37     this.ppids_ = {};
38   }
39
40   var TestExports = {};
41
42   var funcEnterRE = new RegExp('func=(.+)');
43   TestExports.funcEnterRE = funcEnterRE;
44
45   KernelFuncParser.prototype = {
46     __proto__: LinuxPerfParser.prototype,
47
48     traceKernelFuncEnterEvent: function(eventName, cpuNumber, pid, ts,
49                                         eventBase) {
50       var eventData = funcEnterRE.exec(eventBase.details);
51       if (!eventData)
52         return false;
53
54       if (eventBase.tgid === undefined) {
55         return false;
56       }
57
58       var tgid = parseInt(eventBase.tgid);
59       var name = eventData[1];
60       var thread = this.model_.getOrCreateProcess(tgid)
61         .getOrCreateThread(pid);
62       thread.name = eventBase.threadName;
63
64       var slices = thread.kernelSliceGroup;
65       if (!slices.isTimestampValidForBeginOrEnd(ts)) {
66         this.model_.importWarning({
67           type: 'parse_error',
68           message: 'Timestamps are moving backward.'
69         });
70         return false;
71       }
72
73       var slice = slices.beginSlice(null, name, ts, {});
74
75       return true;
76     },
77
78     traceKernelFuncReturnEvent: function(eventName, cpuNumber, pid, ts,
79                                          eventBase) {
80       if (eventBase.tgid === undefined) {
81         return false;
82       }
83
84       var tgid = parseInt(eventBase.tgid);
85       var thread = this.model_.getOrCreateProcess(tgid)
86         .getOrCreateThread(pid);
87       thread.name = eventBase.threadName;
88
89       var slices = thread.kernelSliceGroup;
90       if (!slices.isTimestampValidForBeginOrEnd(ts)) {
91         this.model_.importWarning({
92           type: 'parse_error',
93           message: 'Timestamps are moving backward.'
94         });
95         return false;
96       }
97
98       if (slices.openSliceCount > 0) {
99         slices.endSlice(ts);
100       }
101
102       return true;
103     }
104   };
105
106   LinuxPerfParser.registerSubtype(KernelFuncParser);
107
108   return {
109     KernelFuncParser: KernelFuncParser
110   };
111 });
112 </script>
113