< prev index next >
src/hotspot/share/utilities/ticks.cpp
Print this page
rev 49619 : JEP 328 : Flight Recorder open source preview
*** 1,7 ****
/*
! * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
--- 1,7 ----
/*
! * Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*** 24,68 ****
#include "precompiled.hpp"
#include "runtime/os.hpp"
#include "utilities/ticks.inline.hpp"
! #ifdef ASSERT
! const jlong Ticks::invalid_time_stamp = -2; // 0xFFFF FFFF`FFFF FFFE
#endif
! void Ticks::stamp() {
! _stamp_ticks = os::elapsed_counter();
}
! const Ticks Ticks::now() {
! Ticks t;
! t.stamp();
! return t;
}
! Tickspan::Tickspan(const Ticks& end, const Ticks& start) {
! assert(end.value() != Ticks::invalid_time_stamp, "end is unstamped!");
! assert(start.value() != Ticks::invalid_time_stamp, "start is unstamped!");
! assert(end >= start, "negative time!");
! _span_ticks = end.value() - start.value();
}
! template <typename ReturnType>
! static ReturnType time_conversion(const Tickspan& span, TicksToTimeHelper::Unit unit) {
! assert(TicksToTimeHelper::SECONDS == unit ||
! TicksToTimeHelper::MILLISECONDS == unit, "invalid unit!");
! ReturnType frequency_per_unit = (ReturnType)os::elapsed_frequency() / (ReturnType)unit;
! return (ReturnType) ((ReturnType)span.value() / frequency_per_unit);
}
! double TicksToTimeHelper::seconds(const Tickspan& span) {
! return time_conversion<double>(span, SECONDS);
}
! jlong TicksToTimeHelper::milliseconds(const Tickspan& span) {
! return time_conversion<jlong>(span, MILLISECONDS);
}
--- 24,133 ----
#include "precompiled.hpp"
#include "runtime/os.hpp"
#include "utilities/ticks.inline.hpp"
! #ifdef X86
! #include "rdtsc_x86.hpp"
#endif
! #include OS_CPU_HEADER(os)
!
! ElapsedCounterStamped::ElapsedCounterStamped() : ElapsedCounter(os::elapsed_counter()) {}
!
! void ElapsedCounter::stamp() {
! _instant = now().value();
! }
!
! ElapsedCounter ElapsedCounter::now() {
! return ElapsedCounterStamped();
! }
!
! #ifdef X86
! FastElapsedCounterStamped::FastElapsedCounterStamped() : FastElapsedCounter(Rdtsc::elapsed_counter()) {}
! #else
! FastElapsedCounterStamped::FastElapsedCounterStamped() : FastElapsedCounter(os::elapsed_counter()) {}
! #endif
!
! void FastElapsedCounter::stamp() {
! _instant = now().value();
! }
!
! FastElapsedCounter FastElapsedCounter::now() {
! return FastElapsedCounterStamped();
! }
!
! TraceElapsedInterval::TraceElapsedInterval(const TraceElapsedCounter& end, const TraceElapsedCounter& start) :
! _elapsed_interval(end.value() - start.value())
! #ifdef X86
! , _ft_elapsed_interval(end.ft_value() - start.ft_value())
! #endif
! {}
!
! TraceElapsedInterval::TraceElapsedInterval(jlong interval) :
! _elapsed_interval(interval)
! #ifdef X86
! , _ft_elapsed_interval(interval)
! #endif
! {}
!
! TraceElapsedInterval& TraceElapsedInterval::operator+=(const TraceElapsedInterval& rhs) {
! _elapsed_interval += rhs._elapsed_interval;
! X86_ONLY(_ft_elapsed_interval += rhs._ft_elapsed_interval;)
! return *this;
}
! TraceElapsedInterval& TraceElapsedInterval::operator-=(const TraceElapsedInterval& rhs) {
! _elapsed_interval -= rhs._elapsed_interval;
! X86_ONLY(_ft_elapsed_interval -= rhs._ft_elapsed_interval;)
! return *this;
}
! jlong TraceElapsedInterval::ft_value() const {
! #ifdef X86
! return _ft_elapsed_interval.value();
! #else
! return _elapsed_interval.value();
! #endif
! }
! TraceElapsedCounter::TraceElapsedCounter(jlong stamp) :
! _elapsed(stamp)
! #ifdef X86
! , _ft_elapsed(stamp)
! #endif
! {}
! TraceElapsedCounter TraceElapsedCounter::now() {
! TraceElapsedCounterStamped dec;
! return dec;
}
! TraceElapsedCounter& TraceElapsedCounter::operator+=(const TraceElapsedInterval& rhs) {
! _elapsed += rhs.value();
! X86_ONLY(_ft_elapsed += rhs.ft_value();)
! return *this;
! }
! TraceElapsedCounter& TraceElapsedCounter::operator-=(const TraceElapsedInterval& rhs) {
! _elapsed -= rhs.value();
! X86_ONLY(_ft_elapsed -= rhs.ft_value();)
! return *this;
! }
! void TraceElapsedCounter::stamp() {
! _elapsed.stamp();
! X86_ONLY(_ft_elapsed.stamp();)
}
! jlong TraceElapsedCounter::ft_value() const {
! #ifdef X86
! return _ft_elapsed.value();
! #else
! return _elapsed.value();
! #endif
}
! TraceElapsedCounterStamped::TraceElapsedCounterStamped() : TraceElapsedCounter() {
! _elapsed.stamp();
! X86_ONLY(_ft_elapsed.stamp());
}
< prev index next >