Path: blob/master/src/hotspot/share/jfr/dcmd/jfrDcmds.hpp
66644 views
/*1* Copyright (c) 2012, 2019, Oracle and/or its affiliates. All rights reserved.2* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.3*4* This code is free software; you can redistribute it and/or modify it5* under the terms of the GNU General Public License version 2 only, as6* published by the Free Software Foundation.7*8* This code is distributed in the hope that it will be useful, but WITHOUT9* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or10* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License11* version 2 for more details (a copy is included in the LICENSE file that12* accompanied this code).13*14* You should have received a copy of the GNU General Public License version15* 2 along with this work; if not, write to the Free Software Foundation,16* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.17*18* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA19* or visit www.oracle.com if you need additional information or have any20* questions.21*22*/2324#ifndef SHARE_JFR_DCMD_JFRDCMDS_HPP25#define SHARE_JFR_DCMD_JFRDCMDS_HPP2627#include "services/diagnosticCommand.hpp"28class JfrJavaArguments;2930class JfrDCmd : public DCmd {31private:32const char* _args;33const int _num_arguments;34char _delimiter;35protected:36JfrDCmd(outputStream* output, bool heap, int num_arguments);37virtual const char* javaClass() const = 0;38void invoke(JfrJavaArguments& method, TRAPS) const;39public:40virtual void execute(DCmdSource source, TRAPS);41virtual void print_help(const char* name) const;42virtual GrowableArray<const char*>* argument_name_array() const;43virtual GrowableArray<DCmdArgumentInfo*>* argument_info_array() const;44virtual void parse(CmdLine* line, char delim, TRAPS);45};4647class JfrStartFlightRecordingDCmd : public JfrDCmd {48public:49JfrStartFlightRecordingDCmd(outputStream* output, bool heap) : JfrDCmd(output, heap, num_arguments()) {}5051static const char* name() {52return "JFR.start";53}54static const char* description() {55return "Starts a new JFR recording";56}57static const char* impact() {58return "Medium: Depending on the settings for a recording, the impact can range from low to high.";59}60static const JavaPermission permission() {61JavaPermission p = {"java.lang.management.ManagementPermission", "monitor", NULL};62return p;63}64virtual const char* javaClass() const {65return "jdk/jfr/internal/dcmd/DCmdStart";66}67static int num_arguments() {68return 11;69}70};7172class JfrDumpFlightRecordingDCmd : public JfrDCmd {73public:74JfrDumpFlightRecordingDCmd(outputStream* output, bool heap) : JfrDCmd(output, heap, num_arguments()) {}7576static const char* name() {77return "JFR.dump";78}79static const char* description() {80return "Copies contents of a JFR recording to file. Either the name or the recording id must be specified.";81}82static const char* impact() {83return "Low";84}85static const JavaPermission permission() {86JavaPermission p = {"java.lang.management.ManagementPermission", "monitor", NULL};87return p;88}89virtual const char* javaClass() const {90return "jdk/jfr/internal/dcmd/DCmdDump";91}92static int num_arguments() {93return 7;94}95};9697class JfrCheckFlightRecordingDCmd : public JfrDCmd {98public:99JfrCheckFlightRecordingDCmd(outputStream* output, bool heap) : JfrDCmd(output, heap, num_arguments()) {}100101static const char* name() {102return "JFR.check";103}104static const char* description() {105return "Checks running JFR recording(s)";106}107static const char* impact() {108return "Low";109}110static const JavaPermission permission() {111JavaPermission p = {"java.lang.management.ManagementPermission", "monitor", NULL};112return p;113}114virtual const char* javaClass() const {115return "jdk/jfr/internal/dcmd/DCmdCheck";116}117static int num_arguments() {118return 2;119}120};121122class JfrStopFlightRecordingDCmd : public JfrDCmd {123public:124JfrStopFlightRecordingDCmd(outputStream* output, bool heap) : JfrDCmd(output, heap, num_arguments()) {}125126static const char* name() {127return "JFR.stop";128}129static const char* description() {130return "Stops a JFR recording";131}132static const char* impact() {133return "Low";134}135static const JavaPermission permission() {136JavaPermission p = {"java.lang.management.ManagementPermission", "monitor", NULL};137return p;138}139virtual const char* javaClass() const {140return "jdk/jfr/internal/dcmd/DCmdStop";141}142static int num_arguments() {143return 2;144}145};146147class JfrConfigureFlightRecorderDCmd : public DCmdWithParser {148friend class JfrOptionSet;149protected:150DCmdArgument<char*> _repository_path;151DCmdArgument<char*> _dump_path;152DCmdArgument<jlong> _stack_depth;153DCmdArgument<jlong> _global_buffer_count;154DCmdArgument<MemorySizeArgument> _global_buffer_size;155DCmdArgument<MemorySizeArgument> _thread_buffer_size;156DCmdArgument<MemorySizeArgument> _memory_size;157DCmdArgument<MemorySizeArgument> _max_chunk_size;158DCmdArgument<bool> _sample_threads;159bool _verbose;160161public:162JfrConfigureFlightRecorderDCmd(outputStream* output, bool heap);163void set_verbose(bool verbose) {164_verbose = verbose;165}166static const char* name() {167return "JFR.configure";168}169static const char* description() {170return "Configure JFR";171}172static const char* impact() {173return "Low";174}175static const JavaPermission permission() {176JavaPermission p = {"java.lang.management.ManagementPermission", "monitor", NULL};177return p;178}179static int num_arguments();180virtual void execute(DCmdSource source, TRAPS);181virtual void print_help(const char* name) const;182};183184185bool register_jfr_dcmds();186187#endif // SHARE_JFR_DCMD_JFRDCMDS_HPP188189190