< 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 >