Index: dart/compiler/java/com/google/dart/compiler/metrics/JvmMetrics.java |
diff --git a/dart/compiler/java/com/google/dart/compiler/metrics/JvmMetrics.java b/dart/compiler/java/com/google/dart/compiler/metrics/JvmMetrics.java |
deleted file mode 100644 |
index 5123ed66cd88a4915b9853ce5c7e034cd4c8e755..0000000000000000000000000000000000000000 |
--- a/dart/compiler/java/com/google/dart/compiler/metrics/JvmMetrics.java |
+++ /dev/null |
@@ -1,249 +0,0 @@ |
-// Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file |
-// for details. All rights reserved. Use of this source code is governed by a |
-// BSD-style license that can be found in the LICENSE file. |
- |
-package com.google.dart.compiler.metrics; |
- |
-import java.io.PrintStream; |
-import java.lang.management.CompilationMXBean; |
-import java.lang.management.GarbageCollectorMXBean; |
-import java.lang.management.ManagementFactory; |
-import java.lang.management.MemoryMXBean; |
-import java.lang.management.MemoryPoolMXBean; |
-import java.lang.management.MemoryUsage; |
-import java.util.List; |
-import java.util.StringTokenizer; |
- |
-/** |
- * A class to report jvm/jmx statistics |
- */ |
-public class JvmMetrics { |
- |
- private static int TABULAR_COLON_POS = 40; |
- private static long ONE_KILO_BYTE = 1L << 10L; |
- private static long ONE_MEGA_BYTE = 1L << 20L; |
- private static long ONE_GIGA_BYTE = 1L << 30L; |
- |
- public static void maybeWriteJvmMetrics(PrintStream out, String options) { |
- if (options == null) { |
- return; |
- } |
- |
- boolean verboseMode = false; |
- boolean prettyMode = false; |
- StringTokenizer st = new StringTokenizer(options,":"); |
- // options are grouped in order 'detail:format:types' |
- if (st.hasMoreTokens()) { |
- String mode = st.nextToken(); |
- if (mode.equalsIgnoreCase("verbose")) { |
- verboseMode = true; |
- } |
- } |
- |
- if (st.hasMoreTokens()) { |
- String mode = st.nextToken(); |
- if (mode.equalsIgnoreCase("pretty")) { |
- prettyMode = true; |
- } |
- } |
- |
- if (st.hasMoreTokens()) { |
- while (st.hasMoreTokens()) { |
- String types = st.nextToken(); |
- StringTokenizer typeSt = new StringTokenizer(types,","); |
- while (typeSt.hasMoreElements()) { |
- String type = typeSt.nextToken(); |
- writeMetrics(out, type, verboseMode, prettyMode); |
- } |
- } |
- } else { |
- // the default |
- writeMetrics(out, "all", verboseMode, prettyMode); |
- } |
- } |
- |
- private static void writeMetrics(PrintStream out, String type, boolean verbose, boolean pretty) { |
- |
- if (type.equals("gc") || type.equalsIgnoreCase("all")) { |
- writeGarbageCollectionStats(out, verbose, pretty); |
- } |
- if (type.equals("mem") || type.equalsIgnoreCase("all")) { |
- writeMemoryMetrics(out, verbose, pretty); |
- } |
- if (type.equals("jit") || type.equalsIgnoreCase("all")) { |
- writeJitMetrics(out, verbose, pretty); |
- } |
- } |
- |
- private static void writeJitMetrics(PrintStream out, boolean verbose, boolean pretty) { |
- |
- CompilationMXBean cBean = ManagementFactory.getCompilationMXBean(); |
- |
- String name; |
- if (verbose) { |
- name = cBean.getName(); |
- } else { |
- name = "total"; |
- } |
- |
- if (pretty) { |
- out.println("\nJIT Stats"); |
- out.println(String.format("\t%s jit time: %d ms", name, cBean.getTotalCompilationTime())); |
- } else { |
- out.println(normalizeTabularColonPos(String.format("%s-jit-time-ms : %d", normalizeName(name), |
- cBean.getTotalCompilationTime()))); |
- } |
- } |
- |
- private static void writeOverallMemoryUsage(PrintStream out, MemoryUsage usage, |
- String prefix, boolean pretty) { |
- if (pretty) { |
- out.format("\t%s\n", prefix); |
- out.format("\t\tavailable : %s\n", formatBytes(usage.getMax())); |
- out.format("\t\tcurrent : %s\n", formatBytes(usage.getUsed())); |
- } else { |
- prefix = normalizeName(prefix); |
- out.println(normalizeTabularColonPos(String.format(prefix + "-available-bytes : %d", |
- usage.getMax()))); |
- out.println(normalizeTabularColonPos(String.format(prefix + "-current-bytes : %d", |
- usage.getUsed()))); |
- } |
- } |
- |
- private static void writePoolMemoryUsage(PrintStream out, MemoryUsage usage, |
- MemoryUsage peakUsage, String prefix, boolean pretty) { |
- if (pretty) { |
- out.format("\t\tavailable : %s\n", formatBytes(usage.getMax())); |
- out.format("\t\tpeak : %s\n", formatBytes(peakUsage.getUsed())); |
- out.format("\t\tcurrent : %s\n", formatBytes(usage.getUsed())); |
- } else { |
- out.println(normalizeTabularColonPos(String.format(prefix + "-available-bytes : %d", |
- usage.getMax()))); |
- out.println(normalizeTabularColonPos(String.format(prefix + "-peak-bytes : %d", |
- peakUsage.getUsed()))); |
- out.println(normalizeTabularColonPos(String.format(prefix + "-current-bytes : %d", |
- usage.getUsed()))); |
- } |
- } |
- |
- private static void writeMemoryMetrics(PrintStream out, boolean verbose, boolean pretty) { |
- if (pretty) { |
- out.println("\nMemory usage"); |
- } |
- |
- // only show overall stats in verbose mode |
- if (verbose) { |
- MemoryMXBean overallMemBean = ManagementFactory.getMemoryMXBean(); |
- MemoryUsage usage = overallMemBean.getHeapMemoryUsage(); |
- writeOverallMemoryUsage(out, usage, "Heap", pretty); |
- |
- usage = overallMemBean.getNonHeapMemoryUsage(); |
- writeOverallMemoryUsage(out, usage, "Non-heap", pretty); |
- } |
- |
- if (verbose) { |
- List<MemoryPoolMXBean> mpBeans = ManagementFactory.getMemoryPoolMXBeans(); |
- for (MemoryPoolMXBean mpBean : mpBeans) { |
- MemoryUsage currentUsage = mpBean.getUsage(); |
- MemoryUsage peakUsage = mpBean.getPeakUsage(); |
- if (pretty) { |
- out.println("\tPool " + mpBean.getName()); |
- writePoolMemoryUsage(out, currentUsage, peakUsage, null, true); |
- } else { |
- writePoolMemoryUsage(out, currentUsage, peakUsage, |
- "mem-pool-" + normalizeName(mpBean.getName()), false); |
- } |
- } |
- } else { |
- long available = 0; |
- long current = 0; |
- long peak = 0; |
- List<MemoryPoolMXBean> mpBeans = ManagementFactory.getMemoryPoolMXBeans(); |
- for (MemoryPoolMXBean mpBean : mpBeans) { |
- MemoryUsage currentUsage = mpBean.getUsage(); |
- available += currentUsage.getMax(); |
- current += currentUsage.getUsed(); |
- MemoryUsage peakUsage = mpBean.getPeakUsage(); |
- peak += peakUsage.getUsed(); |
- } |
- MemoryUsage summaryUsage = new MemoryUsage(0, current, current, available); |
- MemoryUsage summaryPeakUsage = new MemoryUsage(0, peak, peak, peak); |
- if (pretty) { |
- out.format("\tAggregate of %d memory pools\n", mpBeans.size()); |
- writePoolMemoryUsage(out, summaryUsage, summaryPeakUsage, null, true); |
- } else { |
- writePoolMemoryUsage(out, summaryUsage, summaryPeakUsage, |
- "mem", false); |
- } |
- } |
- } |
- |
- private static void writeGarbageCollectionStats(PrintStream out, boolean verbose, boolean pretty) { |
- List<GarbageCollectorMXBean> gcBeans = ManagementFactory.getGarbageCollectorMXBeans(); |
- |
- if (verbose) { |
- if (pretty) { |
- out.println("\nGarbage collection stats"); |
- for (GarbageCollectorMXBean gcBean : gcBeans) { |
- out.println("\tCollector " + gcBean.getName()); |
- out.format("\t\tcollection count : %d\n", gcBean.getCollectionCount()); |
- out.format("\t\tcollection time : %d ms\n", gcBean.getCollectionTime()); |
- } |
- } else { |
- for (GarbageCollectorMXBean gcBean : gcBeans) { |
- String name = normalizeName(gcBean.getName()); |
- out.println(normalizeTabularColonPos(String.format("gc-" + name + "-collection-count : %d", |
- gcBean.getCollectionCount()))); |
- out.println(normalizeTabularColonPos(String.format("gc-" + name + "-collection-time-ms : %d", |
- gcBean.getCollectionTime()))); |
- } |
- } |
- } else { |
- long collectionCount = 0; |
- long collectionTime = 0; |
- int collectorCount = gcBeans.size(); |
- for (GarbageCollectorMXBean gcBean : gcBeans) { |
- collectionCount += gcBean.getCollectionCount(); |
- collectionTime += gcBean.getCollectionTime(); |
- } |
- if (pretty) { |
- out.println("\nGarbage collection stats"); |
- out.format("\tAggregate of %d collectors\n", collectorCount); |
- out.format("\t\tcollection count : %d\n", collectionCount); |
- out.format("\t\tcollection time : %d ms\n", collectionTime); |
- } else { |
- String name = normalizeName("aggregate"); |
- out.println(normalizeTabularColonPos(String.format("gc-" + name + "-collection-count : %d", |
- collectionCount))); |
- out.println(normalizeTabularColonPos(String.format("gc-" + name + "-collection-time-ms : %d", |
- collectionTime))); |
- } |
- } |
- } |
- |
- private static String normalizeName(String name) { |
- return name.replace(" ","_").toLowerCase(); |
- } |
- |
- private static String normalizeTabularColonPos(String string) { |
- StringBuilder sb = new StringBuilder(string); |
- int index = sb.indexOf(":"); |
- for (;index < TABULAR_COLON_POS;++index) { |
- sb.insert(index, ' '); |
- } |
- return sb.toString(); |
- } |
- |
- private static String formatBytes(long numBytes) { |
- if (numBytes < ONE_KILO_BYTE) { |
- return String.format("%d B", numBytes); |
- } else if (numBytes < ONE_MEGA_BYTE) { |
- return String.format("%d KB", numBytes / ONE_KILO_BYTE); |
- } else if (numBytes < ONE_GIGA_BYTE) { |
- return String.format("%d MB", numBytes / ONE_MEGA_BYTE); |
- } else { |
- return String.format("%d GB", numBytes / ONE_GIGA_BYTE); |
- } |
- } |
- |
-} |