12 #include <unordered_set>
13 #include <unordered_map>
16 #include <boost/format.hpp>
41 for (
unsigned int i = dups.size();
i <
size; ++
i)
49 m_use_realtime( config.getUntrackedParameter<bool>(
"useRealTimeClock" ) ),
50 m_enable_timing_paths( config.getUntrackedParameter<bool>(
"enableTimingPaths" ) ),
51 m_enable_timing_modules( config.getUntrackedParameter<bool>(
"enableTimingModules" ) ),
52 m_enable_timing_exclusive( config.getUntrackedParameter<bool>(
"enableTimingExclusive" ) ),
53 m_enable_timing_summary( config.getUntrackedParameter<bool>(
"enableTimingSummary" ) ),
54 m_skip_first_path( config.getUntrackedParameter<bool>(
"skipFirstPath" ) ),
56 m_enable_dqm( config.getUntrackedParameter<bool>(
"enableDQM" ) ),
57 m_enable_dqm_bypath_active( config.getUntrackedParameter<bool>(
"enableDQMbyPathActive" ) ),
58 m_enable_dqm_bypath_total( config.getUntrackedParameter<bool>(
"enableDQMbyPathTotal" ) ),
59 m_enable_dqm_bypath_overhead( config.getUntrackedParameter<bool>(
"enableDQMbyPathOverhead" ) ),
60 m_enable_dqm_bypath_details( config.getUntrackedParameter<bool>(
"enableDQMbyPathDetails" ) ),
61 m_enable_dqm_bypath_counters( config.getUntrackedParameter<bool>(
"enableDQMbyPathCounters" ) ),
62 m_enable_dqm_bypath_exclusive( config.getUntrackedParameter<bool>(
"enableDQMbyPathExclusive" ) ),
63 m_enable_dqm_bymodule( config.getUntrackedParameter<bool>(
"enableDQMbyModule" ) ),
64 m_enable_dqm_bymoduletype( config.getUntrackedParameter<bool>(
"enableDQMbyModuleType" ) ),
65 m_enable_dqm_summary( config.getUntrackedParameter<bool>(
"enableDQMSummary" ) ),
66 m_enable_dqm_byls( config.getUntrackedParameter<bool>(
"enableDQMbyLumiSection" ) ),
67 m_enable_dqm_bynproc( config.getUntrackedParameter<bool>(
"enableDQMbyProcesses" ) ),
69 m_concurrent_runs( 0 ),
70 m_concurrent_streams( 0 ),
71 m_concurrent_threads( 0 ),
72 m_module_id( edm::ModuleDescription::invalidID() ),
73 m_dqm_eventtime_range( config.getUntrackedParameter<double>(
"dqmTimeRange" ) ),
74 m_dqm_eventtime_resolution( config.getUntrackedParameter<double>(
"dqmTimeResolution" ) ),
75 m_dqm_pathtime_range( config.getUntrackedParameter<double>(
"dqmPathTimeRange" ) ),
76 m_dqm_pathtime_resolution( config.getUntrackedParameter<double>(
"dqmPathTimeResolution" ) ),
77 m_dqm_moduletime_range( config.getUntrackedParameter<double>(
"dqmModuleTimeRange" ) ),
78 m_dqm_moduletime_resolution( config.getUntrackedParameter<double>(
"dqmModuleTimeResolution" ) ),
79 m_dqm_path( config.getUntrackedParameter<std::
string>(
"dqmPath" ) ),
89 m_run_summary_perprocess(),
90 m_job_summary_perprocess()
214 uint32_t
size = size_p + size_e;
218 stream.paths.resize(pid+1);
219 for (uint32_t
i = 0;
i < size_p; ++
i) {
221 for (
auto &
stream: m_stream)
224 for (uint32_t
i = 0;
i < size_e; ++
i) {
226 for (
auto &
stream: m_stream)
229 for (
auto &
stream: m_stream) {
231 if (
stream.timing_perprocess.size() <=
pid)
232 stream.timing_perprocess.resize(pid+1);
233 stream.timing_perprocess[
pid].paths_interpaths.assign(size + 1, 0.);
236 stream.dqm_perprocess.resize(pid+1);
237 if (
stream.dqm_perprocess_byluminosity.size() <=
pid)
238 stream.dqm_perprocess_byluminosity.resize(pid+1);
240 stream.dqm_paths.resize(pid+1);
245 summary[
pid].paths_interpaths.assign(size + 1, 0);
254 m_run_summary_perprocess[rid][
pid].reset();
275 m_enable_dqm =
false;
282 uint32_t
size = size_p + size_e;
297 stream.dqm.presource ->StatOverflows(
true);
298 stream.dqm.presource ->SetXTitle(
"processing time [ms]");
300 stream.dqm.source ->StatOverflows(
true);
301 stream.dqm.source ->SetXTitle(
"processing time [ms]");
303 stream.dqm.preevent ->StatOverflows(
true);
304 stream.dqm.preevent ->SetXTitle(
"processing time [ms]");
306 stream.dqm.event ->StatOverflows(
true);
307 stream.dqm.event ->SetXTitle(
"processing time [ms]");
311 booker.setCurrentFolder(
m_dqm_path +
"/process " + process_name);
313 stream.dqm_perprocess[
pid].preevent ->StatOverflows(
true);
314 stream.dqm_perprocess[
pid].preevent ->SetXTitle(
"processing time [ms]");
316 stream.dqm_perprocess[
pid].event ->StatOverflows(
true);
317 stream.dqm_perprocess[
pid].event ->SetXTitle(
"processing time [ms]");
319 stream.dqm_perprocess[
pid].all_paths ->StatOverflows(
true);
320 stream.dqm_perprocess[
pid].all_paths ->SetXTitle(
"processing time [ms]");
321 stream.dqm_perprocess[
pid].all_endpaths = booker.book1D(
"all_endpaths",
"EndPaths processing time", pathbins, 0.,
m_dqm_pathtime_range)->getTH1F();
322 stream.dqm_perprocess[
pid].all_endpaths ->StatOverflows(
true);
323 stream.dqm_perprocess[
pid].all_endpaths ->SetXTitle(
"processing time [ms]");
325 stream.dqm_perprocess[
pid].interpaths ->StatOverflows(
true);
326 stream.dqm_perprocess[
pid].interpaths ->SetXTitle(
"processing time [ms]");
331 booker.setCurrentFolder(
m_dqm_path +
"/process " + process_name);
333 stream.dqm_paths[
pid].active_time ->StatOverflows(
true);
334 stream.dqm_paths[
pid].active_time ->SetYTitle(
"processing time [ms]");
336 stream.dqm_paths[
pid].total_time ->StatOverflows(
true);
337 stream.dqm_paths[
pid].total_time ->SetYTitle(
"processing time [ms]");
339 stream.dqm_paths[
pid].exclusive_time ->StatOverflows(
true);
340 stream.dqm_paths[
pid].exclusive_time ->SetYTitle(
"processing time [ms]");
342 stream.dqm_paths[
pid].interpaths ->StatOverflows(
true);
343 stream.dqm_paths[
pid].interpaths ->SetYTitle(
"processing time [ms]");
345 for (uint32_t
i = 0;
i < size_p; ++
i) {
347 stream.dqm_paths[
pid].active_time ->GetXaxis()->SetBinLabel(
i + 1, label.c_str());
348 stream.dqm_paths[
pid].total_time ->GetXaxis()->SetBinLabel(
i + 1, label.c_str());
349 stream.dqm_paths[
pid].exclusive_time ->GetXaxis()->SetBinLabel(
i + 1, label.c_str());
350 stream.dqm_paths[
pid].interpaths ->GetXaxis()->SetBinLabel(
i + 1, label.c_str());
352 for (uint32_t
i = 0;
i < size_e; ++
i) {
354 stream.dqm_paths[
pid].active_time ->GetXaxis()->SetBinLabel(
i + size_p + 1, label.c_str());
355 stream.dqm_paths[
pid].total_time ->GetXaxis()->SetBinLabel(
i + size_p + 1, label.c_str());
356 stream.dqm_paths[
pid].exclusive_time ->GetXaxis()->SetBinLabel(
i + size_p + 1, label.c_str());
357 stream.dqm_paths[
pid].interpaths ->GetXaxis()->SetBinLabel(
i + size_p + 1, label.c_str());
373 plots.presource ->StatOverflows(
true);
375 plots.presource ->SetYTitle(
"processing time [ms]");
377 plots.source ->StatOverflows(
true);
379 plots.source ->SetYTitle(
"processing time [ms]");
381 plots.preevent ->StatOverflows(
true);
383 plots.preevent ->SetYTitle(
"processing time [ms]");
385 plots.event ->StatOverflows(
true);
387 plots.event ->SetYTitle(
"processing time [ms]");
395 booker.setCurrentFolder(
m_dqm_path +
"/process " + process_name);
400 plots.preevent ->StatOverflows(
true);
402 plots.preevent ->SetYTitle(
"processing time [ms]");
404 plots.event ->StatOverflows(
true);
406 plots.event ->SetYTitle(
"processing time [ms]");
408 plots.all_paths ->StatOverflows(
true);
410 plots.all_paths ->SetYTitle(
"processing time [ms]");
412 plots.all_endpaths ->StatOverflows(
true);
414 plots.all_endpaths ->SetYTitle(
"processing time [ms]");
416 plots.interpaths ->StatOverflows(
true);
418 plots.interpaths ->SetYTitle(
"processing time [ms]");
424 booker.setCurrentFolder(
m_dqm_path +
"/process " + process_name +
"/Paths");
425 for (
auto & keyval:
stream.paths[pid]) {
427 PathInfo & pathinfo = keyval.second;
432 pathinfo.
dqm_active ->SetXTitle(
"processing time [ms]");
437 pathinfo.
dqm_total ->StatOverflows(
true);
438 pathinfo.
dqm_total ->SetXTitle(
"processing time [ms]");
453 pathinfo.
dqm_overhead ->SetXTitle(
"processing time [ms]");
463 std::vector<std::string>();
465 static std::vector<std::string> dup;
466 if (modules.size() > dup.size())
469 std::vector<const char *>
labels(modules.size(),
nullptr);
470 for (uint32_t
i = 0;
i < modules.size(); ++
i)
474 if (m_enable_dqm_bypath_counters) {
475 pathinfo.
dqm_module_counter = booker.book1D(pathname +
"_module_counter", pathname +
" module counter", modules.size(), -0.5, modules.size() - 0.5)->getTH1F();
477 for (uint32_t
i = 0;
i < modules.size(); ++
i) {
483 pathinfo.
dqm_module_active = booker.book1D(pathname +
"_module_active", pathname +
" module active", modules.size(), -0.5, modules.size() - 0.5)->getTH1F();
485 pathinfo.
dqm_module_total = booker.book1D(pathname +
"_module_total", pathname +
" module total", modules.size(), -0.5, modules.size() - 0.5)->getTH1F();
488 for (uint32_t
i = 0;
i < modules.size(); ++
i) {
506 booker.setCurrentFolder(
m_dqm_path +
"/Modules");
507 for (
auto & keyval:
stream.modules) {
512 module.
dqm_active->SetXTitle(
"processing time [ms]");
517 booker.setCurrentFolder(
m_dqm_path +
"/ModuleTypes");
518 for (
auto & keyval:
stream.moduletypes) {
523 module.
dqm_active->SetXTitle(
"processing time [ms]");
556 for (
auto &
stream: m_stream)
637 std::ostringstream
out;
638 out << std::fixed << std::setprecision(6);
639 out <<
"FastReport for " << label <<
", process " << process <<
'\n';
641 out <<
"FastReport " << std::right << std::setw(10) << summary.
preevent / (double) total.
count <<
" Pre-Event" <<
'\n';
642 out <<
"FastReport " << std::right << std::setw(10) << summary.
event / (double) total.
count <<
" Event" <<
'\n';
643 out <<
"FastReport " << std::right << std::setw(10) << summary.
all_paths / (double) total.
count <<
" all Paths" <<
'\n';
644 out <<
"FastReport " << std::right << std::setw(10) << summary.
all_endpaths / (double) total.
count <<
" all EndPaths" <<
'\n';
645 out <<
"FastReport " << std::right << std::setw(10) << summary.
interpaths / (double) total.
count <<
" between paths" <<
'\n';
655 std::ostringstream
out;
656 out << std::fixed << std::setprecision(6);
657 out <<
"FastReport for " << label <<
", over all subprocesses" <<
'\n';
659 out <<
"FastReport " << std::right << std::setw(10) << summary.
presource / (double) summary.
count <<
" Pre-Source" <<
'\n';
660 out <<
"FastReport " << std::right << std::setw(10) << summary.
source / (double) summary.
count <<
" Source" <<
'\n';
661 out <<
"FastReport " << std::right << std::setw(10) << summary.
preevent / (double) summary.
count <<
" Pre-Event" <<
'\n';
662 out <<
"FastReport " << std::right << std::setw(10) << summary.
event / (double) summary.
count <<
" Event" <<
'\n';
734 if (module.
id() >=
stream.fast_modules.size())
735 stream.fast_modules.resize(module.
id() + 1,
nullptr);
736 if (module.
id() >=
stream.fast_moduletypes.size())
737 stream.fast_moduletypes.resize(module.
id() + 1,
nullptr);
750 stream.timer_event.start();
757 stream.timing_perprocess[
pid].all_paths = 0;
758 stream.timing_perprocess[
pid].all_endpaths = 0;
759 stream.timing_perprocess[
pid].interpaths = 0;
760 stream.timing_perprocess[
pid].paths_interpaths.assign(
stream.paths[pid].size() + 1, 0);
761 for (
auto & keyval :
stream.paths[pid]) {
762 keyval.second.timer.reset();
763 keyval.second.time_active = 0.;
764 keyval.second.time_exclusive = 0.;
765 keyval.second.time_premodules = 0.;
766 keyval.second.time_intermodules = 0.;
767 keyval.second.time_postmodules = 0.;
768 keyval.second.time_total = 0.;
773 stream.timer_last_path =
stream.timer_event.getStartTime();
787 stream.timer_event.stop();
788 stream.timer_last_transition =
stream.timer_event.getStopTime();
792 double interpaths =
delta(
stream.timer_last_path,
stream.timer_event.getStopTime());
793 stream.timing_perprocess[
pid].interpaths += interpaths;
794 stream.timing_perprocess[
pid].paths_interpaths.back() = interpaths;
807 stream.timing.preevent =
stream.timing_perprocess[0].preevent;
808 stream.timing.event =
stream.timing_perprocess[0].event;
820 for (
auto & keyval:
stream.paths[pid]) {
821 PathInfo & pathinfo = keyval.second;
839 for (
unsigned int i = 0;
i <
stream.fast_modules.size(); ++
i)
842 double active =
stream.fast_modules[
i]->time_active;
856 for (
auto & keyval:
stream.paths[pid]) {
857 PathInfo & pathinfo = keyval.second;
884 if (module ==
nullptr)
910 for (
auto & keyval :
stream.modules) {
919 for (
auto & keyval :
stream.moduletypes) {
927 for (
unsigned int i = 0;
i <=
stream.paths[
pid].size(); ++
i)
928 stream.dqm_paths[pid].interpaths->Fill(
i,
stream.timing_perprocess[pid].paths_interpaths[
i] * 1000.);
941 stream.dqm_perprocess_byluminosity[pid][i].fill(
stream.luminosity[i],
stream.timing_perprocess[pid]);
951 stream.timer_source.start();
955 for (
auto & keyval :
stream.modules) {
956 keyval.second.timer.reset();
957 keyval.second.time_active = 0.;
958 keyval.second.run_in_path =
nullptr;
959 keyval.second.counter = 0;
961 for (
auto & keyval :
stream.moduletypes) {
962 keyval.second.timer.reset();
963 keyval.second.time_active = 0.;
964 keyval.second.run_in_path =
nullptr;
965 keyval.second.counter = 0;
974 stream.timer_source.stop();
975 stream.timer_last_transition =
stream.timer_source.getStopTime();
988 auto keyval =
stream.paths[
pid].find(path);
989 if (keyval !=
stream.paths[pid].end()) {
990 stream.current_path = & keyval->second;
993 stream.current_path =
nullptr;
994 edm::LogError(
"FastTimerService") <<
"FastTimerService::prePathEvent: unexpected path " <<
path;
999 stream.current_path->first_module =
nullptr;
1002 stream.current_path->timer.start();
1004 if (path ==
m_process[pid].first_path) {
1006 stream.timer_paths.setStartTime(
stream.current_path->timer.getStartTime());
1007 }
else if (path ==
m_process[pid].first_endpath) {
1009 stream.timer_endpaths.setStartTime(
stream.current_path->timer.getStartTime());
1014 double interpaths =
delta(
stream.timer_last_path,
stream.current_path->timer.getStartTime());
1015 stream.timing_perprocess[
pid].interpaths += interpaths;
1016 stream.timing_perprocess[
pid].paths_interpaths[
stream.current_path->index] = interpaths;
1026 if (
stream.current_path ==
nullptr) {
1027 edm::LogError(
"FastTimerService") <<
"FastTimerService::postPathEvent: unexpected path " <<
path;
1032 stream.current_path->timer.stop();
1033 stream.current_path->time_active =
stream.current_path->timer.seconds();
1034 stream.timer_last_path =
stream.current_path->timer.getStopTime();
1036 double active =
stream.current_path->time_active;
1049 double overhead = 0.;
1051 double total = active;
1059 uint32_t last_run = 0;
1061 last_run = status.
index() + 1;
1062 for (uint32_t
i = 0;
i < last_run; ++
i) {
1078 if (
stream.current_path->first_module ==
nullptr) {
1086 pre =
delta(
stream.current_path->timer.getStartTime(),
stream.current_path->first_module->timer.getStartTime());
1087 post =
delta(
stream.current_module->timer.getStopTime(),
stream.current_path->timer.getStopTime());
1088 inter = active - pre - current - post;
1115 stream.timer_paths.setStopTime(
stream.current_path->timer.getStopTime());
1116 stream.timing_perprocess[
pid].all_paths =
stream.timer_paths.seconds();
1117 }
else if (path ==
m_process[pid].last_endpath) {
1119 stream.timer_endpaths.setStopTime(
stream.current_path->timer.getStopTime());
1120 stream.timing_perprocess[
pid].all_endpaths =
stream.timer_endpaths.seconds();
1130 edm::LogError(
"FastTimerService") <<
"FastTimerService::postModuleEventDelayedGet: invalid module";
1139 if (md.
id() <
stream.fast_modules.size()) {
1145 if (
stream.current_path->first_module ==
nullptr)
1158 edm::LogError(
"FastTimerService") <<
"FastTimerService::postModuleEventDelayedGet: invalid module";
1169 if (md.
id() <
stream.fast_modules.size()) {
1187 edm::LogError(
"FastTimerService") <<
"FastTimerService::postModuleEventDelayedGet: invalid module";
1206 if (md.
id() <
stream.fast_modules.size()) {
1211 edm::LogError(
"FastTimerService") <<
"FastTimerService::preModuleEventDelayedGet: unexpected module " << md.
moduleLabel();
1222 edm::LogError(
"FastTimerService") <<
"FastTimerService::postModuleEventDelayedGet: invalid module";
1232 if (md.
id() <
stream.fast_modules.size()) {
1237 edm::LogError(
"FastTimerService") <<
"FastTimerService::postModuleEventDelayedGet: unexpected module " << md.
moduleLabel();
1247 std::vector<ModuleInfo *> & pathmap =
stream.paths[
pid][
name].modules;
1249 pathmap.reserve( modules.size() );
1250 std::unordered_set<ModuleInfo const *>
pool;
1251 for (
auto const &
module: modules) {
1255 auto const & it =
stream.modules.find(label);
1256 if (it ==
stream.modules.end()) {
1258 pathmap.push_back( 0 );
1259 }
else if (pool.insert(& it->second).second) {
1261 pathmap.push_back(& it->second);
1264 pathmap.push_back( 0 );
1277 return m_stream[sid].current_module->timer.secondsUntilNow();
1282 return m_stream[sid].current_path->timer.secondsUntilNow();
1287 return m_stream[sid].timer_event.secondsUntilNow();
1292 if (module.
id() <
m_stream[sid].fast_modules.size()) {
1293 return m_stream[sid].fast_modules[module.
id()]->time_active;
1295 edm::LogError(
"FastTimerService") <<
"FastTimerService::queryModuleTime: unexpected module " << module.
moduleLabel();
1302 if (
id <
m_stream[sid].fast_modules.size()) {
1303 return m_stream[sid].fast_modules[id]->time_active;
1305 edm::LogError(
"FastTimerService") <<
"FastTimerService::queryModuleTime: unexpected module id " << id;
1312 auto const & keyval =
m_stream[sid].modules.find(label);
1314 return keyval->second.time_active;
1317 edm::LogError(
"FastTimerService") <<
"FastTimerService::queryModuleTimeByLabel: unexpected module " <<
label;
1324 auto const & keyval =
m_stream[sid].moduletypes.find(type);
1325 if (keyval !=
m_stream[sid].moduletypes.end()) {
1326 return keyval->second.time_active;
1329 edm::LogError(
"FastTimerService") <<
"FastTimerService::queryModuleTimeByType: unexpected module type " <<
type;
1371 return m_stream[sid].timing.source;
1397 desc.
addUntracked<
bool>(
"enableTimingExclusive",
false);
1398 desc.
addUntracked<
bool>(
"enableTimingSummary",
false);
1401 desc.
addUntracked<
bool>(
"enableDQMbyPathActive",
false);
1402 desc.
addUntracked<
bool>(
"enableDQMbyPathTotal",
true);
1403 desc.
addUntracked<
bool>(
"enableDQMbyPathOverhead",
false);
1404 desc.
addUntracked<
bool>(
"enableDQMbyPathDetails",
false);
1405 desc.
addUntracked<
bool>(
"enableDQMbyPathCounters",
true);
1406 desc.
addUntracked<
bool>(
"enableDQMbyPathExclusive",
false);
1408 desc.
addUntracked<
bool>(
"enableDQMbyModuleType",
false);
1410 desc.
addUntracked<
bool>(
"enableDQMbyLumiSection",
false);
1411 desc.
addUntracked<
bool>(
"enableDQMbyProcesses",
false);
1415 desc.
addUntracked<
double>(
"dqmPathTimeResolution", 0.5);
1416 desc.
addUntracked<
double>(
"dqmModuleTimeRange", 40. );
1417 desc.
addUntracked<
double>(
"dqmModuleTimeResolution", 0.2);
1418 desc.
addUntracked<uint32_t>(
"dqmLumiSectionsRange", 2500 );
1420 descriptions.
add(
"FastTimerService", desc);
1426 unsigned int pid = 0;
void preGlobalBeginRun(edm::GlobalContext const &)
void preModuleEventDelayedGet(edm::StreamContext const &, edm::ModuleCallingContext const &)
std::string const & pathName() const
unsigned int maxNumberOfThreads() const
T getUntrackedParameter(std::string const &, T const &) const
void postStreamBeginRun(edm::StreamContext const &)
void watchPreEvent(PreEvent::slot_type const &iSlot)
double queryEventTime(edm::StreamID) const
const double m_dqm_eventtime_resolution
Strings const & getTrigPathModules(std::string const &name) const
void postStreamEndLumi(edm::StreamContext const &)
std::string const & processName() const
std::string const & getTrigPath(size_type const i) const
void watchPrePathEvent(PrePathEvent::slot_type const &iSlot)
void watchPreallocate(Preallocate::slot_type const &iSlot)
static double delta(FastTimer::Clock::time_point const &first, FastTimer::Clock::time_point const &second)
static void fill_dups(std::vector< std::string > &dups, unsigned int size)
ParameterDescriptionBase * addUntracked(U const &iLabel, T const &value)
bool m_enable_timing_modules
void watchPostEndJob(PostEndJob::slot_type const &iSlot)
Strings const & getEndPaths() const
unsigned int m_concurrent_streams
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
void postModuleEvent(edm::StreamContext const &, edm::ModuleCallingContext const &)
bool wasrun() const
was this path run?
void watchPreModuleEvent(PreModuleEvent::slot_type const &iSlot)
double summary_postmodules
const bool m_enable_dqm_bypath_counters
const bool m_skip_first_path
void watchPostEvent(PostEvent::slot_type const &iSlot)
const bool m_enable_dqm_bypath_exclusive
LuminosityBlockID const & luminosityBlockID() const
void printSummary(Timing const &summary, std::string const &label) const
std::vector< ProcessDescription > m_process
void watchPostStreamEndLumi(PostStreamEndLumi::slot_type const &iSlot)
const double m_dqm_pathtime_range
std::string const & moduleName() const
void watchPostPathEvent(PostPathEvent::slot_type const &iSlot)
void watchPostModuleEvent(PostModuleEvent::slot_type const &iSlot)
double currentPathTime(edm::StreamID) const
void watchPostSourceEvent(PostSourceEvent::slot_type const &iSlot)
std::vector< TimingPerProcess > m_job_summary_perprocess
RunIndex const & runIndex() const
string format
Some error handling for the usage.
void postPathEvent(edm::StreamContext const &, edm::PathContext const &, edm::HLTPathStatus const &)
unsigned int m_concurrent_threads
LuminosityBlockNumber_t luminosityBlock() const
std::string const & moduleLabel() const
static unsigned int getUniqueID()
Returns a unique id each time called. Intended to be passed to ModuleDescription's constructor's modI...
ProcessContext const & parentProcessContext() const
unsigned int m_concurrent_runs
void postStreamBeginLumi(edm::StreamContext const &)
RunIndex const & runIndex() const
unsigned int maxNumberOfStreams() const
void preModuleBeginJob(edm::ModuleDescription const &)
const bool m_enable_dqm_bynproc
Strings const & getEndPathModules(std::string const &name) const
bool m_enable_timing_paths
size_type findTrigPath(std::string const &name) const
std::vector< LuminosityDescription > m_dqm_luminosity
tuple path
else: Piece not in the list, fine.
void prePathEvent(edm::StreamContext const &, edm::PathContext const &)
const bool m_enable_dqm_byls
void watchPostStreamBeginLumi(PostStreamBeginLumi::slot_type const &iSlot)
const double m_dqm_moduletime_resolution
std::mutex m_summary_mutex
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
FastTimerService(const edm::ParameterSet &, edm::ActivityRegistry &)
double queryModuleTimeByLabel(edm::StreamID, const std::string &) const
double currentEventTime(edm::StreamID) const
void watchPreModuleEventDelayedGet(PreModuleEventDelayedGet::slot_type const &iSlot)
void postEvent(edm::StreamContext const &)
void postGlobalEndRun(edm::GlobalContext const &)
void setLuminosity(unsigned int stream_id, unsigned int luminosity_id, double value)
ModuleDescription const * moduleDescription() const
std::vector< std::vector< TimingPerProcess > > m_run_summary_perprocess
void postStreamEndRun(edm::StreamContext const &)
void preModuleEvent(edm::StreamContext const &, edm::ModuleCallingContext const &)
Abs< T >::type abs(const T &t)
const bool m_enable_dqm_bypath_details
std::vector< Timing > m_run_summary
void fillPathMap(unsigned int pid, std::string const &name, std::vector< std::string > const &modules)
ProcessContext const * processContext() const
const bool m_enable_dqm_bypath_overhead
size_type findEndPath(std::string const &name) const
void watchPreModuleBeginJob(PreModuleBeginJob::slot_type const &iSlot)
void watchPostStreamEndRun(PostStreamEndRun::slot_type const &iSlot)
void mergeAndResetMEsRunSummaryCache(uint32_t run, uint32_t streamId, uint32_t moduleId)
StreamID const & streamID() const
void watchPreGlobalBeginRun(PreGlobalBeginRun::slot_type const &iSlot)
const bool m_enable_dqm_bymodule
void postModuleEventDelayedGet(edm::StreamContext const &, edm::ModuleCallingContext const &)
const double m_dqm_moduletime_range
unsigned int value() const
void watchPostModuleEventDelayedGet(PostModuleEventDelayedGet::slot_type const &iSlot)
bool m_enable_timing_exclusive
double querySourceTime(edm::StreamID) const
void watchPostGlobalEndRun(PostGlobalEndRun::slot_type const &iSlot)
void preSourceEvent(edm::StreamID)
void add(std::string const &label, ParameterSetDescription const &psetDescription)
void preEvent(edm::StreamContext const &)
const bool m_enable_timing_summary
bool accept() const
has this path accepted the event?
ProcessContext const * processContext() const
void postSourceEvent(edm::StreamID)
const bool m_enable_dqm_bymoduletype
const bool m_enable_dqm_summary
void watchPostStreamBeginRun(PostStreamBeginRun::slot_type const &iSlot)
double queryModuleTimeByType(edm::StreamID, const std::string &) const
double summary_premodules
std::string const & getEndPath(size_type const i) const
const bool m_enable_dqm_bypath_total
void watchPreStreamBeginRun(PreStreamBeginRun::slot_type const &iSlot)
Strings const & getTrigPaths() const
double queryModuleTime(edm::StreamID, const edm::ModuleDescription &) const
const bool m_enable_dqm_bypath_active
unsigned int maxNumberOfConcurrentRuns() const
std::vector< ModuleInfo * > modules
double summary_intermodules
EventID const & eventID() const
void watchPreSourceEvent(PreSourceEvent::slot_type const &iSlot)
TH1F * dqm_module_counter
static unsigned int processID(edm::ProcessContext const *)
double currentModuleTime(edm::StreamID) const
void mergeAndResetMEsLuminositySummaryCache(uint32_t run, uint32_t lumi, uint32_t streamId, uint32_t moduleId)
void preStreamBeginRun(edm::StreamContext const &)
std::vector< StreamData > m_stream
bool isSubProcess() const
tuple size
Write out results.
unsigned int reserveLuminosityPlots(std::string const &name, std::string const &title, std::string const &label, double range, double resolution)
void printProcessSummary(Timing const &total, TimingPerProcess const &summary, std::string const &label, std::string const &process) const
void preallocate(edm::service::SystemBounds const &)
const double m_dqm_eventtime_range
const double m_dqm_pathtime_resolution
unsigned int index() const