From 978497adfa975cd15cde2908ee16e78d5592a404 Mon Sep 17 00:00:00 2001
From: Tomasz Bold <tomasz.bold@gmail.com>
Date: Wed, 29 Aug 2018 15:40:52 +0200
Subject: [PATCH] Add new class that represent a time stamp

Fixing issues from review by @fwinkl

Further review fixes


Former-commit-id: 09eeaa92f6ac97e5cb6ee4fa1ee4017aa9ad9099
---
 .../TrigTimeAlgs/TrigTimeAlgs/TrigTimeStamp.h | 47 +++++++++++++++++++
 .../TrigTimeAlgs/src/TrigTimeStamp.cxx        |  9 ++++
 2 files changed, 56 insertions(+)
 create mode 100644 Trigger/TrigTools/TrigTimeAlgs/TrigTimeAlgs/TrigTimeStamp.h
 create mode 100644 Trigger/TrigTools/TrigTimeAlgs/src/TrigTimeStamp.cxx

diff --git a/Trigger/TrigTools/TrigTimeAlgs/TrigTimeAlgs/TrigTimeStamp.h b/Trigger/TrigTools/TrigTimeAlgs/TrigTimeAlgs/TrigTimeStamp.h
new file mode 100644
index 000000000000..feba28a989e5
--- /dev/null
+++ b/Trigger/TrigTools/TrigTimeAlgs/TrigTimeAlgs/TrigTimeStamp.h
@@ -0,0 +1,47 @@
+/*
+  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
+*/
+
+#ifndef TrigTimeAlgs_TrigTimeStamp_h
+#define TrigTimeAlgs_TrigTimeStamp_h
+
+
+#include <chrono>
+#include "SGTools/CLASS_DEF.h"
+/**
+ * utility class to measure time duration in AthenaMT
+ * The pattern when it is useful: 
+ * AlgA tags the beginning of the time period
+ *AlgA::execute() { 
+ * timeStampHandle.record( std::move( std::make_unique<TrigTimeStamp>() ) ); }
+ *
+ * AlgB obtains the duration since the start tagged in AlgA:
+ * AlgB::execute() { 
+ *  double duration = timeStampHandle.cptr().milisecondsSince();  }
+ **/
+class TrigTimeStamp {
+public:
+  typedef std::chrono::high_resolution_clock::time_point stamp_type;
+
+  TrigTimeStamp()
+    : m_stamp( std::chrono::high_resolution_clock::now() ) {}
+
+  /**
+   * time duration between now and when the time stamp was created
+   **/
+  double millisecondsSince() const; 
+
+  /**
+   * Obtain the stamp value.
+   **/
+  stamp_type get() const { return m_stamp; }
+private:
+  stamp_type m_stamp;
+};
+
+
+
+CLASS_DEF( TrigTimeStamp , 262409323 , 1 )
+
+#endif  // TrigTimeAlgs_TrigTimeStamp_h
+
diff --git a/Trigger/TrigTools/TrigTimeAlgs/src/TrigTimeStamp.cxx b/Trigger/TrigTools/TrigTimeAlgs/src/TrigTimeStamp.cxx
new file mode 100644
index 000000000000..0b571dcbf885
--- /dev/null
+++ b/Trigger/TrigTools/TrigTimeAlgs/src/TrigTimeStamp.cxx
@@ -0,0 +1,9 @@
+/*
+  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
+*/
+
+#include "TrigTimeAlgs/TrigTimeStamp.h"
+
+double TrigTimeStamp::millisecondsSince() const { 
+  return std::chrono::duration_cast<std::chrono::microseconds>( std::chrono::high_resolution_clock::now() - m_stamp ).count();
+}
-- 
GitLab