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