]> CyberLeo.Net >> Repos - FreeBSD/stable/10.git/blob - cddl/contrib/dtracetoolkit/JavaScript/js_stat.d
Copy head (r256279) to stable/10 as part of the 10.0-RELEASE cycle.
[FreeBSD/stable/10.git] / cddl / contrib / dtracetoolkit / JavaScript / js_stat.d
1 #!/usr/sbin/dtrace -Zs
2 /*
3  * js_stat.d - JavaScript operation stats using DTrace.
4  *             Written for the JavaScript DTrace provider.
5  *
6  * $Id: js_stat.d 63 2007-10-04 04:34:38Z brendan $
7  *
8  * This traces activity from all browsers on the system that are
9  * running with JavaScript provider support.
10  *
11  * USAGE: js_stat.d [interval [count]]
12  *
13  * FIELDS:
14  *              EXEC/s          JavaScript programs executed per second
15  *              FUNCS/s         Functions called, per second
16  *              OBJNEW/s        Objects created, per second
17  *              OBJFRE/s        Objects freed (finalize), per second
18  *
19  * The numbers are counts for the interval specified. The default interval
20  * is 1 second.
21  *
22  * Filename and function names are printed if available.
23  *
24  * COPYRIGHT: Copyright (c) 2007 Brendan Gregg.
25  *
26  * CDDL HEADER START
27  *
28  *  The contents of this file are subject to the terms of the
29  *  Common Development and Distribution License, Version 1.0 only
30  *  (the "License").  You may not use this file except in compliance
31  *  with the License.
32  *
33  *  You can obtain a copy of the license at Docs/cddl1.txt
34  *  or http://www.opensolaris.org/os/licensing.
35  *  See the License for the specific language governing permissions
36  *  and limitations under the License.
37  *
38  * CDDL HEADER END
39  *
40  * 09-Sep-2007  Brendan Gregg   Created this.
41  */
42
43 #pragma D option quiet
44 #pragma D option defaultargs
45
46 inline int SCREEN = 21;
47
48 dtrace:::BEGIN
49 {
50         execs = funcs = objnew = objfree = 0;
51         lines = SCREEN + 1;
52         interval = $1 ? $1 : 1;
53         counts = $2 ? $2 : -1;
54         secs = interval;
55         first = 1;
56 }
57
58 profile:::tick-1sec
59 {
60         secs--;
61 }
62
63 /*
64  * Print Header
65  */
66 dtrace:::BEGIN,
67 profile:::tick-1sec
68 /first || (secs == 0 && lines > SCREEN)/
69 {
70         printf("%-20s %8s %8s %8s %8s\n", "TIME", "EXEC/s", "FUNC/s",
71             "OBJNEW/s", "OBJFRE/s");
72         lines = 0;
73         first = 0;
74 }
75
76 /*
77  * Tally Data
78  */
79 javascript*:::execute-start
80 {
81         execs++;
82 }
83
84 javascript*:::function-entry
85 {
86         funcs++;
87 }
88
89 javascript*:::object-create-start
90 {
91         objnew++;
92 }
93
94 javascript*:::object-finalize
95 {
96         objfree++;
97 }
98
99 /*
100  * Print Output
101  */
102 profile:::tick-1sec
103 /secs == 0/
104 {
105         printf("%-20Y %8d %8d %8d %8d\n", walltimestamp, execs / interval,
106             funcs / interval, objnew / interval, objfree / interval);
107         execs = funcs = objnew = objfree = 0;
108         secs = interval;
109         lines++;
110         counts--;
111 }
112
113 /*
114  * End
115  */
116 profile:::tick-1sec
117 /counts == 0/
118 {
119         exit(0);
120 }