1 // 2 // Copyright © 2017 Arm Ltd. All rights reserved. 3 // SPDX-License-Identifier: MIT 4 // 5 #include <doctest/doctest.h> 6 7 #include "WallClockTimer.hpp" 8 9 #include <chrono> 10 #include <thread> 11 12 using namespace armnn; 13 14 TEST_SUITE("Instruments") 15 { 16 TEST_CASE("WallClockTimerInMicroseconds") 17 { 18 WallClockTimer wallClockTimer; 19 20 CHECK((std::string(wallClockTimer.GetName()) == std::string("WallClockTimer"))); 21 22 // start the timer 23 wallClockTimer.Start(); 24 25 // wait for 10 microseconds 26 std::this_thread::sleep_for(std::chrono::microseconds(10)); 27 28 // stop the timer 29 wallClockTimer.Stop(); 30 31 CHECK((wallClockTimer.GetMeasurements().front().m_Name == WallClockTimer::WALL_CLOCK_TIME)); 32 33 // check that WallClockTimer measurement should be >= 10 microseconds 34 CHECK_GE(wallClockTimer.GetMeasurements().front().m_Value, std::chrono::microseconds(10).count()); 35 } 36 37 TEST_CASE("WallClockTimerInNanoseconds") 38 { 39 WallClockTimer wallClockTimer; 40 41 CHECK((std::string(wallClockTimer.GetName()) == std::string("WallClockTimer"))); 42 43 // start the timer 44 wallClockTimer.Start(); 45 46 // wait for 500 nanoseconds - 0.5 microseconds 47 std::this_thread::sleep_for(std::chrono::nanoseconds(500)); 48 49 // stop the timer 50 wallClockTimer.Stop(); 51 52 CHECK((wallClockTimer.GetMeasurements().front().m_Name == WallClockTimer::WALL_CLOCK_TIME)); 53 54 // delta is 0.5 microseconds 55 const auto delta = 56 std::chrono::duration_cast<std::chrono::duration<double, std::micro>>(std::chrono::nanoseconds(500)); 57 58 // check that WallClockTimer measurement should be >= 0.5 microseconds 59 CHECK_GE(wallClockTimer.GetMeasurements().front().m_Value, delta.count()); 60 } 61 62 } 63