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; 60*4d86920dSPierre Jolivet 616873511fSToby Isaac PetscFunctionBegin; 626873511fSToby Isaac s = *state; 636873511fSToby Isaac *state = NULL; 646873511fSToby Isaac 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)); 946873511fSToby Isaac PetscCheck(stage >= 0 && stage < num_stages, PETSC_COMM_SELF, PETSC_ERR_ARG_OUTOFRANGE, "Invalid stage %d not in [0,%d)", stage, (int)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)); 1246873511fSToby Isaac if (!empty) { 1256873511fSToby Isaac PetscCall(PetscIntStackTop(state->stage_stack, &state->current_stage)); 1266873511fSToby Isaac } else state->current_stage = -1; 1276873511fSToby Isaac PetscFunctionReturn(PETSC_SUCCESS); 1286873511fSToby Isaac } 1296873511fSToby Isaac 1306873511fSToby Isaac /*@ 1316873511fSToby Isaac PetscLogStateGetCurrentStage - Get the last stage that was started 1326873511fSToby Isaac 1336873511fSToby Isaac Not collective 1346873511fSToby Isaac 1356873511fSToby Isaac Input Parameter: 1366873511fSToby Isaac . state - a `PetscLogState` 1376873511fSToby Isaac 1386873511fSToby Isaac Output Parameter: 1396873511fSToby Isaac . current - the last `PetscLogStage` started with `PetscLogStateStagePop()` 1406873511fSToby Isaac 1416873511fSToby Isaac Level: developer 1426873511fSToby Isaac 1436873511fSToby Isaac Note: 1446873511fSToby Isaac This is called for the global state (`PetscLogGetState()`) in `PetscLogGetCurrentStage()`. 1456873511fSToby Isaac 1466873511fSToby Isaac .seealso: [](ch_profiling), `PetscLogState`, `PetscLogStateStageRegister()`, `PetscLogStateStagePush()`, `PetscLogStateStagePop()` 1476873511fSToby Isaac @*/ 1486873511fSToby Isaac PetscErrorCode PetscLogStateGetCurrentStage(PetscLogState state, PetscLogStage *current) 1496873511fSToby Isaac { 1506873511fSToby Isaac PetscFunctionBegin; 1516873511fSToby Isaac *current = state->current_stage; 1526873511fSToby Isaac PetscFunctionReturn(PETSC_SUCCESS); 1536873511fSToby Isaac } 1546873511fSToby Isaac 1556873511fSToby Isaac static PetscErrorCode PetscLogStateResize(PetscLogState state) 1566873511fSToby Isaac { 1576873511fSToby Isaac PetscBT active_new; 1586873511fSToby Isaac PetscInt new_num_events; 1596873511fSToby Isaac PetscInt new_num_stages; 1606873511fSToby Isaac 1616873511fSToby Isaac PetscFunctionBegin; 1626873511fSToby Isaac PetscCall(PetscLogRegistryGetNumEvents(state->registry, NULL, &new_num_events)); 1636873511fSToby Isaac new_num_events++; 1646873511fSToby Isaac PetscCall(PetscLogRegistryGetNumStages(state->registry, NULL, &new_num_stages)); 1656873511fSToby Isaac 1666873511fSToby Isaac if (state->bt_num_events == new_num_events && state->bt_num_stages == new_num_stages) PetscFunctionReturn(PETSC_SUCCESS); 1676873511fSToby 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); 1686873511fSToby Isaac PetscCall(PetscBTCreate(new_num_events * new_num_stages, &active_new)); 1696873511fSToby Isaac if (new_num_stages == state->bt_num_stages) { 1706873511fSToby Isaac // single memcpy 1716873511fSToby Isaac size_t num_chars = (state->bt_num_stages * state->bt_num_events) / PETSC_BITS_PER_BYTE; 1726873511fSToby Isaac 1736873511fSToby Isaac PetscCall(PetscMemcpy(active_new, state->active, num_chars)); 1746873511fSToby Isaac } else { 1756873511fSToby Isaac size_t num_chars_old = state->bt_num_stages / PETSC_BITS_PER_BYTE; 1766873511fSToby Isaac size_t num_chars_new = new_num_stages / PETSC_BITS_PER_BYTE; 1776873511fSToby Isaac 1786873511fSToby Isaac 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)); } 1796873511fSToby Isaac } 1806873511fSToby Isaac PetscCall(PetscBTDestroy(&state->active)); 1816873511fSToby Isaac state->active = active_new; 1826873511fSToby Isaac state->bt_num_events = new_num_events; 1836873511fSToby Isaac state->bt_num_stages = new_num_stages; 1846873511fSToby Isaac PetscFunctionReturn(PETSC_SUCCESS); 1856873511fSToby Isaac } 1866873511fSToby Isaac 1876873511fSToby Isaac /*@C 1886873511fSToby Isaac PetscLogStateStageRegister - Register a new stage with a logging state 1896873511fSToby Isaac 1906873511fSToby Isaac Not collective 1916873511fSToby Isaac 1926873511fSToby Isaac Input Parameters: 1936873511fSToby Isaac + state - a `PetscLogState` 1946873511fSToby Isaac - sname - a unique name 1956873511fSToby Isaac 1966873511fSToby Isaac Output Parameter: 1976873511fSToby Isaac . stage - the identifier for the registered stage 1986873511fSToby Isaac 1996873511fSToby Isaac Level: developer 2006873511fSToby Isaac 2016873511fSToby Isaac Note: 2026873511fSToby Isaac This is called for the global state (`PetscLogGetState()`) in `PetscLogStageRegister()`. 2036873511fSToby Isaac 2046873511fSToby Isaac .seealso: [](ch_profiling), `PetscLogState`, `PetscLogStateStagePush()`, `PetscLogStateStagePop()` 2056873511fSToby Isaac @*/ 2066873511fSToby Isaac PetscErrorCode PetscLogStateStageRegister(PetscLogState state, const char sname[], PetscLogStage *stage) 2076873511fSToby Isaac { 2086873511fSToby Isaac PetscInt s; 209*4d86920dSPierre Jolivet 2106873511fSToby Isaac PetscFunctionBegin; 2116873511fSToby Isaac PetscCall(PetscLogRegistryStageRegister(state->registry, sname, stage)); 2126873511fSToby Isaac PetscCall(PetscLogStateResize(state)); 2136873511fSToby Isaac s = *stage; 2146873511fSToby Isaac PetscCall(PetscBTSet(state->active, s)); // stages are by default active 2156873511fSToby Isaac for (PetscInt e = 1; e < state->bt_num_events; e++) { 2166873511fSToby Isaac // copy "Main Stage" activities 2176873511fSToby Isaac if (PetscBTLookup(state->active, 0 + e * state->bt_num_stages)) { 2186873511fSToby Isaac PetscCall(PetscBTSet(state->active, s + e * state->bt_num_stages)); 2196873511fSToby Isaac } else { 2206873511fSToby Isaac PetscCall(PetscBTClear(state->active, s + e * state->bt_num_stages)); 2216873511fSToby Isaac } 2226873511fSToby Isaac } 2236873511fSToby Isaac PetscFunctionReturn(PETSC_SUCCESS); 2246873511fSToby Isaac } 2256873511fSToby Isaac 2266873511fSToby Isaac /*@C 2276873511fSToby Isaac PetscLogStateEventRegister - Register a new event with a logging state 2286873511fSToby Isaac 2296873511fSToby Isaac Not collective 2306873511fSToby Isaac 2316873511fSToby Isaac Input Parameters: 2326873511fSToby Isaac + state - a `PetscLogState` 2336873511fSToby Isaac . sname - a unique name 2346873511fSToby Isaac - id - the `PetscClassId` for the type of object most closely associated with this event 2356873511fSToby Isaac 2366873511fSToby Isaac Output Parameter: 2376873511fSToby Isaac . event - the identifier for the registered event 2386873511fSToby Isaac 2396873511fSToby Isaac Level: developer 2406873511fSToby Isaac 2416873511fSToby Isaac Note: 2426873511fSToby Isaac This is called for the global state (`PetscLogGetState()`) in `PetscLogEventRegister()`. 2436873511fSToby Isaac 2446873511fSToby Isaac .seealso: [](ch_profiling), `PetscLogState`, `PetscLogStageRegister()` 2456873511fSToby Isaac @*/ 2466873511fSToby Isaac PetscErrorCode PetscLogStateEventRegister(PetscLogState state, const char sname[], PetscClassId id, PetscLogEvent *event) 2476873511fSToby Isaac { 2486873511fSToby Isaac PetscInt e; 2496873511fSToby Isaac 2506873511fSToby Isaac PetscFunctionBegin; 2516873511fSToby Isaac *event = PETSC_DECIDE; 2526873511fSToby Isaac PetscCall(PetscLogRegistryGetEventFromName(state->registry, sname, event)); 2536873511fSToby Isaac if (*event > 0) PetscFunctionReturn(PETSC_SUCCESS); 2546873511fSToby Isaac PetscCall(PetscLogRegistryEventRegister(state->registry, sname, id, event)); 2556873511fSToby Isaac PetscCall(PetscLogStateResize(state)); 2566873511fSToby Isaac e = *event; 2576873511fSToby 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 2586873511fSToby Isaac PetscFunctionReturn(PETSC_SUCCESS); 2596873511fSToby Isaac } 2606873511fSToby Isaac 2616873511fSToby Isaac /*@ 2626873511fSToby Isaac PetscLogStateEventSetCollective - Set the collective nature of a logging event 2636873511fSToby Isaac 2646873511fSToby Isaac Logically collective 2656873511fSToby Isaac 2666873511fSToby Isaac Input Parameters: 2676873511fSToby Isaac + state - a `PetscLogState` 2686873511fSToby Isaac . event - a registered `PetscLogEvent` 2696873511fSToby 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 2706873511fSToby Isaac 2716873511fSToby Isaac Level: developer 2726873511fSToby Isaac 2736873511fSToby Isaac Note: 2746873511fSToby Isaac This is called for the global state (`PetscLogGetState()`) in `PetscLogEventSetCollective()`. 2756873511fSToby Isaac 2766873511fSToby Isaac .seealso: [](ch_profiling), `PetscLogState`, `PetscLogEventRegister()` 2776873511fSToby Isaac @*/ 2786873511fSToby Isaac PetscErrorCode PetscLogStateEventSetCollective(PetscLogState state, PetscLogEvent event, PetscBool collective) 2796873511fSToby Isaac { 2806873511fSToby Isaac PetscFunctionBegin; 2816873511fSToby Isaac PetscCall(PetscLogRegistryEventSetCollective(state->registry, event, collective)); 2826873511fSToby Isaac PetscFunctionReturn(PETSC_SUCCESS); 2836873511fSToby Isaac } 2846873511fSToby Isaac 2856873511fSToby Isaac /*@ 2866873511fSToby Isaac PetscLogStateStageSetActive - Mark a stage as active or inactive. 2876873511fSToby Isaac 2886873511fSToby Isaac Not collective 2896873511fSToby Isaac 2906873511fSToby Isaac Input Parameters: 2916873511fSToby Isaac + state - a `PetscLogState` 2926873511fSToby Isaac . stage - a registered `PetscLogStage` 2936873511fSToby Isaac - isActive - if `PETSC_FALSE`, `PetscLogStateEventGetActive()` will return `PETSC_FALSE` for all events during this stage 2946873511fSToby Isaac 2956873511fSToby Isaac Level: developer 2966873511fSToby Isaac 2976873511fSToby Isaac Note: 2986873511fSToby Isaac This is called for the global state (`PetscLogGetState()`) in `PetscLogStageSetActive()` 2996873511fSToby Isaac 3006873511fSToby Isaac .seealso: [](ch_profiling), `PetscLogState`, `PetscLogStateEventSetActive()` 3016873511fSToby Isaac @*/ 3026873511fSToby Isaac PetscErrorCode PetscLogStateStageSetActive(PetscLogState state, PetscLogStage stage, PetscBool isActive) 3036873511fSToby Isaac { 3046873511fSToby Isaac PetscFunctionBegin; 3056873511fSToby 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); 3066873511fSToby Isaac if (isActive) { 3076873511fSToby Isaac for (PetscInt e = 0; e < state->bt_num_events; e++) { PetscCall(PetscBTSet(state->active, stage + e * state->bt_num_stages)); } 3086873511fSToby Isaac } else { 3096873511fSToby Isaac for (PetscInt e = 0; e < state->bt_num_events; e++) { PetscCall(PetscBTClear(state->active, stage + e * state->bt_num_stages)); } 3106873511fSToby Isaac } 3116873511fSToby Isaac PetscFunctionReturn(PETSC_SUCCESS); 3126873511fSToby Isaac } 3136873511fSToby Isaac 3146873511fSToby Isaac /*@ 3156873511fSToby Isaac PetscLogStateStageGetActive - Check if a logging stage is active or inactive. 3166873511fSToby Isaac 3176873511fSToby Isaac Not collective 3186873511fSToby Isaac 3196873511fSToby Isaac Input Parameters: 3206873511fSToby Isaac + state - a `PetscLogState` 3216873511fSToby Isaac - stage - a registered `PetscLogStage` 3226873511fSToby Isaac 3236873511fSToby Isaac Output Parameter: 3246873511fSToby Isaac . isActive - if `PETSC_FALSE`, the state should not send logging events to log handlers during this stage. 3256873511fSToby Isaac 3266873511fSToby Isaac Level: developer 3276873511fSToby Isaac 3286873511fSToby Isaac Note: 3296873511fSToby Isaac This is called for the global state (`PetscLogGetState()`) in `PetscLogStageGetActive()`. 3306873511fSToby Isaac 331b665b14eSToby Isaac .seealso: [](ch_profiling), `PetscLogState`, `PetscLogStageSetActive()`, `PetscLogHandler`, `PetscLogHandlerStart()`, `PetscLogHandlerEventBegin()`, `PetscLogHandlerEventEnd()` 3326873511fSToby Isaac @*/ 3336873511fSToby Isaac PetscErrorCode PetscLogStateStageGetActive(PetscLogState state, PetscLogStage stage, PetscBool *isActive) 3346873511fSToby Isaac { 3356873511fSToby Isaac PetscFunctionBegin; 3366873511fSToby Isaac *isActive = PetscBTLookup(state->active, stage) ? PETSC_TRUE : PETSC_FALSE; 3376873511fSToby Isaac PetscFunctionReturn(PETSC_SUCCESS); 3386873511fSToby Isaac } 3396873511fSToby Isaac 3406873511fSToby Isaac /*@ 3416873511fSToby Isaac PetscLogStateEventSetActive - Set a logging event as active or inactive during a logging stage. 3426873511fSToby Isaac 3436873511fSToby Isaac Not collective 3446873511fSToby Isaac 3456873511fSToby Isaac Input Parameters: 3466873511fSToby Isaac + state - a `PetscLogState` 3476873511fSToby Isaac . stage - a registered `PetscLogStage`, or `PETSC_DEFAULT` for the current stage 3486873511fSToby Isaac . event - a registered `PetscLogEvent` 3496873511fSToby Isaac - isActive - if `PETSC_FALSE`, `PetscLogStateEventGetActive()` will return `PETSC_FALSE` for this stage and this event 3506873511fSToby Isaac 3516873511fSToby Isaac Level: developer 3526873511fSToby Isaac 3536873511fSToby Isaac Note: 3546873511fSToby Isaac This is called for the global state (`PetscLogGetState()`) in `PetscLogEventActivate()` and `PetscLogEventDeactivate()`. 3556873511fSToby Isaac 3566873511fSToby Isaac .seealso: [](ch_profiling), `PetscLogState`, `PetscLogEventGetActive()`, `PetscLogStateGetCurrentStage()`, `PetscLogEventSetActiveAll()` 3576873511fSToby Isaac @*/ 3586873511fSToby Isaac PetscErrorCode PetscLogStateEventSetActive(PetscLogState state, PetscLogStage stage, PetscLogEvent event, PetscBool isActive) 3596873511fSToby Isaac { 3606873511fSToby Isaac PetscFunctionBegin; 3616873511fSToby Isaac stage = (stage < 0) ? state->current_stage : stage; 3626873511fSToby 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); 3636873511fSToby 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); 3646873511fSToby Isaac PetscCall((isActive ? PetscBTSet : PetscBTClear)(state->active, state->current_stage + (event + 1) * state->bt_num_stages)); 3656873511fSToby Isaac PetscFunctionReturn(PETSC_SUCCESS); 3666873511fSToby Isaac } 3676873511fSToby Isaac 3686873511fSToby Isaac /*@ 3696873511fSToby Isaac PetscLogStateEventSetActiveAll - Set logging event as active or inactive for all logging stages 3706873511fSToby Isaac 3716873511fSToby Isaac Not collective 3726873511fSToby Isaac 3736873511fSToby Isaac Input Parameters: 3746873511fSToby Isaac + state - a `PetscLogState` 3756873511fSToby Isaac . event - a registered `PetscLogEvent` 3766873511fSToby Isaac - isActive - if `PETSC_FALSE`, `PetscLogStateEventGetActive()` will return `PETSC_FALSE` for all stages and all events 3776873511fSToby Isaac 3786873511fSToby Isaac Level: developer 3796873511fSToby Isaac 3806873511fSToby Isaac Note: 3816873511fSToby Isaac This is called for the global state (`PetscLogGetState()`) in `PetscLogEventSetActiveAll()`. 3826873511fSToby Isaac 3836873511fSToby Isaac .seealso: [](ch_profiling), `PetscLogState`, `PetscLogEventGetActive()` 3846873511fSToby Isaac @*/ 3856873511fSToby Isaac PetscErrorCode PetscLogStateEventSetActiveAll(PetscLogState state, PetscLogEvent event, PetscBool isActive) 3866873511fSToby Isaac { 3876873511fSToby Isaac PetscFunctionBegin; 3886873511fSToby 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); 3896873511fSToby Isaac 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)); } 3906873511fSToby Isaac PetscFunctionReturn(PETSC_SUCCESS); 3916873511fSToby Isaac } 3926873511fSToby Isaac 3936873511fSToby Isaac /*@ 3946873511fSToby Isaac PetscLogStateClassSetActive - Set logging events associated with an event as active or inactive during a logging stage. 3956873511fSToby Isaac 3966873511fSToby Isaac Not collective 3976873511fSToby Isaac 3986873511fSToby Isaac Input Parameters: 3996873511fSToby Isaac + state - a `PetscLogState` 4006873511fSToby Isaac . stage - a registered `PetscLogStage`, or `PETSC_DEFAULT` for the current stage 4016873511fSToby Isaac . classid - a `PetscClassId` 4026873511fSToby Isaac - isActive - if `PETSC_FALSE`, `PetscLogStateEventGetActive()` will return 4036873511fSToby Isaac `PETSC_FALSE` for this stage and all events that were associated 4046873511fSToby Isaac with this class when they were registered (see 4056873511fSToby Isaac `PetscLogStateEventRegister()`). 4066873511fSToby Isaac 4076873511fSToby Isaac Level: developer 4086873511fSToby Isaac 4096873511fSToby Isaac Note: 4106873511fSToby Isaac This is called for the global state (`PetscLogGetState()`) in `PetscLogEventActivateClass()` and `PetscLogEventDeactivateClass()`. 4116873511fSToby Isaac 4126873511fSToby Isaac .seealso: [](ch_profiling), `PetscLogState`, `PetscLogEventGetActive()`, `PetscLogStateEventSetActive()` 4136873511fSToby Isaac @*/ 4146873511fSToby Isaac PetscErrorCode PetscLogStateClassSetActive(PetscLogState state, PetscLogStage stage, PetscClassId classid, PetscBool isActive) 4156873511fSToby Isaac { 4166873511fSToby Isaac PetscInt num_events; 4176873511fSToby Isaac 4186873511fSToby Isaac PetscFunctionBegin; 4196873511fSToby Isaac stage = stage < 0 ? state->current_stage : stage; 4206873511fSToby 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); 4216873511fSToby Isaac PetscCall(PetscLogRegistryGetNumEvents(state->registry, &num_events, NULL)); 4226873511fSToby Isaac for (PetscLogEvent e = 0; e < num_events; e++) { 4236873511fSToby Isaac PetscLogEventInfo event_info; 4246873511fSToby Isaac PetscCall(PetscLogRegistryEventGetInfo(state->registry, e, &event_info)); 4256873511fSToby Isaac if (event_info.classid == classid) PetscCall((isActive ? PetscBTSet : PetscBTClear)(state->active, stage + (e + 1) * state->bt_num_stages)); 4266873511fSToby Isaac } 4276873511fSToby Isaac PetscFunctionReturn(PETSC_SUCCESS); 4286873511fSToby Isaac } 4296873511fSToby Isaac 4306873511fSToby Isaac /*@ 4316873511fSToby Isaac PetscLogStateClassSetActiveAll - Set logging events associated with an event as active or inactive for all logging stages 4326873511fSToby Isaac 4336873511fSToby Isaac Not collective 4346873511fSToby Isaac 4356873511fSToby Isaac Input Parameters: 4366873511fSToby Isaac + state - a `PetscLogState` 4376873511fSToby Isaac . classid - a `PetscClassId` 4386873511fSToby Isaac - isActive - if `PETSC_FALSE`, `PetscLogStateEventGetActive()` will return 4396873511fSToby Isaac `PETSC_FALSE` for all events that were associated with this class when they 4406873511fSToby Isaac were registered (see `PetscLogStateEventRegister()`). 4416873511fSToby Isaac 4426873511fSToby Isaac Level: developer 4436873511fSToby Isaac 4446873511fSToby Isaac Note: 4456873511fSToby Isaac This is called for the global state (`PetscLogGetState()`) in `PetscLogEventIncludeClass()` and `PetscLogEventExcludeClass()`. 4466873511fSToby Isaac 4476873511fSToby Isaac .seealso: [](ch_profiling), `PetscLogState`, `PetscLogEventGetActive()`, `PetscLogStateClassSetActive()` 4486873511fSToby Isaac @*/ 4496873511fSToby Isaac PetscErrorCode PetscLogStateClassSetActiveAll(PetscLogState state, PetscClassId classid, PetscBool isActive) 4506873511fSToby Isaac { 4516873511fSToby Isaac PetscInt num_events, num_stages; 4526873511fSToby Isaac 4536873511fSToby Isaac PetscFunctionBegin; 4546873511fSToby Isaac PetscCall(PetscLogRegistryGetNumEvents(state->registry, &num_events, NULL)); 4556873511fSToby Isaac PetscCall(PetscLogRegistryGetNumStages(state->registry, &num_stages, NULL)); 4566873511fSToby Isaac for (PetscLogEvent e = 0; e < num_events; e++) { 4576873511fSToby Isaac PetscLogEventInfo event_info; 4586873511fSToby Isaac PetscCall(PetscLogRegistryEventGetInfo(state->registry, e, &event_info)); 4596873511fSToby Isaac if (event_info.classid == classid) { 4606873511fSToby Isaac for (PetscLogStage s = 0; s < num_stages; s++) { PetscCall((isActive ? PetscBTSet : PetscBTClear)(state->active, s + (e + 1) * state->bt_num_stages)); } 4616873511fSToby Isaac } 4626873511fSToby Isaac } 4636873511fSToby Isaac PetscFunctionReturn(PETSC_SUCCESS); 4646873511fSToby Isaac } 4656873511fSToby Isaac 4666873511fSToby Isaac /*@ 4676873511fSToby Isaac PetscLogStateEventGetActive - Check if a logging event is active or inactive during a logging stage. 4686873511fSToby Isaac 4696873511fSToby Isaac Not collective 4706873511fSToby Isaac 4716873511fSToby Isaac Input Parameters: 4726873511fSToby Isaac + state - a `PetscLogState` 4736873511fSToby Isaac . stage - a registered `PetscLogStage`, or `PETSC_DEFAULT` for the current stage 4746873511fSToby Isaac - event - a registered `PetscLogEvent` 4756873511fSToby Isaac 4766873511fSToby Isaac Output Parameter: 4776873511fSToby Isaac . isActive - If `PETSC_FALSE`, log handlers should not be notified of the event's beginning or end. 4786873511fSToby Isaac 4796873511fSToby Isaac Level: developer 4806873511fSToby Isaac 4816873511fSToby Isaac Note: 4826873511fSToby Isaac This is called for the global state (`PetscLogGetState()`) in `PetscLogEventGetActive()`, where it has significance 4836873511fSToby Isaac for what information is sent to log handlers. 4846873511fSToby Isaac 485b665b14eSToby Isaac .seealso: [](ch_profiling), `PetscLogState`, `PetscLogEventGetActive()`, `PetscLogStateGetCurrentStage()`, `PetscLogHandler()` 4866873511fSToby Isaac @*/ 4876873511fSToby Isaac PetscErrorCode PetscLogStateEventGetActive(PetscLogState state, PetscLogStage stage, PetscLogEvent event, PetscBool *isActive) 4886873511fSToby Isaac { 4896873511fSToby Isaac PetscFunctionBegin; 4906873511fSToby Isaac stage = (stage < 0) ? state->current_stage : stage; 4916873511fSToby 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); 4926873511fSToby 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); 4936873511fSToby Isaac *isActive = PetscLogStateStageEventIsActive(state, stage, event) ? PETSC_TRUE : PETSC_FALSE; 4946873511fSToby Isaac PetscFunctionReturn(PETSC_SUCCESS); 4956873511fSToby Isaac } 4966873511fSToby Isaac 4976873511fSToby Isaac /*@ 4986873511fSToby Isaac PetscLogStateGetEventFromName - Get a `PetscLogEvent` from the name it was registered with. 4996873511fSToby Isaac 5006873511fSToby Isaac Not collective 5016873511fSToby Isaac 5026873511fSToby Isaac Input Parameters: 5036873511fSToby Isaac + state - a `PetscLogState` 5046873511fSToby Isaac - name - an event's name 5056873511fSToby Isaac 5066873511fSToby Isaac Output Parameter: 5076873511fSToby Isaac . event - the event's id 5086873511fSToby Isaac 5096873511fSToby Isaac Level: developer 5106873511fSToby Isaac 5116873511fSToby Isaac .seealso: [](ch_profiling), `PetscLogState`, `PetscLogStateEventRegister()`, `PetscLogStateEventGetInfo()` 5126873511fSToby Isaac @*/ 5136873511fSToby Isaac PetscErrorCode PetscLogStateGetEventFromName(PetscLogState state, const char name[], PetscLogEvent *event) 5146873511fSToby Isaac { 5156873511fSToby Isaac PetscFunctionBegin; 5166873511fSToby Isaac PetscCall(PetscLogRegistryGetEventFromName(state->registry, name, event)); 5176873511fSToby Isaac PetscFunctionReturn(PETSC_SUCCESS); 5186873511fSToby Isaac } 5196873511fSToby Isaac 5206873511fSToby Isaac /*@C 5216873511fSToby Isaac PetscLogStateGetStageFromName - Get a `PetscLogStage` from the name it was registered with. 5226873511fSToby Isaac 5236873511fSToby Isaac Not collective 5246873511fSToby Isaac 5256873511fSToby Isaac Input Parameters: 5266873511fSToby Isaac + state - a `PetscLogState` 5276873511fSToby Isaac - name - a stage's name 5286873511fSToby Isaac 5296873511fSToby Isaac Output Parameter: 5306873511fSToby Isaac . stage - the stage's id 5316873511fSToby Isaac 5326873511fSToby Isaac Level: developer 5336873511fSToby Isaac 5346873511fSToby Isaac .seealso: [](ch_profiling), `PetscLogState`, `PetscLogStateStageRegister()`, `PetscLogStateStageGetInfo()` 5356873511fSToby Isaac @*/ 5366873511fSToby Isaac PetscErrorCode PetscLogStateGetStageFromName(PetscLogState state, const char name[], PetscLogStage *stage) 5376873511fSToby Isaac { 5386873511fSToby Isaac PetscFunctionBegin; 5396873511fSToby Isaac PetscCall(PetscLogRegistryGetStageFromName(state->registry, name, stage)); 5406873511fSToby Isaac PetscFunctionReturn(PETSC_SUCCESS); 5416873511fSToby Isaac } 5426873511fSToby Isaac 5436873511fSToby Isaac /*@C 5446873511fSToby Isaac PetscLogStateGetClassFromName - Get a `PetscLogClass` from the name of the class it was registered with. 5456873511fSToby Isaac 5466873511fSToby Isaac Not collective 5476873511fSToby Isaac 5486873511fSToby Isaac Input Parameters: 5496873511fSToby Isaac + state - a `PetscLogState` 5506873511fSToby Isaac - name - the name string of the class 5516873511fSToby Isaac 5526873511fSToby Isaac Output Parameter: 5536873511fSToby Isaac . clss - the classes's logging id 5546873511fSToby Isaac 5556873511fSToby Isaac Level: developer 5566873511fSToby Isaac 5576873511fSToby Isaac .seealso: [](ch_profiling), `PetscLogState`, `PetscLogStateClassRegister()`, `PetscLogStateClassGetInfo()` 5586873511fSToby Isaac @*/ 5596873511fSToby Isaac PetscErrorCode PetscLogStateGetClassFromName(PetscLogState state, const char name[], PetscLogClass *clss) 5606873511fSToby Isaac { 5616873511fSToby Isaac PetscFunctionBegin; 5626873511fSToby Isaac PetscCall(PetscLogRegistryGetClassFromName(state->registry, name, clss)); 5636873511fSToby Isaac PetscFunctionReturn(PETSC_SUCCESS); 5646873511fSToby Isaac } 5656873511fSToby Isaac 5666873511fSToby Isaac /*@ 5676873511fSToby Isaac PetscLogStateGetClassFromClassId - Get a `PetscLogClass` from the `PetscClassId` it was registered with. 5686873511fSToby Isaac 5696873511fSToby Isaac Not collective 5706873511fSToby Isaac 5716873511fSToby Isaac Input Parameters: 5726873511fSToby Isaac + state - a `PetscLogState` 5736873511fSToby Isaac - classid - a `PetscClassId` 5746873511fSToby Isaac 5756873511fSToby Isaac Output Parameter: 5766873511fSToby Isaac . clss - the classes's logging id 5776873511fSToby Isaac 5786873511fSToby Isaac Level: developer 5796873511fSToby Isaac 5806873511fSToby Isaac .seealso: [](ch_profiling), `PetscLogState`, `PetscLogStateClassRegister()`, `PetscLogStateClassGetInfo()` 5816873511fSToby Isaac @*/ 5826873511fSToby Isaac PetscErrorCode PetscLogStateGetClassFromClassId(PetscLogState state, PetscClassId classid, PetscLogClass *clss) 5836873511fSToby Isaac { 5846873511fSToby Isaac PetscFunctionBegin; 5856873511fSToby Isaac PetscCall(PetscLogRegistryGetClassFromClassId(state->registry, classid, clss)); 5866873511fSToby Isaac PetscFunctionReturn(PETSC_SUCCESS); 5876873511fSToby Isaac } 5886873511fSToby Isaac 5896873511fSToby Isaac /*@ 5906873511fSToby Isaac PetscLogStateGetNumEvents - Get the number of registered events in a logging state. 5916873511fSToby Isaac 5926873511fSToby Isaac Not collective 5936873511fSToby Isaac 5946873511fSToby Isaac Input Parameter: 5956873511fSToby Isaac . state - a `PetscLogState` 5966873511fSToby Isaac 5976873511fSToby Isaac Output Parameter: 5986873511fSToby Isaac . numEvents - the number of registered `PetscLogEvent`s 5996873511fSToby Isaac 6006873511fSToby Isaac Level: developer 6016873511fSToby Isaac 6026873511fSToby Isaac .seealso: [](ch_profiling), `PetscLogState`, `PetscLogStateEventRegister()` 6036873511fSToby Isaac @*/ 6046873511fSToby Isaac PetscErrorCode PetscLogStateGetNumEvents(PetscLogState state, PetscInt *numEvents) 6056873511fSToby Isaac { 6066873511fSToby Isaac PetscFunctionBegin; 6076873511fSToby Isaac PetscCall(PetscLogRegistryGetNumEvents(state->registry, numEvents, NULL)); 6086873511fSToby Isaac PetscFunctionReturn(PETSC_SUCCESS); 6096873511fSToby Isaac } 6106873511fSToby Isaac 6116873511fSToby Isaac /*@ 6126873511fSToby Isaac PetscLogStateGetNumStages - Get the number of registered stages in a logging state. 6136873511fSToby Isaac 6146873511fSToby Isaac Not collective 6156873511fSToby Isaac 6166873511fSToby Isaac Input Parameter: 6176873511fSToby Isaac . state - a `PetscLogState` 6186873511fSToby Isaac 6196873511fSToby Isaac Output Parameter: 6206873511fSToby Isaac . numStages - the number of registered `PetscLogStage`s 6216873511fSToby Isaac 6226873511fSToby Isaac Level: developer 6236873511fSToby Isaac 6246873511fSToby Isaac .seealso: [](ch_profiling), `PetscLogState`, `PetscLogStateStageRegister()` 6256873511fSToby Isaac @*/ 6266873511fSToby Isaac PetscErrorCode PetscLogStateGetNumStages(PetscLogState state, PetscInt *numStages) 6276873511fSToby Isaac { 6286873511fSToby Isaac PetscFunctionBegin; 6296873511fSToby Isaac PetscCall(PetscLogRegistryGetNumStages(state->registry, numStages, NULL)); 6306873511fSToby Isaac PetscFunctionReturn(PETSC_SUCCESS); 6316873511fSToby Isaac } 6326873511fSToby Isaac 6336873511fSToby Isaac /*@ 6346873511fSToby Isaac PetscLogStateGetNumClasses - Get the number of registered classes in a logging state. 6356873511fSToby Isaac 6366873511fSToby Isaac Not collective 6376873511fSToby Isaac 6386873511fSToby Isaac Input Parameter: 6396873511fSToby Isaac . state - a `PetscLogState` 6406873511fSToby Isaac 6416873511fSToby Isaac Output Parameter: 6426873511fSToby Isaac . numClasses - the number of registered `PetscLogClass`s 6436873511fSToby Isaac 6446873511fSToby Isaac Level: developer 6456873511fSToby Isaac 6466873511fSToby Isaac .seealso: [](ch_profiling), `PetscLogState`, `PetscLogStateClassRegister()` 6476873511fSToby Isaac @*/ 6486873511fSToby Isaac PetscErrorCode PetscLogStateGetNumClasses(PetscLogState state, PetscInt *numClasses) 6496873511fSToby Isaac { 6506873511fSToby Isaac PetscFunctionBegin; 6516873511fSToby Isaac PetscCall(PetscLogRegistryGetNumClasses(state->registry, numClasses, NULL)); 6526873511fSToby Isaac PetscFunctionReturn(PETSC_SUCCESS); 6536873511fSToby Isaac } 6546873511fSToby Isaac 6556873511fSToby Isaac /*@ 6566873511fSToby Isaac PetscLogStateEventGetInfo - Get the registration information of an event 6576873511fSToby Isaac 6586873511fSToby Isaac Not collective 6596873511fSToby Isaac 6606873511fSToby Isaac Input Parameters: 6616873511fSToby Isaac + state - a `PetscLogState` 6626873511fSToby Isaac - event - a registered `PetscLogEvent` 6636873511fSToby Isaac 6646873511fSToby Isaac Output Parameter: 6656873511fSToby Isaac . info - the `PetscLogEventInfo` of the event will be copied into info 6666873511fSToby Isaac 6676873511fSToby Isaac Level: developer 6686873511fSToby Isaac 6696873511fSToby Isaac .seealso: [](ch_profiling), `PetscLogState`, `PetscLogStateEventRegister()`, `PetscLogStateGetEventFromName()` 6706873511fSToby Isaac @*/ 6716873511fSToby Isaac PetscErrorCode PetscLogStateEventGetInfo(PetscLogState state, PetscLogEvent event, PetscLogEventInfo *info) 6726873511fSToby Isaac { 6736873511fSToby Isaac PetscFunctionBegin; 6746873511fSToby Isaac PetscCall(PetscLogRegistryEventGetInfo(state->registry, event, info)); 6756873511fSToby Isaac PetscFunctionReturn(PETSC_SUCCESS); 6766873511fSToby Isaac } 6776873511fSToby Isaac 6786873511fSToby Isaac /*@ 6796873511fSToby Isaac PetscLogStateStageGetInfo - Get the registration information of an stage 6806873511fSToby Isaac 6816873511fSToby Isaac Not collective 6826873511fSToby Isaac 6836873511fSToby Isaac Input Parameters: 6846873511fSToby Isaac + state - a `PetscLogState` 6856873511fSToby Isaac - stage - a registered `PetscLogStage` 6866873511fSToby Isaac 6876873511fSToby Isaac Output Parameter: 6886873511fSToby Isaac . info - the `PetscLogStageInfo` of the stage will be copied into info 6896873511fSToby Isaac 6906873511fSToby Isaac Level: developer 6916873511fSToby Isaac 6926873511fSToby Isaac .seealso: [](ch_profiling), `PetscLogState`, `PetscLogStateStageRegister()`, `PetscLogStateGetStageFromName()` 6936873511fSToby Isaac @*/ 6946873511fSToby Isaac PetscErrorCode PetscLogStateStageGetInfo(PetscLogState state, PetscLogStage stage, PetscLogStageInfo *info) 6956873511fSToby Isaac { 6966873511fSToby Isaac PetscFunctionBegin; 6976873511fSToby Isaac PetscCall(PetscLogRegistryStageGetInfo(state->registry, stage, info)); 6986873511fSToby Isaac PetscFunctionReturn(PETSC_SUCCESS); 6996873511fSToby Isaac } 7006873511fSToby Isaac 7016873511fSToby Isaac /*@ 702b665b14eSToby Isaac PetscLogStateClassRegister - Register a class to with a `PetscLogState` used by `PetscLogHandler`s. 7036873511fSToby Isaac 7046873511fSToby Isaac Logically collective on `PETSC_COMM_WORLD` 7056873511fSToby Isaac 7066873511fSToby Isaac Input Parameters: 7076873511fSToby Isaac + state - a `PetscLogState` 7086873511fSToby Isaac . name - the name of a class registered with `PetscClassIdRegister()` 7096873511fSToby Isaac - id - the `PetscClassId` obtained from `PetscClassIdRegister()` 7106873511fSToby Isaac 7116873511fSToby Isaac Output Parameter: 7126873511fSToby Isaac . logclass - a `PetscLogClass` for this class with this state 7136873511fSToby Isaac 7146873511fSToby Isaac Level: developer 7156873511fSToby Isaac 7166873511fSToby Isaac Note: 7176873511fSToby Isaac Classes are automatically registered with PETSc's global logging state (`PetscLogGetState()`), so this 7186873511fSToby Isaac is only needed for non-global states. 7196873511fSToby Isaac 7206873511fSToby Isaac .seealso: [](ch_profiling), `PetscLogStateClassGetInfo()` `PetscLogStateGetClassFromName()`, `PetscLogStateGetClassFromClassId()` 7216873511fSToby Isaac @*/ 7226873511fSToby Isaac PetscErrorCode PetscLogStateClassRegister(PetscLogState state, const char name[], PetscClassId id, PetscLogClass *logclass) 7236873511fSToby Isaac { 7246873511fSToby Isaac PetscFunctionBegin; 7256873511fSToby Isaac PetscCall(PetscLogRegistryClassRegister(state->registry, name, id, logclass)); 7266873511fSToby Isaac PetscFunctionReturn(PETSC_SUCCESS); 7276873511fSToby Isaac } 7286873511fSToby Isaac 7296873511fSToby Isaac /*@ 7306873511fSToby Isaac PetscLogStateClassGetInfo - Get the registration information of an class 7316873511fSToby Isaac 7326873511fSToby Isaac Not collective 7336873511fSToby Isaac 7346873511fSToby Isaac Input Parameters: 7356873511fSToby Isaac + state - a `PetscLogState` 7366873511fSToby Isaac - clss - a registered `PetscLogClass` 7376873511fSToby Isaac 7386873511fSToby Isaac Output Parameter: 7396873511fSToby Isaac . info - the `PetscLogClassInfo` of the class will be copied into info 7406873511fSToby Isaac 7416873511fSToby Isaac Level: developer 7426873511fSToby Isaac 7436873511fSToby Isaac .seealso: [](ch_profiling), `PetscLogState`, `PetscLogStateClassRegister()`, `PetscLogStateGetClassFromName()` 7446873511fSToby Isaac @*/ 7456873511fSToby Isaac PetscErrorCode PetscLogStateClassGetInfo(PetscLogState state, PetscLogClass clss, PetscLogClassInfo *info) 7466873511fSToby Isaac { 7476873511fSToby Isaac PetscFunctionBegin; 7486873511fSToby Isaac PetscCall(PetscLogRegistryClassGetInfo(state->registry, clss, info)); 7496873511fSToby Isaac PetscFunctionReturn(PETSC_SUCCESS); 7506873511fSToby Isaac } 751