CG-Project2
Loading...
Searching...
No Matches
Profiler.hpp
1#pragma once
2
3#include <ctime>
4#include <string>
5
6enum ProfileFilter {
7 PROFILE_WALL,
8 PROFILE_CPU,
9 PROFILE_ALL,
10};
11
12class Profiler {
13public:
14 virtual void start() {}
15
16 virtual void end() {}
17
18 void wallDump() const;
19
20 void cpuDump() const;
21
22 void dump(const std::string &msg = "") const;
23
24 void dump(double& wall, double& cpu) const;
25
26 std::string getProfilerFilter() const;
27 inline void setProfilerFilter(const ProfileFilter &filter) { this->m_profilerFilter = filter; }
28
29 Profiler(const ProfileFilter &filter = PROFILE_ALL) :
30 m_profilerFilter(filter) {
31 }
32
33 virtual ~Profiler() = default;
34
35protected:
36 ProfileFilter m_profilerFilter{PROFILE_ALL};
37
38 double m_wall{};
39 double m_cpu{};
40};
41
42#ifdef _WIN32
43
44class WProfiler : public Profiler {
45public:
46 WProfiler(const ProfileFilter &filter = PROFILE_ALL) :
47 Profiler(filter) {
48 }
49
50 virtual ~WProfiler() override = default;
51
52 void start() override;
53 void end() override;
54
55 inline double getLastWall() const { return this->m_wall; }
56 inline double getLastCPU() const { return this->m_cpu; }
57
58private:
59 std::time_t m_start{};
60 std::time_t m_end{};
61};
62
63#else
64
65class LinuxProfiler : public Profiler {
66public:
67 LinuxProfiler(const ProfileFilter &filter = PROFILE_ALL) :
68 Profiler(filter) {
69 }
70
71 virtual ~LinuxProfiler() override = default;
72
73 void start() override;
74 void end() override;
75
76 inline double getLastWall() const { return this->m_wall; }
77 inline double getLastCPU() const { return this->m_cpu; }
78
79private:
80 std::timespec m_wallBegin{};
81 std::timespec m_wallEnd{};
82 std::timespec m_cpuBegin{};
83 std::timespec m_cpuEnd{};
84};
85#endif
86
87
Definition Profiler.hpp:12