Actual source code: lognested.h
1: #pragma once
3: #include <petsc/private/loghandlerimpl.h>
4: #include <petsc/private/logimpl.h>
5: #include <../src/sys/logging/handler/impls/default/logdefault.h>
6: #include <petsc/private/hashmap.h>
8: typedef int NestedId;
10: static inline PETSC_UNUSED NestedId NestedIdFromEvent(PetscLogEvent e)
11: {
12: return e;
13: }
15: static inline PETSC_UNUSED PetscLogEvent NestedIdToEvent(NestedId e)
16: {
17: return e;
18: }
20: static inline PETSC_UNUSED NestedId NestedIdFromStage(PetscLogStage s)
21: {
22: return -(s + 2);
23: }
25: static inline PETSC_UNUSED PetscLogStage NestedIdToStage(NestedId s)
26: {
27: return -(s + 2);
28: }
30: typedef struct _n_NestedIdPair NestedIdPair;
31: struct _n_NestedIdPair {
32: PetscLogEvent root;
33: NestedId leaf;
34: };
36: #define NestedIdPairHash(key) PetscHashCombine(PetscHash_UInt32((PetscHash32_t)((key).root)), PetscHash_UInt32((PetscHash32_t)((key).leaf)))
37: #define NestedIdPairEqual(k1, k2) (((k1).root == (k2).root) && ((k1).leaf == (k2).leaf))
39: PETSC_HASH_MAP(NestedHash, NestedIdPair, PetscLogEvent, NestedIdPairHash, NestedIdPairEqual, -1)
41: typedef struct _n_PetscLogHandler_Nested *PetscLogHandler_Nested;
42: struct _n_PetscLogHandler_Nested {
43: PetscLogState state;
44: PetscLogHandler handler;
45: PetscNestedHash pair_map;
46: PetscIntStack nested_stack; // stack of nested ids
47: PetscIntStack orig_stack; // stack of the original ids
48: PetscClassId nested_stage_id;
49: PetscLogDouble threshold;
50: };
52: typedef struct {
53: const char *name;
54: PetscInt id;
55: PetscInt parent;
56: PetscInt num_descendants;
57: } PetscNestedEventNode;
59: typedef struct {
60: MPI_Comm comm;
61: PetscLogGlobalNames global_events;
62: PetscNestedEventNode *nodes;
63: PetscEventPerfInfo *perf;
64: } PetscNestedEventTree;
66: typedef enum {
67: PETSC_LOG_NESTED_XML,
68: PETSC_LOG_NESTED_FLAMEGRAPH
69: } PetscLogNestedType;
71: PETSC_INTERN PetscErrorCode PetscLogHandlerView_Nested_XML(PetscLogHandler_Nested, PetscNestedEventTree *, PetscViewer);
72: PETSC_INTERN PetscErrorCode PetscLogHandlerView_Nested_Flamegraph(PetscLogHandler_Nested, PetscNestedEventTree *, PetscViewer);