1/*
2 * Copyright (c) 2004, 2013, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation.
8 *
9 * This code is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
12 * version 2 for more details (a copy is included in the LICENSE file that
13 * accompanied this code).
14 *
15 * You should have received a copy of the GNU General Public License version
16 * 2 along with this work; if not, write to the Free Software Foundation,
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 *
23 */
24
25package sun.jvm.hotspot.tools;
26
27import java.io.*;
28import java.util.*;
29import java.util.stream.*;
30import sun.jvm.hotspot.debugger.JVMDebugger;
31import sun.jvm.hotspot.runtime.*;
32
33public class JSnap extends Tool {
34
35    private boolean all;
36
37    public JSnap() {
38        super();
39    }
40
41    public JSnap(JVMDebugger d) {
42        super(d);
43    }
44
45    public void run() {
46        final PrintStream out = System.out;
47        if (PerfMemory.initialized()) {
48            PerfDataPrologue prologue = PerfMemory.prologue();
49            if (prologue.accessible()) {
50                PerfMemory.iterate(new PerfMemory.PerfDataEntryVisitor() {
51                        public boolean visit(PerfDataEntry pde) {
52                            if (all || pde.supported()) {
53                                out.print(pde.name());
54                                out.print('=');
55                                out.println(pde.valueAsString());
56                            }
57                            // goto next entry
58                            return true;
59                        }
60                    });
61            } else {
62                out.println("PerfMemory is not accessible");
63            }
64        } else {
65            out.println("PerfMemory is not initialized");
66        }
67    }
68
69    @Override
70    protected void printFlagsUsage() {
71        System.out.println("    -a\tto print all performance counters");
72        super.printFlagsUsage();
73    }
74
75    public static void main(String[] args) {
76        JSnap js = new JSnap();
77        js.all = Arrays.stream(args)
78                       .anyMatch(s -> s.equals("-a"));
79
80        if (js.all) {
81            args = Arrays.stream(args)
82                         .filter(s -> !s.equals("-a"))
83                         .collect(Collectors.toList())
84                         .toArray(new String[0]);
85        }
86
87        js.execute(args);
88    }
89}
90