1*9880d681SAndroid Build Coastguard Worker //===- unittests/TimerTest.cpp - Timer tests ------------------------------===// 2*9880d681SAndroid Build Coastguard Worker // 3*9880d681SAndroid Build Coastguard Worker // The LLVM Compiler Infrastructure 4*9880d681SAndroid Build Coastguard Worker // 5*9880d681SAndroid Build Coastguard Worker // This file is distributed under the University of Illinois Open Source 6*9880d681SAndroid Build Coastguard Worker // License. See LICENSE.TXT for details. 7*9880d681SAndroid Build Coastguard Worker // 8*9880d681SAndroid Build Coastguard Worker //===----------------------------------------------------------------------===// 9*9880d681SAndroid Build Coastguard Worker 10*9880d681SAndroid Build Coastguard Worker #include "llvm/Support/Timer.h" 11*9880d681SAndroid Build Coastguard Worker #include "gtest/gtest.h" 12*9880d681SAndroid Build Coastguard Worker 13*9880d681SAndroid Build Coastguard Worker #if LLVM_ON_WIN32 14*9880d681SAndroid Build Coastguard Worker #include <windows.h> 15*9880d681SAndroid Build Coastguard Worker #else 16*9880d681SAndroid Build Coastguard Worker #include <time.h> 17*9880d681SAndroid Build Coastguard Worker #endif 18*9880d681SAndroid Build Coastguard Worker 19*9880d681SAndroid Build Coastguard Worker using namespace llvm; 20*9880d681SAndroid Build Coastguard Worker 21*9880d681SAndroid Build Coastguard Worker namespace { 22*9880d681SAndroid Build Coastguard Worker 23*9880d681SAndroid Build Coastguard Worker // FIXME: Put this somewhere in Support, it's also used in LockFileManager. SleepMS()24*9880d681SAndroid Build Coastguard Workervoid SleepMS() { 25*9880d681SAndroid Build Coastguard Worker #if LLVM_ON_WIN32 26*9880d681SAndroid Build Coastguard Worker Sleep(1); 27*9880d681SAndroid Build Coastguard Worker #else 28*9880d681SAndroid Build Coastguard Worker struct timespec Interval; 29*9880d681SAndroid Build Coastguard Worker Interval.tv_sec = 0; 30*9880d681SAndroid Build Coastguard Worker Interval.tv_nsec = 1000000; 31*9880d681SAndroid Build Coastguard Worker nanosleep(&Interval, nullptr); 32*9880d681SAndroid Build Coastguard Worker #endif 33*9880d681SAndroid Build Coastguard Worker } 34*9880d681SAndroid Build Coastguard Worker TEST(Timer,Additivity)35*9880d681SAndroid Build Coastguard WorkerTEST(Timer, Additivity) { 36*9880d681SAndroid Build Coastguard Worker Timer T1("T1"); 37*9880d681SAndroid Build Coastguard Worker 38*9880d681SAndroid Build Coastguard Worker EXPECT_TRUE(T1.isInitialized()); 39*9880d681SAndroid Build Coastguard Worker 40*9880d681SAndroid Build Coastguard Worker T1.startTimer(); 41*9880d681SAndroid Build Coastguard Worker T1.stopTimer(); 42*9880d681SAndroid Build Coastguard Worker auto TR1 = T1.getTotalTime(); 43*9880d681SAndroid Build Coastguard Worker 44*9880d681SAndroid Build Coastguard Worker T1.startTimer(); 45*9880d681SAndroid Build Coastguard Worker SleepMS(); 46*9880d681SAndroid Build Coastguard Worker T1.stopTimer(); 47*9880d681SAndroid Build Coastguard Worker auto TR2 = T1.getTotalTime(); 48*9880d681SAndroid Build Coastguard Worker 49*9880d681SAndroid Build Coastguard Worker EXPECT_TRUE(TR1 < TR2); 50*9880d681SAndroid Build Coastguard Worker } 51*9880d681SAndroid Build Coastguard Worker TEST(Timer,CheckIfTriggered)52*9880d681SAndroid Build Coastguard WorkerTEST(Timer, CheckIfTriggered) { 53*9880d681SAndroid Build Coastguard Worker Timer T1("T1"); 54*9880d681SAndroid Build Coastguard Worker 55*9880d681SAndroid Build Coastguard Worker EXPECT_FALSE(T1.hasTriggered()); 56*9880d681SAndroid Build Coastguard Worker T1.startTimer(); 57*9880d681SAndroid Build Coastguard Worker EXPECT_TRUE(T1.hasTriggered()); 58*9880d681SAndroid Build Coastguard Worker T1.stopTimer(); 59*9880d681SAndroid Build Coastguard Worker EXPECT_TRUE(T1.hasTriggered()); 60*9880d681SAndroid Build Coastguard Worker 61*9880d681SAndroid Build Coastguard Worker T1.clear(); 62*9880d681SAndroid Build Coastguard Worker EXPECT_FALSE(T1.hasTriggered()); 63*9880d681SAndroid Build Coastguard Worker } 64*9880d681SAndroid Build Coastguard Worker 65*9880d681SAndroid Build Coastguard Worker } // end anon namespace 66