source: src/Common/Stats/Time.h @ 0d070ca

ADTarm-ehast-experimentalenumforall-pointer-decayjacob/cs343-translationnew-astnew-ast-unique-exprpthread-emulationqualifiedEnum
Last change on this file since 0d070ca was 095b99a, checked in by Andrew Beach <ajbeach@…>, 5 years ago

Added TimeCall? as a more flexible alternative to TimeBlock?. TimeBlock? remains for when you create a block like lambda.

  • Property mode set to 100644
File size: 1.7 KB
RevLine 
[1cb7fab2]1//
2// Cforall Version 1.0.0 Copyright (C) 2019 University of Waterloo
3//
4// The contents of this file are covered under the licence agreement in the
5// file "LICENCE" distributed with Cforall.
6//
7// Time.h --
8//
9// Author           : Thierry Delisle
10// Created On       : Fri Mar 01 15:14:11 2019
[095b99a]11// Last Modified By : Andrew Beach
[1cb7fab2]12// Last Modified On :
13// Update Count     :
14//
15
16#pragma once
17
18#include "Common/Stats/Base.h"
19
[4f97937]20#if defined( NO_STATISTICS )
21        #define NO_TIME_STATISTICS
22#endif
23
[1cb7fab2]24namespace Stats {
25        namespace Time {
[4f97937]26#               if defined(NO_TIME_STATISTICS)
[79eaeb7]27                        inline void StartGlobal() {}
28
[4f97937]29                        inline void StartBlock(const char * const) {}
30                        inline void StopBlock() {}
31
32                        inline void print() {}
33
34                        struct BlockGuard {
35                                BlockGuard(const char * const) {}
36                                ~BlockGuard() {}
37                        };
38
39                        template<typename func_t>
[c884f2d]40                        inline void TimeBlock(const char *, func_t f) {
41                                f();
42                        }
[095b99a]43
44                        template<typename ret_t = void, typename func_t, typename... arg_t>
45                        inline ret_t TimeCall(
46                                        const char *, func_t func, arg_t&&... arg) {
47                                return func(std::forward<arg_t>(arg)...);
48                        }
[4f97937]49#               else
[79eaeb7]50                        void StartGlobal();
51
[4f97937]52                        void StartBlock(const char * const name);
53                        void StopBlock();
[1cb7fab2]54
[4f97937]55                        void print();
[1cb7fab2]56
[4f97937]57                        struct BlockGuard {
58                                BlockGuard(const char * const name ) { StartBlock(name); }
59                                ~BlockGuard() { StopBlock(); }
60                        };
[1cb7fab2]61
[4f97937]62                        template<typename func_t>
[c884f2d]63                        inline void TimeBlock(const char * name, func_t func) {
[4f97937]64                                BlockGuard guard(name);
65                                func();
66                        }
[095b99a]67
68                        template<typename ret_t = void, typename func_t, typename... arg_t>
69                        inline ret_t TimeCall(
70                                        const char * name, func_t func, arg_t&&... arg) {
71                                BlockGuard guard(name);
72                                return func(std::forward<arg_t>(arg)...);
73                        }
[4f97937]74#               endif
[1cb7fab2]75        }
[095b99a]76}
Note: See TracBrowser for help on using the repository browser.