< prev index next >
src/share/vm/gc/shared/gcTraceTime.cpp
Print this page
@@ -21,59 +21,40 @@
* questions.
*
*/
#include "precompiled.hpp"
-#include "gc/shared/gcTimer.hpp"
-#include "gc/shared/gcTrace.hpp"
#include "gc/shared/gcTraceTime.hpp"
-#include "runtime/globals.hpp"
+#include "logging/log.hpp"
#include "runtime/os.hpp"
-#include "runtime/safepoint.hpp"
-#include "runtime/thread.inline.hpp"
-#include "runtime/timer.hpp"
-#include "utilities/ostream.hpp"
-#include "utilities/ticks.inline.hpp"
-
-GCTraceTimeImpl::GCTraceTimeImpl(const char* title, bool doit, bool print_cr, GCTimer* timer) :
- _title(title), _doit(doit), _print_cr(print_cr), _timer(timer), _start_counter() {
- if (_doit || _timer != NULL) {
- _start_counter.stamp();
+GCTraceCPUTime::GCTraceCPUTime() :
+ _active(Log<LOG_TAGS(gc, cpu)>::is_info()),
+ _starting_user_time(0.0),
+ _starting_system_time(0.0),
+ _starting_real_time(0.0)
+{
+ if (_active) {
+ bool valid = os::getTimesSecs(&_starting_real_time,
+ &_starting_user_time,
+ &_starting_system_time);
+ if (!valid) {
+ log_warning(gc, cpu)("TraceCPUTime: os::getTimesSecs() returned invalid result");
+ _active = false;
}
-
- if (_timer != NULL) {
- assert(SafepointSynchronize::is_at_safepoint(), "Tracing currently only supported at safepoints");
- assert(Thread::current()->is_VM_thread(), "Tracing currently only supported from the VM thread");
-
- _timer->register_gc_phase_start(title, _start_counter);
- }
-
- if (_doit) {
- gclog_or_tty->gclog_stamp();
- gclog_or_tty->print("[%s", title);
- gclog_or_tty->flush();
}
}
-GCTraceTimeImpl::~GCTraceTimeImpl() {
- Ticks stop_counter;
-
- if (_doit || _timer != NULL) {
- stop_counter.stamp();
- }
-
- if (_timer != NULL) {
- _timer->register_gc_phase_end(stop_counter);
- }
-
- if (_doit) {
- const Tickspan duration = stop_counter - _start_counter;
- double duration_in_seconds = TicksToTimeHelper::seconds(duration);
- if (_print_cr) {
- gclog_or_tty->print_cr(", %3.7f secs]", duration_in_seconds);
+GCTraceCPUTime::~GCTraceCPUTime() {
+ if (_active) {
+ double real_time, user_time, system_time;
+ bool valid = os::getTimesSecs(&real_time, &user_time, &system_time);
+ if (valid) {
+ log_info(gc, cpu)("User=%3.2fs Sys=%3.2fs Real=%3.2fs",
+ user_time - _starting_user_time,
+ system_time - _starting_system_time,
+ real_time - _starting_real_time);
} else {
- gclog_or_tty->print(", %3.7f secs]", duration_in_seconds);
+ log_warning(gc, cpu)("TraceCPUTime: os::getTimesSecs() returned invalid result");
}
- gclog_or_tty->flush();
}
}
< prev index next >