Home | History | Annotate | Line # | Download | only in JavaScript
      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:09 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 
     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 }
    121