Compute Library
 21.02
WallClockTimer.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2017-2019 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_WALL_CLOCK_TIMER
25 #define ARM_COMPUTE_TEST_WALL_CLOCK_TIMER
26 
27 #include "Instrument.h"
28 
29 #include <chrono>
30 
31 namespace arm_compute
32 {
33 namespace test
34 {
35 namespace framework
36 {
37 /** Implementation of an instrument to measure elapsed wall-clock time in milliseconds. */
38 template <bool output_timestamps>
39 class WallClock : public Instrument
40 {
41 public:
42  /** Construct a Wall clock timer.
43  *
44  * @param[in] scale_factor Measurement scale factor.
45  */
46  WallClock(ScaleFactor scale_factor)
47  {
48  switch(scale_factor)
49  {
50  case ScaleFactor::NONE:
51  _scale_factor = 1.f;
52  _unit = "us";
53  break;
55  _scale_factor = 1000.f;
56  _unit = "ms";
57  break;
59  _scale_factor = 1000000.f;
60  _unit = "s";
61  break;
62  default:
63  ARM_COMPUTE_ERROR("Invalid scale");
64  }
65  };
66 
67  std::string id() const override;
68  void start() override;
69  void stop() override;
70  MeasurementsMap measurements() const override;
71 
72 private:
73  std::chrono::system_clock::time_point _start{};
74  std::chrono::system_clock::time_point _stop{};
75  float _scale_factor{};
76 };
77 
80 } // namespace framework
81 } // namespace test
82 } // namespace arm_compute
83 #endif /* ARM_COMPUTE_TEST_WALL_CLOCK_TIMER */
#define ARM_COMPUTE_ERROR(msg)
Print the given message then throw an std::runtime_error.
Definition: Error.h:352
Implementation of an instrument to measure elapsed wall-clock time in milliseconds.
Copyright (c) 2017-2021 Arm Limited.
void stop() override
Stop measuring.
Interface for classes that can be used to measure performance.
Definition: Instrument.h:50
WallClock(ScaleFactor scale_factor)
Construct a Wall clock timer.
void start() override
Start measuring.
std::map< std::string, Measurement > MeasurementsMap
Map of measurements.
Definition: Instrument.h:109
std::string id() const override
Identifier for the instrument.
MeasurementsMap measurements() const override
Return the latest measurements.