xref: /aosp_15_r20/external/angle/util/Timer.cpp (revision 8975f5c5ed3d1c378011245431ada316dfb6f244)
1*8975f5c5SAndroid Build Coastguard Worker //
2*8975f5c5SAndroid Build Coastguard Worker // Copyright 2019 The ANGLE Project Authors. All rights reserved.
3*8975f5c5SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
4*8975f5c5SAndroid Build Coastguard Worker // found in the LICENSE file.
5*8975f5c5SAndroid Build Coastguard Worker //
6*8975f5c5SAndroid Build Coastguard Worker // Timer.cpp: Implementation of a high precision timer class.
7*8975f5c5SAndroid Build Coastguard Worker //
8*8975f5c5SAndroid Build Coastguard Worker 
9*8975f5c5SAndroid Build Coastguard Worker #include "util/Timer.h"
10*8975f5c5SAndroid Build Coastguard Worker 
11*8975f5c5SAndroid Build Coastguard Worker #include "common/system_utils.h"
12*8975f5c5SAndroid Build Coastguard Worker 
Timer()13*8975f5c5SAndroid Build Coastguard Worker Timer::Timer() : mRunning(false), mStartTime(0), mStopTime(0) {}
14*8975f5c5SAndroid Build Coastguard Worker 
start()15*8975f5c5SAndroid Build Coastguard Worker void Timer::start()
16*8975f5c5SAndroid Build Coastguard Worker {
17*8975f5c5SAndroid Build Coastguard Worker     mStartTime    = angle::GetCurrentSystemTime();
18*8975f5c5SAndroid Build Coastguard Worker     mStartCpuTime = angle::GetCurrentProcessCpuTime();
19*8975f5c5SAndroid Build Coastguard Worker     mRunning      = true;
20*8975f5c5SAndroid Build Coastguard Worker }
21*8975f5c5SAndroid Build Coastguard Worker 
stop()22*8975f5c5SAndroid Build Coastguard Worker void Timer::stop()
23*8975f5c5SAndroid Build Coastguard Worker {
24*8975f5c5SAndroid Build Coastguard Worker     mStopTime    = angle::GetCurrentSystemTime();
25*8975f5c5SAndroid Build Coastguard Worker     mStopCpuTime = angle::GetCurrentProcessCpuTime();
26*8975f5c5SAndroid Build Coastguard Worker     mRunning     = false;
27*8975f5c5SAndroid Build Coastguard Worker }
28*8975f5c5SAndroid Build Coastguard Worker 
getElapsedWallClockTime() const29*8975f5c5SAndroid Build Coastguard Worker double Timer::getElapsedWallClockTime() const
30*8975f5c5SAndroid Build Coastguard Worker {
31*8975f5c5SAndroid Build Coastguard Worker     double endTime;
32*8975f5c5SAndroid Build Coastguard Worker     if (mRunning)
33*8975f5c5SAndroid Build Coastguard Worker     {
34*8975f5c5SAndroid Build Coastguard Worker         endTime = angle::GetCurrentSystemTime();
35*8975f5c5SAndroid Build Coastguard Worker     }
36*8975f5c5SAndroid Build Coastguard Worker     else
37*8975f5c5SAndroid Build Coastguard Worker     {
38*8975f5c5SAndroid Build Coastguard Worker         endTime = mStopTime;
39*8975f5c5SAndroid Build Coastguard Worker     }
40*8975f5c5SAndroid Build Coastguard Worker 
41*8975f5c5SAndroid Build Coastguard Worker     return endTime - mStartTime;
42*8975f5c5SAndroid Build Coastguard Worker }
43*8975f5c5SAndroid Build Coastguard Worker 
getElapsedCpuTime() const44*8975f5c5SAndroid Build Coastguard Worker double Timer::getElapsedCpuTime() const
45*8975f5c5SAndroid Build Coastguard Worker {
46*8975f5c5SAndroid Build Coastguard Worker     double endTime;
47*8975f5c5SAndroid Build Coastguard Worker     if (mRunning)
48*8975f5c5SAndroid Build Coastguard Worker     {
49*8975f5c5SAndroid Build Coastguard Worker         endTime = angle::GetCurrentProcessCpuTime();
50*8975f5c5SAndroid Build Coastguard Worker     }
51*8975f5c5SAndroid Build Coastguard Worker     else
52*8975f5c5SAndroid Build Coastguard Worker     {
53*8975f5c5SAndroid Build Coastguard Worker         endTime = mStopCpuTime;
54*8975f5c5SAndroid Build Coastguard Worker     }
55*8975f5c5SAndroid Build Coastguard Worker 
56*8975f5c5SAndroid Build Coastguard Worker     return endTime - mStartCpuTime;
57*8975f5c5SAndroid Build Coastguard Worker }
58