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