1e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie/* 2e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie * Copyright (C) 2016 The Android Open Source Project 3e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie * 4e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie * Licensed under the Apache License, Version 2.0 (the "License"); 5e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie * you may not use this file except in compliance with the License. 6e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie * You may obtain a copy of the License at 7e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie * 8e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie * http://www.apache.org/licenses/LICENSE-2.0 9e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie * 10e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie * Unless required by applicable law or agreed to in writing, software 11e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie * distributed under the License is distributed on an "AS IS" BASIS, 12e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie * See the License for the specific language governing permissions and 14e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie * limitations under the License. 15e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie */ 16e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie 17e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie#ifndef CHRE_PLATFORM_TIME_H_ 18e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie#define CHRE_PLATFORM_TIME_H_ 19e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie 20e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie#include <cstdint> 21e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie 22e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie#include "chre/util/time.h" 23e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie 24e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddienamespace chre { 25e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie 26e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddieclass SystemTime { 27e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie public: 28e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie /** 29e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie * Initializes the system clock. This must be called as part of the 30e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie * initialization of the runtime. 31e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie */ 32e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie static void init(); 33e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie 34e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie /** 35e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie * Obtains a monotonic time reference relative to an arbitrary starting point. 36e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie * There is no mandate that getMonotonicTime and getUptime be different. 37e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie * 38e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie * @return The time of the system. 39e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie */ 40e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie static Nanoseconds getMonotonicTime(); 41e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie 42e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie /** 43e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie * Obtains the uptime of CHRE relative to CHRE initialization. There is no 44e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie * mandate that getUptime and getMonotonicTime be different. 45e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie * 46e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie * @return The uptime of CHRE. 47e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie */ 48e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie static Nanoseconds getUptime(); 495fc9df58dc67591b24fd04f143b61fcf12100239Arthur Ishiguro 505fc9df58dc67591b24fd04f143b61fcf12100239Arthur Ishiguro /** 515fc9df58dc67591b24fd04f143b61fcf12100239Arthur Ishiguro * Returns the estimated offset between the host and CHRE time. The offset is 525fc9df58dc67591b24fd04f143b61fcf12100239Arthur Ishiguro * defined as the host time minus the CHRE time. 535fc9df58dc67591b24fd04f143b61fcf12100239Arthur Ishiguro * 545fc9df58dc67591b24fd04f143b61fcf12100239Arthur Ishiguro * @return The current estimated offset in nanoseconds. 555fc9df58dc67591b24fd04f143b61fcf12100239Arthur Ishiguro */ 565fc9df58dc67591b24fd04f143b61fcf12100239Arthur Ishiguro static int64_t getEstimatedHostTimeOffset(); 57e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie}; 58e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie 59e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie} // namespace chre 60e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie 61e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie#endif // CHRE_PLATFORM_TIME_H_ 62