diff --git a/src/hotspot/share/services/diagnosticCommand.cpp b/src/hotspot/share/services/diagnosticCommand.cpp index 16e31d5ad6b..a623986ca12 100644 --- a/src/hotspot/share/services/diagnosticCommand.cpp +++ b/src/hotspot/share/services/diagnosticCommand.cpp @@ -182,12 +182,6 @@ static int compare_strings(const char** s1, const char** s2) { return ::strcmp(*s1, *s2); } -static void print_local_time(outputStream* output) { - char buf[32]; - output->print_cr("%s", os::local_time_string(buf, sizeof(buf))); -} - - void HelpDCmd::execute(DCmdSource source, const JcmdOptions& commonOptions, TRAPS) { if (_all.value()) { GrowableArray* cmd_list = DCmdFactory::DCmd_list(source); @@ -232,10 +226,6 @@ void HelpDCmd::execute(DCmdSource source, const JcmdOptions& commonOptions, TRAP } void VersionDCmd::execute(DCmdSource source, const JcmdOptions& commonOptions, TRAPS) { - if (commonOptions.timestamp == JcmdOptions::TimeStamp::Yes) { - print_local_time(output()); - } - output()->print_cr("%s version %s", VM_Version::vm_name(), VM_Version::vm_release()); JDK_Version jdk_version = JDK_Version::current(); @@ -256,10 +246,6 @@ PrintVMFlagsDCmd::PrintVMFlagsDCmd(outputStream* output, bool heap) : } void PrintVMFlagsDCmd::execute(DCmdSource source, const JcmdOptions& commonOptions, TRAPS) { - if (commonOptions.timestamp == JcmdOptions::TimeStamp::Yes) { - print_local_time(output()); - } - if (_all.value()) { JVMFlag::printFlags(output(), true); } else { @@ -408,10 +394,6 @@ void VMUptimeDCmd::execute(DCmdSource source, const JcmdOptions& commonOptions, } void VMInfoDCmd::execute(DCmdSource source, const JcmdOptions& commonOptions, TRAPS) { - if (commonOptions.timestamp == JcmdOptions::TimeStamp::Yes) { - print_local_time(output()); - } - VMError::print_vm_info(_output); } @@ -428,19 +410,11 @@ void RunFinalizationDCmd::execute(DCmdSource source, const JcmdOptions& commonOp } void HeapInfoDCmd::execute(DCmdSource source, const JcmdOptions& commonOptions, TRAPS) { - if (commonOptions.timestamp == JcmdOptions::TimeStamp::Yes) { - print_local_time(output()); - } - MutexLocker hl(THREAD, Heap_lock); Universe::heap()->print_heap_on(output()); } void FinalizerInfoDCmd::execute(DCmdSource source, const JcmdOptions& commonOptions, TRAPS) { - if (commonOptions.timestamp == JcmdOptions::TimeStamp::Yes) { - print_local_time(output()); - } - ResourceMark rm(THREAD); if (!InstanceKlass::is_finalization_enabled()) { @@ -514,10 +488,6 @@ HeapDumpDCmd::HeapDumpDCmd(outputStream* output, bool heap) : } void HeapDumpDCmd::execute(DCmdSource source, const JcmdOptions& commonOptions, TRAPS) { - if (commonOptions.timestamp == JcmdOptions::TimeStamp::Yes) { - print_local_time(output()); - } - jlong level = -1; // -1 means no compression. jlong parallel = HeapDumper::default_num_of_dump_threads(); @@ -565,10 +535,6 @@ ClassHistogramDCmd::ClassHistogramDCmd(outputStream* output, bool heap) : } void ClassHistogramDCmd::execute(DCmdSource source, const JcmdOptions& commonOptions, TRAPS) { - if (commonOptions.timestamp == JcmdOptions::TimeStamp::Yes) { - print_local_time(output()); - } - jlong num = _parallel_thread_num.value(); if (num < 0) { output()->print_cr("Parallel thread number out of range (>=0): " JLONG_FORMAT, num); @@ -593,9 +559,18 @@ ThreadDumpDCmd::ThreadDumpDCmd(outputStream* output, bool heap) : _dcmdparser.add_dcmd_option(&_extended); } +static void print_local_time(outputStream* output) { + char buf[32]; + output->print_cr("%s", os::local_time_string(buf, sizeof(buf))); +} + + void ThreadDumpDCmd::execute(DCmdSource source, const JcmdOptions& commonOptions, TRAPS) { - // always timestamp - print_local_time(output()); + // Timestamping is handled by the calle. + // Stay backwards compatible in cases where timestamp is not requested explicitly. + if (JcmdOptions::TimeStamp::Default == commonOptions.timestamp) { + print_local_time(output()); + } // thread stacks and JNI global handles VM_PrintThreads op1(output(), _locks.value(), _extended.value(), true /* print JNI handle info */); @@ -834,10 +809,6 @@ JMXStatusDCmd::JMXStatusDCmd(outputStream *output, bool heap_allocated) : } void JMXStatusDCmd::execute(DCmdSource source, const JcmdOptions& commonOptions, TRAPS) { - if (commonOptions.timestamp == JcmdOptions::TimeStamp::Yes) { - print_local_time(output()); - } - ResourceMark rm(THREAD); HandleMark hm(THREAD); @@ -871,36 +842,20 @@ VMDynamicLibrariesDCmd::VMDynamicLibrariesDCmd(outputStream *output, bool heap_a } void VMDynamicLibrariesDCmd::execute(DCmdSource source, const JcmdOptions& commonOptions, TRAPS) { - if (commonOptions.timestamp == JcmdOptions::TimeStamp::Yes) { - print_local_time(output()); - } - os::print_dll_info(output()); output()->cr(); } void CompileQueueDCmd::execute(DCmdSource source, const JcmdOptions& commonOptions, TRAPS) { - if (commonOptions.timestamp == JcmdOptions::TimeStamp::Yes) { - print_local_time(output()); - } - VM_PrintCompileQueue printCompileQueueOp(output()); VMThread::execute(&printCompileQueueOp); } void CodeListDCmd::execute(DCmdSource source, const JcmdOptions& commonOptions, TRAPS) { - if (commonOptions.timestamp == JcmdOptions::TimeStamp::Yes) { - print_local_time(output()); - } - CodeCache::print_codelist(output()); } void CodeCacheDCmd::execute(DCmdSource source, const JcmdOptions& commonOptions, TRAPS) { - if (commonOptions.timestamp == JcmdOptions::TimeStamp::Yes) { - print_local_time(output()); - } - CodeCache::print_layout(output()); } @@ -927,10 +882,6 @@ CodeHeapAnalyticsDCmd::CodeHeapAnalyticsDCmd(outputStream* output, bool heap) : } void CodeHeapAnalyticsDCmd::execute(DCmdSource source, const JcmdOptions& commonOptions, TRAPS) { - if (commonOptions.timestamp == JcmdOptions::TimeStamp::Yes) { - print_local_time(output()); - } - jlong granularity = _granularity.value(); if (granularity < 1) { Exceptions::fthrow(THREAD_AND_LOCATION, vmSymbols::java_lang_IllegalArgumentException(), @@ -952,9 +903,6 @@ EventLogDCmd::EventLogDCmd(outputStream* output, bool heap) : } void EventLogDCmd::execute(DCmdSource source, const JcmdOptions& commonOptions, TRAPS) { - if (commonOptions.timestamp == JcmdOptions::TimeStamp::Yes) { - print_local_time(output()); - } int max = (int)_max.value(); if (max < 0) { output()->print_cr("Invalid max option: \"%d\".", max); @@ -969,9 +917,6 @@ void EventLogDCmd::execute(DCmdSource source, const JcmdOptions& commonOptions, } void CompilerDirectivesPrintDCmd::execute(DCmdSource source, const JcmdOptions& commonOptions, TRAPS) { - if (commonOptions.timestamp == JcmdOptions::TimeStamp::Yes) { - print_local_time(output()); - } DirectivesStack::print(output()); } @@ -1009,9 +954,6 @@ ClassHierarchyDCmd::ClassHierarchyDCmd(outputStream* output, bool heap) : } void ClassHierarchyDCmd::execute(DCmdSource source, const JcmdOptions& commonOptions, TRAPS) { - if (commonOptions.timestamp == JcmdOptions::TimeStamp::Yes) { - print_local_time(output()); - } VM_PrintClassHierarchy printClassHierarchyOp(output(), _print_interfaces.value(), _print_subclasses.value(), _classname.value()); VMThread::execute(&printClassHierarchyOp); @@ -1049,10 +991,6 @@ public: }; void ClassesDCmd::execute(DCmdSource source, const JcmdOptions& commonOptions, TRAPS) { - if (commonOptions.timestamp == JcmdOptions::TimeStamp::Yes) { - print_local_time(output()); - } - VM_PrintClasses vmop(output(), _verbose.value()); VMThread::execute(&vmop); } @@ -1093,10 +1031,6 @@ DumpSharedArchiveDCmd::DumpSharedArchiveDCmd(outputStream* output, bool heap) : } void DumpSharedArchiveDCmd::execute(DCmdSource source, const JcmdOptions& commonOptions, TRAPS) { - if (commonOptions.timestamp == JcmdOptions::TimeStamp::Yes) { - print_local_time(output()); - } - jboolean is_static; const char* scmd = _suboption.value(); @@ -1237,18 +1171,10 @@ static void execute_vthread_command(Symbol* method_name, outputStream* output, T } void VThreadSchedulerDCmd::execute(DCmdSource source, const JcmdOptions& commonOptions, TRAPS) { - if (commonOptions.timestamp == JcmdOptions::TimeStamp::Yes) { - print_local_time(output()); - } - execute_vthread_command(vmSymbols::printScheduler_name(), output(), CHECK); } void VThreadPollersDCmd::execute(DCmdSource source, const JcmdOptions& commonOptions, TRAPS) { - if (commonOptions.timestamp == JcmdOptions::TimeStamp::Yes) { - print_local_time(output()); - } - execute_vthread_command(vmSymbols::printPollers_name(), output(), CHECK); } @@ -1263,10 +1189,6 @@ CompilationMemoryStatisticDCmd::CompilationMemoryStatisticDCmd(outputStream* out } void CompilationMemoryStatisticDCmd::execute(DCmdSource source, const JcmdOptions& commonOptions, TRAPS) { - if (commonOptions.timestamp == JcmdOptions::TimeStamp::Yes) { - print_local_time(output()); - } - const size_t minsize = _minsize.has_value() ? _minsize.value()._size : 0; CompilationMemoryStatistic::print_jcmd_report(output(), _verbose.value(), _legend.value(), minsize); } @@ -1276,10 +1198,6 @@ void CompilationMemoryStatisticDCmd::execute(DCmdSource source, const JcmdOption SystemMapDCmd::SystemMapDCmd(outputStream* output, bool heap) : DCmd(output, heap) {} void SystemMapDCmd::execute(DCmdSource source, const JcmdOptions& commonOptions, TRAPS) { - if (commonOptions.timestamp == JcmdOptions::TimeStamp::Yes) { - print_local_time(output()); - } - MemMapPrinter::print_all_mappings(output()); } @@ -1292,10 +1210,6 @@ SystemDumpMapDCmd::SystemDumpMapDCmd(outputStream* output, bool heap) : } void SystemDumpMapDCmd::execute(DCmdSource source, const JcmdOptions& commonOptions, TRAPS) { - if (commonOptions.timestamp == JcmdOptions::TimeStamp::Yes) { - print_local_time(output()); - } - const char* name = _filename.value(); if (name == nullptr || name[0] == 0) { output()->print_cr("filename is empty or not specified. No file written"); diff --git a/src/hotspot/share/services/diagnosticFramework.cpp b/src/hotspot/share/services/diagnosticFramework.cpp index 23242e25de8..ba9c4c9570e 100644 --- a/src/hotspot/share/services/diagnosticFramework.cpp +++ b/src/hotspot/share/services/diagnosticFramework.cpp @@ -386,7 +386,7 @@ bool DCmdFactory::_has_pending_jmx_notification = false; * @param updated_line - return value with "" */ static JcmdOptions parse_common_options(const CmdLine& line, stringStream *updated_line) { - JcmdOptions options = {}; + JcmdOptions options; // there is only TIMESTAMP option so far const char TIMESTAMP[] = "-T"; @@ -463,6 +463,11 @@ void DCmd::Executor::parse_and_execute(const char* cmdline, char delim, TRAPS) { assert(command != nullptr, "command error must be handled before this line"); DCmdMark mark(command); command->parse(&line, delim, CHECK); + + if (options.timestamp == JcmdOptions::TimeStamp::Yes){ + _out->date_stamp(true, "", "\n"); + } + execute(command, options, CHECK); } count++; diff --git a/src/hotspot/share/services/diagnosticFramework.hpp b/src/hotspot/share/services/diagnosticFramework.hpp index ea8b981fb60..05b38c5736d 100644 --- a/src/hotspot/share/services/diagnosticFramework.hpp +++ b/src/hotspot/share/services/diagnosticFramework.hpp @@ -168,10 +168,10 @@ public: struct JcmdOptions { enum class TimeStamp { Default, - Yes + Yes // timestamp was explicitly requeted with -T flag }; - TimeStamp timestamp; + TimeStamp timestamp = TimeStamp::Default; }; // The DCmdParser class can be used to create an argument parser for a