TPIE

2362a60
stats.h
Go to the documentation of this file.
1 // -*- mode: c++; tab-width: 4; indent-tabs-mode: t; c-file-style: "stroustrup"; -*-
2 // vi:set ts=4 sts=4 sw=4 noet :
3 // Copyright 2008, 2012, The TPIE development team
4 //
5 // This file is part of TPIE.
6 //
7 // TPIE is free software: you can redistribute it and/or modify it under
8 // the terms of the GNU Lesser General Public License as published by the
9 // Free Software Foundation, either version 3 of the License, or (at your
10 // option) any later version.
11 //
12 // TPIE is distributed in the hope that it will be useful, but WITHOUT ANY
13 // WARRANTY; without even the implied warranty of MERCHANTABILITY or
14 // FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
15 // License for more details.
16 //
17 // You should have received a copy of the GNU Lesser General Public License
18 // along with TPIE. If not, see <http://www.gnu.org/licenses/>
19 
23 
24 #ifndef _TPIE_STATS_H
25 #define _TPIE_STATS_H
26 #include <tpie/types.h>
27 #include <chrono>
28 
29 namespace tpie {
30 
34  stream_size_type get_temp_file_usage();
35 
40  void increment_temp_file_usage(stream_offset_type delta);
41 
45  stream_size_type get_bytes_read();
46 
50  stream_size_type get_bytes_written();
51 
56  void increment_bytes_read(stream_size_type delta);
57 
62  void increment_bytes_written(stream_size_type delta);
63 
64  stream_size_type get_user(size_t i);
65  void increment_user(size_t i, stream_size_type delta);
66 
67 class ptime {
68 private:
69  typedef std::chrono::steady_clock clock;
70  typedef std::chrono::time_point<clock> time_point;
71 public:
72  ptime() {}
73 
74  static ptime now() {return clock::now();}
75 
76  static double seconds(const ptime & t1, const ptime & t2) {
77  return std::chrono::duration_cast<std::chrono::duration<double>>(
78  t2.m_ptime - t1.m_ptime).count();
79  }
80 
81 private:
82  time_point m_ptime;
83 
84  ptime(time_point ptime): m_ptime(ptime) {}
85 };
86 
87 class stat_timer {
88 public:
89  stat_timer(size_t i)
90  : i(i)
91  , t1(ptime::now())
92  {
93  }
94 
95  ~stat_timer() {
96  ptime t2 = ptime::now();
97  increment_user(i, (stream_size_type)(ptime::seconds(t1, t2)*1000000));
98  }
99 
100 private:
101  size_t i;
102  ptime t1;
103 };
104 
105 } // tpie namespace
106 #endif //_TPIE_STATS_H
Typesafe bitflags.
void increment_bytes_written(stream_size_type delta)
Inform the stats module that an additional delta bytes have been written to disk. ...
stream_size_type get_bytes_read()
Return the number of bytes read from disk since program start.
stream_size_type get_temp_file_usage()
Return the number of bytes currently being used by temporary files.
void increment_bytes_read(stream_size_type delta)
Inform that stats module that an additional delta bytes have been read from disk. ...
void increment_temp_file_usage(stream_offset_type delta)
Increment (possibly by a negative amount) the number of bytes being used by temporary files...
stream_size_type get_bytes_written()
Return the number of bytes written to disk since program start.