Use VDSO for clock_gettime(2) and gettimeofday(2).

Bug: 15387103

(cherry picked from commit 625993dfbb)

Change-Id: I0e156d7049ba1495902259071a96936592e74025
This commit is contained in:
Elliott Hughes
2014-07-15 16:53:13 -07:00
parent a446505874
commit 3002131da3
14 changed files with 250 additions and 22 deletions

View File

@@ -16,6 +16,7 @@
#include "benchmark.h"
#include <sys/syscall.h>
#include <time.h>
#if defined(__BIONIC__)
@@ -41,7 +42,7 @@ BENCHMARK(BM_time_localtime_tz);
static void BM_time_clock_gettime(int iters) {
StartBenchmarkTiming();
struct timespec t;
timespec t;
for (int i = 0; i < iters; ++i) {
clock_gettime(CLOCK_MONOTONIC, &t);
}
@@ -49,3 +50,50 @@ static void BM_time_clock_gettime(int iters) {
StopBenchmarkTiming();
}
BENCHMARK(BM_time_clock_gettime);
static void BM_time_clock_gettime_syscall(int iters) {
StartBenchmarkTiming();
timespec t;
for (int i = 0; i < iters; ++i) {
syscall(__NR_clock_gettime, CLOCK_MONOTONIC, &t);
}
StopBenchmarkTiming();
}
BENCHMARK(BM_time_clock_gettime_syscall);
static void BM_time_gettimeofday(int iters) {
StartBenchmarkTiming();
timeval tv;
for (int i = 0; i < iters; ++i) {
gettimeofday(&tv, NULL);
}
StopBenchmarkTiming();
}
BENCHMARK(BM_time_gettimeofday);
static void BM_time_gettimeofday_syscall(int iters) {
StartBenchmarkTiming();
timeval tv;
for (int i = 0; i < iters; ++i) {
syscall(__NR_gettimeofday, &tv, NULL);
}
StopBenchmarkTiming();
}
BENCHMARK(BM_time_gettimeofday_syscall);
static void BM_time_time(int iters) {
StartBenchmarkTiming();
for (int i = 0; i < iters; ++i) {
time(NULL);
}
StopBenchmarkTiming();
}
BENCHMARK(BM_time_time);