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.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