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