apetushkov@9858: /* apetushkov@9858: * Copyright (c) 2012, 2018, Oracle and/or its affiliates. All rights reserved. apetushkov@9858: * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. apetushkov@9858: * apetushkov@9858: * This code is free software; you can redistribute it and/or modify it apetushkov@9858: * under the terms of the GNU General Public License version 2 only, as apetushkov@9858: * published by the Free Software Foundation. apetushkov@9858: * apetushkov@9858: * This code is distributed in the hope that it will be useful, but WITHOUT apetushkov@9858: * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or apetushkov@9858: * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License apetushkov@9858: * version 2 for more details (a copy is included in the LICENSE file that apetushkov@9858: * accompanied this code). apetushkov@9858: * apetushkov@9858: * You should have received a copy of the GNU General Public License version apetushkov@9858: * 2 along with this work; if not, write to the Free Software Foundation, apetushkov@9858: * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. apetushkov@9858: * apetushkov@9858: * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA apetushkov@9858: * or visit www.oracle.com if you need additional information or have any apetushkov@9858: * questions. apetushkov@9858: * apetushkov@9858: */ apetushkov@9858: apetushkov@9858: #ifndef SHARE_VM_JFR_JFRDCMDS_HPP apetushkov@9858: #define SHARE_VM_JFR_JFRDCMDS_HPP apetushkov@9858: apetushkov@9858: #include "services/diagnosticCommand.hpp" apetushkov@9858: apetushkov@9858: class JfrDumpFlightRecordingDCmd : public DCmdWithParser { apetushkov@9858: protected: apetushkov@9858: DCmdArgument _name; apetushkov@9858: DCmdArgument _filename; apetushkov@9858: DCmdArgument _maxage; apetushkov@9858: DCmdArgument _maxsize; apetushkov@9858: DCmdArgument _begin; apetushkov@9858: DCmdArgument _end; apetushkov@9858: DCmdArgument _path_to_gc_roots; apetushkov@9858: apetushkov@9858: public: apetushkov@9858: JfrDumpFlightRecordingDCmd(outputStream* output, bool heap); apetushkov@9858: static const char* name() { apetushkov@9858: return "JFR.dump"; apetushkov@9858: } apetushkov@9858: static const char* description() { apetushkov@9858: return "Copies contents of a JFR recording to file. Either the name or the recording id must be specified."; apetushkov@9858: } apetushkov@9858: static const char* impact() { apetushkov@9858: return "Low"; apetushkov@9858: } apetushkov@9858: static const JavaPermission permission() { apetushkov@9858: JavaPermission p = {"java.lang.management.ManagementPermission", "monitor", NULL}; apetushkov@9858: return p; apetushkov@9858: } apetushkov@9858: static int num_arguments(); apetushkov@9858: virtual void execute(DCmdSource source, TRAPS); apetushkov@9858: }; apetushkov@9858: apetushkov@9858: class JfrCheckFlightRecordingDCmd : public DCmdWithParser { apetushkov@9858: protected: apetushkov@9858: DCmdArgument _name; apetushkov@9858: DCmdArgument _verbose; apetushkov@9858: apetushkov@9858: public: apetushkov@9858: JfrCheckFlightRecordingDCmd(outputStream* output, bool heap); apetushkov@9858: static const char* name() { apetushkov@9858: return "JFR.check"; apetushkov@9858: } apetushkov@9858: static const char* description() { apetushkov@9858: return "Checks running JFR recording(s)"; apetushkov@9858: } apetushkov@9858: static const char* impact() { apetushkov@9858: return "Low"; apetushkov@9858: } apetushkov@9858: static const JavaPermission permission() { apetushkov@9858: JavaPermission p = {"java.lang.management.ManagementPermission", "monitor", NULL}; apetushkov@9858: return p; apetushkov@9858: } apetushkov@9858: static int num_arguments(); apetushkov@9858: virtual void execute(DCmdSource source, TRAPS); apetushkov@9858: }; apetushkov@9858: apetushkov@9858: class JfrStartFlightRecordingDCmd : public DCmdWithParser { apetushkov@9858: protected: apetushkov@9858: DCmdArgument _name; apetushkov@9858: DCmdArgument _settings; apetushkov@9858: DCmdArgument _delay; apetushkov@9858: DCmdArgument _duration; apetushkov@9858: DCmdArgument _disk; apetushkov@9858: DCmdArgument _filename; apetushkov@9858: DCmdArgument _maxage; apetushkov@9858: DCmdArgument _maxsize; apetushkov@9858: DCmdArgument _dump_on_exit; apetushkov@9858: DCmdArgument _path_to_gc_roots; apetushkov@9858: apetushkov@9858: public: apetushkov@9858: JfrStartFlightRecordingDCmd(outputStream* output, bool heap); apetushkov@9858: static const char* name() { apetushkov@9858: return "JFR.start"; apetushkov@9858: } apetushkov@9858: static const char* description() { apetushkov@9858: return "Starts a new JFR recording"; apetushkov@9858: } apetushkov@9858: static const char* impact() { apetushkov@9858: return "Medium: Depending on the settings for a recording, the impact can range from low to high."; apetushkov@9858: } apetushkov@9858: static const JavaPermission permission() { apetushkov@9858: JavaPermission p = {"java.lang.management.ManagementPermission", "monitor", NULL}; apetushkov@9858: return p; apetushkov@9858: } apetushkov@9858: static int num_arguments(); apetushkov@9858: virtual void execute(DCmdSource source, TRAPS); apetushkov@9858: }; apetushkov@9858: apetushkov@9858: class JfrStopFlightRecordingDCmd : public DCmdWithParser { apetushkov@9858: protected: apetushkov@9858: DCmdArgument _name; apetushkov@9858: DCmdArgument _filename; apetushkov@9858: apetushkov@9858: public: apetushkov@9858: JfrStopFlightRecordingDCmd(outputStream* output, bool heap); apetushkov@9858: static const char* name() { apetushkov@9858: return "JFR.stop"; apetushkov@9858: } apetushkov@9858: static const char* description() { apetushkov@9858: return "Stops a JFR recording"; apetushkov@9858: } apetushkov@9858: static const char* impact() { apetushkov@9858: return "Low"; apetushkov@9858: } apetushkov@9858: static const JavaPermission permission() { apetushkov@9858: JavaPermission p = {"java.lang.management.ManagementPermission", "monitor", NULL}; apetushkov@9858: return p; apetushkov@9858: } apetushkov@9858: static int num_arguments(); apetushkov@9858: virtual void execute(DCmdSource source, TRAPS); apetushkov@9858: }; apetushkov@9858: apetushkov@9858: class JfrRuntimeOptions; apetushkov@9858: apetushkov@9858: class JfrConfigureFlightRecorderDCmd : public DCmdWithParser { apetushkov@9858: friend class JfrOptionSet; apetushkov@9858: protected: apetushkov@9858: DCmdArgument _repository_path; apetushkov@9858: DCmdArgument _dump_path; apetushkov@9858: DCmdArgument _stack_depth; apetushkov@9858: DCmdArgument _global_buffer_count; ysuenaga@9870: DCmdArgument _global_buffer_size; ysuenaga@9870: DCmdArgument _thread_buffer_size; ysuenaga@9870: DCmdArgument _memory_size; ysuenaga@9870: DCmdArgument _max_chunk_size; apetushkov@9858: DCmdArgument _sample_threads; apetushkov@9858: apetushkov@9858: public: apetushkov@9858: JfrConfigureFlightRecorderDCmd(outputStream* output, bool heap); apetushkov@9858: static const char* name() { apetushkov@9858: return "JFR.configure"; apetushkov@9858: } apetushkov@9858: static const char* description() { apetushkov@9858: return "Configure JFR"; apetushkov@9858: } apetushkov@9858: static const char* impact() { apetushkov@9858: return "Low"; apetushkov@9858: } apetushkov@9858: static const JavaPermission permission() { apetushkov@9858: JavaPermission p = {"java.lang.management.ManagementPermission", "monitor", NULL}; apetushkov@9858: return p; apetushkov@9858: } apetushkov@9858: static int num_arguments(); apetushkov@9858: virtual void execute(DCmdSource source, TRAPS); apetushkov@9858: }; apetushkov@9858: apetushkov@9858: class JfrUnlockCommercialFeaturesDCmd : public DCmd { apetushkov@9858: public: apetushkov@9858: JfrUnlockCommercialFeaturesDCmd(outputStream* output, bool heap) : DCmd(output, heap) { } apetushkov@9858: static const char* name() { return "VM.unlock_commercial_features"; } apetushkov@9858: static const char* description() { apetushkov@9858: return "Simulate commercial features unlocking for Zulu."; apetushkov@9858: } apetushkov@9858: static const char* impact() { return "Low"; } apetushkov@9858: static const JavaPermission permission() { apetushkov@9858: JavaPermission p = {"java.lang.management.ManagementPermission", apetushkov@9858: "monitor", NULL}; apetushkov@9858: return p; apetushkov@9858: } apetushkov@9858: static int num_arguments() { return 0; } apetushkov@9858: virtual void execute(DCmdSource source, TRAPS) { apetushkov@9858: UnlockCommercialFeatures = true; apetushkov@9858: } apetushkov@9858: }; apetushkov@9858: apetushkov@9858: bool register_jfr_dcmds(); apetushkov@9858: apetushkov@9858: #endif // SHARE_VM_JFR_JFRDCMDS_HPP