#!/usr/sbin/dtrace -Zs #pragma D option quiet #pragma D option switchrate=10 dtrace:::BEGIN { jsIndent = 0; jsFile = "ajax-validation"; javaMethodBoundary= "doGet"; startTimestamp = timestamp; } *mozilla$1:::js_function-entry /basename(copyinstr(arg0)) == jsFile/ { jsIndent += 2; printf("%*s -> %s:%s (JavaScript)(elapsed ms: %d)\n", jsIndent, "", jsFile, copyinstr(arg2), (timestamp - startTimestamp) / 1000); } *mozilla$1:::js_function-return /basename(copyinstr(arg0)) == jsFile/ { printf("%*s <- %s:%s (JavaScript)(elapsed ms: %d)\n", jsIndent, "", jsFile, copyinstr(arg2), (timestamp - startTimestamp) / 1000); jsIndent -= 2; } hotspot$2:::method-entry { self->strPtr = (char *)copyin(arg1, args[2]+1); self->strPtr[(int)args[2]] = '\0'; self->classStr = (string)self->strPtr; self->strPtr = (char *)copyin(arg3, (int)args[4]+1); self->strPtr[(int)args[4]] = '\0'; self->methodStr = (string)self->strPtr; } hotspot$2:::method-entry /javaMethodBoundary == self->methodStr/ { self->interested = 1; self->indent = 0; } hotspot$2:::method-entry /self->interested/ { self->indent += 2; printf("%*s -> %s:%s (Java)(elapsed ms: %d)\n", self->indent, "", self->classStr, self->methodStr, (timestamp - startTimestamp) / 1000); } hotspot$2:::method-return { self->strPtr = (char *)copyin(arg1, args[2]+1); self->strPtr[(int)args[2]] = '\0'; self->classStr = (string)self->strPtr; self->strPtr = (char *)copyin(arg3, (int)args[4]+1); self->strPtr[(int)args[4]] = '\0'; self->methodStr = (string)self->strPtr; } hotspot$2:::method-return /self->interested/ { printf("%*s <- %s:%s (Java)(elapsed ms: %d)\n", self->indent, "", self->classStr, self->methodStr, (timestamp - startTimestamp) / 1000); self->indent -= 2; } hotspot$2:::method-return /javaMethodBoundary == self->methodStr/ { self->interested = 0; /* exit(0); */ }