< prev index next >
src/share/vm/utilities/ticks.hpp
Print this page
rev 8910 : full patch for jfr
*** 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, 2019, 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.
*** 23,111 ****
*/
#ifndef SHARE_VM_UTILITIES_TICKS_HPP
#define SHARE_VM_UTILITIES_TICKS_HPP
#include "memory/allocation.hpp"
! #include "utilities/globalDefinitions.hpp"
!
! class Ticks;
!
! class Tickspan VALUE_OBJ_CLASS_SPEC {
! friend class Ticks;
! friend Tickspan operator-(const Ticks& end, const Ticks& start);
private:
! jlong _span_ticks;
!
! Tickspan(const Ticks& end, const Ticks& start);
!
public:
! Tickspan() : _span_ticks(0) {}
!
! Tickspan& operator+=(const Tickspan& rhs) {
! _span_ticks += rhs._span_ticks;
! return *this;
! }
!
! jlong value() const {
! return _span_ticks;
! }
};
! class Ticks VALUE_OBJ_CLASS_SPEC {
! private:
! jlong _stamp_ticks;
public:
! Ticks() : _stamp_ticks(0) {
! assert((_stamp_ticks = invalid_time_stamp) == invalid_time_stamp,
! "initial unstamped time value assignment");
! }
!
! Ticks& operator+=(const Tickspan& span) {
! _stamp_ticks += span.value();
! return *this;
! }
!
! Ticks& operator-=(const Tickspan& span) {
! _stamp_ticks -= span.value();
! return *this;
! }
void stamp();
! jlong value() const {
! return _stamp_ticks;
! }
!
! static const Ticks now();
! #ifdef ASSERT
! static const jlong invalid_time_stamp;
! #endif
! #ifndef PRODUCT
! // only for internal use by GC VM tests
! friend class TimePartitionPhasesIteratorTest;
! friend class GCTimerTest;
private:
! // implicit type conversion
! Ticks(int ticks) : _stamp_ticks(ticks) {}
! #endif // !PRODUCT
};
! class TicksToTimeHelper : public AllStatic {
public:
! enum Unit {
! SECONDS = 1,
! MILLISECONDS = 1000
! };
! static double seconds(const Tickspan& span);
! static jlong milliseconds(const Tickspan& span);
};
#endif // SHARE_VM_UTILITIES_TICKS_HPP
--- 23,127 ----
*/
#ifndef SHARE_VM_UTILITIES_TICKS_HPP
#define SHARE_VM_UTILITIES_TICKS_HPP
+ #include "jni.h"
#include "memory/allocation.hpp"
! #include "utilities/macros.hpp"
+ template <typename InstantType>
+ class TimeInterval {
+ template <typename, typename>
+ friend TimeInterval operator-(const InstantType& end, const InstantType& start);
private:
! jlong _interval;
! TimeInterval(const InstantType& end, const InstantType& start) : _interval(end - start) {}
public:
! TimeInterval(jlong interval = 0) : _interval(interval) {}
! TimeInterval& operator+=(const TimeInterval& rhs);
! TimeInterval& operator-=(const TimeInterval& rhs);
! jlong value() const { return _interval; }
! };
+ class TimeInstant {
+ protected:
+ jlong _instant;
+ public:
+ TimeInstant(jlong stamp = 0) : _instant(stamp) {}
+ TimeInstant& operator+=(const TimeInterval<TimeInstant>& rhs);
+ TimeInstant& operator-=(const TimeInterval<TimeInstant>& rhs);
+ jlong value() const { return _instant; }
};
! class ElapsedCounter : public TimeInstant {
! public:
! ElapsedCounter(jlong stamp = 0) : TimeInstant(stamp) {}
! static ElapsedCounter now();
! void stamp();
! };
+ class ElapsedCounterStamped : public ElapsedCounter {
public:
! ElapsedCounterStamped();
! };
+ class FastElapsedCounter : public TimeInstant {
+ public:
+ FastElapsedCounter(jlong stamp = 0) : TimeInstant(stamp) {}
+ static FastElapsedCounter now();
void stamp();
+ };
! class FastElapsedCounterStamped : public FastElapsedCounter {
! public:
! FastElapsedCounterStamped();
! };
! typedef TimeInterval<ElapsedCounter> ElapsedCounterInterval;
! typedef TimeInterval<FastElapsedCounter> FastElapsedCounterInterval;
! class TraceElapsedCounter;
+ class TraceElapsedInterval {
+ friend TraceElapsedInterval operator-(const TraceElapsedCounter& end, const TraceElapsedCounter& start);
private:
! ElapsedCounterInterval _elapsed_interval;
! FastElapsedCounterInterval _ft_elapsed_interval;
! TraceElapsedInterval(const TraceElapsedCounter& end, const TraceElapsedCounter& start);
! public:
! TraceElapsedInterval(jlong interval = 0);
! TraceElapsedInterval& operator+=(const TraceElapsedInterval& rhs);
! TraceElapsedInterval& operator-=(const TraceElapsedInterval& rhs);
! jlong value() const { return _elapsed_interval.value(); }
! jlong ft_value() const;
! };
! class TraceElapsedCounter {
! protected:
! ElapsedCounter _elapsed;
! X86_ONLY(FastElapsedCounter _ft_elapsed;)
! public:
! TraceElapsedCounter(jlong stamp = 0);
! TraceElapsedCounter& operator+=(const TraceElapsedInterval& rhs);
! TraceElapsedCounter& operator-=(const TraceElapsedInterval& rhs);
+ static TraceElapsedCounter now();
+ void stamp();
+ jlong value() const { return _elapsed.value(); }
+ jlong ft_value() const;
};
! class TraceElapsedCounterStamped : public TraceElapsedCounter {
public:
! TraceElapsedCounterStamped();
};
+ #if INCLUDE_TRACE
+ typedef TraceElapsedCounter Ticks;
+ typedef TraceElapsedInterval Tickspan;
+ #else
+ typedef ElapsedCounter Ticks;
+ typedef TicksInterval<Ticks> Tickspan;
+ #endif
+
#endif // SHARE_VM_UTILITIES_TICKS_HPP
< prev index next >