xref: /petsc/src/sys/logging/handler/impls/legacy/loglegacy.c (revision 0970d93f389b89d61186faed376e9cc5531f567f)
1 #include <petsc/private/loghandlerimpl.h>
2 
3 typedef struct _n_PetscLogHandler_Legacy *PetscLogHandler_Legacy;
4 struct _n_PetscLogHandler_Legacy {
5   PetscErrorCode (*PetscLogPLB)(PetscLogEvent, int, PetscObject, PetscObject, PetscObject, PetscObject);
6   PetscErrorCode (*PetscLogPLE)(PetscLogEvent, int, PetscObject, PetscObject, PetscObject, PetscObject);
7   PetscErrorCode (*PetscLogPHC)(PetscObject);
8   PetscErrorCode (*PetscLogPHD)(PetscObject);
9 };
10 
11 static PetscErrorCode PetscLogHandlerEventBegin_Legacy(PetscLogHandler handler, PetscLogEvent e, PetscObject o1, PetscObject o2, PetscObject o3, PetscObject o4)
12 {
13   PetscLogHandler_Legacy legacy = (PetscLogHandler_Legacy)handler->data;
14 
15   return (*(legacy->PetscLogPLB))(e, 0, o1, o2, o3, o4);
16 }
17 
18 static PetscErrorCode PetscLogHandlerEventEnd_Legacy(PetscLogHandler handler, PetscLogEvent e, PetscObject o1, PetscObject o2, PetscObject o3, PetscObject o4)
19 {
20   PetscLogHandler_Legacy legacy = (PetscLogHandler_Legacy)handler->data;
21 
22   return (*(legacy->PetscLogPLE))(e, 0, o1, o2, o3, o4);
23 }
24 
25 static PetscErrorCode PetscLogHandlerObjectCreate_Legacy(PetscLogHandler handler, PetscObject o)
26 {
27   PetscLogHandler_Legacy legacy = (PetscLogHandler_Legacy)handler->data;
28 
29   return (*(legacy->PetscLogPHC))(o);
30 }
31 
32 static PetscErrorCode PetscLogHandlerObjectDestroy_Legacy(PetscLogHandler handler, PetscObject o)
33 {
34   PetscLogHandler_Legacy legacy = (PetscLogHandler_Legacy)handler->data;
35 
36   return (*(legacy->PetscLogPHD))(o);
37 }
38 
39 static PetscErrorCode PetcLogHandlerDestroy_Legacy(PetscLogHandler handler)
40 {
41   PetscFunctionBegin;
42   PetscCall(PetscFree(handler->data));
43   PetscFunctionReturn(PETSC_SUCCESS);
44 }
45 
46 /*MC
47   PETSC_LOG_HANDLER_LEGACY - PETSC_LOG_HANDLER_LEGACY = "legacy" -  A
48   `PetscLogHandler` that can be constructed from the callbacks used in
49   `PetscLogSet()`.
50 
51   Level: developer
52 
53 .seealso: [](ch_profiling), `PetscLogHandler`, `PetscLogHandlerCreateLegacy()`
54 M*/
55 
56 PETSC_INTERN PetscErrorCode PetscLogHandlerCreate_Legacy(PetscLogHandler handler)
57 {
58   PetscLogHandler_Legacy legacy;
59 
60   PetscFunctionBegin;
61   PetscCall(PetscNew(&legacy));
62   handler->data         = (void *)legacy;
63   handler->ops->destroy = PetcLogHandlerDestroy_Legacy;
64   PetscFunctionReturn(PETSC_SUCCESS);
65 }
66 
67 /*@C
68   PetscLogHandlerCreateLegacy - Create a `PetscLogHandler` from callbacks matching PETSc's legacy log handler callbacks
69 
70   Collective
71 
72   Input Parameters:
73 + comm        - an MPI communicator
74 . PetscLogPLB - a function to call during `PetscLogHandlerEventBegin()` (or `NULL`)
75 . PetscLogPLE - a function to call during `PetscLogHandlerEventEnd()` (or `NULL`)
76 . PetscLogPHC - a function to call during `PetscLogHandlerObjectCreate()` (or `NULL`)
77 - PetscLogPHD - a function to call during `PetscLogHandlerObjectDestroy()` (or `NULL`)
78 
79   Output Parameter:
80 . handler - a `PetscLogHandler`
81 
82   Calling sequence of `PetscLogPLB`:
83 + e  - a `PetscLogEvent` that is beginning
84 . _i - deprecated, unused
85 . o1 - a `PetscObject` associated with `e` (or `NULL`)
86 . o2 - a `PetscObject` associated with `e` (or `NULL`)
87 . o3 - a `PetscObject` associated with `e` (or `NULL`)
88 - o4 - a `PetscObject` associated with `e` (or `NULL`)
89 
90   Calling sequence of `PetscLogPLE`:
91 + e  - a `PetscLogEvent` that is beginning
92 . _i - deprecated, unused
93 . o1 - a `PetscObject` associated with `e` (or `NULL`)
94 . o2 - a `PetscObject` associated with `e` (or `NULL`)
95 . o3 - a `PetscObject` associated with `e` (or `NULL`)
96 - o4 - a `PetscObject` associated with `e` (or `NULL`)
97 
98   Calling sequence of `PetscLogPHC`:
99 . o - a `PetscObject` that has just been created
100 
101   Calling sequence of `PetscLogPHD`:
102 . o - a `PetscObject` that is about to be destroyed
103 
104   Level: developer
105 
106   Notes:
107   This is for transitioning from the deprecated function `PetscLogSet()` and should not be used in new code.
108 
109   `PetscLogLegacyCallbacksBegin()`, which calls this function, creates and starts (`PetscLogHandlerStart()`) a log handler,
110   should be used in almost all cases.
111 
112 .seealso: [](ch_profiling)
113 @*/
114 PetscErrorCode PetscLogHandlerCreateLegacy(MPI_Comm comm, PetscErrorCode (*PetscLogPLB)(PetscLogEvent e, int _i, PetscObject o1, PetscObject o2, PetscObject o3, PetscObject o4), PetscErrorCode (*PetscLogPLE)(PetscLogEvent e, int _i, PetscObject o1, PetscObject o2, PetscObject o3, PetscObject o4), PetscErrorCode (*PetscLogPHC)(PetscObject o), PetscErrorCode (*PetscLogPHD)(PetscObject o), PetscLogHandler *handler)
115 {
116   PetscLogHandler_Legacy legacy;
117 
118   PetscLogHandler h;
119   PetscFunctionBegin;
120   PetscCall(PetscLogHandlerCreate(comm, handler));
121   h = *handler;
122   PetscCall(PetscLogHandlerSetType(h, PETSC_LOG_HANDLER_LEGACY));
123   legacy = (PetscLogHandler_Legacy)h->data;
124 
125   legacy->PetscLogPLB = PetscLogPLB;
126   legacy->PetscLogPLE = PetscLogPLE;
127   legacy->PetscLogPHC = PetscLogPHC;
128   legacy->PetscLogPHD = PetscLogPHD;
129 
130   h->ops->eventbegin    = PetscLogPLB ? PetscLogHandlerEventBegin_Legacy : NULL;
131   h->ops->eventend      = PetscLogPLE ? PetscLogHandlerEventEnd_Legacy : NULL;
132   h->ops->objectcreate  = PetscLogPHC ? PetscLogHandlerObjectCreate_Legacy : NULL;
133   h->ops->objectdestroy = PetscLogPHD ? PetscLogHandlerObjectDestroy_Legacy : NULL;
134   PetscFunctionReturn(PETSC_SUCCESS);
135 }
136