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*/