source: src/Common/Stats/Time.h@ 30159e5

ADT ast-experimental pthread-emulation
Last change on this file since 30159e5 was 095b99a, checked in by Andrew Beach <ajbeach@…>, 6 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.