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,v 1.1.1.1 2015/09/30 22:01:07 christos Exp $ 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 46inline int SCREEN = 21; 47 48dtrace:::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 58profile:::tick-1sec 59{ 60 secs--; 61} 62 63/* 64 * Print Header 65 */ 66dtrace:::BEGIN, 67profile:::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 */ 79javascript*:::execute-start 80{ 81 execs++; 82} 83 84javascript*:::function-entry 85{ 86 funcs++; 87} 88 89javascript*:::object-create-start 90{ 91 objnew++; 92} 93 94javascript*:::object-finalize 95{ 96 objfree++; 97} 98 99/* 100 * Print Output 101 */ 102profile:::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 */ 116profile:::tick-1sec 117/counts == 0/ 118{ 119 exit(0); 120} 121