File indexing completed on 2025-06-12 23:30:01
0001 #include "moduleAlloc_setupFile.h"
0002 #include "monitor_file_utilities.h"
0003
0004 #include <chrono>
0005
0006 #include <sstream>
0007 #include <type_traits>
0008 #include <cassert>
0009 #include <typeindex>
0010
0011 #include "FWCore/Concurrency/interface/ThreadSafeOutputFileStream.h"
0012
0013 #include "DataFormats/Provenance/interface/EventID.h"
0014 #include "DataFormats/Provenance/interface/LuminosityBlockID.h"
0015 #include "DataFormats/Provenance/interface/ModuleDescription.h"
0016 #include "DataFormats/Provenance/interface/RunID.h"
0017 #include "DataFormats/Provenance/interface/Timestamp.h"
0018
0019 #include "FWCore/ServiceRegistry/interface/GlobalContext.h"
0020 #include "FWCore/ServiceRegistry/interface/ModuleCallingContext.h"
0021 #include "FWCore/ServiceRegistry/interface/ESModuleCallingContext.h"
0022 #include "FWCore/ServiceRegistry/interface/PathContext.h"
0023 #include "FWCore/ServiceRegistry/interface/ProcessContext.h"
0024 #include "FWCore/ServiceRegistry/interface/StreamContext.h"
0025 #include "FWCore/ServiceRegistry/interface/ActivityRegistry.h"
0026
0027 #include "FWCore/Framework/interface/IOVSyncValue.h"
0028 #include "FWCore/Framework/interface/ESRecordsToProductResolverIndices.h"
0029
0030 #include "FWCore/AbstractServices/interface/TimingServiceBase.h"
0031
0032 #include "ThreadAllocInfo.h"
0033
0034 using namespace edm::moduleAlloc::monitor_file_utilities;
0035
0036 namespace {
0037 using duration_t = std::chrono::microseconds;
0038 using clock_t = std::chrono::steady_clock;
0039 auto const now = clock_t::now;
0040
0041 enum class Step : char {
0042 preSourceTransition = 'S',
0043 postSourceTransition = 's',
0044 preModuleEventAcquire = 'A',
0045 postModuleEventAcquire = 'a',
0046 preModuleTransition = 'M',
0047 preEventReadFromSource = 'R',
0048 postEventReadFromSource = 'r',
0049 preModuleEventDelayedGet = 'D',
0050 postModuleEventDelayedGet = 'd',
0051 postModuleTransition = 'm',
0052 preESModule = 'N',
0053 postESModule = 'n',
0054 preESModuleAcquire = 'B',
0055 postESModuleAcquire = 'b',
0056 preFrameworkTransition = 'F',
0057 postFrameworkTransition = 'f'
0058 };
0059
0060 constexpr bool isPostTransition(Step s) {
0061 switch (s) {
0062 case Step::postSourceTransition:
0063 case Step::postModuleEventAcquire:
0064 case Step::postEventReadFromSource:
0065 case Step::postModuleEventDelayedGet:
0066 case Step::postModuleTransition:
0067 case Step::postESModule:
0068 case Step::postESModuleAcquire:
0069 case Step::postFrameworkTransition:
0070 return true;
0071 default:
0072 return false;
0073 }
0074 return false;
0075 }
0076
0077 enum class Phase : short {
0078 destruction = -16,
0079 endJob = -12,
0080 endStream = -11,
0081 writeProcessBlock = -10,
0082 endProcessBlock = -9,
0083 globalWriteRun = -7,
0084 globalEndRun = -6,
0085 streamEndRun = -5,
0086 globalWriteLumi = -4,
0087 globalEndLumi = -3,
0088 streamEndLumi = -2,
0089 clearEvent = -1,
0090 Event = 0,
0091 streamBeginLumi = 2,
0092 globalBeginLumi = 3,
0093 streamBeginRun = 5,
0094 globalBeginRun = 6,
0095 accessInputProcessBlock = 8,
0096 beginProcessBlock = 9,
0097 openFile = 10,
0098 beginStream = 11,
0099 beginJob = 12,
0100 esSync = 13,
0101 esSyncEnqueue = 14,
0102 getNextTransition = 15,
0103 construction = 16,
0104 startTracing = 17
0105 };
0106
0107 std::ostream& operator<<(std::ostream& os, Step const s) {
0108 os << static_cast<std::underlying_type_t<Step>>(s);
0109 return os;
0110 }
0111
0112 std::ostream& operator<<(std::ostream& os, Phase const s) {
0113 os << static_cast<std::underlying_type_t<Phase>>(s);
0114 return os;
0115 }
0116
0117 template <Step S, typename... ARGS>
0118 std::string assembleMessage(ARGS const... args) {
0119 std::ostringstream oss;
0120 oss << S;
0121 concatenate(oss, args...);
0122 oss << '\n';
0123 return oss.str();
0124 }
0125
0126 template <Step S, typename... ARGS>
0127 std::string assembleAllocMessage(edm::service::moduleAlloc::ThreadAllocInfo const& info, ARGS const... args) {
0128 std::ostringstream oss;
0129 oss << S;
0130 concatenate(oss, args...);
0131 concatenate(oss,
0132 info.nAllocations_,
0133 info.nDeallocations_,
0134 info.presentActual_,
0135 info.minActual_,
0136 info.maxActual_,
0137 info.maxSingleAlloc_);
0138 oss << '\n';
0139 return oss.str();
0140 }
0141
0142 Phase toTransitionImpl(edm::StreamContext const& iContext) {
0143 using namespace edm;
0144 switch (iContext.transition()) {
0145 case StreamContext::Transition::kBeginStream:
0146 return Phase::beginStream;
0147 case StreamContext::Transition::kBeginRun:
0148 return Phase::streamBeginRun;
0149 case StreamContext::Transition::kBeginLuminosityBlock:
0150 return Phase::streamBeginLumi;
0151 case StreamContext::Transition::kEvent:
0152 return Phase::Event;
0153 case StreamContext::Transition::kEndLuminosityBlock:
0154 return Phase::streamEndLumi;
0155 case StreamContext::Transition::kEndRun:
0156 return Phase::streamEndRun;
0157 case StreamContext::Transition::kEndStream:
0158 return Phase::endStream;
0159 default:
0160 break;
0161 }
0162 assert(false);
0163 return Phase::Event;
0164 }
0165
0166 auto toTransition(edm::StreamContext const& iContext) -> std::underlying_type_t<Phase> {
0167 return static_cast<std::underlying_type_t<Phase>>(toTransitionImpl(iContext));
0168 }
0169
0170 Phase toTransitionImpl(edm::GlobalContext const& iContext) {
0171 using namespace edm;
0172 switch (iContext.transition()) {
0173 case GlobalContext::Transition::kBeginProcessBlock:
0174 return Phase::beginProcessBlock;
0175 case GlobalContext::Transition::kAccessInputProcessBlock:
0176 return Phase::accessInputProcessBlock;
0177 case GlobalContext::Transition::kBeginRun:
0178 return Phase::globalBeginRun;
0179 case GlobalContext::Transition::kBeginLuminosityBlock:
0180 return Phase::globalBeginLumi;
0181 case GlobalContext::Transition::kEndLuminosityBlock:
0182 return Phase::globalEndLumi;
0183 case GlobalContext::Transition::kWriteLuminosityBlock:
0184 return Phase::globalWriteLumi;
0185 case GlobalContext::Transition::kEndRun:
0186 return Phase::globalEndRun;
0187 case GlobalContext::Transition::kWriteRun:
0188 return Phase::globalWriteRun;
0189 case GlobalContext::Transition::kEndProcessBlock:
0190 return Phase::endProcessBlock;
0191 case GlobalContext::Transition::kWriteProcessBlock:
0192 return Phase::writeProcessBlock;
0193 default:
0194 break;
0195 }
0196 assert(false);
0197 return Phase::Event;
0198 }
0199 auto toTransition(edm::GlobalContext const& iContext) -> std::underlying_type_t<Phase> {
0200 return static_cast<std::underlying_type_t<Phase>>(toTransitionImpl(iContext));
0201 }
0202
0203 unsigned int toTransitionIndex(edm::GlobalContext const& iContext) {
0204 if (iContext.transition() == edm::GlobalContext::Transition::kBeginProcessBlock or
0205 iContext.transition() == edm::GlobalContext::Transition::kEndProcessBlock or
0206 iContext.transition() == edm::GlobalContext::Transition::kWriteProcessBlock or
0207 iContext.transition() == edm::GlobalContext::Transition::kAccessInputProcessBlock) {
0208 return 0;
0209 }
0210 if (iContext.transition() == edm::GlobalContext::Transition::kBeginRun or
0211 iContext.transition() == edm::GlobalContext::Transition::kEndRun or
0212 iContext.transition() == edm::GlobalContext::Transition::kWriteRun) {
0213 return iContext.runIndex();
0214 }
0215 return iContext.luminosityBlockIndex();
0216 }
0217
0218 using namespace edm::service::moduleAlloc;
0219
0220 template <Step S>
0221 struct ESModuleState {
0222 ESModuleState(std::shared_ptr<edm::ThreadSafeOutputFileStream> logFile,
0223 decltype(now()) beginTime,
0224 std::shared_ptr<std::vector<std::type_index>> recordIndices,
0225 Filter const* iFilter)
0226 : logFile_{logFile}, recordIndices_{recordIndices}, beginTime_{beginTime}, filter_(iFilter) {}
0227
0228 void operator()(edm::eventsetup::EventSetupRecordKey const& iKey,
0229 edm::ESModuleCallingContext const& iContext) const {
0230 using namespace edm;
0231 auto const t = std::chrono::duration_cast<duration_t>(now() - beginTime_).count();
0232 auto top = iContext.getTopModuleCallingContext();
0233 short int phase = 0;
0234 unsigned long phaseID = 0xFFFFFFFF;
0235 if (top->type() == ParentContext::Type::kGlobal) {
0236 auto global = top->globalContext();
0237 phase = toTransition(*global);
0238 phaseID = toTransitionIndex(*global);
0239 } else if (top->type() == ParentContext::Type::kStream) {
0240 auto stream = top->getStreamContext();
0241 phase = toTransition(*stream);
0242 phaseID = stream_id(*stream);
0243 } else if (top->type() == ParentContext::Type::kPlaceInPath) {
0244 auto stream = top->getStreamContext();
0245 phase = toTransition(*stream);
0246 phaseID = stream_id(*stream);
0247 }
0248 auto recordIndex = findRecordIndices(iKey);
0249 if constexpr (isPostTransition(S)) {
0250 auto info = filter_->stopOnThread(-1 * (iContext.componentDescription()->id_ + 1));
0251 if (info) {
0252 auto msg = assembleAllocMessage<S>(
0253 *info, phase, phaseID, iContext.componentDescription()->id_ + 1, recordIndex, iContext.callID(), t);
0254 logFile_->write(std::move(msg));
0255 }
0256 } else {
0257 if (filter_->startOnThread(-1 * (iContext.componentDescription()->id_ + 1))) {
0258 auto msg = assembleMessage<S>(
0259 phase, phaseID, iContext.componentDescription()->id_ + 1, recordIndex, iContext.callID(), t);
0260 logFile_->write(std::move(msg));
0261 }
0262 }
0263 }
0264
0265 private:
0266 int findRecordIndices(edm::eventsetup::EventSetupRecordKey const& iKey) const {
0267 auto index = std::type_index(iKey.type().value());
0268 auto itFind = std::find(recordIndices_->begin(), recordIndices_->end(), index);
0269 return itFind - recordIndices_->begin();
0270 }
0271
0272 std::shared_ptr<edm::ThreadSafeOutputFileStream> logFile_;
0273 std::shared_ptr<std::vector<std::type_index>> recordIndices_;
0274 decltype(now()) beginTime_;
0275 Filter const* filter_;
0276 };
0277
0278 template <Step S>
0279 struct GlobalEDModuleState {
0280 GlobalEDModuleState(std::shared_ptr<edm::ThreadSafeOutputFileStream> logFile,
0281 decltype(now()) beginTime,
0282 Filter const* iFilter)
0283 : logFile_{logFile}, beginTime_{beginTime}, filter_(iFilter) {}
0284
0285 void operator()(edm::GlobalContext const& gc, edm::ModuleCallingContext const& mcc) {
0286 using namespace edm;
0287 auto const t = std::chrono::duration_cast<duration_t>(now() - beginTime_).count();
0288 if constexpr (isPostTransition(S)) {
0289 auto id = module_id(mcc);
0290 auto info = filter_->stopOnThread(id);
0291 if (info) {
0292 auto msg = assembleAllocMessage<S>(*info, toTransition(gc), toTransitionIndex(gc), id, module_callid(mcc), t);
0293 logFile_->write(std::move(msg));
0294 }
0295 } else {
0296 auto id = module_id(mcc);
0297 if (filter_->startOnThread(id)) {
0298 auto msg = assembleMessage<S>(toTransition(gc), toTransitionIndex(gc), module_id(mcc), module_callid(mcc), t);
0299 logFile_->write(std::move(msg));
0300 }
0301 }
0302 }
0303
0304 private:
0305 std::shared_ptr<edm::ThreadSafeOutputFileStream> logFile_;
0306 decltype(now()) beginTime_;
0307 Filter const* filter_;
0308 };
0309
0310 template <Step S>
0311 struct StreamEDModuleState {
0312 StreamEDModuleState(std::shared_ptr<edm::ThreadSafeOutputFileStream> logFile,
0313 decltype(now()) beginTime,
0314 Filter const* iFilter)
0315 : logFile_{logFile}, beginTime_{beginTime}, filter_(iFilter) {}
0316
0317 void operator()(edm::StreamContext const& sc, edm::ModuleCallingContext const& mcc) {
0318 using namespace edm;
0319 auto const t = std::chrono::duration_cast<duration_t>(now() - beginTime_).count();
0320 if constexpr (isPostTransition(S)) {
0321 auto id = module_id(mcc);
0322 auto info = filter_->stopOnThread(id);
0323 if (info) {
0324 auto msg =
0325 assembleAllocMessage<S>(*info, toTransition(sc), stream_id(sc), module_id(mcc), module_callid(mcc), t);
0326 logFile_->write(std::move(msg));
0327 }
0328 } else {
0329 auto id = module_id(mcc);
0330 if (filter_->startOnThread(id)) {
0331 auto msg = assembleMessage<S>(toTransition(sc), stream_id(sc), id, module_callid(mcc), t);
0332 logFile_->write(std::move(msg));
0333 }
0334 }
0335 }
0336
0337 private:
0338 std::shared_ptr<edm::ThreadSafeOutputFileStream> logFile_;
0339 decltype(now()) beginTime_;
0340 Filter const* filter_;
0341 };
0342
0343 struct ModuleCtrDtr {
0344 long long beginConstruction = 0;
0345 long long endConstruction = 0;
0346 edm::service::moduleAlloc::ThreadAllocInfo constructionAllocInfo;
0347 long long beginDestruction = 0;
0348 long long endDestruction = 0;
0349 edm::service::moduleAlloc::ThreadAllocInfo destructionAllocInfo;
0350 };
0351 }
0352
0353 namespace edm::service::moduleAlloc {
0354 void setupFile(std::string const& iFileName, edm::ActivityRegistry& iRegistry, Filter const* iFilter) {
0355 auto beginModuleAlloc = now();
0356 using namespace std::chrono;
0357
0358 if (iFileName.empty()) {
0359 return;
0360 }
0361
0362 auto logFile = std::make_shared<edm::ThreadSafeOutputFileStream>(iFileName);
0363
0364 auto beginTime = TimingServiceBase::jobStartTime();
0365
0366 auto esModuleLabelsPtr = std::make_shared<std::vector<std::string>>();
0367 auto& esModuleLabels = *esModuleLabelsPtr;
0368 auto esModuleTypesPtr = std::make_shared<std::vector<std::string>>();
0369 auto& esModuleTypes = *esModuleTypesPtr;
0370
0371 iRegistry.watchPostESModuleRegistration([&esModuleLabels, &esModuleTypes](auto const& iDescription) {
0372 if (esModuleLabels.size() <= iDescription.id_ + 1) {
0373 esModuleLabels.resize(iDescription.id_ + 2);
0374 esModuleTypes.resize(iDescription.id_ + 2);
0375 }
0376
0377 if (not iDescription.label_.empty()) {
0378 esModuleLabels[iDescription.id_ + 1] = iDescription.label_;
0379 } else {
0380 esModuleLabels[iDescription.id_ + 1] = iDescription.type_;
0381 }
0382 esModuleTypes[iDescription.id_ + 1] = iDescription.type_;
0383 });
0384 auto moduleCtrDtrPtr = std::make_shared<std::vector<ModuleCtrDtr>>();
0385 auto& moduleCtrDtr = *moduleCtrDtrPtr;
0386 auto moduleLabelsPtr = std::make_shared<std::vector<std::string>>();
0387 auto moduleTypesPtr = std::make_shared<std::vector<std::string>>();
0388 auto& moduleLabels = *moduleLabelsPtr;
0389 auto& moduleTypes = *moduleTypesPtr;
0390 iRegistry.watchPreModuleConstruction(
0391 [&moduleLabels, &moduleTypes, &moduleCtrDtr, beginTime, iFilter](ModuleDescription const& md) {
0392 auto const t = duration_cast<duration_t>(now() - beginTime).count();
0393
0394 auto const mid = md.id();
0395 if (mid < moduleLabels.size()) {
0396 moduleLabels[mid] = md.moduleLabel();
0397 moduleTypes[mid] = md.moduleName();
0398 moduleCtrDtr[mid].beginConstruction = t;
0399 } else {
0400 moduleLabels.resize(mid + 1);
0401 moduleLabels.back() = md.moduleLabel();
0402 moduleTypes.resize(mid + 1);
0403 moduleTypes.back() = md.moduleName();
0404 moduleCtrDtr.resize(mid + 1);
0405 moduleCtrDtr.back().beginConstruction = t;
0406 }
0407 iFilter->startOnThread(mid);
0408 });
0409 iRegistry.watchPostModuleConstruction([&moduleCtrDtr, beginTime, iFilter](auto const& md) {
0410 auto const t = duration_cast<duration_t>(now() - beginTime).count();
0411 moduleCtrDtr[md.id()].endConstruction = t;
0412 auto alloc = iFilter->stopOnThread(md.id());
0413 if (alloc) {
0414 moduleCtrDtr[md.id()].constructionAllocInfo = *alloc;
0415 }
0416 });
0417
0418 auto addDataInDtr = std::make_shared<bool>(false);
0419 iRegistry.watchPreModuleDestruction([&moduleCtrDtr, beginTime, iFilter, addDataInDtr, logFile](auto const& md) {
0420 auto const t = duration_cast<duration_t>(now() - beginTime).count();
0421 if (*addDataInDtr) {
0422 if (iFilter->keepModuleInfo(md.id())) {
0423 auto bmsg = assembleMessage<Step::preModuleTransition>(
0424 static_cast<std::underlying_type_t<Phase>>(Phase::destruction), 0, md.id(), 0, 0, 0, t);
0425 logFile->write(std::move(bmsg));
0426 }
0427 } else {
0428 moduleCtrDtr[md.id()].beginDestruction = t;
0429 }
0430 iFilter->startOnThread(md.id());
0431 });
0432 iRegistry.watchPostModuleDestruction([&moduleCtrDtr, beginTime, iFilter, addDataInDtr, logFile](auto const& md) {
0433 auto const t = duration_cast<duration_t>(now() - beginTime).count();
0434 if (not *addDataInDtr) {
0435 moduleCtrDtr[md.id()].endDestruction = t;
0436 }
0437 auto info = iFilter->stopOnThread(md.id());
0438 if (info) {
0439 if (*addDataInDtr) {
0440 if (iFilter->keepModuleInfo(md.id())) {
0441 auto emsg = assembleAllocMessage<Step::postModuleTransition>(
0442 *info, static_cast<std::underlying_type_t<Phase>>(Phase::destruction), 0, md.id(), 0, 0, 0, t);
0443 logFile->write(std::move(emsg));
0444 }
0445
0446 } else {
0447 moduleCtrDtr[md.id()].destructionAllocInfo = *info;
0448 }
0449 }
0450 });
0451
0452 auto sourceCtrPtr = std::make_shared<ModuleCtrDtr>();
0453 auto& sourceCtr = *sourceCtrPtr;
0454 iRegistry.watchPreSourceConstruction([&sourceCtr, beginTime, iFilter](auto const&) {
0455 auto const t = duration_cast<duration_t>(now() - beginTime).count();
0456 sourceCtr.beginConstruction = t;
0457 iFilter->startOnThread();
0458 });
0459 iRegistry.watchPostSourceConstruction([&sourceCtr, beginTime, iFilter](auto const&) {
0460 auto const t = duration_cast<duration_t>(now() - beginTime).count();
0461 sourceCtr.endConstruction = t;
0462 auto info = iFilter->stopOnThread();
0463 if (info) {
0464 sourceCtr.constructionAllocInfo = *info;
0465 }
0466 });
0467
0468 auto recordIndices = std::make_shared<std::vector<std::type_index>>();
0469 iRegistry.watchEventSetupConfiguration(
0470 [logFile, recordIndices](auto const& recordsToResolvers, auto const&) mutable {
0471 std::ostringstream oss;
0472
0473 auto recordKeys = recordsToResolvers.recordKeys();
0474 std::sort(recordKeys.begin(), recordKeys.end());
0475 std::vector<std::string> recordNames;
0476
0477 recordNames.reserve(recordKeys.size() + 1);
0478 recordNames.emplace_back("");
0479 recordIndices->reserve(recordKeys.size() + 1);
0480 recordIndices->push_back(std::type_index(typeid(void)));
0481 for (auto const& r : recordKeys) {
0482 recordNames.push_back(r.name());
0483 recordIndices->push_back(std::type_index(r.type().value()));
0484 }
0485
0486 moduleIdToLabel(oss, recordNames, 'R', "Record ID", "Record name");
0487 logFile->write(oss.str());
0488 });
0489
0490 iRegistry.watchPreBeginJob([logFile,
0491 iFilter,
0492 moduleLabelsPtr,
0493 moduleTypesPtr,
0494 esModuleLabelsPtr,
0495 esModuleTypesPtr,
0496 moduleCtrDtrPtr,
0497 sourceCtrPtr,
0498 beginTime,
0499 beginModuleAlloc,
0500 addDataInDtr](auto&) mutable {
0501 *addDataInDtr = true;
0502 {
0503 std::ostringstream oss;
0504 moduleIdToLabelAndType(
0505 oss, *moduleLabelsPtr, *moduleTypesPtr, 'M', "EDModule ID", "Module label", "Module type");
0506 logFile->write(oss.str());
0507 moduleLabelsPtr.reset();
0508 moduleTypesPtr.reset();
0509 }
0510 {
0511 std::ostringstream oss;
0512 moduleIdToLabelAndType(
0513 oss, *esModuleLabelsPtr, *esModuleTypesPtr, 'N', "ESModule ID", "ESModule label", "ESModule type");
0514 logFile->write(oss.str());
0515 esModuleLabelsPtr.reset();
0516 esModuleTypesPtr.reset();
0517 }
0518 {
0519 auto const moduleAllocStart = duration_cast<duration_t>(beginModuleAlloc - beginTime).count();
0520 auto msg = assembleMessage<Step::preFrameworkTransition>(
0521 static_cast<std::underlying_type_t<Phase>>(Phase::startTracing), 0, 0, 0, 0, moduleAllocStart);
0522 logFile->write(std::move(msg));
0523 }
0524 if (not iFilter->globalKeep()) {
0525 auto const t = duration_cast<duration_t>(now() - beginTime).count();
0526 auto msg = assembleMessage<Step::preFrameworkTransition>(
0527 static_cast<std::underlying_type_t<Phase>>(Phase::beginJob), 0, 0, 0, 0, t);
0528 logFile->write(std::move(msg));
0529 return;
0530 }
0531
0532
0533 auto srcBeginConstruction = sourceCtrPtr->beginConstruction;
0534 auto srcEndConstruction = sourceCtrPtr->endConstruction;
0535 auto srcAllocInfo = sourceCtrPtr->constructionAllocInfo;
0536 sourceCtrPtr.reset();
0537 auto handleSource =
0538 [&srcBeginConstruction, &srcEndConstruction, &logFile, &srcAllocInfo](long long iTime) mutable {
0539 if (srcBeginConstruction != 0 and srcBeginConstruction < iTime) {
0540 auto bmsg = assembleMessage<Step::preSourceTransition>(
0541 static_cast<std::underlying_type_t<Phase>>(Phase::construction), 0, srcBeginConstruction);
0542 logFile->write(std::move(bmsg));
0543 srcBeginConstruction = 0;
0544 }
0545 if (srcEndConstruction != 0 and srcEndConstruction < iTime) {
0546 auto bmsg = assembleAllocMessage<Step::postSourceTransition>(
0547 srcAllocInfo, static_cast<std::underlying_type_t<Phase>>(Phase::construction), 0, srcEndConstruction);
0548 logFile->write(std::move(bmsg));
0549 srcEndConstruction = 0;
0550 }
0551 };
0552 {
0553 std::sort(moduleCtrDtrPtr->begin(), moduleCtrDtrPtr->end(), [](auto const& l, auto const& r) {
0554 return l.beginConstruction < r.beginConstruction;
0555 });
0556 int id = 0;
0557 for (auto const& ctr : *moduleCtrDtrPtr) {
0558 if (ctr.beginConstruction != 0) {
0559 handleSource(ctr.beginConstruction);
0560 if (iFilter->keepModuleInfo(id)) {
0561 auto bmsg = assembleMessage<Step::preModuleTransition>(
0562 static_cast<std::underlying_type_t<Phase>>(Phase::construction), 0, id, 0, ctr.beginConstruction);
0563 logFile->write(std::move(bmsg));
0564 }
0565 handleSource(ctr.endConstruction);
0566 if (iFilter->keepModuleInfo(id)) {
0567 auto const& allocInfo = ctr.constructionAllocInfo;
0568 auto emsg = assembleAllocMessage<Step::postModuleTransition>(
0569 allocInfo,
0570 static_cast<std::underlying_type_t<Phase>>(Phase::construction),
0571 0,
0572 id,
0573 0,
0574 ctr.endConstruction);
0575 logFile->write(std::move(emsg));
0576 }
0577 }
0578 ++id;
0579 }
0580 id = 0;
0581 std::sort(moduleCtrDtrPtr->begin(), moduleCtrDtrPtr->end(), [](auto const& l, auto const& r) {
0582 return l.beginDestruction < r.beginDestruction;
0583 });
0584 for (auto const& dtr : *moduleCtrDtrPtr) {
0585 if (dtr.beginDestruction != 0) {
0586 handleSource(dtr.beginDestruction);
0587 if (iFilter->keepModuleInfo(id)) {
0588 auto bmsg = assembleMessage<Step::preModuleTransition>(
0589 static_cast<std::underlying_type_t<Phase>>(Phase::destruction), 0, id, 0, 0, 0, dtr.beginDestruction);
0590 logFile->write(std::move(bmsg));
0591 }
0592 handleSource(dtr.endDestruction);
0593 if (iFilter->keepModuleInfo(id)) {
0594 auto emsg = assembleAllocMessage<Step::postModuleTransition>(
0595 dtr.destructionAllocInfo,
0596 static_cast<std::underlying_type_t<Phase>>(Phase::destruction),
0597 0,
0598 id,
0599 0,
0600 0,
0601 0,
0602 dtr.endDestruction);
0603 logFile->write(std::move(emsg));
0604 }
0605 }
0606 ++id;
0607 }
0608 moduleCtrDtrPtr.reset();
0609 }
0610 auto const t = duration_cast<duration_t>(now() - beginTime).count();
0611 handleSource(t);
0612 auto msg = assembleMessage<Step::preFrameworkTransition>(
0613 static_cast<std::underlying_type_t<Phase>>(Phase::beginJob), 0, 0, 0, 0, t);
0614 logFile->write(std::move(msg));
0615 });
0616 iRegistry.watchPostBeginJob([logFile, beginTime]() {
0617 auto const t = duration_cast<duration_t>(now() - beginTime).count();
0618 auto msg = assembleMessage<Step::postFrameworkTransition>(
0619 static_cast<std::underlying_type_t<Phase>>(Phase::beginJob), 0, 0, 0, 0, t);
0620 logFile->write(std::move(msg));
0621 });
0622
0623 iRegistry.watchPreEndJob([logFile, beginTime]() {
0624 auto const t = duration_cast<duration_t>(now() - beginTime).count();
0625 auto msg = assembleMessage<Step::preFrameworkTransition>(
0626 static_cast<std::underlying_type_t<Phase>>(Phase::endJob), 0, 0, 0, 0, t);
0627 logFile->write(std::move(msg));
0628 });
0629 iRegistry.watchPostEndJob([logFile, beginTime]() {
0630 auto const t = duration_cast<duration_t>(now() - beginTime).count();
0631 auto msg = assembleMessage<Step::postFrameworkTransition>(
0632 static_cast<std::underlying_type_t<Phase>>(Phase::endJob), 0, 0, 0, 0, t);
0633 logFile->write(std::move(msg));
0634 });
0635
0636 iRegistry.watchPreEvent([logFile, beginTime](auto const& sc) {
0637 auto const t = duration_cast<duration_t>(now() - beginTime).count();
0638 auto msg = assembleMessage<Step::preFrameworkTransition>(static_cast<std::underlying_type_t<Phase>>(Phase::Event),
0639 stream_id(sc),
0640 sc.eventID().run(),
0641 sc.eventID().luminosityBlock(),
0642 sc.eventID().event(),
0643 t);
0644 logFile->write(std::move(msg));
0645 });
0646 iRegistry.watchPostEvent([logFile, beginTime](auto const& sc) {
0647 auto const t = duration_cast<duration_t>(now() - beginTime).count();
0648 auto msg =
0649 assembleMessage<Step::postFrameworkTransition>(static_cast<std::underlying_type_t<Phase>>(Phase::Event),
0650 stream_id(sc),
0651 sc.eventID().run(),
0652 sc.eventID().luminosityBlock(),
0653 sc.eventID().event(),
0654 t);
0655 logFile->write(std::move(msg));
0656 });
0657
0658 iRegistry.watchPreClearEvent([logFile, beginTime, iFilter](auto const& sc) {
0659 if (iFilter->startOnThread()) {
0660 auto const t = duration_cast<duration_t>(now() - beginTime).count();
0661 auto msg =
0662 assembleMessage<Step::preFrameworkTransition>(static_cast<std::underlying_type_t<Phase>>(Phase::clearEvent),
0663 stream_id(sc),
0664 sc.eventID().run(),
0665 sc.eventID().luminosityBlock(),
0666 sc.eventID().event(),
0667 t);
0668 logFile->write(std::move(msg));
0669 }
0670 });
0671 iRegistry.watchPostClearEvent([logFile, beginTime, iFilter](auto const& sc) {
0672 auto info = iFilter->stopOnThread();
0673 if (info) {
0674 auto const t = duration_cast<duration_t>(now() - beginTime).count();
0675 auto msg = assembleAllocMessage<Step::postFrameworkTransition>(
0676 *info,
0677 static_cast<std::underlying_type_t<Phase>>(Phase::clearEvent),
0678 stream_id(sc),
0679 sc.eventID().run(),
0680 sc.eventID().luminosityBlock(),
0681 sc.eventID().event(),
0682 t);
0683 logFile->write(std::move(msg));
0684 }
0685 });
0686
0687 {
0688 auto preGlobal = [logFile, beginTime](GlobalContext const& gc) {
0689 auto const t = duration_cast<duration_t>(now() - beginTime).count();
0690 auto msg = assembleMessage<Step::preFrameworkTransition>(toTransition(gc),
0691 toTransitionIndex(gc),
0692 gc.luminosityBlockID().run(),
0693 gc.luminosityBlockID().luminosityBlock(),
0694 0,
0695 t);
0696 logFile->write(std::move(msg));
0697 };
0698 iRegistry.watchPreBeginProcessBlock(preGlobal);
0699 iRegistry.watchPreEndProcessBlock(preGlobal);
0700 iRegistry.watchPreWriteProcessBlock(preGlobal);
0701 iRegistry.watchPreAccessInputProcessBlock(preGlobal);
0702 iRegistry.watchPreGlobalBeginRun(preGlobal);
0703 iRegistry.watchPreGlobalBeginLumi(preGlobal);
0704 iRegistry.watchPreGlobalEndLumi(preGlobal);
0705 iRegistry.watchPreGlobalWriteLumi(preGlobal);
0706 iRegistry.watchPreGlobalEndRun(preGlobal);
0707 iRegistry.watchPreGlobalWriteRun(preGlobal);
0708 }
0709 {
0710 auto postGlobal = [logFile, beginTime](GlobalContext const& gc) {
0711 auto const t = duration_cast<duration_t>(now() - beginTime).count();
0712 auto msg = assembleMessage<Step::postFrameworkTransition>(toTransition(gc),
0713 toTransitionIndex(gc),
0714 gc.luminosityBlockID().run(),
0715 gc.luminosityBlockID().luminosityBlock(),
0716 0,
0717 t);
0718 logFile->write(std::move(msg));
0719 };
0720 iRegistry.watchPostBeginProcessBlock(postGlobal);
0721 iRegistry.watchPostEndProcessBlock(postGlobal);
0722 iRegistry.watchPostWriteProcessBlock(postGlobal);
0723 iRegistry.watchPostAccessInputProcessBlock(postGlobal);
0724 iRegistry.watchPostGlobalBeginRun(postGlobal);
0725 iRegistry.watchPostGlobalBeginLumi(postGlobal);
0726 iRegistry.watchPostGlobalEndLumi(postGlobal);
0727 iRegistry.watchPostGlobalWriteLumi(postGlobal);
0728 iRegistry.watchPostGlobalEndRun(postGlobal);
0729 iRegistry.watchPostGlobalWriteRun(postGlobal);
0730 }
0731 {
0732 auto preStream = [logFile, beginTime](StreamContext const& sc) {
0733 auto const t = duration_cast<duration_t>(now() - beginTime).count();
0734 auto msg = assembleMessage<Step::preFrameworkTransition>(
0735 toTransition(sc), stream_id(sc), sc.eventID().run(), sc.eventID().luminosityBlock(), 0, t);
0736 logFile->write(std::move(msg));
0737 };
0738 iRegistry.watchPreStreamBeginRun(preStream);
0739 iRegistry.watchPreStreamBeginLumi(preStream);
0740 iRegistry.watchPreStreamEndLumi(preStream);
0741 iRegistry.watchPreStreamEndRun(preStream);
0742 }
0743 {
0744 auto postStream = [logFile, beginTime](StreamContext const& sc) {
0745 auto const t = duration_cast<duration_t>(now() - beginTime).count();
0746 auto msg = assembleMessage<Step::postFrameworkTransition>(
0747 toTransition(sc), stream_id(sc), sc.eventID().run(), sc.eventID().luminosityBlock(), 0, t);
0748 logFile->write(std::move(msg));
0749 };
0750 iRegistry.watchPostStreamBeginRun(postStream);
0751 iRegistry.watchPostStreamBeginLumi(postStream);
0752 iRegistry.watchPostStreamEndLumi(postStream);
0753 iRegistry.watchPostStreamEndRun(postStream);
0754 }
0755 {
0756 iRegistry.watchPreOpenFile([logFile, beginTime, iFilter](std::string const&) {
0757 if (iFilter->startOnThread()) {
0758 auto const t = duration_cast<duration_t>(now() - beginTime).count();
0759 auto msg = assembleMessage<Step::preSourceTransition>(
0760 static_cast<std::underlying_type_t<Phase>>(Phase::openFile), 0, t);
0761 logFile->write(std::move(msg));
0762 }
0763 });
0764 iRegistry.watchPostOpenFile([logFile, beginTime, iFilter](std::string const&) {
0765 auto info = iFilter->stopOnThread();
0766 if (info) {
0767 auto const t = duration_cast<duration_t>(now() - beginTime).count();
0768 auto msg = assembleAllocMessage<Step::postSourceTransition>(
0769 *info, static_cast<std::underlying_type_t<Phase>>(Phase::openFile), 0, t);
0770 logFile->write(std::move(msg));
0771 }
0772 });
0773 iRegistry.watchPreSourceEvent([logFile, beginTime, iFilter](StreamID id) {
0774 if (iFilter->startOnThread()) {
0775 auto const t = duration_cast<duration_t>(now() - beginTime).count();
0776 auto msg = assembleMessage<Step::preSourceTransition>(
0777 static_cast<std::underlying_type_t<Phase>>(Phase::Event), id.value(), t);
0778 logFile->write(std::move(msg));
0779 }
0780 });
0781 iRegistry.watchPostSourceEvent([logFile, beginTime, iFilter](StreamID id) {
0782 auto info = iFilter->stopOnThread();
0783 if (info) {
0784 auto const t = duration_cast<duration_t>(now() - beginTime).count();
0785 auto msg = assembleAllocMessage<Step::postSourceTransition>(
0786 *info, static_cast<std::underlying_type_t<Phase>>(Phase::Event), id.value(), t);
0787 logFile->write(std::move(msg));
0788 }
0789 });
0790
0791 iRegistry.watchPreSourceRun([logFile, beginTime, iFilter](RunIndex id) {
0792 if (iFilter->startOnThread()) {
0793 auto const t = duration_cast<duration_t>(now() - beginTime).count();
0794 auto msg = assembleMessage<Step::preSourceTransition>(
0795 static_cast<std::underlying_type_t<Phase>>(Phase::globalBeginRun), id.value(), t);
0796 logFile->write(std::move(msg));
0797 }
0798 });
0799 iRegistry.watchPostSourceRun([logFile, beginTime, iFilter](RunIndex id) {
0800 auto info = iFilter->stopOnThread();
0801 if (info) {
0802 auto const t = duration_cast<duration_t>(now() - beginTime).count();
0803 auto msg = assembleAllocMessage<Step::postSourceTransition>(
0804 *info, static_cast<std::underlying_type_t<Phase>>(Phase::globalBeginRun), id.value(), t);
0805 logFile->write(std::move(msg));
0806 }
0807 });
0808
0809 iRegistry.watchPreSourceLumi([logFile, beginTime, iFilter](auto id) {
0810 if (iFilter->startOnThread()) {
0811 auto const t = duration_cast<duration_t>(now() - beginTime).count();
0812 auto msg = assembleMessage<Step::preSourceTransition>(
0813 static_cast<std::underlying_type_t<Phase>>(Phase::globalBeginLumi), id.value(), t);
0814 logFile->write(std::move(msg));
0815 }
0816 });
0817 iRegistry.watchPostSourceLumi([logFile, beginTime, iFilter](auto id) {
0818 auto info = iFilter->stopOnThread();
0819 if (info) {
0820 auto const t = duration_cast<duration_t>(now() - beginTime).count();
0821 auto msg = assembleAllocMessage<Step::postSourceTransition>(
0822 *info, static_cast<std::underlying_type_t<Phase>>(Phase::globalBeginLumi), id.value(), t);
0823 logFile->write(std::move(msg));
0824 }
0825 });
0826
0827 iRegistry.watchPreSourceNextTransition([logFile, beginTime, iFilter]() {
0828 if (iFilter->startOnThread()) {
0829 auto const t = duration_cast<duration_t>(now() - beginTime).count();
0830 auto msg = assembleMessage<Step::preSourceTransition>(
0831 static_cast<std::underlying_type_t<Phase>>(Phase::getNextTransition), t);
0832 logFile->write(std::move(msg));
0833 }
0834 });
0835 iRegistry.watchPostSourceNextTransition([logFile, beginTime, iFilter]() {
0836 auto info = iFilter->stopOnThread();
0837 if (info) {
0838 auto const t = duration_cast<duration_t>(now() - beginTime).count();
0839 auto msg = assembleAllocMessage<Step::postSourceTransition>(
0840 *info, static_cast<std::underlying_type_t<Phase>>(Phase::getNextTransition), t);
0841 logFile->write(std::move(msg));
0842 }
0843 });
0844
0845
0846 iRegistry.watchPreModuleBeginJob([logFile, beginTime, iFilter](auto const& md) {
0847 if (iFilter->startOnThread(md.id())) {
0848 auto const t = duration_cast<duration_t>(now() - beginTime).count();
0849 auto msg = assembleMessage<Step::preModuleTransition>(
0850 static_cast<std::underlying_type_t<Phase>>(Phase::beginJob), 0, md.id(), 0, t);
0851 logFile->write(std::move(msg));
0852 }
0853 });
0854 iRegistry.watchPostModuleBeginJob([logFile, beginTime, iFilter](auto const& md) {
0855 auto info = iFilter->stopOnThread(md.id());
0856 if (info) {
0857 auto const t = duration_cast<duration_t>(now() - beginTime).count();
0858 auto msg = assembleAllocMessage<Step::postModuleTransition>(
0859 *info, static_cast<std::underlying_type_t<Phase>>(Phase::beginJob), 0, md.id(), 0, t);
0860 logFile->write(std::move(msg));
0861 }
0862 });
0863
0864 iRegistry.watchPreModuleBeginStream(StreamEDModuleState<Step::preModuleTransition>(logFile, beginTime, iFilter));
0865 iRegistry.watchPostModuleBeginStream(
0866 StreamEDModuleState<Step::postModuleTransition>(logFile, beginTime, iFilter));
0867
0868 iRegistry.watchPreModuleEndStream(StreamEDModuleState<Step::preModuleTransition>(logFile, beginTime, iFilter));
0869 iRegistry.watchPostModuleEndStream(StreamEDModuleState<Step::postModuleTransition>(logFile, beginTime, iFilter));
0870
0871 iRegistry.watchPreModuleEndJob([logFile, beginTime, iFilter](auto const& md) {
0872 if (iFilter->startOnThread(md.id())) {
0873 auto const t = duration_cast<duration_t>(now() - beginTime).count();
0874 auto msg = assembleMessage<Step::preModuleTransition>(
0875 static_cast<std::underlying_type_t<Phase>>(Phase::endJob), 0, md.id(), 0, t);
0876 logFile->write(std::move(msg));
0877 }
0878 });
0879 iRegistry.watchPostModuleEndJob([logFile, beginTime, iFilter](auto const& md) {
0880 auto info = iFilter->stopOnThread(md.id());
0881 if (info) {
0882 auto const t = duration_cast<duration_t>(now() - beginTime).count();
0883 auto msg = assembleAllocMessage<Step::postModuleTransition>(
0884 *info, static_cast<std::underlying_type_t<Phase>>(Phase::endJob), 0, md.id(), 0, t);
0885 logFile->write(std::move(msg));
0886 }
0887 });
0888
0889 iRegistry.watchPreModuleEvent(StreamEDModuleState<Step::preModuleTransition>(logFile, beginTime, iFilter));
0890 iRegistry.watchPostModuleEvent(StreamEDModuleState<Step::postModuleTransition>(logFile, beginTime, iFilter));
0891 iRegistry.watchPreModuleEventAcquire(
0892 StreamEDModuleState<Step::preModuleEventAcquire>(logFile, beginTime, iFilter));
0893 iRegistry.watchPostModuleEventAcquire(
0894 StreamEDModuleState<Step::postModuleEventAcquire>(logFile, beginTime, iFilter));
0895 iRegistry.watchPreModuleEventDelayedGet(
0896 StreamEDModuleState<Step::preModuleEventDelayedGet>(logFile, beginTime, iFilter));
0897 iRegistry.watchPostModuleEventDelayedGet(
0898 StreamEDModuleState<Step::postModuleEventDelayedGet>(logFile, beginTime, iFilter));
0899 iRegistry.watchPreEventReadFromSource(
0900 StreamEDModuleState<Step::preEventReadFromSource>(logFile, beginTime, iFilter));
0901 iRegistry.watchPostEventReadFromSource(
0902 StreamEDModuleState<Step::postEventReadFromSource>(logFile, beginTime, iFilter));
0903
0904 iRegistry.watchPreModuleTransform(StreamEDModuleState<Step::preModuleTransition>(logFile, beginTime, iFilter));
0905 iRegistry.watchPostModuleTransform(StreamEDModuleState<Step::postModuleTransition>(logFile, beginTime, iFilter));
0906 iRegistry.watchPreModuleTransformAcquiring(
0907 StreamEDModuleState<Step::preModuleEventAcquire>(logFile, beginTime, iFilter));
0908 iRegistry.watchPostModuleTransformAcquiring(
0909 StreamEDModuleState<Step::postModuleEventAcquire>(logFile, beginTime, iFilter));
0910
0911 iRegistry.watchPreModuleStreamBeginRun(
0912 StreamEDModuleState<Step::preModuleTransition>(logFile, beginTime, iFilter));
0913 iRegistry.watchPostModuleStreamBeginRun(
0914 StreamEDModuleState<Step::postModuleTransition>(logFile, beginTime, iFilter));
0915 iRegistry.watchPreModuleStreamEndRun(StreamEDModuleState<Step::preModuleTransition>(logFile, beginTime, iFilter));
0916 iRegistry.watchPostModuleStreamEndRun(
0917 StreamEDModuleState<Step::postModuleTransition>(logFile, beginTime, iFilter));
0918
0919 iRegistry.watchPreModuleStreamBeginLumi(
0920 StreamEDModuleState<Step::preModuleTransition>(logFile, beginTime, iFilter));
0921 iRegistry.watchPostModuleStreamBeginLumi(
0922 StreamEDModuleState<Step::postModuleTransition>(logFile, beginTime, iFilter));
0923 iRegistry.watchPreModuleStreamEndLumi(
0924 StreamEDModuleState<Step::preModuleTransition>(logFile, beginTime, iFilter));
0925 iRegistry.watchPostModuleStreamEndLumi(
0926 StreamEDModuleState<Step::postModuleTransition>(logFile, beginTime, iFilter));
0927
0928 iRegistry.watchPreModuleBeginProcessBlock(
0929 GlobalEDModuleState<Step::preModuleTransition>(logFile, beginTime, iFilter));
0930 iRegistry.watchPostModuleBeginProcessBlock(
0931 GlobalEDModuleState<Step::postModuleTransition>(logFile, beginTime, iFilter));
0932 iRegistry.watchPreModuleAccessInputProcessBlock(
0933 GlobalEDModuleState<Step::preModuleTransition>(logFile, beginTime, iFilter));
0934 iRegistry.watchPostModuleAccessInputProcessBlock(
0935 GlobalEDModuleState<Step::postModuleTransition>(logFile, beginTime, iFilter));
0936 iRegistry.watchPreModuleEndProcessBlock(
0937 GlobalEDModuleState<Step::preModuleTransition>(logFile, beginTime, iFilter));
0938 iRegistry.watchPostModuleEndProcessBlock(
0939 GlobalEDModuleState<Step::postModuleTransition>(logFile, beginTime, iFilter));
0940
0941 iRegistry.watchPreModuleGlobalBeginRun(
0942 GlobalEDModuleState<Step::preModuleTransition>(logFile, beginTime, iFilter));
0943 iRegistry.watchPostModuleGlobalBeginRun(
0944 GlobalEDModuleState<Step::postModuleTransition>(logFile, beginTime, iFilter));
0945 iRegistry.watchPreModuleGlobalEndRun(GlobalEDModuleState<Step::preModuleTransition>(logFile, beginTime, iFilter));
0946 iRegistry.watchPostModuleGlobalEndRun(
0947 GlobalEDModuleState<Step::postModuleTransition>(logFile, beginTime, iFilter));
0948
0949 iRegistry.watchPreModuleGlobalBeginLumi(
0950 GlobalEDModuleState<Step::preModuleTransition>(logFile, beginTime, iFilter));
0951 iRegistry.watchPostModuleGlobalBeginLumi(
0952 GlobalEDModuleState<Step::postModuleTransition>(logFile, beginTime, iFilter));
0953 iRegistry.watchPreModuleGlobalEndLumi(
0954 GlobalEDModuleState<Step::preModuleTransition>(logFile, beginTime, iFilter));
0955 iRegistry.watchPostModuleGlobalEndLumi(
0956 GlobalEDModuleState<Step::postModuleTransition>(logFile, beginTime, iFilter));
0957
0958 iRegistry.watchPreModuleWriteProcessBlock(
0959 GlobalEDModuleState<Step::preModuleTransition>(logFile, beginTime, iFilter));
0960 iRegistry.watchPostModuleWriteProcessBlock(
0961 GlobalEDModuleState<Step::postModuleTransition>(logFile, beginTime, iFilter));
0962
0963 iRegistry.watchPreModuleWriteRun(GlobalEDModuleState<Step::preModuleTransition>(logFile, beginTime, iFilter));
0964 iRegistry.watchPostModuleWriteRun(GlobalEDModuleState<Step::postModuleTransition>(logFile, beginTime, iFilter));
0965
0966 iRegistry.watchPreModuleWriteLumi(GlobalEDModuleState<Step::preModuleTransition>(logFile, beginTime, iFilter));
0967 iRegistry.watchPostModuleWriteLumi(GlobalEDModuleState<Step::postModuleTransition>(logFile, beginTime, iFilter));
0968
0969
0970 iRegistry.watchPreESModule(ESModuleState<Step::preESModule>(logFile, beginTime, recordIndices, iFilter));
0971 iRegistry.watchPostESModule(ESModuleState<Step::postESModule>(logFile, beginTime, recordIndices, iFilter));
0972 iRegistry.watchPreESModuleAcquire(
0973 ESModuleState<Step::preESModuleAcquire>(logFile, beginTime, recordIndices, iFilter));
0974 iRegistry.watchPostESModuleAcquire(
0975 ESModuleState<Step::postESModuleAcquire>(logFile, beginTime, recordIndices, iFilter));
0976 }
0977
0978 std::ostringstream oss;
0979 oss << "# Transition Type Symbol\n";
0980 oss << "#------------------------ ------\n";
0981 oss << "# startTracing " << Phase::startTracing << "\n"
0982 << "# construction " << Phase::construction << "\n"
0983 << "# getNextTransition " << Phase::getNextTransition << "\n"
0984 << "# beginJob " << Phase::beginJob << "\n"
0985 << "# beginStream " << Phase::beginStream << "\n"
0986 << "# openFile " << Phase::openFile << "\n"
0987 << "# beginProcessBlock " << Phase::beginProcessBlock << "\n"
0988 << "# accessInputProcessBlock " << Phase::accessInputProcessBlock << "\n"
0989 << "# globalBeginRun " << Phase::globalBeginRun << "\n"
0990 << "# streamBeginRun " << Phase::streamBeginRun << "\n"
0991 << "# globalBeginLumi " << Phase::globalBeginLumi << "\n"
0992 << "# streamBeginLumi " << Phase::streamBeginLumi << "\n"
0993 << "# Event " << Phase::Event << "\n"
0994 << "# clearEvent " << Phase::clearEvent << "\n"
0995 << "# streamEndLumi " << Phase::streamEndLumi << "\n"
0996 << "# globalEndLumi " << Phase::globalEndLumi << "\n"
0997 << "# globalWriteLumi " << Phase::globalWriteLumi << "\n"
0998 << "# streamEndRun " << Phase::streamEndRun << "\n"
0999 << "# globalEndRun " << Phase::globalEndRun << "\n"
1000 << "# globalWriteRun " << Phase::globalWriteRun << "\n"
1001 << "# endProcessBlock " << Phase::endProcessBlock << "\n"
1002 << "# writeProcessBlock " << Phase::writeProcessBlock << "\n"
1003 << "# endStream " << Phase::endStream << "\n"
1004 << "# endJob " << Phase::endJob << "\n"
1005 << "# destruction " << Phase::destruction << "\n\n";
1006 constexpr std::string_view kTransition = " <Transition type> <Transition ID>";
1007 constexpr std::string_view kTransitionInfo = " <Run #> <LumiBlock #> <Event #>";
1008 constexpr std::string_view kTime = " <Time since begin of cmsRun (us)>";
1009 constexpr std::string_view kEDModule = " <EDModule ID> <Call ID>";
1010 constexpr std::string_view kESModule = " <ESModule ID> <Record ID> <Call ID>";
1011 constexpr std::string_view kAllocInfo =
1012 " <# allocs> <# deallocs> <additional bytes> <min bytes> <max bytes> <max allocation bytes>";
1013
1014 oss << "# Step Symbol Entries\n"
1015 << "# -------------------------- ------ ------------------------------------------\n"
1016 << "# preSourceTransition " << Step::preSourceTransition << kTransition << kTime << "\n"
1017 << "# postSourceTransition " << Step::postSourceTransition << kTransition << kTime << " " << kAllocInfo
1018 << "\n"
1019 << "# preModuleEventAcquire " << Step::preModuleEventAcquire << kTransition << kEDModule << kTime
1020 << "\n"
1021 << "# postModuleEventAcquire " << Step::postModuleEventAcquire << kTransition << kEDModule << kTime
1022 << kAllocInfo << "\n"
1023 << "# preModuleTransition " << Step::preModuleTransition << kTransition << kEDModule << kTime << "\n"
1024 << "# preEventReadFromSource " << Step::preEventReadFromSource << kTransition << kEDModule << kTime
1025 << "\n"
1026 << "# postEventReadFromSource " << Step::postEventReadFromSource << kTransition << kEDModule << kTime
1027 << kAllocInfo << "\n"
1028 << "# postModuleTransition " << Step::postModuleTransition << kTransition << kEDModule << kTime
1029 << kAllocInfo << "\n"
1030 << "# preESModuleTransition " << Step::preESModule << kTransition << kESModule << kTime << "\n"
1031 << "# postESModuleTransition " << Step::postESModule << kTransition << kESModule << kTime << kAllocInfo
1032 << "\n"
1033 << "# preFrameworkTransition " << Step::preFrameworkTransition << kTransition << kTransitionInfo << kTime
1034 << "\n"
1035 << "# preFrameworkTransition " << Step::preFrameworkTransition << " "
1036 << Phase::clearEvent << " <Transition ID>" << kTransitionInfo << kTime << kAllocInfo << "\n"
1037 << "# postFrameworkTransition " << Step::postFrameworkTransition << kTransition << kTransitionInfo
1038 << kTime << "\n";
1039 logFile->write(oss.str());
1040 return;
1041 }
1042 }