Compute Library
 21.05
Instrument.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2017-2020 Arm Limited.
3  *
4  * SPDX-License-Identifier: MIT
5  *
6  * Permission is hereby granted, free of charge, to any person obtaining a copy
7  * of this software and associated documentation files (the "Software"), to
8  * deal in the Software without restriction, including without limitation the
9  * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
10  * sell copies of the Software, and to permit persons to whom the Software is
11  * furnished to do so, subject to the following conditions:
12  *
13  * The above copyright notice and this permission notice shall be included in all
14  * copies or substantial portions of the Software.
15  *
16  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22  * SOFTWARE.
23  */
24 #ifndef ARM_COMPUTE_TEST_INSTRUMENT
25 #define ARM_COMPUTE_TEST_INSTRUMENT
26 
27 #include "../Utils.h"
28 #include "Measurement.h"
29 
30 #include <map>
31 #include <memory>
32 #include <string>
33 
34 namespace arm_compute
35 {
36 namespace test
37 {
38 namespace framework
39 {
40 enum class ScaleFactor : unsigned int
41 {
42  NONE, /* Default scale */
43  SCALE_1K, /* 1000 */
44  SCALE_1M, /* 1 000 000 */
45  TIME_US, /* Microseconds */
46  TIME_MS, /* Milliseconds */
47  TIME_S, /* Seconds */
48 };
49 /** Interface for classes that can be used to measure performance. */
51 {
52 public:
53  /** Helper function to create an instrument of the given type.
54  *
55  * @return Instance of an instrument of the given type.
56  */
57  template <typename T, ScaleFactor scale>
58  static std::unique_ptr<Instrument> make_instrument();
59 
60  /** Default constructor. */
61  Instrument() = default;
62 
63  /** Allow instances of this class to be copy constructed */
64  Instrument(const Instrument &) = default;
65  /** Allow instances of this class to be move constructed */
66  Instrument(Instrument &&) = default;
67  /** Allow instances of this class to be copied */
68  Instrument &operator=(const Instrument &) = default;
69  /** Allow instances of this class to be moved */
70  Instrument &operator=(Instrument &&) = default;
71  /** Default destructor. */
72  virtual ~Instrument() = default;
73 
74  /** Identifier for the instrument */
75  virtual std::string id() const = 0;
76 
77  /** Start of the test
78  *
79  * Called before the test set up starts
80  */
81  virtual void test_start()
82  {
83  }
84 
85  /** Start measuring.
86  *
87  * Called just before the run of the test starts
88  */
89  virtual void start()
90  {
91  }
92 
93  /** Stop measuring.
94  *
95  * Called just after the run of the test ends
96  */
97  virtual void stop()
98  {
99  }
100 
101  /** End of the test
102  *
103  * Called after the test teardown ended
104  */
105  virtual void test_stop()
106  {
107  }
108  /** Map of measurements */
109  using MeasurementsMap = std::map<std::string, Measurement>;
110 
111  /** Return the latest measurements.
112  *
113  * @return the latest measurements.
114  */
116  {
117  return MeasurementsMap();
118  }
119 
120  /** Return the latest test measurements.
121  *
122  * @return the latest test measurements.
123  */
125  {
126  return MeasurementsMap();
127  }
128 
129 protected:
130  std::string _unit{};
131 };
132 
133 template <typename T, ScaleFactor scale>
134 inline std::unique_ptr<Instrument> Instrument::make_instrument()
135 {
136  return std::make_unique<T>(scale);
137 }
138 
139 } // namespace framework
140 } // namespace test
141 } // namespace arm_compute
142 #endif /* ARM_COMPUTE_TEST_INSTRUMENT */
virtual void test_start()
Start of the test.
Definition: Instrument.h:81
Copyright (c) 2017-2021 Arm Limited.
Instrument & operator=(const Instrument &)=default
Allow instances of this class to be copied.
Instrument()=default
Default constructor.
virtual void test_stop()
End of the test.
Definition: Instrument.h:105
virtual MeasurementsMap measurements() const
Return the latest measurements.
Definition: Instrument.h:115
Interface for classes that can be used to measure performance.
Definition: Instrument.h:50
virtual void start()
Start measuring.
Definition: Instrument.h:89
virtual std::string id() const =0
Identifier for the instrument.
virtual void stop()
Stop measuring.
Definition: Instrument.h:97
virtual MeasurementsMap test_measurements() const
Return the latest test measurements.
Definition: Instrument.h:124
static std::unique_ptr< Instrument > make_instrument()
Helper function to create an instrument of the given type.
Definition: Instrument.h:134
std::map< std::string, Measurement > MeasurementsMap
Map of measurements.
Definition: Instrument.h:109
virtual ~Instrument()=default
Default destructor.