Actual source code: ex68.c
1: const char help[] = "Test PetscLogEventsPause() and PetscLogEventsUnpause()";
3: #include <petscsys.h>
5: int main(int argc, char **argv)
6: {
7: PetscLogStage main_stage, unrelated_stage;
8: PetscLogEvent runtime_event, unrelated_event;
9: PetscLogHandler default_handler;
10: PetscClassId runtime_classid, unrelated_classid;
11: PetscBool main_visible = PETSC_FALSE;
12: PetscBool unrelated_visible = PETSC_FALSE;
13: PetscBool get_main_visible;
14: PetscBool get_unrelated_visible;
15: PetscBool is_active;
17: PetscCall(PetscInitialize(&argc, &argv, NULL, help));
18: PetscCall(PetscLogIsActive(&is_active));
19: PetscCheck(is_active, PETSC_COMM_WORLD, PETSC_ERR_SUP, "Logging must be active for this test");
20: PetscCall(PetscLogActions(PETSC_FALSE));
21: PetscCall(PetscLogObjects(PETSC_FALSE));
23: PetscOptionsBegin(PETSC_COMM_WORLD, NULL, help, NULL);
24: PetscCall(PetscOptionsBool("-main_visible", "The logging visibility of the main stage", NULL, main_visible, &main_visible, NULL));
25: PetscCall(PetscOptionsBool("-unrelated_visible", "The logging visibility of the unrelated stage", NULL, unrelated_visible, &unrelated_visible, NULL));
26: PetscOptionsEnd();
28: /* This test simulates a program with unrelated logging stages and events
29: that has to "stop the world" to lazily initialize a runtime.
31: - Pausing events should send the log data for the runtime initialization
32: to the Main Stage
34: - Turning the Main Stage invisible should hide it from -log_view
36: So the runtime initialization should be more or less missing from -log_view. */
38: PetscCall(PetscClassIdRegister("External runtime", &runtime_classid));
39: PetscCall(PetscLogEventRegister("External runtime initialization", runtime_classid, &runtime_event));
41: PetscCall(PetscClassIdRegister("Unrelated class", &unrelated_classid));
42: PetscCall(PetscLogEventRegister("Unrelated event", unrelated_classid, &unrelated_event));
43: PetscCall(PetscLogStageRegister("Unrelated stage", &unrelated_stage));
44: PetscCall(PetscLogStageGetId("Main Stage", &main_stage));
45: PetscCall(PetscLogStageSetVisible(main_stage, main_visible));
46: PetscCall(PetscLogStageSetVisible(unrelated_stage, unrelated_visible));
47: PetscCall(PetscLogGetDefaultHandler(&default_handler));
48: if (default_handler) {
49: PetscCall(PetscLogStageGetVisible(main_stage, &get_main_visible));
50: PetscCall(PetscLogStageGetVisible(unrelated_stage, &get_unrelated_visible));
51: PetscCheck(main_visible == get_main_visible, PETSC_COMM_SELF, PETSC_ERR_PLIB, "Get/Set stage visibility discrepancy");
52: PetscCheck(unrelated_visible == get_unrelated_visible, PETSC_COMM_SELF, PETSC_ERR_PLIB, "Get/Set stage visibility discrepancy");
53: }
55: PetscCall(PetscLogStagePush(unrelated_stage));
56: PetscCall(PetscLogEventBegin(unrelated_event, NULL, NULL, NULL, NULL));
57: PetscCall(PetscSleep(0.2));
58: PetscCall(PetscLogEventsPause());
59: PetscCall(PetscLogEventBegin(runtime_event, NULL, NULL, NULL, NULL));
60: PetscCall(PetscSleep(0.2));
61: PetscCall(PetscLogEventEnd(runtime_event, NULL, NULL, NULL, NULL));
62: PetscCall(PetscLogEventsResume());
63: PetscCall(PetscSleep(0.2));
64: PetscCall(PetscLogEventEnd(unrelated_event, NULL, NULL, NULL, NULL));
65: PetscCall(PetscLogStagePop());
66: { // test of PetscLogStageGetPerfInfo()
67: PetscLogHandler handler;
69: PetscCall(PetscLogGetDefaultHandler(&handler));
70: if (handler) {
71: PetscEventPerfInfo stage_info;
73: PetscCall(PetscLogStageGetPerfInfo(unrelated_stage, &stage_info));
74: (void)stage_info;
75: }
76: }
77: PetscCall(PetscFinalize());
78: return 0;
79: }
81: /*TEST
83: # main stage invisible, "External runtime initialization" shouldn't appear in the log
84: test:
85: requires: defined(PETSC_USE_LOG)
86: suffix: 0
87: args: -log_view -unrelated_visible
88: filter: grep -o "\\(External runtime initialization\\|Unrelated event\\)"
90: # unrelated stage invisible, "Unrelated event" shouldn't appear in the log
91: test:
92: requires: defined(PETSC_USE_LOG)
93: suffix: 1
94: args: -log_view -main_visible
95: filter: grep -o "\\(External runtime initialization\\|Unrelated event\\)"
97: TEST*/