--- old/src/share/vm/trace/traceEvent.hpp 2019-01-28 17:44:50.000000000 +0800 +++ new/src/share/vm/trace/traceEvent.hpp 2019-01-28 17:44:50.000000000 +0800 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012, 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 @@ -25,6 +25,7 @@ #ifndef SHARE_VM_TRACE_TRACEEVENT_HPP #define SHARE_VM_TRACE_TRACEEVENT_HPP +#include "jfr/utilities/jfrTraceTime.hpp" #include "utilities/macros.hpp" enum EventStartTime { @@ -34,123 +35,93 @@ #if INCLUDE_TRACE #include "trace/traceBackend.hpp" -#include "trace/tracing.hpp" #include "tracefiles/traceEventIds.hpp" -#include "tracefiles/traceTypes.hpp" #include "utilities/ticks.hpp" template -class TraceEvent : public StackObj { +class TraceEvent { private: bool _started; -#ifdef ASSERT - bool _committed; - bool _cancelled; - protected: - bool _ignore_check; -#endif protected: jlong _startTime; jlong _endTime; - - void set_starttime(const TracingTime& time) { + DEBUG_ONLY(bool _committed;) + void set_starttime(const JfrTraceTime& time) { _startTime = time; } - void set_endtime(const TracingTime& time) { + void set_endtime(const JfrTraceTime& time) { _endTime = time; } - public: TraceEvent(EventStartTime timing=TIMED) : _startTime(0), _endTime(0), _started(false) #ifdef ASSERT - , - _committed(false), - _cancelled(false), - _ignore_check(false) + , _committed(false) #endif { if (T::is_enabled()) { _started = true; - if (timing == TIMED && !T::isInstant) { - static_cast(this)->set_starttime(Tracing::time()); + if (TIMED == timing && !T::isInstant) { + static_cast(this)->set_starttime(Tracing::time()); } } } + public: + void set_starttime(const Ticks& time) { + _startTime = time.value(); + } + + void set_endtime(const Ticks& time) { + _endTime = time.value(); + } static bool is_enabled() { - return Tracing::is_event_enabled(T::eventId); + return EnableJFR && Tracing::is_event_enabled(T::eventId); } bool should_commit() { return _started; } - void ignoreCheck() { - DEBUG_ONLY(_ignore_check = true); - } - void commit() { if (!should_commit()) { - cancel(); - return; + return; } - if (_endTime == 0) { + assert(!_committed, "event already committed"); + if (_startTime == 0) { + static_cast(this)->set_starttime(Tracing::time()); + } else if (_endTime == 0) { static_cast(this)->set_endtime(Tracing::time()); } if (static_cast(this)->should_write()) { static_cast(this)->writeEvent(); + DEBUG_ONLY(_committed = true;) } - set_commited(); } - void set_starttime(const Ticks& time) { - _startTime = time.value(); - } - - void set_endtime(const Ticks& time) { - _endTime = time.value(); - } - - TraceEventId id() const { + static TraceEventId id() { return T::eventId; } - bool is_instant() const { + static bool is_instant() { return T::isInstant; } - bool is_requestable() const { + static bool is_requestable() { return T::isRequestable; } - bool has_thread() const { + static bool has_thread() { return T::hasThread; } - bool has_stacktrace() const { + static bool has_stacktrace() { return T::hasStackTrace; } - - void cancel() { - assert(!_committed && !_cancelled, "event was already committed/cancelled"); - DEBUG_ONLY(_cancelled = true); - } - - void set_commited() { - assert(!_committed, "event has already been committed"); - DEBUG_ONLY(_committed = true); - } - - ~TraceEvent() { - if (_started) { - assert(_ignore_check || _committed || _cancelled, "event was not committed/cancelled"); - } - } }; #endif // INCLUDE_TRACE