--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/solaris/sample/dtrace/hotspot/hotspot_calls_tree.d Sat Dec 01 00:00:00 2007 +0000
@@ -0,0 +1,117 @@
+#!/usr/sbin/dtrace -Zs
+/*
+ * Copyright 2006 Sun Microsystems, Inc. All Rights Reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * - Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * - Neither the name of Sun Microsystems nor the names of its
+ * contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+ * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+*/
+
+/*
+ * Usage:
+ * 1. hotspot_calls_tree.d -c "java ..."
+ * 2. hotspot_calls_tree.d -p JAVA_PID
+ *
+ * This script prints calls tree of fired 'hotspot' probes.
+ *
+ * Notes:
+ * The script uses 'monitors' probes which are disabled by default since
+ * it incurs performance overhead to the application. To enable them, you
+ * need to turn on the ExtendedDTraceProbes VM option. You can either
+ * start the application with -XX:+ExtendedDTraceProbes option or use the
+ * jinfo command to enable it at runtime as follows:
+ *
+ * jinfo -flag +ExtendedDTraceProbes <java_pid>
+ *
+ */
+
+#pragma D option quiet
+#pragma D option destructive
+#pragma D option defaultargs
+#pragma D option aggrate=100ms
+
+self int indent;
+string PAUSE_AT_STARTUP_FILE;
+
+:::BEGIN
+{
+ SAMPLE_NAME = "hotspot probes tracing";
+
+ printf("BEGIN %s\n\n", SAMPLE_NAME);
+
+ self->indent = 10;
+}
+
+hotspot$target:::class-loaded,
+hotspot$target:::class-unloaded,
+hotspot$target:::compiled-method-load,
+hotspot$target:::compiled-method-unload,
+hotspot$target:::monitor-notify,
+hotspot$target:::monitor-notifyAll
+{
+ printf("%d %*s <-> %s\n", curcpu->cpu_id, self->indent, "", probename);
+}
+
+hotspot$target:::vm-init-begin,
+hotspot$target:::gc-begin,
+hotspot$target:::mem-pool-gc-begin,
+hotspot$target:::thread-start,
+hotspot$target:::method-compile-begin,
+hotspot$target:::monitor-contended-enter,
+hotspot$target:::monitor-wait
+{
+ self->indent ++;
+ printf("%d %*s -> %s\n", curcpu->cpu_id, self->indent, "", probename);
+}
+
+hotspot$target:::vm-init-end,
+hotspot$target:::vm-shutdown,
+hotspot$target:::gc-end,
+hotspot$target:::mem-pool-gc-end,
+hotspot$target:::thread-stop,
+hotspot$target:::method-compile-end,
+hotspot$target:::monitor-contended-entered,
+hotspot$target:::monitor-contended-exit,
+hotspot$target:::monitor-waited
+{
+ printf("%d %*s <- %s\n", curcpu->cpu_id, self->indent, "", probename);
+ self->indent --;
+}
+
+:::END
+{
+ printf("\nEND of %s\n", SAMPLE_NAME);
+}
+
+syscall::rexit:entry,
+syscall::exit:entry
+/pid == $target/
+{
+ exit(0);
+}