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