xref: /petsc/src/sys/logging/state/logstate.c (revision 7f031e8bf1f008cdd443cdad0cd45837cb20997c)
16873511fSToby Isaac #include <petsc/private/logimpl.h> /*I "petsclog.h" I*/
26873511fSToby Isaac 
36873511fSToby Isaac /*@
46873511fSToby Isaac   PetscLogStateCreate - Create a logging state.
56873511fSToby Isaac 
66873511fSToby Isaac   Not collective
76873511fSToby Isaac 
86873511fSToby Isaac   Output Parameters:
96873511fSToby Isaac . state - a `PetscLogState`
106873511fSToby Isaac 
116873511fSToby Isaac   Level: developer
126873511fSToby Isaac 
136873511fSToby Isaac   Note:
146873511fSToby Isaac   Most users will not need to create a `PetscLogState`.  The global state `PetscLogState()`
156873511fSToby Isaac   is created in `PetscInitialize()`.
166873511fSToby Isaac 
176873511fSToby Isaac .seealso: [](ch_profiling), `PetscLogState`, `PetscLogStateDestroy()`
186873511fSToby Isaac @*/
PetscLogStateCreate(PetscLogState * state)196873511fSToby Isaac PetscErrorCode PetscLogStateCreate(PetscLogState *state)
206873511fSToby Isaac {
216873511fSToby Isaac   PetscInt      num_entries, max_events, max_stages;
226873511fSToby Isaac   PetscLogState s;
236873511fSToby Isaac 
246873511fSToby Isaac   PetscFunctionBegin;
256873511fSToby Isaac   PetscCall(PetscNew(state));
266873511fSToby Isaac   s = *state;
276873511fSToby Isaac   PetscCall(PetscLogRegistryCreate(&s->registry));
286873511fSToby Isaac   PetscCall(PetscIntStackCreate(&s->stage_stack));
296873511fSToby Isaac   PetscCall(PetscLogRegistryGetNumEvents(s->registry, NULL, &max_events));
306873511fSToby Isaac   PetscCall(PetscLogRegistryGetNumStages(s->registry, NULL, &max_stages));
316873511fSToby Isaac 
32*31a765c4SPierre Jolivet   PetscCall(PetscCIntCast(max_events + 1, &s->bt_num_events)); // one extra column for default stage activity
33*31a765c4SPierre Jolivet   PetscCall(PetscCIntCast(max_stages, &s->bt_num_stages));
346873511fSToby Isaac   num_entries = s->bt_num_events * s->bt_num_stages;
356873511fSToby Isaac   PetscCall(PetscBTCreate(num_entries, &s->active));
366873511fSToby Isaac   s->current_stage = -1;
376873511fSToby Isaac   s->refct         = 1;
386873511fSToby Isaac   PetscFunctionReturn(PETSC_SUCCESS);
396873511fSToby Isaac }
406873511fSToby Isaac 
416873511fSToby Isaac /*@
426873511fSToby Isaac   PetscLogStateDestroy - Destroy a logging state.
436873511fSToby Isaac 
446873511fSToby Isaac   Not collective
456873511fSToby Isaac 
466873511fSToby Isaac   Input Parameters:
476873511fSToby Isaac . state - a `PetscLogState`
486873511fSToby Isaac 
496873511fSToby Isaac   Level: developer
506873511fSToby Isaac 
516873511fSToby Isaac   Note:
526873511fSToby Isaac   Most users will not need to destroy a `PetscLogState`.  The global state `PetscLogState()`
536873511fSToby Isaac   is destroyed in `PetscFinalize()`.
546873511fSToby Isaac 
556873511fSToby Isaac .seealso: [](ch_profiling), `PetscLogState`, `PetscLogStateCreate()`
566873511fSToby Isaac @*/
PetscLogStateDestroy(PetscLogState * state)576873511fSToby Isaac PetscErrorCode PetscLogStateDestroy(PetscLogState *state)
586873511fSToby Isaac {
596873511fSToby Isaac   PetscLogState s;
604d86920dSPierre Jolivet 
616873511fSToby Isaac   PetscFunctionBegin;
626873511fSToby Isaac   s      = *state;
636873511fSToby Isaac   *state = NULL;
64663e1fa8SPierre Jolivet   if (s == NULL || --s->refct > 0) PetscFunctionReturn(PETSC_SUCCESS);
656873511fSToby Isaac   PetscCall(PetscLogRegistryDestroy(s->registry));
666873511fSToby Isaac   PetscCall(PetscIntStackDestroy(s->stage_stack));
676873511fSToby Isaac   PetscCall(PetscBTDestroy(&s->active));
686873511fSToby Isaac   PetscCall(PetscFree(s));
696873511fSToby Isaac   PetscFunctionReturn(PETSC_SUCCESS);
706873511fSToby Isaac }
716873511fSToby Isaac 
726873511fSToby Isaac /*@
736873511fSToby Isaac   PetscLogStateStagePush - Start a new logging stage.
746873511fSToby Isaac 
756873511fSToby Isaac   Not collective
766873511fSToby Isaac 
776873511fSToby Isaac   Input Parameters:
786873511fSToby Isaac + state - a `PetscLogState`
796873511fSToby Isaac - stage - a registered `PetscLogStage`
806873511fSToby Isaac 
816873511fSToby Isaac   Level: developer
826873511fSToby Isaac 
836873511fSToby Isaac   Note:
846873511fSToby Isaac   This is called for the global state (`PetscLogGetState()`) in `PetscLogStagePush()`.
856873511fSToby Isaac 
866873511fSToby Isaac .seealso: [](ch_profiling), `PetscLogState`, `PetscLogStateStageRegister()`, `PetscLogStateStagePop()`, `PetscLogStateGetCurrentStage()`
876873511fSToby Isaac @*/
PetscLogStateStagePush(PetscLogState state,PetscLogStage stage)886873511fSToby Isaac PetscErrorCode PetscLogStateStagePush(PetscLogState state, PetscLogStage stage)
896873511fSToby Isaac {
906873511fSToby Isaac   PetscFunctionBegin;
916873511fSToby Isaac   if (PetscDefined(USE_DEBUG)) {
926873511fSToby Isaac     PetscInt num_stages;
936873511fSToby Isaac     PetscCall(PetscLogRegistryGetNumStages(state->registry, &num_stages, NULL));
94835f2295SStefano Zampini     PetscCheck(stage >= 0 && stage < num_stages, PETSC_COMM_SELF, PETSC_ERR_ARG_OUTOFRANGE, "Invalid stage %d not in [0,%" PetscInt_FMT ")", stage, num_stages);
956873511fSToby Isaac   }
966873511fSToby Isaac   PetscCall(PetscIntStackPush(state->stage_stack, stage));
976873511fSToby Isaac   state->current_stage = stage;
986873511fSToby Isaac   PetscFunctionReturn(PETSC_SUCCESS);
996873511fSToby Isaac }
1006873511fSToby Isaac 
1016873511fSToby Isaac /*@
1026873511fSToby Isaac   PetscLogStateStagePop - End a running logging stage.
1036873511fSToby Isaac 
1046873511fSToby Isaac   Not collective
1056873511fSToby Isaac 
1066873511fSToby Isaac   Input Parameter:
1076873511fSToby Isaac . state - a `PetscLogState`
1086873511fSToby Isaac 
1096873511fSToby Isaac   Level: developer
1106873511fSToby Isaac 
1116873511fSToby Isaac   Note:
1126873511fSToby Isaac   This is called for the global state (`PetscLogGetState()`) in `PetscLogStagePush()`.
1136873511fSToby Isaac 
1146873511fSToby Isaac .seealso: [](ch_profiling), `PetscLogState`, `PetscLogStateStageRegister()`, `PetscLogStateStagePush()`, `PetscLogStateGetCurrentStage()`
1156873511fSToby Isaac @*/
PetscLogStateStagePop(PetscLogState state)1166873511fSToby Isaac PetscErrorCode PetscLogStateStagePop(PetscLogState state)
1176873511fSToby Isaac {
1186873511fSToby Isaac   int       curStage;
1196873511fSToby Isaac   PetscBool empty;
1206873511fSToby Isaac 
1216873511fSToby Isaac   PetscFunctionBegin;
1226873511fSToby Isaac   PetscCall(PetscIntStackPop(state->stage_stack, &curStage));
1236873511fSToby Isaac   PetscCall(PetscIntStackEmpty(state->stage_stack, &empty));
124ac530a7eSPierre Jolivet   if (!empty) PetscCall(PetscIntStackTop(state->stage_stack, &state->current_stage));
125ac530a7eSPierre Jolivet   else state->current_stage = -1;
1266873511fSToby Isaac   PetscFunctionReturn(PETSC_SUCCESS);
1276873511fSToby Isaac }
1286873511fSToby Isaac 
1296873511fSToby Isaac /*@
1306873511fSToby Isaac   PetscLogStateGetCurrentStage - Get the last stage that was started
1316873511fSToby Isaac 
1326873511fSToby Isaac   Not collective
1336873511fSToby Isaac 
1346873511fSToby Isaac   Input Parameter:
1356873511fSToby Isaac . state - a `PetscLogState`
1366873511fSToby Isaac 
1376873511fSToby Isaac   Output Parameter:
1386873511fSToby Isaac . current - the last `PetscLogStage` started with `PetscLogStateStagePop()`
1396873511fSToby Isaac 
1406873511fSToby Isaac   Level: developer
1416873511fSToby Isaac 
1426873511fSToby Isaac   Note:
1436873511fSToby Isaac   This is called for the global state (`PetscLogGetState()`) in `PetscLogGetCurrentStage()`.
1446873511fSToby Isaac 
1456873511fSToby Isaac .seealso: [](ch_profiling), `PetscLogState`, `PetscLogStateStageRegister()`, `PetscLogStateStagePush()`, `PetscLogStateStagePop()`
1466873511fSToby Isaac @*/
PetscLogStateGetCurrentStage(PetscLogState state,PetscLogStage * current)1476873511fSToby Isaac PetscErrorCode PetscLogStateGetCurrentStage(PetscLogState state, PetscLogStage *current)
1486873511fSToby Isaac {
1496873511fSToby Isaac   PetscFunctionBegin;
1506873511fSToby Isaac   *current = state->current_stage;
1516873511fSToby Isaac   PetscFunctionReturn(PETSC_SUCCESS);
1526873511fSToby Isaac }
1536873511fSToby Isaac 
PetscLogStateResize(PetscLogState state)1546873511fSToby Isaac static PetscErrorCode PetscLogStateResize(PetscLogState state)
1556873511fSToby Isaac {
1566873511fSToby Isaac   PetscBT  active_new;
1576873511fSToby Isaac   PetscInt new_num_events;
1586873511fSToby Isaac   PetscInt new_num_stages;
1596873511fSToby Isaac 
1606873511fSToby Isaac   PetscFunctionBegin;
1616873511fSToby Isaac   PetscCall(PetscLogRegistryGetNumEvents(state->registry, NULL, &new_num_events));
1626873511fSToby Isaac   new_num_events++;
1636873511fSToby Isaac   PetscCall(PetscLogRegistryGetNumStages(state->registry, NULL, &new_num_stages));
1646873511fSToby Isaac 
1656873511fSToby Isaac   if (state->bt_num_events == new_num_events && state->bt_num_stages == new_num_stages) PetscFunctionReturn(PETSC_SUCCESS);
1666873511fSToby Isaac   PetscCheck((new_num_stages % PETSC_BITS_PER_BYTE) == 0, PETSC_COMM_SELF, PETSC_ERR_ARG_INCOMP, "new number of stages must be multiple of %d", PETSC_BITS_PER_BYTE);
1676873511fSToby Isaac   PetscCall(PetscBTCreate(new_num_events * new_num_stages, &active_new));
1686873511fSToby Isaac   if (new_num_stages == state->bt_num_stages) {
1696873511fSToby Isaac     // single memcpy
1706873511fSToby Isaac     size_t num_chars = (state->bt_num_stages * state->bt_num_events) / PETSC_BITS_PER_BYTE;
1716873511fSToby Isaac 
1726873511fSToby Isaac     PetscCall(PetscMemcpy(active_new, state->active, num_chars));
1736873511fSToby Isaac   } else {
1746873511fSToby Isaac     size_t num_chars_old = state->bt_num_stages / PETSC_BITS_PER_BYTE;
1756873511fSToby Isaac     size_t num_chars_new = new_num_stages / PETSC_BITS_PER_BYTE;
1766873511fSToby Isaac 
1773a7d0413SPierre Jolivet     for (PetscInt i = 0; i < state->bt_num_events; i++) PetscCall(PetscMemcpy(&active_new[i * num_chars_new], &state->active[i * num_chars_old], num_chars_old));
1786873511fSToby Isaac   }
1796873511fSToby Isaac   PetscCall(PetscBTDestroy(&state->active));
1806873511fSToby Isaac   state->active = active_new;
181*31a765c4SPierre Jolivet   PetscCall(PetscCIntCast(new_num_events, &state->bt_num_events));
182*31a765c4SPierre Jolivet   PetscCall(PetscCIntCast(new_num_stages, &state->bt_num_stages));
1836873511fSToby Isaac   PetscFunctionReturn(PETSC_SUCCESS);
1846873511fSToby Isaac }
1856873511fSToby Isaac 
186cc4c1da9SBarry Smith /*@
1876873511fSToby Isaac   PetscLogStateStageRegister - Register a new stage with a logging state
1886873511fSToby Isaac 
1896873511fSToby Isaac   Not collective
1906873511fSToby Isaac 
1916873511fSToby Isaac   Input Parameters:
1926873511fSToby Isaac + state - a `PetscLogState`
1936873511fSToby Isaac - sname - a unique name
1946873511fSToby Isaac 
1956873511fSToby Isaac   Output Parameter:
1966873511fSToby Isaac . stage - the identifier for the registered stage
1976873511fSToby Isaac 
1986873511fSToby Isaac   Level: developer
1996873511fSToby Isaac 
2006873511fSToby Isaac   Note:
2016873511fSToby Isaac   This is called for the global state (`PetscLogGetState()`) in `PetscLogStageRegister()`.
2026873511fSToby Isaac 
2036873511fSToby Isaac .seealso: [](ch_profiling), `PetscLogState`, `PetscLogStateStagePush()`, `PetscLogStateStagePop()`
2046873511fSToby Isaac @*/
PetscLogStateStageRegister(PetscLogState state,const char sname[],PetscLogStage * stage)2056873511fSToby Isaac PetscErrorCode PetscLogStateStageRegister(PetscLogState state, const char sname[], PetscLogStage *stage)
2066873511fSToby Isaac {
2076873511fSToby Isaac   PetscInt s;
2084d86920dSPierre Jolivet 
2096873511fSToby Isaac   PetscFunctionBegin;
2106873511fSToby Isaac   PetscCall(PetscLogRegistryStageRegister(state->registry, sname, stage));
2116873511fSToby Isaac   PetscCall(PetscLogStateResize(state));
2126873511fSToby Isaac   s = *stage;
2136873511fSToby Isaac   PetscCall(PetscBTSet(state->active, s)); // stages are by default active
2146873511fSToby Isaac   for (PetscInt e = 1; e < state->bt_num_events; e++) {
2156873511fSToby Isaac     // copy "Main Stage" activities
2166873511fSToby Isaac     if (PetscBTLookup(state->active, 0 + e * state->bt_num_stages)) {
2176873511fSToby Isaac       PetscCall(PetscBTSet(state->active, s + e * state->bt_num_stages));
2186873511fSToby Isaac     } else {
2196873511fSToby Isaac       PetscCall(PetscBTClear(state->active, s + e * state->bt_num_stages));
2206873511fSToby Isaac     }
2216873511fSToby Isaac   }
2226873511fSToby Isaac   PetscFunctionReturn(PETSC_SUCCESS);
2236873511fSToby Isaac }
2246873511fSToby Isaac 
225cc4c1da9SBarry Smith /*@
2266873511fSToby Isaac   PetscLogStateEventRegister - Register a new event with a logging state
2276873511fSToby Isaac 
2286873511fSToby Isaac   Not collective
2296873511fSToby Isaac 
2306873511fSToby Isaac   Input Parameters:
2316873511fSToby Isaac + state - a `PetscLogState`
2326873511fSToby Isaac . sname - a unique name
2336873511fSToby Isaac - id    - the `PetscClassId` for the type of object most closely associated with this event
2346873511fSToby Isaac 
2356873511fSToby Isaac   Output Parameter:
2366873511fSToby Isaac . event - the identifier for the registered event
2376873511fSToby Isaac 
2386873511fSToby Isaac   Level: developer
2396873511fSToby Isaac 
2406873511fSToby Isaac   Note:
2416873511fSToby Isaac   This is called for the global state (`PetscLogGetState()`) in `PetscLogEventRegister()`.
2426873511fSToby Isaac 
2436873511fSToby Isaac .seealso: [](ch_profiling), `PetscLogState`, `PetscLogStageRegister()`
2446873511fSToby Isaac @*/
PetscLogStateEventRegister(PetscLogState state,const char sname[],PetscClassId id,PetscLogEvent * event)2456873511fSToby Isaac PetscErrorCode PetscLogStateEventRegister(PetscLogState state, const char sname[], PetscClassId id, PetscLogEvent *event)
2466873511fSToby Isaac {
2476873511fSToby Isaac   PetscInt e;
2486873511fSToby Isaac 
2496873511fSToby Isaac   PetscFunctionBegin;
2506873511fSToby Isaac   *event = PETSC_DECIDE;
2516873511fSToby Isaac   PetscCall(PetscLogRegistryGetEventFromName(state->registry, sname, event));
2526873511fSToby Isaac   if (*event > 0) PetscFunctionReturn(PETSC_SUCCESS);
2536873511fSToby Isaac   PetscCall(PetscLogRegistryEventRegister(state->registry, sname, id, event));
2546873511fSToby Isaac   PetscCall(PetscLogStateResize(state));
2556873511fSToby Isaac   e = *event;
2566873511fSToby Isaac   for (PetscInt s = 0; s < state->bt_num_stages; s++) PetscCall(PetscBTSet(state->active, s + (e + 1) * state->bt_num_stages)); // events are by default active
2576873511fSToby Isaac   PetscFunctionReturn(PETSC_SUCCESS);
2586873511fSToby Isaac }
2596873511fSToby Isaac 
2606873511fSToby Isaac /*@
2616873511fSToby Isaac   PetscLogStateEventSetCollective - Set the collective nature of a logging event
2626873511fSToby Isaac 
2636873511fSToby Isaac   Logically collective
2646873511fSToby Isaac 
2656873511fSToby Isaac   Input Parameters:
2666873511fSToby Isaac + state      - a `PetscLogState`
2676873511fSToby Isaac . event      - a registered `PetscLogEvent`
2686873511fSToby Isaac - collective - if `PETSC_TRUE`, MPI processes synchronize during this event, and `PetscLogHandlerEventSync()` can be used to help measure the delays between when the processes begin the event
2696873511fSToby Isaac 
2706873511fSToby Isaac   Level: developer
2716873511fSToby Isaac 
2726873511fSToby Isaac   Note:
2736873511fSToby Isaac   This is called for the global state (`PetscLogGetState()`) in `PetscLogEventSetCollective()`.
2746873511fSToby Isaac 
2756873511fSToby Isaac .seealso: [](ch_profiling), `PetscLogState`, `PetscLogEventRegister()`
2766873511fSToby Isaac @*/
PetscLogStateEventSetCollective(PetscLogState state,PetscLogEvent event,PetscBool collective)2776873511fSToby Isaac PetscErrorCode PetscLogStateEventSetCollective(PetscLogState state, PetscLogEvent event, PetscBool collective)
2786873511fSToby Isaac {
2796873511fSToby Isaac   PetscFunctionBegin;
2806873511fSToby Isaac   PetscCall(PetscLogRegistryEventSetCollective(state->registry, event, collective));
2816873511fSToby Isaac   PetscFunctionReturn(PETSC_SUCCESS);
2826873511fSToby Isaac }
2836873511fSToby Isaac 
2846873511fSToby Isaac /*@
2856873511fSToby Isaac   PetscLogStateStageSetActive - Mark a stage as active or inactive.
2866873511fSToby Isaac 
2876873511fSToby Isaac   Not collective
2886873511fSToby Isaac 
2896873511fSToby Isaac   Input Parameters:
2906873511fSToby Isaac + state    - a `PetscLogState`
2916873511fSToby Isaac . stage    - a registered `PetscLogStage`
2926873511fSToby Isaac - isActive - if `PETSC_FALSE`, `PetscLogStateEventGetActive()` will return `PETSC_FALSE` for all events during this stage
2936873511fSToby Isaac 
2946873511fSToby Isaac   Level: developer
2956873511fSToby Isaac 
2966873511fSToby Isaac   Note:
2976873511fSToby Isaac   This is called for the global state (`PetscLogGetState()`) in `PetscLogStageSetActive()`
2986873511fSToby Isaac 
2996873511fSToby Isaac .seealso: [](ch_profiling), `PetscLogState`, `PetscLogStateEventSetActive()`
3006873511fSToby Isaac @*/
PetscLogStateStageSetActive(PetscLogState state,PetscLogStage stage,PetscBool isActive)3016873511fSToby Isaac PetscErrorCode PetscLogStateStageSetActive(PetscLogState state, PetscLogStage stage, PetscBool isActive)
3026873511fSToby Isaac {
3036873511fSToby Isaac   PetscFunctionBegin;
3046873511fSToby Isaac   PetscCheck(stage >= 0 && stage < state->bt_num_stages, PETSC_COMM_SELF, PETSC_ERR_ARG_OUTOFRANGE, "Invalid stage %d should be in [0,%d)", stage, state->bt_num_stages);
3056873511fSToby Isaac   if (isActive) {
3063a7d0413SPierre Jolivet     for (PetscInt e = 0; e < state->bt_num_events; e++) PetscCall(PetscBTSet(state->active, stage + e * state->bt_num_stages));
3076873511fSToby Isaac   } else {
3083a7d0413SPierre Jolivet     for (PetscInt e = 0; e < state->bt_num_events; e++) PetscCall(PetscBTClear(state->active, stage + e * state->bt_num_stages));
3096873511fSToby Isaac   }
3106873511fSToby Isaac   PetscFunctionReturn(PETSC_SUCCESS);
3116873511fSToby Isaac }
3126873511fSToby Isaac 
3136873511fSToby Isaac /*@
3146873511fSToby Isaac   PetscLogStateStageGetActive - Check if a logging stage is active or inactive.
3156873511fSToby Isaac 
3166873511fSToby Isaac   Not collective
3176873511fSToby Isaac 
3186873511fSToby Isaac   Input Parameters:
3196873511fSToby Isaac + state - a `PetscLogState`
3206873511fSToby Isaac - stage - a registered `PetscLogStage`
3216873511fSToby Isaac 
3226873511fSToby Isaac   Output Parameter:
3236873511fSToby Isaac . isActive - if `PETSC_FALSE`, the state should not send logging events to log handlers during this stage.
3246873511fSToby Isaac 
3256873511fSToby Isaac   Level: developer
3266873511fSToby Isaac 
3276873511fSToby Isaac   Note:
3286873511fSToby Isaac   This is called for the global state (`PetscLogGetState()`) in `PetscLogStageGetActive()`.
3296873511fSToby Isaac 
330b665b14eSToby Isaac .seealso: [](ch_profiling), `PetscLogState`, `PetscLogStageSetActive()`, `PetscLogHandler`, `PetscLogHandlerStart()`, `PetscLogHandlerEventBegin()`, `PetscLogHandlerEventEnd()`
3316873511fSToby Isaac @*/
PetscLogStateStageGetActive(PetscLogState state,PetscLogStage stage,PetscBool * isActive)3326873511fSToby Isaac PetscErrorCode PetscLogStateStageGetActive(PetscLogState state, PetscLogStage stage, PetscBool *isActive)
3336873511fSToby Isaac {
3346873511fSToby Isaac   PetscFunctionBegin;
3356873511fSToby Isaac   *isActive = PetscBTLookup(state->active, stage) ? PETSC_TRUE : PETSC_FALSE;
3366873511fSToby Isaac   PetscFunctionReturn(PETSC_SUCCESS);
3376873511fSToby Isaac }
3386873511fSToby Isaac 
3396873511fSToby Isaac /*@
3406873511fSToby Isaac   PetscLogStateEventSetActive - Set a logging event as active or inactive during a logging stage.
3416873511fSToby Isaac 
3426873511fSToby Isaac   Not collective
3436873511fSToby Isaac 
3446873511fSToby Isaac   Input Parameters:
3456873511fSToby Isaac + state    - a `PetscLogState`
3466873511fSToby Isaac . stage    - a registered `PetscLogStage`, or `PETSC_DEFAULT` for the current stage
3476873511fSToby Isaac . event    - a registered `PetscLogEvent`
3486873511fSToby Isaac - isActive - if `PETSC_FALSE`, `PetscLogStateEventGetActive()` will return `PETSC_FALSE` for this stage and this event
3496873511fSToby Isaac 
3506873511fSToby Isaac   Level: developer
3516873511fSToby Isaac 
3526873511fSToby Isaac   Note:
3536873511fSToby Isaac   This is called for the global state (`PetscLogGetState()`) in `PetscLogEventActivate()` and `PetscLogEventDeactivate()`.
3546873511fSToby Isaac 
3556873511fSToby Isaac .seealso: [](ch_profiling), `PetscLogState`, `PetscLogEventGetActive()`, `PetscLogStateGetCurrentStage()`, `PetscLogEventSetActiveAll()`
3566873511fSToby Isaac @*/
PetscLogStateEventSetActive(PetscLogState state,PetscLogStage stage,PetscLogEvent event,PetscBool isActive)3576873511fSToby Isaac PetscErrorCode PetscLogStateEventSetActive(PetscLogState state, PetscLogStage stage, PetscLogEvent event, PetscBool isActive)
3586873511fSToby Isaac {
3596873511fSToby Isaac   PetscFunctionBegin;
3606873511fSToby Isaac   stage = (stage < 0) ? state->current_stage : stage;
3616873511fSToby Isaac   PetscCheck(event >= 0 && event < state->bt_num_events, PETSC_COMM_SELF, PETSC_ERR_ARG_OUTOFRANGE, "Invalid event %d should be in [0,%d)", event, state->bt_num_events);
3626873511fSToby Isaac   PetscCheck(stage >= 0 && stage < state->bt_num_stages, PETSC_COMM_SELF, PETSC_ERR_ARG_OUTOFRANGE, "Invalid stage %d should be in [0,%d)", stage, state->bt_num_stages);
3636873511fSToby Isaac   PetscCall((isActive ? PetscBTSet : PetscBTClear)(state->active, state->current_stage + (event + 1) * state->bt_num_stages));
3646873511fSToby Isaac   PetscFunctionReturn(PETSC_SUCCESS);
3656873511fSToby Isaac }
3666873511fSToby Isaac 
3676873511fSToby Isaac /*@
3686873511fSToby Isaac   PetscLogStateEventSetActiveAll - Set logging event as active or inactive for all logging stages
3696873511fSToby Isaac 
3706873511fSToby Isaac   Not collective
3716873511fSToby Isaac 
3726873511fSToby Isaac   Input Parameters:
3736873511fSToby Isaac + state    - a `PetscLogState`
3746873511fSToby Isaac . event    - a registered `PetscLogEvent`
3756873511fSToby Isaac - isActive - if `PETSC_FALSE`, `PetscLogStateEventGetActive()` will return `PETSC_FALSE` for all stages and all events
3766873511fSToby Isaac 
3776873511fSToby Isaac   Level: developer
3786873511fSToby Isaac 
3796873511fSToby Isaac   Note:
3806873511fSToby Isaac   This is called for the global state (`PetscLogGetState()`) in `PetscLogEventSetActiveAll()`.
3816873511fSToby Isaac 
3826873511fSToby Isaac .seealso: [](ch_profiling), `PetscLogState`, `PetscLogEventGetActive()`
3836873511fSToby Isaac @*/
PetscLogStateEventSetActiveAll(PetscLogState state,PetscLogEvent event,PetscBool isActive)3846873511fSToby Isaac PetscErrorCode PetscLogStateEventSetActiveAll(PetscLogState state, PetscLogEvent event, PetscBool isActive)
3856873511fSToby Isaac {
3866873511fSToby Isaac   PetscFunctionBegin;
3876873511fSToby Isaac   PetscCheck(event >= 0 && event < state->bt_num_events, PETSC_COMM_SELF, PETSC_ERR_ARG_OUTOFRANGE, "Invalid event %d should be in [0,%d)", event, state->bt_num_events);
3883a7d0413SPierre Jolivet   for (int stage = 0; stage < state->bt_num_stages; stage++) PetscCall((isActive ? PetscBTSet : PetscBTClear)(state->active, state->current_stage + (event + 1) * state->bt_num_stages));
3896873511fSToby Isaac   PetscFunctionReturn(PETSC_SUCCESS);
3906873511fSToby Isaac }
3916873511fSToby Isaac 
3926873511fSToby Isaac /*@
3936873511fSToby Isaac   PetscLogStateClassSetActive - Set logging events associated with an event as active or inactive during a logging stage.
3946873511fSToby Isaac 
3956873511fSToby Isaac   Not collective
3966873511fSToby Isaac 
3976873511fSToby Isaac   Input Parameters:
3986873511fSToby Isaac + state    - a `PetscLogState`
3996873511fSToby Isaac . stage    - a registered `PetscLogStage`, or `PETSC_DEFAULT` for the current stage
4006873511fSToby Isaac . classid  - a `PetscClassId`
4016873511fSToby Isaac - isActive - if `PETSC_FALSE`, `PetscLogStateEventGetActive()` will return
4026873511fSToby Isaac              `PETSC_FALSE` for this stage and all events that were associated
4036873511fSToby Isaac              with this class when they were registered (see
4046873511fSToby Isaac              `PetscLogStateEventRegister()`).
4056873511fSToby Isaac 
4066873511fSToby Isaac   Level: developer
4076873511fSToby Isaac 
4086873511fSToby Isaac   Note:
4096873511fSToby Isaac   This is called for the global state (`PetscLogGetState()`) in `PetscLogEventActivateClass()` and `PetscLogEventDeactivateClass()`.
4106873511fSToby Isaac 
4116873511fSToby Isaac .seealso: [](ch_profiling), `PetscLogState`, `PetscLogEventGetActive()`, `PetscLogStateEventSetActive()`
4126873511fSToby Isaac @*/
PetscLogStateClassSetActive(PetscLogState state,PetscLogStage stage,PetscClassId classid,PetscBool isActive)4136873511fSToby Isaac PetscErrorCode PetscLogStateClassSetActive(PetscLogState state, PetscLogStage stage, PetscClassId classid, PetscBool isActive)
4146873511fSToby Isaac {
4156873511fSToby Isaac   PetscInt num_events;
4166873511fSToby Isaac 
4176873511fSToby Isaac   PetscFunctionBegin;
4186873511fSToby Isaac   stage = stage < 0 ? state->current_stage : stage;
4196873511fSToby Isaac   PetscCheck(stage >= 0 && stage < state->bt_num_stages, PETSC_COMM_SELF, PETSC_ERR_ARG_OUTOFRANGE, "Invalid stage %d should be in [0,%d)", stage, state->bt_num_stages);
4206873511fSToby Isaac   PetscCall(PetscLogRegistryGetNumEvents(state->registry, &num_events, NULL));
4216873511fSToby Isaac   for (PetscLogEvent e = 0; e < num_events; e++) {
4226873511fSToby Isaac     PetscLogEventInfo event_info;
4236873511fSToby Isaac     PetscCall(PetscLogRegistryEventGetInfo(state->registry, e, &event_info));
4246873511fSToby Isaac     if (event_info.classid == classid) PetscCall((isActive ? PetscBTSet : PetscBTClear)(state->active, stage + (e + 1) * state->bt_num_stages));
4256873511fSToby Isaac   }
4266873511fSToby Isaac   PetscFunctionReturn(PETSC_SUCCESS);
4276873511fSToby Isaac }
4286873511fSToby Isaac 
4296873511fSToby Isaac /*@
4306873511fSToby Isaac   PetscLogStateClassSetActiveAll - Set logging events associated with an event as active or inactive for all logging stages
4316873511fSToby Isaac 
4326873511fSToby Isaac   Not collective
4336873511fSToby Isaac 
4346873511fSToby Isaac   Input Parameters:
4356873511fSToby Isaac + state    - a `PetscLogState`
4366873511fSToby Isaac . classid  - a `PetscClassId`
4376873511fSToby Isaac - isActive - if `PETSC_FALSE`, `PetscLogStateEventGetActive()` will return
4386873511fSToby Isaac              `PETSC_FALSE` for all events that were associated with this class when they
4396873511fSToby Isaac              were registered (see `PetscLogStateEventRegister()`).
4406873511fSToby Isaac 
4416873511fSToby Isaac   Level: developer
4426873511fSToby Isaac 
4436873511fSToby Isaac   Note:
4446873511fSToby Isaac   This is called for the global state (`PetscLogGetState()`) in `PetscLogEventIncludeClass()` and `PetscLogEventExcludeClass()`.
4456873511fSToby Isaac 
4466873511fSToby Isaac .seealso: [](ch_profiling), `PetscLogState`, `PetscLogEventGetActive()`, `PetscLogStateClassSetActive()`
4476873511fSToby Isaac @*/
PetscLogStateClassSetActiveAll(PetscLogState state,PetscClassId classid,PetscBool isActive)4486873511fSToby Isaac PetscErrorCode PetscLogStateClassSetActiveAll(PetscLogState state, PetscClassId classid, PetscBool isActive)
4496873511fSToby Isaac {
4506873511fSToby Isaac   PetscInt num_events, num_stages;
4516873511fSToby Isaac 
4526873511fSToby Isaac   PetscFunctionBegin;
4536873511fSToby Isaac   PetscCall(PetscLogRegistryGetNumEvents(state->registry, &num_events, NULL));
4546873511fSToby Isaac   PetscCall(PetscLogRegistryGetNumStages(state->registry, &num_stages, NULL));
4556873511fSToby Isaac   for (PetscLogEvent e = 0; e < num_events; e++) {
4566873511fSToby Isaac     PetscLogEventInfo event_info;
4576873511fSToby Isaac     PetscCall(PetscLogRegistryEventGetInfo(state->registry, e, &event_info));
4586873511fSToby Isaac     if (event_info.classid == classid) {
4593a7d0413SPierre Jolivet       for (PetscLogStage s = 0; s < num_stages; s++) PetscCall((isActive ? PetscBTSet : PetscBTClear)(state->active, s + (e + 1) * state->bt_num_stages));
4606873511fSToby Isaac     }
4616873511fSToby Isaac   }
4626873511fSToby Isaac   PetscFunctionReturn(PETSC_SUCCESS);
4636873511fSToby Isaac }
4646873511fSToby Isaac 
4656873511fSToby Isaac /*@
4666873511fSToby Isaac   PetscLogStateEventGetActive - Check if a logging event is active or inactive during a logging stage.
4676873511fSToby Isaac 
4686873511fSToby Isaac   Not collective
4696873511fSToby Isaac 
4706873511fSToby Isaac   Input Parameters:
4716873511fSToby Isaac + state - a `PetscLogState`
4726873511fSToby Isaac . stage - a registered `PetscLogStage`, or `PETSC_DEFAULT` for the current stage
4736873511fSToby Isaac - event - a registered `PetscLogEvent`
4746873511fSToby Isaac 
4756873511fSToby Isaac   Output Parameter:
4766873511fSToby Isaac . isActive - If `PETSC_FALSE`, log handlers should not be notified of the event's beginning or end.
4776873511fSToby Isaac 
4786873511fSToby Isaac   Level: developer
4796873511fSToby Isaac 
4806873511fSToby Isaac   Note:
4816873511fSToby Isaac   This is called for the global state (`PetscLogGetState()`) in `PetscLogEventGetActive()`, where it has significance
4826873511fSToby Isaac   for what information is sent to log handlers.
4836873511fSToby Isaac 
484b665b14eSToby Isaac .seealso: [](ch_profiling), `PetscLogState`, `PetscLogEventGetActive()`, `PetscLogStateGetCurrentStage()`, `PetscLogHandler()`
4856873511fSToby Isaac @*/
PetscLogStateEventGetActive(PetscLogState state,PetscLogStage stage,PetscLogEvent event,PetscBool * isActive)4866873511fSToby Isaac PetscErrorCode PetscLogStateEventGetActive(PetscLogState state, PetscLogStage stage, PetscLogEvent event, PetscBool *isActive)
4876873511fSToby Isaac {
4886873511fSToby Isaac   PetscFunctionBegin;
4896873511fSToby Isaac   stage = (stage < 0) ? state->current_stage : stage;
4906873511fSToby Isaac   PetscCheck(event >= 0 && event < state->bt_num_events, PETSC_COMM_SELF, PETSC_ERR_ARG_OUTOFRANGE, "Invalid event %d should be in [0,%d)", event, state->bt_num_events);
4916873511fSToby Isaac   PetscCheck(stage >= 0 && stage < state->bt_num_stages, PETSC_COMM_SELF, PETSC_ERR_ARG_OUTOFRANGE, "Invalid stage %d should be in [0,%d)", event, state->bt_num_stages);
4926873511fSToby Isaac   *isActive = PetscLogStateStageEventIsActive(state, stage, event) ? PETSC_TRUE : PETSC_FALSE;
4936873511fSToby Isaac   PetscFunctionReturn(PETSC_SUCCESS);
4946873511fSToby Isaac }
4956873511fSToby Isaac 
4966873511fSToby Isaac /*@
4976873511fSToby Isaac   PetscLogStateGetEventFromName - Get a `PetscLogEvent` from the name it was registered with.
4986873511fSToby Isaac 
4996873511fSToby Isaac   Not collective
5006873511fSToby Isaac 
5016873511fSToby Isaac   Input Parameters:
5026873511fSToby Isaac + state - a `PetscLogState`
5036873511fSToby Isaac - name  - an event's name
5046873511fSToby Isaac 
5056873511fSToby Isaac   Output Parameter:
5066873511fSToby Isaac . event - the event's id
5076873511fSToby Isaac 
5086873511fSToby Isaac   Level: developer
5096873511fSToby Isaac 
5106873511fSToby Isaac .seealso: [](ch_profiling), `PetscLogState`, `PetscLogStateEventRegister()`, `PetscLogStateEventGetInfo()`
5116873511fSToby Isaac @*/
PetscLogStateGetEventFromName(PetscLogState state,const char name[],PetscLogEvent * event)5126873511fSToby Isaac PetscErrorCode PetscLogStateGetEventFromName(PetscLogState state, const char name[], PetscLogEvent *event)
5136873511fSToby Isaac {
5146873511fSToby Isaac   PetscFunctionBegin;
5156873511fSToby Isaac   PetscCall(PetscLogRegistryGetEventFromName(state->registry, name, event));
5166873511fSToby Isaac   PetscFunctionReturn(PETSC_SUCCESS);
5176873511fSToby Isaac }
5186873511fSToby Isaac 
519cc4c1da9SBarry Smith /*@
5206873511fSToby Isaac   PetscLogStateGetStageFromName - Get a `PetscLogStage` from the name it was registered with.
5216873511fSToby Isaac 
5226873511fSToby Isaac   Not collective
5236873511fSToby Isaac 
5246873511fSToby Isaac   Input Parameters:
5256873511fSToby Isaac + state - a `PetscLogState`
5266873511fSToby Isaac - name  - a stage's name
5276873511fSToby Isaac 
5286873511fSToby Isaac   Output Parameter:
5296873511fSToby Isaac . stage - the stage's id
5306873511fSToby Isaac 
5316873511fSToby Isaac   Level: developer
5326873511fSToby Isaac 
5336873511fSToby Isaac .seealso: [](ch_profiling), `PetscLogState`, `PetscLogStateStageRegister()`, `PetscLogStateStageGetInfo()`
5346873511fSToby Isaac @*/
PetscLogStateGetStageFromName(PetscLogState state,const char name[],PetscLogStage * stage)5356873511fSToby Isaac PetscErrorCode PetscLogStateGetStageFromName(PetscLogState state, const char name[], PetscLogStage *stage)
5366873511fSToby Isaac {
5376873511fSToby Isaac   PetscFunctionBegin;
5386873511fSToby Isaac   PetscCall(PetscLogRegistryGetStageFromName(state->registry, name, stage));
5396873511fSToby Isaac   PetscFunctionReturn(PETSC_SUCCESS);
5406873511fSToby Isaac }
5416873511fSToby Isaac 
542cc4c1da9SBarry Smith /*@
5436873511fSToby Isaac   PetscLogStateGetClassFromName - Get a `PetscLogClass` from the name of the class it was registered with.
5446873511fSToby Isaac 
5456873511fSToby Isaac   Not collective
5466873511fSToby Isaac 
5476873511fSToby Isaac   Input Parameters:
5486873511fSToby Isaac + state - a `PetscLogState`
5496873511fSToby Isaac - name  - the name string of the class
5506873511fSToby Isaac 
5516873511fSToby Isaac   Output Parameter:
5526873511fSToby Isaac . clss - the classes's logging id
5536873511fSToby Isaac 
5546873511fSToby Isaac   Level: developer
5556873511fSToby Isaac 
5566873511fSToby Isaac .seealso: [](ch_profiling), `PetscLogState`, `PetscLogStateClassRegister()`, `PetscLogStateClassGetInfo()`
5576873511fSToby Isaac @*/
PetscLogStateGetClassFromName(PetscLogState state,const char name[],PetscLogClass * clss)5586873511fSToby Isaac PetscErrorCode PetscLogStateGetClassFromName(PetscLogState state, const char name[], PetscLogClass *clss)
5596873511fSToby Isaac {
5606873511fSToby Isaac   PetscFunctionBegin;
5616873511fSToby Isaac   PetscCall(PetscLogRegistryGetClassFromName(state->registry, name, clss));
5626873511fSToby Isaac   PetscFunctionReturn(PETSC_SUCCESS);
5636873511fSToby Isaac }
5646873511fSToby Isaac 
5656873511fSToby Isaac /*@
5666873511fSToby Isaac   PetscLogStateGetClassFromClassId - Get a `PetscLogClass` from the `PetscClassId` it was registered with.
5676873511fSToby Isaac 
5686873511fSToby Isaac   Not collective
5696873511fSToby Isaac 
5706873511fSToby Isaac   Input Parameters:
5716873511fSToby Isaac + state   - a `PetscLogState`
5726873511fSToby Isaac - classid - a `PetscClassId`
5736873511fSToby Isaac 
5746873511fSToby Isaac   Output Parameter:
5756873511fSToby Isaac . clss - the classes's logging id
5766873511fSToby Isaac 
5776873511fSToby Isaac   Level: developer
5786873511fSToby Isaac 
5796873511fSToby Isaac .seealso: [](ch_profiling), `PetscLogState`, `PetscLogStateClassRegister()`, `PetscLogStateClassGetInfo()`
5806873511fSToby Isaac @*/
PetscLogStateGetClassFromClassId(PetscLogState state,PetscClassId classid,PetscLogClass * clss)5816873511fSToby Isaac PetscErrorCode PetscLogStateGetClassFromClassId(PetscLogState state, PetscClassId classid, PetscLogClass *clss)
5826873511fSToby Isaac {
5836873511fSToby Isaac   PetscFunctionBegin;
5846873511fSToby Isaac   PetscCall(PetscLogRegistryGetClassFromClassId(state->registry, classid, clss));
5856873511fSToby Isaac   PetscFunctionReturn(PETSC_SUCCESS);
5866873511fSToby Isaac }
5876873511fSToby Isaac 
5886873511fSToby Isaac /*@
5896873511fSToby Isaac   PetscLogStateGetNumEvents - Get the number of registered events in a logging state.
5906873511fSToby Isaac 
5916873511fSToby Isaac   Not collective
5926873511fSToby Isaac 
5936873511fSToby Isaac   Input Parameter:
5946873511fSToby Isaac . state - a `PetscLogState`
5956873511fSToby Isaac 
5966873511fSToby Isaac   Output Parameter:
5976873511fSToby Isaac . numEvents - the number of registered `PetscLogEvent`s
5986873511fSToby Isaac 
5996873511fSToby Isaac   Level: developer
6006873511fSToby Isaac 
6016873511fSToby Isaac .seealso: [](ch_profiling), `PetscLogState`, `PetscLogStateEventRegister()`
6026873511fSToby Isaac @*/
PetscLogStateGetNumEvents(PetscLogState state,PetscInt * numEvents)6036873511fSToby Isaac PetscErrorCode PetscLogStateGetNumEvents(PetscLogState state, PetscInt *numEvents)
6046873511fSToby Isaac {
6056873511fSToby Isaac   PetscFunctionBegin;
6066873511fSToby Isaac   PetscCall(PetscLogRegistryGetNumEvents(state->registry, numEvents, NULL));
6076873511fSToby Isaac   PetscFunctionReturn(PETSC_SUCCESS);
6086873511fSToby Isaac }
6096873511fSToby Isaac 
6106873511fSToby Isaac /*@
6116873511fSToby Isaac   PetscLogStateGetNumStages - Get the number of registered stages in a logging state.
6126873511fSToby Isaac 
6136873511fSToby Isaac   Not collective
6146873511fSToby Isaac 
6156873511fSToby Isaac   Input Parameter:
6166873511fSToby Isaac . state - a `PetscLogState`
6176873511fSToby Isaac 
6186873511fSToby Isaac   Output Parameter:
6196873511fSToby Isaac . numStages - the number of registered `PetscLogStage`s
6206873511fSToby Isaac 
6216873511fSToby Isaac   Level: developer
6226873511fSToby Isaac 
6236873511fSToby Isaac .seealso: [](ch_profiling), `PetscLogState`, `PetscLogStateStageRegister()`
6246873511fSToby Isaac @*/
PetscLogStateGetNumStages(PetscLogState state,PetscInt * numStages)6256873511fSToby Isaac PetscErrorCode PetscLogStateGetNumStages(PetscLogState state, PetscInt *numStages)
6266873511fSToby Isaac {
6276873511fSToby Isaac   PetscFunctionBegin;
6286873511fSToby Isaac   PetscCall(PetscLogRegistryGetNumStages(state->registry, numStages, NULL));
6296873511fSToby Isaac   PetscFunctionReturn(PETSC_SUCCESS);
6306873511fSToby Isaac }
6316873511fSToby Isaac 
6326873511fSToby Isaac /*@
6336873511fSToby Isaac   PetscLogStateGetNumClasses - Get the number of registered classes in a logging state.
6346873511fSToby Isaac 
6356873511fSToby Isaac   Not collective
6366873511fSToby Isaac 
6376873511fSToby Isaac   Input Parameter:
6386873511fSToby Isaac . state - a `PetscLogState`
6396873511fSToby Isaac 
6406873511fSToby Isaac   Output Parameter:
6416873511fSToby Isaac . numClasses - the number of registered `PetscLogClass`s
6426873511fSToby Isaac 
6436873511fSToby Isaac   Level: developer
6446873511fSToby Isaac 
6456873511fSToby Isaac .seealso: [](ch_profiling), `PetscLogState`, `PetscLogStateClassRegister()`
6466873511fSToby Isaac @*/
PetscLogStateGetNumClasses(PetscLogState state,PetscInt * numClasses)6476873511fSToby Isaac PetscErrorCode PetscLogStateGetNumClasses(PetscLogState state, PetscInt *numClasses)
6486873511fSToby Isaac {
6496873511fSToby Isaac   PetscFunctionBegin;
6506873511fSToby Isaac   PetscCall(PetscLogRegistryGetNumClasses(state->registry, numClasses, NULL));
6516873511fSToby Isaac   PetscFunctionReturn(PETSC_SUCCESS);
6526873511fSToby Isaac }
6536873511fSToby Isaac 
6546873511fSToby Isaac /*@
6556873511fSToby Isaac   PetscLogStateEventGetInfo - Get the registration information of an event
6566873511fSToby Isaac 
6576873511fSToby Isaac   Not collective
6586873511fSToby Isaac 
6596873511fSToby Isaac   Input Parameters:
6606873511fSToby Isaac + state - a `PetscLogState`
6616873511fSToby Isaac - event - a registered `PetscLogEvent`
6626873511fSToby Isaac 
6636873511fSToby Isaac   Output Parameter:
6646873511fSToby Isaac . info - the `PetscLogEventInfo` of the event will be copied into info
6656873511fSToby Isaac 
6666873511fSToby Isaac   Level: developer
6676873511fSToby Isaac 
6686873511fSToby Isaac .seealso: [](ch_profiling), `PetscLogState`, `PetscLogStateEventRegister()`, `PetscLogStateGetEventFromName()`
6696873511fSToby Isaac @*/
PetscLogStateEventGetInfo(PetscLogState state,PetscLogEvent event,PetscLogEventInfo * info)6706873511fSToby Isaac PetscErrorCode PetscLogStateEventGetInfo(PetscLogState state, PetscLogEvent event, PetscLogEventInfo *info)
6716873511fSToby Isaac {
6726873511fSToby Isaac   PetscFunctionBegin;
6736873511fSToby Isaac   PetscCall(PetscLogRegistryEventGetInfo(state->registry, event, info));
6746873511fSToby Isaac   PetscFunctionReturn(PETSC_SUCCESS);
6756873511fSToby Isaac }
6766873511fSToby Isaac 
6776873511fSToby Isaac /*@
6786873511fSToby Isaac   PetscLogStateStageGetInfo - Get the registration information of an stage
6796873511fSToby Isaac 
6806873511fSToby Isaac   Not collective
6816873511fSToby Isaac 
6826873511fSToby Isaac   Input Parameters:
6836873511fSToby Isaac + state - a `PetscLogState`
6846873511fSToby Isaac - stage - a registered `PetscLogStage`
6856873511fSToby Isaac 
6866873511fSToby Isaac   Output Parameter:
6876873511fSToby Isaac . info - the `PetscLogStageInfo` of the stage will be copied into info
6886873511fSToby Isaac 
6896873511fSToby Isaac   Level: developer
6906873511fSToby Isaac 
6916873511fSToby Isaac .seealso: [](ch_profiling), `PetscLogState`, `PetscLogStateStageRegister()`, `PetscLogStateGetStageFromName()`
6926873511fSToby Isaac @*/
PetscLogStateStageGetInfo(PetscLogState state,PetscLogStage stage,PetscLogStageInfo * info)6936873511fSToby Isaac PetscErrorCode PetscLogStateStageGetInfo(PetscLogState state, PetscLogStage stage, PetscLogStageInfo *info)
6946873511fSToby Isaac {
6956873511fSToby Isaac   PetscFunctionBegin;
6966873511fSToby Isaac   PetscCall(PetscLogRegistryStageGetInfo(state->registry, stage, info));
6976873511fSToby Isaac   PetscFunctionReturn(PETSC_SUCCESS);
6986873511fSToby Isaac }
6996873511fSToby Isaac 
7006873511fSToby Isaac /*@
701b665b14eSToby Isaac   PetscLogStateClassRegister - Register a class to with a `PetscLogState` used by `PetscLogHandler`s.
7026873511fSToby Isaac 
7036873511fSToby Isaac   Logically collective on `PETSC_COMM_WORLD`
7046873511fSToby Isaac 
7056873511fSToby Isaac   Input Parameters:
7066873511fSToby Isaac + state - a `PetscLogState`
7076873511fSToby Isaac . name  - the name of a class registered with `PetscClassIdRegister()`
7086873511fSToby Isaac - id    - the `PetscClassId` obtained from `PetscClassIdRegister()`
7096873511fSToby Isaac 
7106873511fSToby Isaac   Output Parameter:
7116873511fSToby Isaac . logclass - a `PetscLogClass` for this class with this state
7126873511fSToby Isaac 
7136873511fSToby Isaac   Level: developer
7146873511fSToby Isaac 
7156873511fSToby Isaac   Note:
7166873511fSToby Isaac   Classes are automatically registered with PETSc's global logging state (`PetscLogGetState()`), so this
7176873511fSToby Isaac   is only needed for non-global states.
7186873511fSToby Isaac 
7196873511fSToby Isaac .seealso: [](ch_profiling), `PetscLogStateClassGetInfo()` `PetscLogStateGetClassFromName()`, `PetscLogStateGetClassFromClassId()`
7206873511fSToby Isaac @*/
PetscLogStateClassRegister(PetscLogState state,const char name[],PetscClassId id,PetscLogClass * logclass)7216873511fSToby Isaac PetscErrorCode PetscLogStateClassRegister(PetscLogState state, const char name[], PetscClassId id, PetscLogClass *logclass)
7226873511fSToby Isaac {
7236873511fSToby Isaac   PetscFunctionBegin;
7246873511fSToby Isaac   PetscCall(PetscLogRegistryClassRegister(state->registry, name, id, logclass));
7256873511fSToby Isaac   PetscFunctionReturn(PETSC_SUCCESS);
7266873511fSToby Isaac }
7276873511fSToby Isaac 
7286873511fSToby Isaac /*@
7296873511fSToby Isaac   PetscLogStateClassGetInfo - Get the registration information of an class
7306873511fSToby Isaac 
7316873511fSToby Isaac   Not collective
7326873511fSToby Isaac 
7336873511fSToby Isaac   Input Parameters:
7346873511fSToby Isaac + state - a `PetscLogState`
7356873511fSToby Isaac - clss  - a registered `PetscLogClass`
7366873511fSToby Isaac 
7376873511fSToby Isaac   Output Parameter:
7386873511fSToby Isaac . info - the `PetscLogClassInfo` of the class will be copied into info
7396873511fSToby Isaac 
7406873511fSToby Isaac   Level: developer
7416873511fSToby Isaac 
7426873511fSToby Isaac .seealso: [](ch_profiling), `PetscLogState`, `PetscLogStateClassRegister()`, `PetscLogStateGetClassFromName()`
7436873511fSToby Isaac @*/
PetscLogStateClassGetInfo(PetscLogState state,PetscLogClass clss,PetscLogClassInfo * info)7446873511fSToby Isaac PetscErrorCode PetscLogStateClassGetInfo(PetscLogState state, PetscLogClass clss, PetscLogClassInfo *info)
7456873511fSToby Isaac {
7466873511fSToby Isaac   PetscFunctionBegin;
7476873511fSToby Isaac   PetscCall(PetscLogRegistryClassGetInfo(state->registry, clss, info));
7486873511fSToby Isaac   PetscFunctionReturn(PETSC_SUCCESS);
7496873511fSToby Isaac }
750