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