Mantid
Loading...
Searching...
No Matches
Framework
API
src
AlgoTimeRegister.cpp
Go to the documentation of this file.
1
// Mantid Repository : https://github.com/mantidproject/mantid
2
//
3
// Copyright © 2020 ISIS Rutherford Appleton Laboratory UKRI,
4
// NScD Oak Ridge National Laboratory, European Spallation Source,
5
// Institut Laue - Langevin & CSNS, Institute of High Energy Physics, CAS
6
// SPDX - License - Identifier: GPL - 3.0 +
7
#include "
MantidAPI/AlgoTimeRegister.h
"
8
#include "
MantidKernel/ConfigService.h
"
9
#include "
MantidKernel/Logger.h
"
10
#include "
MantidKernel/MultiThreaded.h
"
11
#include <fstream>
12
#include <time.h>
13
14
namespace
Mantid
{
15
namespace
Instrumentation {
16
17
namespace
{
18
Kernel::Logger &LOGGER() {
19
static
Kernel::Logger logger(
"AlgoTimeRegister"
);
20
return
logger;
21
}
22
}
// namespace
23
24
using
Kernel::ConfigService
;
25
using
Kernel::time_point_ns
;
26
27
AlgoTimeRegisterImpl::Dump::Dump
(
const
std::string &nm)
28
: m_regStart_chrono(
std
::chrono::high_resolution_clock::now()), m_name(nm) {}
29
30
AlgoTimeRegisterImpl::Dump::~Dump
() {
31
const
time_point_ns
regFinish = std::chrono::high_resolution_clock::now();
32
{
33
AlgoTimeRegister::Instance().addTime(m_name, std::this_thread::get_id(), m_regStart_chrono, regFinish);
34
}
35
}
36
37
void
AlgoTimeRegisterImpl::addTime
(
const
std::string &
name
,
const
Kernel::time_point_ns
&begin,
38
const
Kernel::time_point_ns
&end) {
39
AlgoTimeRegister::Instance().addTime(
name
, std::this_thread::get_id(), begin, end);
40
}
41
42
bool
AlgoTimeRegisterImpl::writeToFile
() {
43
auto
writeEnable = Kernel::ConfigService::Instance().getValue<
bool
>(
"performancelog.write"
).
value
();
44
if
(!writeEnable) {
45
LOGGER().debug() <<
"performancelog.write is disabled (off/0/false)\n"
;
46
return
false
;
47
}
48
auto
filename = Kernel::ConfigService::Instance().getString(
"performancelog.filename"
);
49
if
(filename.empty()) {
50
LOGGER().debug() <<
"performancelog.filename is empty, please provide valid filename\n"
;
51
return
false
;
52
}
53
if
(
m_filename
== filename &&
m_hasWrittenToFile
) {
54
return
true
;
55
}
56
57
m_filename
= filename;
58
59
LOGGER().debug() <<
"Performance log file: "
<<
m_filename
<<
'\n'
;
60
61
std::fstream fs;
62
63
fs.open(
m_filename
, std::ios::out);
64
if
(fs.is_open()) {
65
fs <<
"START_POINT: "
<< std::chrono::duration_cast<std::chrono::nanoseconds>(
m_start
.time_since_epoch()).count()
66
<<
" MAX_THREAD: "
<<
PARALLEL_GET_MAX_THREADS
<<
"\n"
;
67
fs.close();
68
m_hasWrittenToFile
=
true
;
69
}
else
{
70
LOGGER().notice() <<
"Failed to open the file, timing will not write to file.\n"
;
71
return
false
;
72
}
73
return
true
;
74
}
75
76
void
AlgoTimeRegisterImpl::addTime
(
const
std::string &
name
,
const
std::thread::id thread_id,
77
const
Kernel::time_point_ns
&begin,
const
Kernel::time_point_ns
&end) {
78
std::lock_guard<std::mutex> lock(AlgoTimeRegister::Instance().
m_mutex
);
79
if
(
writeToFile
()) {
80
std::fstream fs;
81
fs.open(
m_filename
, std::ios::out | std::ios::app);
82
if
(fs.is_open()) {
83
const
std::chrono::nanoseconds st = begin -
m_start
;
84
const
std::chrono::nanoseconds fi = end -
m_start
;
85
fs <<
"ThreadID="
<< thread_id <<
", AlgorithmName="
<<
name
<<
", StartTime="
<< st.count()
86
<<
", EndTime="
<< fi.count() <<
"\n"
;
87
88
fs.close();
89
}
90
}
91
}
92
93
AlgoTimeRegisterImpl::AlgoTimeRegisterImpl
()
94
:
m_start
(
std
::chrono::high_resolution_clock::now()),
m_hasWrittenToFile
(false) {}
95
96
AlgoTimeRegisterImpl::~AlgoTimeRegisterImpl
() {}
97
98
}
// namespace Instrumentation
99
}
// namespace Mantid
name
std::string name
Definition
Run.cpp:60
AlgoTimeRegister.h
ConfigService.h
value
double value
The value of the point.
Definition
FitMW.cpp:51
Logger.h
MultiThreaded.h
PARALLEL_GET_MAX_THREADS
#define PARALLEL_GET_MAX_THREADS
Definition
MultiThreaded.h:230
Mantid::Instrumentation::AlgoTimeRegisterImpl::Dump::Dump
Dump(const std::string &nm)
Definition
AlgoTimeRegister.cpp:27
Mantid::Instrumentation::AlgoTimeRegisterImpl::Dump::~Dump
~Dump()
Definition
AlgoTimeRegister.cpp:30
Mantid::Instrumentation::AlgoTimeRegisterImpl::m_mutex
std::mutex m_mutex
Definition
AlgoTimeRegister.h:42
Mantid::Instrumentation::AlgoTimeRegisterImpl::m_filename
std::string m_filename
Definition
AlgoTimeRegister.h:53
Mantid::Instrumentation::AlgoTimeRegisterImpl::AlgoTimeRegisterImpl
AlgoTimeRegisterImpl()
Definition
AlgoTimeRegister.cpp:93
Mantid::Instrumentation::AlgoTimeRegisterImpl::m_start
Kernel::time_point_ns m_start
Definition
AlgoTimeRegister.h:52
Mantid::Instrumentation::AlgoTimeRegisterImpl::writeToFile
bool writeToFile()
Definition
AlgoTimeRegister.cpp:42
Mantid::Instrumentation::AlgoTimeRegisterImpl::addTime
void addTime(const std::string &name, const std::thread::id thread_id, const Kernel::time_point_ns &begin, const Kernel::time_point_ns &end)
Definition
AlgoTimeRegister.cpp:76
Mantid::Instrumentation::AlgoTimeRegisterImpl::m_hasWrittenToFile
bool m_hasWrittenToFile
Definition
AlgoTimeRegister.h:54
Mantid::Instrumentation::AlgoTimeRegisterImpl::~AlgoTimeRegisterImpl
~AlgoTimeRegisterImpl()
Definition
AlgoTimeRegister.cpp:96
Mantid::Kernel::ConfigService
Mantid::Kernel::SingletonHolder< ConfigServiceImpl > ConfigService
Definition
ConfigService.h:309
Mantid::Kernel::time_point_ns
std::chrono::time_point< std::chrono::high_resolution_clock > time_point_ns
Definition
Algorithm.h:39
Mantid
Helper class which provides the Collimation Length for SANS instruments.
Definition
AbsorptionCorrection.h:18
std
STL namespace.
Generated by
1.9.8