3434#include " Framework/RawDeviceService.h"
3535#include " Framework/DataSpecUtils.h"
3636#include " Framework/MessageContext.h"
37+ #include " Framework/Signpost.h"
3738#include " Framework/StringContext.h"
3839#include " Framework/ConfigContext.h"
3940#include " DataInputDirector.h"
6061using namespace o2 ;
6162using namespace o2 ::aod;
6263
64+ O2_DECLARE_DYNAMIC_LOG (aod_reader);
65+
6366struct RuntimeWatchdog {
6467 int numberTimeFrames;
6568 uint64_t startTime;
@@ -288,6 +291,30 @@ AlgorithmSpec AODJAlienReaderHelpers::rootFileReaderCallback(ConfigContext const
288291 INVALID_TIMEFRAME ,
289292 };
290293 auto readState = TFReaderState::READ_FIRST_TABLE ;
294+ [[maybe_unused]] auto stateName = [](TFReaderState state) -> char const * {
295+ switch (state) {
296+ case TFReaderState::READ_FIRST_TABLE :
297+ return " READ_FIRST_TABLE" ;
298+ case TFReaderState::READ_FIRST_TABLE_FROM_NEXT_FILE :
299+ return " READ_FIRST_TABLE_FROM_NEXT_FILE" ;
300+ case TFReaderState::READ_NEXT_TABLE :
301+ return " READ_NEXT_TABLE" ;
302+ case TFReaderState::TRY_NEXT_FILE :
303+ return " TRY_NEXT_FILE" ;
304+ case TFReaderState::TIMEFRAME_READ :
305+ return " TIMEFRAME_READ" ;
306+ case TFReaderState::INVALID_TIMEFRAME :
307+ return " INVALID_TIMEFRAME" ;
308+ }
309+ return " UNKNOWN" ;
310+ };
311+ O2_SIGNPOST_ID_FROM_POINTER (readerStateId, aod_reader, &readState);
312+ auto transitionTo = [&](TFReaderState nextState) {
313+ O2_SIGNPOST_EVENT_EMIT (aod_reader, readerStateId, " state transition" ,
314+ " %{public}s -> %{public}s (fileCounter %d, timeFrame %d)" ,
315+ stateName (readState), stateName (nextState), fcnt, ntf);
316+ readState = nextState;
317+ };
291318 size_t routeIndex = 0 ;
292319 auto reportTimeframe = [&didir, &fcnt, &ntf, &outputs, &TFNumberHeader, &TFFileNameHeader, reportTFN, reportTFFileName](header::DataHeader const & dh) {
293320 if (reportTFN) {
@@ -347,11 +374,11 @@ AlgorithmSpec AODJAlienReaderHelpers::rootFileReaderCallback(ConfigContext const
347374 while (readState != TFReaderState::TIMEFRAME_READ ) {
348375 switch (readState) {
349376 case TFReaderState::READ_FIRST_TABLE :
350- readState = tryReadTable (readState);
377+ transitionTo ( tryReadTable (readState) );
351378 break ;
352379 case TFReaderState::READ_FIRST_TABLE_FROM_NEXT_FILE :
353380 case TFReaderState::READ_NEXT_TABLE :
354- readState = tryReadTable (readState);
381+ transitionTo ( tryReadTable (readState) );
355382 if (readState == TFReaderState::TRY_NEXT_FILE ) {
356383 // Once a file has been selected, every requested table must exist.
357384 auto concrete = DataSpecUtils::asConcreteDataMatcher (requestedTables[routeIndex].matcher );
@@ -371,7 +398,7 @@ AlgorithmSpec AODJAlienReaderHelpers::rootFileReaderCallback(ConfigContext const
371398 }
372399 ntf = 0 ;
373400 routeIndex = 0 ;
374- readState = TFReaderState::READ_FIRST_TABLE_FROM_NEXT_FILE ;
401+ transitionTo ( TFReaderState::READ_FIRST_TABLE_FROM_NEXT_FILE ) ;
375402 break ;
376403 case TFReaderState::INVALID_TIMEFRAME :
377404 return ;
0 commit comments