1*00c7fec1SAndroid Build Coastguard Worker /* 2*00c7fec1SAndroid Build Coastguard Worker * Copyright (C) 2008 The Android Open Source Project 3*00c7fec1SAndroid Build Coastguard Worker * 4*00c7fec1SAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License"); 5*00c7fec1SAndroid Build Coastguard Worker * you may not use this file except in compliance with the License. 6*00c7fec1SAndroid Build Coastguard Worker * You may obtain a copy of the License at 7*00c7fec1SAndroid Build Coastguard Worker * 8*00c7fec1SAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0 9*00c7fec1SAndroid Build Coastguard Worker * 10*00c7fec1SAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software 11*00c7fec1SAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS, 12*00c7fec1SAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*00c7fec1SAndroid Build Coastguard Worker * See the License for the specific language governing permissions and 14*00c7fec1SAndroid Build Coastguard Worker * limitations under the License. 15*00c7fec1SAndroid Build Coastguard Worker */ 16*00c7fec1SAndroid Build Coastguard Worker 17*00c7fec1SAndroid Build Coastguard Worker 18*00c7fec1SAndroid Build Coastguard Worker /* 19*00c7fec1SAndroid Build Coastguard Worker * System clock functions. 20*00c7fec1SAndroid Build Coastguard Worker */ 21*00c7fec1SAndroid Build Coastguard Worker 22*00c7fec1SAndroid Build Coastguard Worker #define LOG_TAG "SystemClock" 23*00c7fec1SAndroid Build Coastguard Worker 24*00c7fec1SAndroid Build Coastguard Worker #include <utils/SystemClock.h> 25*00c7fec1SAndroid Build Coastguard Worker 26*00c7fec1SAndroid Build Coastguard Worker #include <string.h> 27*00c7fec1SAndroid Build Coastguard Worker #include <errno.h> 28*00c7fec1SAndroid Build Coastguard Worker #include <time.h> 29*00c7fec1SAndroid Build Coastguard Worker 30*00c7fec1SAndroid Build Coastguard Worker #include <cutils/compiler.h> 31*00c7fec1SAndroid Build Coastguard Worker 32*00c7fec1SAndroid Build Coastguard Worker #include <utils/Timers.h> 33*00c7fec1SAndroid Build Coastguard Worker #include <log/log.h> 34*00c7fec1SAndroid Build Coastguard Worker 35*00c7fec1SAndroid Build Coastguard Worker namespace android { 36*00c7fec1SAndroid Build Coastguard Worker 37*00c7fec1SAndroid Build Coastguard Worker /* 38*00c7fec1SAndroid Build Coastguard Worker * native public static long uptimeMillis(); 39*00c7fec1SAndroid Build Coastguard Worker */ uptimeMillis()40*00c7fec1SAndroid Build Coastguard Workerint64_t uptimeMillis() 41*00c7fec1SAndroid Build Coastguard Worker { 42*00c7fec1SAndroid Build Coastguard Worker return nanoseconds_to_milliseconds(uptimeNanos()); 43*00c7fec1SAndroid Build Coastguard Worker } 44*00c7fec1SAndroid Build Coastguard Worker 45*00c7fec1SAndroid Build Coastguard Worker /* 46*00c7fec1SAndroid Build Coastguard Worker * public static native long uptimeNanos(); 47*00c7fec1SAndroid Build Coastguard Worker */ uptimeNanos()48*00c7fec1SAndroid Build Coastguard Workerint64_t uptimeNanos() 49*00c7fec1SAndroid Build Coastguard Worker { 50*00c7fec1SAndroid Build Coastguard Worker return systemTime(SYSTEM_TIME_MONOTONIC); 51*00c7fec1SAndroid Build Coastguard Worker } 52*00c7fec1SAndroid Build Coastguard Worker 53*00c7fec1SAndroid Build Coastguard Worker /* 54*00c7fec1SAndroid Build Coastguard Worker * native public static long elapsedRealtime(); 55*00c7fec1SAndroid Build Coastguard Worker */ elapsedRealtime()56*00c7fec1SAndroid Build Coastguard Workerint64_t elapsedRealtime() 57*00c7fec1SAndroid Build Coastguard Worker { 58*00c7fec1SAndroid Build Coastguard Worker return nanoseconds_to_milliseconds(elapsedRealtimeNano()); 59*00c7fec1SAndroid Build Coastguard Worker } 60*00c7fec1SAndroid Build Coastguard Worker 61*00c7fec1SAndroid Build Coastguard Worker /* 62*00c7fec1SAndroid Build Coastguard Worker * native public static long elapsedRealtimeNano(); 63*00c7fec1SAndroid Build Coastguard Worker */ elapsedRealtimeNano()64*00c7fec1SAndroid Build Coastguard Workerint64_t elapsedRealtimeNano() 65*00c7fec1SAndroid Build Coastguard Worker { 66*00c7fec1SAndroid Build Coastguard Worker #if defined(__linux__) 67*00c7fec1SAndroid Build Coastguard Worker struct timespec ts; 68*00c7fec1SAndroid Build Coastguard Worker int err = clock_gettime(CLOCK_BOOTTIME, &ts); 69*00c7fec1SAndroid Build Coastguard Worker if (CC_UNLIKELY(err)) { 70*00c7fec1SAndroid Build Coastguard Worker // This should never happen, but just in case ... 71*00c7fec1SAndroid Build Coastguard Worker ALOGE("clock_gettime(CLOCK_BOOTTIME) failed: %s", strerror(errno)); 72*00c7fec1SAndroid Build Coastguard Worker return 0; 73*00c7fec1SAndroid Build Coastguard Worker } 74*00c7fec1SAndroid Build Coastguard Worker 75*00c7fec1SAndroid Build Coastguard Worker return seconds_to_nanoseconds(ts.tv_sec) + ts.tv_nsec; 76*00c7fec1SAndroid Build Coastguard Worker #else 77*00c7fec1SAndroid Build Coastguard Worker return systemTime(SYSTEM_TIME_MONOTONIC); 78*00c7fec1SAndroid Build Coastguard Worker #endif 79*00c7fec1SAndroid Build Coastguard Worker } 80*00c7fec1SAndroid Build Coastguard Worker 81*00c7fec1SAndroid Build Coastguard Worker }; // namespace android 82