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)
630 std::ostringstream
out;
631 out << std::fixed << std::setprecision(6);
632 out <<
"FastReport for " << label <<
", process " << process <<
'\n';
634 out <<
"FastReport " << std::right << std::setw(10) << summary.
preevent / (double) total.
count <<
" Pre-Event" <<
'\n';
635 out <<
"FastReport " << std::right << std::setw(10) << summary.
event / (double) total.
count <<
" Event" <<
'\n';
636 out <<
"FastReport " << std::right << std::setw(10) << summary.
all_paths / (double) total.
count <<
" all Paths" <<
'\n';
637 out <<
"FastReport " << std::right << std::setw(10) << summary.
all_endpaths / (double) total.
count <<
" all EndPaths" <<
'\n';
638 out <<
"FastReport " << std::right << std::setw(10) << summary.
interpaths / (double) total.
count <<
" between paths" <<
'\n';
648 std::ostringstream
out;
649 out << std::fixed << std::setprecision(6);
650 out <<
"FastReport for " << label <<
", over all subprocesses" <<
'\n';
652 out <<
"FastReport " << std::right << std::setw(10) << summary.
presource / (double) summary.
count <<
" Pre-Source" <<
'\n';
653 out <<
"FastReport " << std::right << std::setw(10) << summary.
source / (double) summary.
count <<
" Source" <<
'\n';
654 out <<
"FastReport " << std::right << std::setw(10) << summary.
preevent / (double) summary.
count <<
" Pre-Event" <<
'\n';
655 out <<
"FastReport " << std::right << std::setw(10) << summary.
event / (double) summary.
count <<
" Event" <<
'\n';
727 if (module.
id() >=
stream.fast_modules.size())
728 stream.fast_modules.resize(module.
id() + 1,
nullptr);
729 if (module.
id() >=
stream.fast_moduletypes.size())
730 stream.fast_moduletypes.resize(module.
id() + 1,
nullptr);
743 stream.timer_event.start();
750 stream.timing_perprocess[
pid].all_paths = 0;
751 stream.timing_perprocess[
pid].all_endpaths = 0;
752 stream.timing_perprocess[
pid].interpaths = 0;
753 stream.timing_perprocess[
pid].paths_interpaths.assign(
stream.paths[pid].size() + 1, 0);
754 for (
auto & keyval :
stream.paths[pid]) {
755 keyval.second.timer.reset();
756 keyval.second.time_active = 0.;
757 keyval.second.time_exclusive = 0.;
758 keyval.second.time_premodules = 0.;
759 keyval.second.time_intermodules = 0.;
760 keyval.second.time_postmodules = 0.;
761 keyval.second.time_total = 0.;
766 stream.timer_last_path =
stream.timer_event.getStartTime();
780 stream.timer_event.stop();
781 stream.timer_last_transition =
stream.timer_event.getStopTime();
785 double interpaths =
delta(
stream.timer_last_path,
stream.timer_event.getStopTime());
786 stream.timing_perprocess[
pid].interpaths += interpaths;
787 stream.timing_perprocess[
pid].paths_interpaths.back() = interpaths;
800 stream.timing.preevent =
stream.timing_perprocess[0].preevent;
801 stream.timing.event =
stream.timing_perprocess[0].event;
813 for (
auto & keyval:
stream.paths[pid]) {
814 PathInfo & pathinfo = keyval.second;
832 for (
unsigned int i = 0;
i <
stream.fast_modules.size(); ++
i)
835 double active =
stream.fast_modules[
i]->time_active;
849 for (
auto & keyval:
stream.paths[pid]) {
850 PathInfo & pathinfo = keyval.second;
877 if (module ==
nullptr)
903 for (
auto & keyval :
stream.modules) {
912 for (
auto & keyval :
stream.moduletypes) {
920 for (
unsigned int i = 0;
i <=
stream.paths[
pid].size(); ++
i)
921 stream.dqm_paths[pid].interpaths->Fill(
i,
stream.timing_perprocess[pid].paths_interpaths[
i] * 1000.);
934 stream.dqm_perprocess_byluminosity[pid][i].fill(
stream.luminosity[i],
stream.timing_perprocess[pid]);
944 stream.timer_source.start();
948 for (
auto & keyval :
stream.modules) {
949 keyval.second.timer.reset();
950 keyval.second.time_active = 0.;
951 keyval.second.run_in_path =
nullptr;
952 keyval.second.counter = 0;
954 for (
auto & keyval :
stream.moduletypes) {
955 keyval.second.timer.reset();
956 keyval.second.time_active = 0.;
957 keyval.second.run_in_path =
nullptr;
958 keyval.second.counter = 0;
967 stream.timer_source.stop();
968 stream.timer_last_transition =
stream.timer_source.getStopTime();
981 auto keyval =
stream.paths[
pid].find(path);
982 if (keyval !=
stream.paths[pid].end()) {
983 stream.current_path = & keyval->second;
986 stream.current_path =
nullptr;
987 edm::LogError(
"FastTimerService") <<
"FastTimerService::prePathEvent: unexpected path " <<
path;
992 stream.current_path->first_module =
nullptr;
995 stream.current_path->timer.start();
999 stream.timer_paths.setStartTime(
stream.current_path->timer.getStartTime());
1000 }
else if (path ==
m_process[pid].first_endpath) {
1002 stream.timer_endpaths.setStartTime(
stream.current_path->timer.getStartTime());
1007 double interpaths =
delta(
stream.timer_last_path,
stream.current_path->timer.getStartTime());
1008 stream.timing_perprocess[
pid].interpaths += interpaths;
1009 stream.timing_perprocess[
pid].paths_interpaths[
stream.current_path->index] = interpaths;
1019 if (
stream.current_path ==
nullptr) {
1020 edm::LogError(
"FastTimerService") <<
"FastTimerService::postPathEvent: unexpected path " <<
path;
1025 stream.current_path->timer.stop();
1026 stream.current_path->time_active =
stream.current_path->timer.seconds();
1027 stream.timer_last_path =
stream.current_path->timer.getStopTime();
1029 double active =
stream.current_path->time_active;
1042 double overhead = 0.;
1044 double total = active;
1052 uint32_t last_run = 0;
1054 last_run = status.
index() + 1;
1055 for (uint32_t
i = 0;
i < last_run; ++
i) {
1071 if (
stream.current_path->first_module ==
nullptr) {
1079 pre =
delta(
stream.current_path->timer.getStartTime(),
stream.current_path->first_module->timer.getStartTime());
1080 post =
delta(
stream.current_module->timer.getStopTime(),
stream.current_path->timer.getStopTime());
1081 inter = active - pre - current - post;
1108 stream.timer_paths.setStopTime(
stream.current_path->timer.getStopTime());
1109 stream.timing_perprocess[
pid].all_paths =
stream.timer_paths.seconds();
1110 }
else if (path ==
m_process[pid].last_endpath) {
1112 stream.timer_endpaths.setStopTime(
stream.current_path->timer.getStopTime());
1113 stream.timing_perprocess[
pid].all_endpaths =
stream.timer_endpaths.seconds();
1123 edm::LogError(
"FastTimerService") <<
"FastTimerService::postModuleEventDelayedGet: invalid module";
1132 if (md.
id() <
stream.fast_modules.size()) {
1138 if (
stream.current_path->first_module ==
nullptr)
1151 edm::LogError(
"FastTimerService") <<
"FastTimerService::postModuleEventDelayedGet: invalid module";
1162 if (md.
id() <
stream.fast_modules.size()) {
1180 edm::LogError(
"FastTimerService") <<
"FastTimerService::postModuleEventDelayedGet: invalid module";
1199 if (md.
id() <
stream.fast_modules.size()) {
1204 edm::LogError(
"FastTimerService") <<
"FastTimerService::preModuleEventDelayedGet: unexpected module " << md.
moduleLabel();
1215 edm::LogError(
"FastTimerService") <<
"FastTimerService::postModuleEventDelayedGet: invalid module";
1225 if (md.
id() <
stream.fast_modules.size()) {
1230 edm::LogError(
"FastTimerService") <<
"FastTimerService::postModuleEventDelayedGet: unexpected module " << md.
moduleLabel();
1240 std::vector<ModuleInfo *> & pathmap =
stream.paths[
pid][
name].modules;
1242 pathmap.reserve( modules.size() );
1243 std::unordered_set<ModuleInfo const *>
pool;
1244 for (
auto const &
module: modules) {
1248 auto const & it =
stream.modules.find(label);
1249 if (it ==
stream.modules.end()) {
1251 pathmap.push_back( 0 );
1252 }
else if (pool.insert(& it->second).second) {
1254 pathmap.push_back(& it->second);
1257 pathmap.push_back( 0 );
1270 return m_stream[sid].current_module->timer.secondsUntilNow();
1275 return m_stream[sid].current_path->timer.secondsUntilNow();
1280 return m_stream[sid].timer_event.secondsUntilNow();
1285 if (module.
id() <
m_stream[sid].fast_modules.size()) {
1286 return m_stream[sid].fast_modules[module.
id()]->time_active;
1288 edm::LogError(
"FastTimerService") <<
"FastTimerService::queryModuleTime: unexpected module " << module.
moduleLabel();
1295 if (
id <
m_stream[sid].fast_modules.size()) {
1296 return m_stream[sid].fast_modules[id]->time_active;
1298 edm::LogError(
"FastTimerService") <<
"FastTimerService::queryModuleTime: unexpected module id " << id;
1305 auto const & keyval =
m_stream[sid].modules.find(label);
1307 return keyval->second.time_active;
1310 edm::LogError(
"FastTimerService") <<
"FastTimerService::queryModuleTimeByLabel: unexpected module " <<
label;
1317 auto const & keyval =
m_stream[sid].moduletypes.find(type);
1318 if (keyval !=
m_stream[sid].moduletypes.end()) {
1319 return keyval->second.time_active;
1322 edm::LogError(
"FastTimerService") <<
"FastTimerService::queryModuleTimeByType: unexpected module type " <<
type;
1364 return m_stream[sid].timing.source;
1390 desc.
addUntracked<
bool>(
"enableTimingExclusive",
false);
1391 desc.
addUntracked<
bool>(
"enableTimingSummary",
false);
1394 desc.
addUntracked<
bool>(
"enableDQMbyPathActive",
false);
1395 desc.
addUntracked<
bool>(
"enableDQMbyPathTotal",
true);
1396 desc.
addUntracked<
bool>(
"enableDQMbyPathOverhead",
false);
1397 desc.
addUntracked<
bool>(
"enableDQMbyPathDetails",
false);
1398 desc.
addUntracked<
bool>(
"enableDQMbyPathCounters",
true);
1399 desc.
addUntracked<
bool>(
"enableDQMbyPathExclusive",
false);
1401 desc.
addUntracked<
bool>(
"enableDQMbyModuleType",
false);
1403 desc.
addUntracked<
bool>(
"enableDQMbyLuminosity",
false)->setComment(
"deprecated: this parameter is ignored");
1404 desc.
addUntracked<
bool>(
"enableDQMbyLumiSection",
false);
1405 desc.
addUntracked<
bool>(
"enableDQMbyProcesses",
false);
1409 desc.
addUntracked<
double>(
"dqmPathTimeResolution", 0.5);
1410 desc.
addUntracked<
double>(
"dqmModuleTimeRange", 40. );
1411 desc.
addUntracked<
double>(
"dqmModuleTimeResolution", 0.2);
1412 desc.
addUntracked<
double>(
"dqmLuminosityRange", 1.e34 )->setComment(
"deprecated: this parameter is ignored");
1413 desc.
addUntracked<
double>(
"dqmLuminosityResolution", 1.e31 )->setComment(
"deprecated: this parameter is ignored");
1414 desc.
addUntracked<uint32_t>(
"dqmLumiSectionsRange", 2500 );
1417 desc.
addUntracked<std::vector<unsigned int> >(
"supportedProcesses", std::vector<unsigned int> { })->setComment(
"deprecated: this parameter is ignored");
1418 descriptions.
add(
"FastTimerService", desc);
1424 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
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 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