Loading [MathJax]/extensions/tex2jax.js
ug4
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
profiler_c.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 2013-2015: G-CSC, Goethe University Frankfurt
3 * Author: Martin Rupp
4 *
5 * This file is part of UG4.
6 *
7 * UG4 is free software: you can redistribute it and/or modify it under the
8 * terms of the GNU Lesser General Public License version 3 (as published by the
9 * Free Software Foundation) with the following additional attribution
10 * requirements (according to LGPL/GPL v3 §7):
11 *
12 * (1) The following notice must be displayed in the Appropriate Legal Notices
13 * of covered and combined works: "Based on UG4 (www.ug4.org/license)".
14 *
15 * (2) The following notice must be displayed at a prominent place in the
16 * terminal output of covered works: "Based on UG4 (www.ug4.org/license)".
17 *
18 * (3) The following bibliography is recommended for citation and must be
19 * preserved in all covered files:
20 * "Reiter, S., Vogel, A., Heppner, I., Rupp, M., and Wittum, G. A massively
21 * parallel geometric multigrid solver on hierarchically distributed grids.
22 * Computing and visualization in science 16, 4 (2013), 151-164"
23 * "Vogel, A., Reiter, S., Rupp, M., Nägel, A., and Wittum, G. UG4 -- a novel
24 * flexible software system for simulating pde based models on high performance
25 * computers. Computing and visualization in science 16, 4 (2013), 165-179"
26 *
27 * This program is distributed in the hope that it will be useful,
28 * but WITHOUT ANY WARRANTY; without even the implied warranty of
29 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
30 * GNU Lesser General Public License for more details.
31 */
32
33
34#ifndef __H__UG__COMMON__PROFILER_C__
35#define __H__UG__COMMON__PROFILER_C__
36
37#ifdef __H__UG__COMMON__PROFILER__
38#error "can't use profiler_c.h and profiler.h"
39#endif
40
41#ifdef UG_PROFILER
42
43
44#ifdef UG_PROFILER_SHINY
45
46// this is just a wrapper-include for the shiny-profiler by Aidin Abedi
47 #define SHINY_PROFILER TRUE
48 #include "src/ShinyManager.h"
49 #include "src/ShinyNode.h"
50
51
52 #define C_PROFILE_BEGIN_PARAMS(id, name, group, file, line) \
53 \
54 static Shiny::ProfileZone __ShinyZone_##id = { \
55 NULL, Shiny::ProfileZone::STATE_HIDDEN, name, \
56 group, file, line, \
57 { { 0, 0 }, { 0, 0 }, { 0, 0 } } \
58 }; \
59 { \
60 static Shiny::ProfileNodeCache cache = \
61 &Shiny::ProfileNode::_dummy; \
62 \
63 Shiny::ProfileManager::instance._beginNode(&cache, &__ShinyZone_##id);\
64 }
65
66
67 #define C_PROFILE_BEGIN_GROUP(name, group) \
68 C_PROFILE_BEGIN_PARAMS(apn_##name, #name, group, __FILE__, __LINE__)
69
70 #define C_PROFILE_BEGIN(name) \
71 C_PROFILE_BEGIN_GROUP(name, NULL)
72
73 #define C_PROFILE_END() \
74 Shiny::ProfileManager::instance._endCurNode()
75
76 #define C_PROFILE_FUNC_BEGIN() \
77 C_PROFILE_BEGIN(__FUNCTION__)
78 #define PROFILE_FUNC_GROUP_BEGIN(groups) \
79 C_PROFILE_BEGIN_GROUP(__FUNCTION__, groups)
80
81#else
82#error "not defined for C"
83#endif // UG_PROFILER_SHINY
84
85#else
86 #define C_PROFILE_BEGIN(name)
87 #define C_PROFILE_BEGIN_GROUP(name, groups)
88 #define C_PROFILE_END()
89 #define C_PROFILE_FUNC_BEGIN()
90 #define C_PROFILE_FUNC_GROUP_BEGIN(groups)
91
92#endif // UG_PROFILER
93
94#endif // __H__UG__COMMON__PROFILER__