aboutsummaryrefslogtreecommitdiff
path: root/src/armnn/WallClockTimer.cpp
blob: 911b0147e011d09ebacbf1d0af8a534c19bf5f7d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
//
// Copyright © 2017 Arm Ltd. All rights reserved.
// SPDX-License-Identifier: MIT
//

#include "WallClockTimer.hpp"
#include "armnn/Exceptions.hpp"

namespace armnn
{

const std::string WallClockTimer::WALL_CLOCK_TIME      ("Wall clock time");
const std::string WallClockTimer::WALL_CLOCK_TIME_START(WallClockTimer::WALL_CLOCK_TIME + " (Start)");
const std::string WallClockTimer::WALL_CLOCK_TIME_STOP (WallClockTimer::WALL_CLOCK_TIME + " (Stop)");

const char* WallClockTimer::GetName() const
{
    return "WallClockTimer";
}

void WallClockTimer::Start()
{
    m_Start = clock::now();
}

void WallClockTimer::Stop()
{
    m_Stop = clock::now();
}

void WallClockTimer::SetScaleFactor(Measurement::Unit measurementUnit)
{
    switch(measurementUnit)
    {
        case Measurement::TIME_MS:
            m_ScaleFactor = 1.f;
            break;
        case Measurement::TIME_US:
            m_ScaleFactor = 1000.f;
            break;
        case Measurement::TIME_NS:
            m_ScaleFactor = 1000000.f;
            break;
        default:
            throw InvalidArgumentException("Invalid scale used");
    }
    m_Unit = measurementUnit;
}

std::vector<Measurement> WallClockTimer::GetMeasurements() const
{
    const auto delta       = std::chrono::duration<double, std::milli>(m_Stop - m_Start);
    const auto startTimeMs = std::chrono::duration<double, std::milli>(m_Start.time_since_epoch());
    const auto stopTimeMs  = std::chrono::duration<double, std::milli>(m_Stop.time_since_epoch());

    return { { WALL_CLOCK_TIME,       delta.count() * m_ScaleFactor,       m_Unit },
             { WALL_CLOCK_TIME_START, startTimeMs.count() * m_ScaleFactor, m_Unit },
             { WALL_CLOCK_TIME_STOP,  stopTimeMs.count() * m_ScaleFactor,  m_Unit } };
}

} //namespace armnn