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 @*/ 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 326873511fSToby Isaac s->bt_num_events = max_events + 1; // one extra column for default stage activity 336873511fSToby Isaac s->bt_num_stages = max_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 @*/ 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; 64*663e1fa8SPierre 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 @*/ 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 @*/ 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 @*/ 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 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; 1816873511fSToby Isaac state->bt_num_events = new_num_events; 1826873511fSToby Isaac state->bt_num_stages = new_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 @*/ 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 @*/ 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 @*/ 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 @*/ 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 @*/ 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 @*/ 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 @*/ 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 @*/ 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 @*/ 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 @*/ 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 @*/ 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 @*/ 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 @*/ 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 @*/ 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 @*/ 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 @*/ 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 @*/ 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 @*/ 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 @*/ 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 @*/ 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 @*/ 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