10 #define CLOCK_REALTIME 0
11 #define CLOCK_MONOTONIC 1
12 #define CLOCK_PROCESS_CPUTIME_ID 2
13 #define CLOCK_THREAD_CPUTIME_ID 3
23 #include <unordered_set>
24 #include <unordered_map>
27 #include <boost/format.hpp>
54 for (
unsigned int i = dups.size();
i <
size; ++
i)
62 m_is_cpu_bound(
false ),
63 m_enable_timing_paths( config.getUntrackedParameter<bool>(
"enableTimingPaths" ) ),
64 m_enable_timing_modules( config.getUntrackedParameter<bool>(
"enableTimingModules" ) ),
65 m_enable_timing_exclusive( config.getUntrackedParameter<bool>(
"enableTimingExclusive" ) ),
66 m_enable_timing_summary( config.getUntrackedParameter<bool>(
"enableTimingSummary" ) ),
67 m_skip_first_path( config.getUntrackedParameter<bool>(
"skipFirstPath" ) ),
69 m_enable_dqm( config.getUntrackedParameter<bool>(
"enableDQM" ) ),
70 m_enable_dqm_bypath_active( config.getUntrackedParameter<bool>(
"enableDQMbyPathActive" ) ),
71 m_enable_dqm_bypath_total( config.getUntrackedParameter<bool>(
"enableDQMbyPathTotal" ) ),
72 m_enable_dqm_bypath_overhead( config.getUntrackedParameter<bool>(
"enableDQMbyPathOverhead" ) ),
73 m_enable_dqm_bypath_details( config.getUntrackedParameter<bool>(
"enableDQMbyPathDetails" ) ),
74 m_enable_dqm_bypath_counters( config.getUntrackedParameter<bool>(
"enableDQMbyPathCounters" ) ),
75 m_enable_dqm_bypath_exclusive( config.getUntrackedParameter<bool>(
"enableDQMbyPathExclusive" ) ),
76 m_enable_dqm_bymodule( config.getUntrackedParameter<bool>(
"enableDQMbyModule" ) ),
77 m_enable_dqm_bymoduletype( config.getUntrackedParameter<bool>(
"enableDQMbyModuleType" ) ),
78 m_enable_dqm_summary( config.getUntrackedParameter<bool>(
"enableDQMSummary" ) ),
79 m_enable_dqm_byluminosity( config.getUntrackedParameter<bool>(
"enableDQMbyLuminosity" ) ),
80 m_enable_dqm_byls( config.existsAs<bool>(
"enableDQMbyLumiSection",
false) ?
81 config.getUntrackedParameter<bool>(
"enableDQMbyLumiSection") :
82 ( edm::LogWarning(
"Configuration") <<
"enableDQMbyLumi is deprecated, please use enableDQMbyLumiSection instead", config.getUntrackedParameter<bool>(
"enableDQMbyLumi") )
84 m_enable_dqm_bynproc( config.getUntrackedParameter<bool>(
"enableDQMbyProcesses" ) ),
85 m_nproc_enabled(
false ),
86 m_dqm_eventtime_range( config.getUntrackedParameter<double>(
"dqmTimeRange" ) ),
87 m_dqm_eventtime_resolution( config.getUntrackedParameter<double>(
"dqmTimeResolution" ) ),
88 m_dqm_pathtime_range( config.getUntrackedParameter<double>(
"dqmPathTimeRange" ) ),
89 m_dqm_pathtime_resolution( config.getUntrackedParameter<double>(
"dqmPathTimeResolution" ) ),
90 m_dqm_moduletime_range( config.getUntrackedParameter<double>(
"dqmModuleTimeRange" ) ),
91 m_dqm_moduletime_resolution( config.getUntrackedParameter<double>(
"dqmModuleTimeResolution" ) ),
92 m_dqm_luminosity_range( config.getUntrackedParameter<double>(
"dqmLuminosityRange" ) / 1.e30),
93 m_dqm_luminosity_resolution( config.getUntrackedParameter<double>(
"dqmLuminosityResolution" ) / 1.e30),
94 m_dqm_ls_range( config.getUntrackedParameter<uint32_t>(
"dqmLumiSectionsRange" ) ),
95 m_dqm_path( config.getUntrackedParameter<std::string>(
"dqmPath" ) ),
96 m_luminosity_label( config.getUntrackedParameter<edm::InputTag>(
"luminosityProduct") ),
97 m_supported_processes( config.getUntrackedParameter<std::vector<unsigned int> >(
"supportedProcesses") ),
103 m_is_first_module(
false),
113 m_summary_source(0.),
114 m_summary_all_paths(0.),
115 m_summary_all_endpaths(0.),
116 m_summary_interpaths(0.),
123 m_dqm_all_endpaths(0),
126 m_dqm_nproc_event(0),
127 m_dqm_nproc_source(0),
128 m_dqm_nproc_all_paths(0),
129 m_dqm_nproc_all_endpaths(0),
130 m_dqm_nproc_interpaths(0),
132 m_dqm_paths_active_time(0),
133 m_dqm_paths_total_time(0),
134 m_dqm_paths_exclusive_time(0),
135 m_dqm_paths_interpaths(0),
138 m_dqm_byls_source(0),
139 m_dqm_byls_all_paths(0),
140 m_dqm_byls_all_endpaths(0),
141 m_dqm_byls_interpaths(0),
143 m_dqm_nproc_byls_event(0),
144 m_dqm_nproc_byls_source(0),
145 m_dqm_nproc_byls_all_paths(0),
146 m_dqm_nproc_byls_all_endpaths(0),
147 m_dqm_nproc_byls_interpaths(0),
149 m_dqm_byluminosity_event(0),
150 m_dqm_byluminosity_source(0),
151 m_dqm_byluminosity_all_paths(0),
152 m_dqm_byluminosity_all_endpaths(0),
153 m_dqm_byluminosity_interpaths(0),
155 m_dqm_nproc_byluminosity_event(0),
156 m_dqm_nproc_byluminosity_source(0),
157 m_dqm_nproc_byluminosity_all_paths(0),
158 m_dqm_nproc_byluminosity_all_endpaths(0),
159 m_dqm_nproc_byluminosity_interpaths(0),
206 #if defined(__APPLE__) || defined (__MACH__)
207 host_get_clock_service(mach_host_self(), CALENDAR_CLOCK, &m_clock_port);
208 #endif // defined(__APPLE__) || defined(__MACH__)
213 #if defined(__APPLE__) || defined (__MACH__)
214 mach_port_deallocate(mach_task_self(), m_clock_port);
215 #endif // defined(__APPLE__) || defined(__MACH__)
229 if (clock_getcpuclockid(0, & clock) == ENOENT)
231 edm::LogError(
"FastTimerService") <<
"this process is NOT bound to a single CPU, the results of the FastTimerService may be undefined";
238 uint32_t
size = size_p + size_e;
239 for (uint32_t
i = 0;
i < size_p; ++
i) {
243 for (uint32_t
i = 0;
i < size_e; ++
i) {
291 plot->StatOverflows(
true);
292 plot->SetXTitle(
"processing time [ms]");
294 plot->StatOverflows(
true);
295 plot->SetXTitle(
"processing time [ms]");
297 plot->StatOverflows(
true);
298 plot->SetXTitle(
"processing time [ms]");
300 plot->StatOverflows(
true);
301 plot->SetXTitle(
"processing time [ms]");
303 plot->StatOverflows(
true);
304 plot->SetXTitle(
"processing time [ms]");
323 for (uint32_t
i = 0;
i < size_p; ++
i) {
330 for (uint32_t
i = 0;
i < size_e; ++
i) {
369 plot->StatOverflows(
true);
370 plot->SetXTitle(
"lumisection");
371 plot->SetYTitle(
"processing time [ms]");
373 plot->StatOverflows(
true);
374 plot->SetXTitle(
"lumisection");
375 plot->SetYTitle(
"processing time [ms]");
377 plot->StatOverflows(
true);
378 plot->SetXTitle(
"lumisection");
379 plot->SetYTitle(
"processing time [ms]");
381 plot->StatOverflows(
true);
382 plot->SetXTitle(
"lumisection");
383 plot->SetYTitle(
"processing time [ms]");
385 plot->StatOverflows(
true);
386 plot->SetXTitle(
"lumisection");
387 plot->SetYTitle(
"processing time [ms]");
422 plot->StatOverflows(
true);
423 plot->SetYTitle(
"processing time [ms]");
424 plot->SetXTitle(
"instantaneous luminosity [10^{30} cm^{-2}s^{-1}]");
426 plot->StatOverflows(
true);
427 plot->SetYTitle(
"processing time [ms]");
428 plot->SetXTitle(
"instantaneous luminosity [10^{30} cm^{-2}s^{-1}]");
430 plot->StatOverflows(
true);
431 plot->SetYTitle(
"processing time [ms]");
432 plot->SetXTitle(
"instantaneous luminosity [10^{30} cm^{-2}s^{-1}]");
434 plot->StatOverflows(
true);
435 plot->SetYTitle(
"processing time [ms]");
436 plot->SetXTitle(
"instantaneous luminosity [10^{30} cm^{-2}s^{-1}]");
438 plot->StatOverflows(
true);
439 plot->SetYTitle(
"processing time [ms]");
440 plot->SetXTitle(
"instantaneous luminosity [10^{30} cm^{-2}s^{-1}]");
448 std::string
const &
pathname = keyval.first;
449 PathInfo & pathinfo = keyval.second;
454 pathinfo.
dqm_active ->SetXTitle(
"processing time [ms]");
459 pathinfo.
dqm_total ->StatOverflows(
true);
460 pathinfo.
dqm_total ->SetXTitle(
"processing time [ms]");
475 pathinfo.
dqm_overhead ->SetXTitle(
"processing time [ms]");
485 std::vector<std::string>();
487 static std::vector<std::string> dup;
488 if (modules.size() > dup.size())
491 std::vector<const char *>
labels(modules.size(),
nullptr);
492 for (uint32_t
i = 0;
i < modules.size(); ++
i)
496 if (m_enable_dqm_bypath_counters) {
499 for (uint32_t
i = 0;
i < modules.size(); ++
i) {
510 for (uint32_t
i = 0;
i < modules.size(); ++
i) {
530 std::string
const &
label = keyval.first;
534 module.
dqm_active->SetXTitle(
"processing time [ms]");
541 std::string
const &
label = keyval.first;
545 module.
dqm_active->SetXTitle(
"processing time [ms]");
612 std::ostringstream
out;
613 out << std::fixed << std::setprecision(6);
621 double modules_total = 0.;
623 modules_total += keyval.second.summary_active;
624 out <<
"FastReport " << std::right << std::setw(10) << modules_total / (double)
m_summary_events <<
" all Modules" <<
'\n';
628 out <<
"FastReport " << (m_timer_id ==
CLOCK_REALTIME ?
"(real time) " :
"(CPU time) ") <<
" Active Path" <<
'\n';
634 out <<
"FastReport " << (m_timer_id ==
CLOCK_REALTIME ?
"(real time) " :
"(CPU time) ") <<
" Active EndPath" <<
'\n';
640 out <<
"FastReport " << (m_timer_id ==
CLOCK_REALTIME ?
"(real time) " :
"(CPU time) ") <<
" Active Pre- Inter- Post-mods Overhead Total Path" <<
'\n';
652 out <<
"FastReport " << (m_timer_id ==
CLOCK_REALTIME ?
"(real time) " :
"(CPU time) ") <<
" Active Pre- Inter- Post-mods Overhead Total EndPath" <<
'\n';
665 if (m_enable_timing_modules) {
666 out <<
"FastReport " << (m_timer_id ==
CLOCK_REALTIME ?
"(real time) " :
"(CPU time) ") <<
" Active Module" <<
'\n';
668 std::string
const &
label = keyval.first;
672 out <<
"FastReport " << (m_timer_id ==
CLOCK_REALTIME ?
"(real time) " :
"(CPU time) ") <<
" Active Module" <<
'\n';
674 out <<
"FastReport " << (m_timer_id ==
CLOCK_REALTIME ?
"(real time) " :
"(CPU time) ") <<
" Active Module" <<
'\n';
676 std::string
const &
label = keyval.first;
680 out <<
"FastReport " << (m_timer_id ==
CLOCK_REALTIME ?
"(real time) " :
"(CPU time) ") <<
" Active Module" <<
'\n';
784 for (
auto & keyval :
m_paths) {
785 keyval.second.time_active = 0.;
786 keyval.second.time_premodules = 0.;
787 keyval.second.time_intermodules = 0.;
788 keyval.second.time_postmodules = 0.;
789 keyval.second.time_total = 0.;
792 keyval.second.time_active = 0.;
793 keyval.second.has_just_run =
false;
794 keyval.second.is_exclusive =
false;
797 keyval.second.time_active = 0.;
798 keyval.second.has_just_run =
false;
799 keyval.second.is_exclusive =
false;
812 PathInfo & pathinfo = keyval.second;
815 for (uint32_t
i = 0;
i <= pathinfo.
last_run; ++
i) {
873 unsigned int ls =
event.getLuminosityBlock().luminosityBlock();
890 float luminosity = 0.;
893 luminosity = h_luminosity->front().instantLumi();
976 edm::LogError(
"FastTimerService") <<
"FastTimerService::preProcessPath: unexpected path " <<
path;
1026 double overhead = 0.;
1028 double total = active;
1036 uint32_t last_run = status.
index();
1037 for (uint32_t
i = 0;
i <= last_run; ++
i) {
1084 inter = active - pre - current - post;
1114 pathinfo.
dqm_total ->Fill(total * 1000.);
1194 std::vector<ModuleInfo *> & pathmap =
m_paths[
name].modules;
1196 pathmap.reserve( modules.size() );
1197 std::unordered_set<ModuleInfo const *>
pool;
1198 for (
auto const &
module: modules) {
1202 auto const & it =
m_modules.find(label);
1205 pathmap.push_back( 0 );
1206 }
else if (pool.insert(& it->second).second) {
1208 pathmap.push_back(& it->second);
1211 pathmap.push_back( 0 );
1223 struct timespec now;
1230 struct timespec now;
1237 struct timespec now;
1246 return keyval->second->time_active;
1248 edm::LogError(
"FastTimerService") <<
"FastTimerService::queryModuleTime: unexpected module " << module.
moduleLabel();
1255 auto const & keyval =
m_modules.find(label);
1257 return keyval->second.time_active;
1260 edm::LogError(
"FastTimerService") <<
"FastTimerService::queryModuleTimeByLabel: unexpected module " <<
label;
1269 return keyval->second.time_active;
1272 edm::LogError(
"FastTimerService") <<
"FastTimerService::queryModuleTimeByType: unexpected module type " <<
type;
1280 if (keyval !=
m_paths.end()) {
1281 return keyval->second.time_active;
1283 edm::LogError(
"FastTimerService") <<
"FastTimerService::queryPathActiveTime: unexpected path " <<
path;
1291 if (keyval !=
m_paths.end()) {
1292 return keyval->second.time_total;
1294 edm::LogError(
"FastTimerService") <<
"FastTimerService::queryPathTotalTime: unexpected path " <<
path;
1325 desc.
addUntracked<
bool>(
"enableTimingExclusive",
false);
1326 desc.
addUntracked<
bool>(
"enableTimingSummary",
false);
1329 desc.
addUntracked<
bool>(
"enableDQMbyPathActive",
false);
1330 desc.
addUntracked<
bool>(
"enableDQMbyPathTotal",
true);
1331 desc.
addUntracked<
bool>(
"enableDQMbyPathOverhead",
false);
1332 desc.
addUntracked<
bool>(
"enableDQMbyPathDetails",
false);
1333 desc.
addUntracked<
bool>(
"enableDQMbyPathCounters",
true);
1334 desc.
addUntracked<
bool>(
"enableDQMbyPathExclusive",
false);
1336 desc.
addUntracked<
bool>(
"enableDQMbyModuleType",
false);
1338 desc.
addUntracked<
bool>(
"enableDQMbyLuminosity",
false);
1343 desc.
addUntracked<
bool>(
"enableDQMbyProcesses",
false);
1347 desc.
addUntracked<
double>(
"dqmPathTimeResolution", 0.5);
1348 desc.
addUntracked<
double>(
"dqmModuleTimeRange", 40. );
1349 desc.
addUntracked<
double>(
"dqmModuleTimeResolution", 0.2);
1350 desc.
addUntracked<
double>(
"dqmLuminosityRange", 1.e34 );
1351 desc.
addUntracked<
double>(
"dqmLuminosityResolution", 1.e31 );
1352 desc.
addUntracked<uint32_t>(
"dqmLumiSectionsRange", 2500 );
1353 desc.
addUntracked<std::string>(
"dqmPath",
"HLT/TimerService");
1355 desc.
addUntracked<std::vector<unsigned int> >(
"supportedProcesses", { 8, 24, 32 });
1356 descriptions.
add(
"FastTimerService", desc);
void prePathBeginRun(std::string const &)
std::pair< struct timespec, struct timespec > m_timer_path
const double m_dqm_eventtime_resolution
Strings const & getTrigPathModules(std::string const &name) const
TProfile * m_dqm_byls_all_endpaths
std::string const & getTrigPath(size_type const i) const
const bool m_enable_dqm_byluminosity
const uint32_t m_dqm_ls_range
static void fill_dups(std::vector< std::string > &dups, unsigned int size)
double queryModuleTimeByType(const std::string &) const
ModuleMap< ModuleInfo * > m_fast_moduletypes
TProfile * m_dqm_byls_source
ParameterDescriptionBase * addUntracked(U const &iLabel, T const &value)
bool m_enable_timing_modules
TProfile * m_dqm_nproc_byls_all_paths
double queryEventTime() const
void watchPostEndJob(PostEndJob::slot_type const &iSlot)
std::pair< struct timespec, struct timespec > m_timer_event
Strings const & getEndPaths() const
MonitorElement * book1D(const char *name, const char *title, int nchX, double lowX, double highX)
Book 1D histogram.
The Signals That Services Can Subscribe To This is based on ActivityRegistry and is current per Services can connect to the signals distributed by the ActivityRegistry in order to monitor the activity of the application Each possible callback has some defined which we here list in angle e< void, edm::EventIDconst &, edm::Timestampconst & > We also list in braces which AR_WATCH_USING_METHOD_ is used for those or
const clockid_t m_timer_id
const double m_dqm_luminosity_resolution
double queryModuleTimeByLabel(const std::string &) const
TH1F * m_dqm_nproc_interpaths
TProfile * m_dqm_byluminosity_interpaths
TProfile * m_dqm_nproc_byluminosity_source
void preProcessEvent(edm::EventID const &, edm::Timestamp const &)
double summary_postmodules
const bool m_enable_dqm_bypath_counters
void postProcessEvent(edm::Event const &, edm::EventSetup const &)
const bool m_skip_first_path
void watchPostModule(PostModule::slot_type const &iSlot)
std::string const * m_last_path
TProfile * m_dqm_nproc_byls_interpaths
void watchPreProcessEvent(PreProcessEvent::slot_type const &iSlot)
void postModule(edm::ModuleDescription const &)
const bool m_enable_dqm_bypath_exclusive
double queryPathTotalTime(const std::string &) const
std::unordered_map< std::string, ModuleInfo > m_moduletypes
const double m_dqm_pathtime_range
std::string const & moduleName() const
std::string const * m_first_endpath
ParameterDescriptionNode * addNode(ParameterDescriptionNode const &node)
const edm::InputTag m_luminosity_label
string format
Some error handling for the usage.
#define CLOCK_THREAD_CPUTIME_ID
PathInfo * m_current_path
TH1F * m_dqm_nproc_all_paths
void find(edm::Handle< EcalRecHitCollection > &hits, DetId thisDet, std::vector< EcalRecHitCollection::const_iterator > &hit, bool debug=false)
void setNumberOfProcesses(unsigned int)
std::string const & moduleLabel() const
std::pair< struct timespec, struct timespec > m_timer_endpaths
void watchPreModule(PreModule::slot_type const &iSlot)
double queryEndPathsTime() const
TProfile * m_dqm_nproc_byluminosity_event
TProfile * m_dqm_nproc_byluminosity_all_paths
TProfile * m_dqm_byls_interpaths
void preModuleBeginJob(edm::ModuleDescription const &)
const bool m_enable_dqm_bynproc
double querySourceTime() const
Strings const & getEndPathModules(std::string const &name) const
bool m_enable_timing_paths
void watchPostProcessEvent(PostProcessEvent::slot_type const &iSlot)
size_type findTrigPath(std::string const &name) const
void stop(std::pair< struct timespec, struct timespec > ×) const
void watchPrePathBeginRun(PrePathBeginRun::slot_type const &iSlot)
std::pair< struct timespec, struct timespec > m_timer_paths
const bool m_enable_dqm_byls
const double m_dqm_moduletime_resolution
TProfile * m_dqm_byluminosity_source
void preModule(edm::ModuleDescription const &)
TProfile * m_dqm_nproc_byluminosity_all_endpaths
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
FastTimerService(const edm::ParameterSet &, edm::ActivityRegistry &)
std::string const * m_first_path
TProfile * m_dqm_nproc_byls_source
TProfile * m_dqm_nproc_byls_all_endpaths
std::string const * m_last_endpath
double queryPathActiveTime(const std::string &) const
void start(std::pair< struct timespec, struct timespec > ×) const
PathMap< PathInfo > m_paths
void watchPreSource(PreSource::slot_type const &iSlot)
struct timespec m_timer_first_module
const bool m_enable_dqm_bypath_details
MonitorElement * bookProfile(const char *name, const char *title, int nchX, double lowX, double highX, int nchY, double lowY, double highY, const char *option="s")
double m_summary_all_endpaths
TH1F * m_dqm_nproc_source
const bool m_enable_dqm_bypath_overhead
How EventSelector::AcceptEvent() decides whether to accept an event for output otherwise it is excluding the probing of A single or multiple positive and the trigger will pass if any such matching triggers are PASS or EXCEPTION[A criterion thatmatches no triggers at all is detected and causes a throw.] A single negative with an expectation of appropriate bit checking in the decision and the trigger will pass if any such matching triggers are FAIL or EXCEPTION A wildcarded negative criterion that matches more than one trigger in the trigger but the state exists so we define the behavior If all triggers are the negative crieriion will lead to accepting the event(this again matches the behavior of"!*"before the partial wildcard feature was incorporated).The per-event"cost"of each negative criterion with multiple relevant triggers is about the same as!*was in the past
size_type findEndPath(std::string const &name) const
void watchPreModuleBeginJob(PreModuleBeginJob::slot_type const &iSlot)
TProfile * m_dqm_nproc_byls_event
bool getByLabel(InputTag const &tag, Handle< PROD > &result) const
const std::string m_dqm_path
TProfile * m_dqm_byluminosity_all_endpaths
std::unordered_map< std::string, ModuleInfo > m_modules
ModuleMap< ModuleInfo * > m_fast_modules
const bool m_enable_dqm_bymodule
const double m_dqm_moduletime_range
TProfile * m_dqm_byluminosity_all_paths
bool m_enable_timing_exclusive
double queryModuleTime(const edm::ModuleDescription &) const
double m_summary_all_paths
TH1F * getTH1F(void) const
double m_summary_interpaths
TProfile * m_dqm_paths_exclusive_time
double currentModuleTime() const
void add(std::string const &label, ParameterSetDescription const &psetDescription)
TProfile * m_dqm_byls_all_paths
TH1F * m_dqm_all_endpaths
double queryPathsTime() const
const bool m_enable_timing_summary
bool accept() const
has this path accepted the event?
const bool m_enable_dqm_bymoduletype
std::pair< struct timespec, struct timespec > m_timer_module
const bool m_enable_dqm_summary
double summary_premodules
void watchPostSource(PostSource::slot_type const &iSlot)
TProfile * m_dqm_byls_event
void gettime(struct timespec &stamp) const
std::string const & getEndPath(size_type const i) const
const bool m_enable_dqm_bypath_total
Strings const & getTrigPaths() const
TProfile * getTProfile(void) const
void fillPathMap(std::string const &name, std::vector< std::string > const &modules)
const bool m_enable_dqm_bypath_active
unsigned int m_summary_events
void postProcessPath(std::string const &, edm::HLTPathStatus const &)
const std::vector< unsigned int > m_supported_processes
TProfile * m_dqm_byluminosity_event
std::vector< ModuleInfo * > modules
TProfile * m_dqm_paths_active_time
const double m_dqm_luminosity_range
TH1F * m_dqm_nproc_all_endpaths
double summary_intermodules
TProfile * m_dqm_paths_total_time
TH1F * dqm_module_counter
TProfile * m_dqm_nproc_byluminosity_interpaths
double currentEventTime() const
void watchPreProcessPath(PreProcessPath::slot_type const &iSlot)
void setup(std::vector< TH2F > &depth, std::string name, std::string units="")
void preProcessPath(std::string const &)
std::pair< struct timespec, struct timespec > m_timer_source
tuple size
Write out results.
static double delta(const struct timespec &first, const struct timespec &second)
void setCurrentFolder(const std::string &fullpath)
TProfile * m_dqm_paths_interpaths
void preBeginRun(edm::RunID const &, edm::Timestamp const &)
void watchPostProcessPath(PostProcessPath::slot_type const &iSlot)
void watchPreBeginRun(PreBeginRun::slot_type const &iSlot)
const double m_dqm_eventtime_range
const double m_dqm_pathtime_resolution
double currentPathTime() const
unsigned int index() const
get index of module giving the status of this path