14a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/*---------------------------------------------------------------------------*
24a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *  pcputimer.c  *
34a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *                                                                           *
44a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *  Copyright 2007, 2008 Nuance Communciations, Inc.                               *
54a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *                                                                           *
64a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *  Licensed under the Apache License, Version 2.0 (the 'License');          *
74a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *  you may not use this file except in compliance with the License.         *
84a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *                                                                           *
94a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *  You may obtain a copy of the License at                                  *
104a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0                           *
114a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *                                                                           *
124a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *  Unless required by applicable law or agreed to in writing, software      *
134a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *  distributed under the License is distributed on an 'AS IS' BASIS,        *
144a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. *
154a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *  See the License for the specific language governing permissions and      *
164a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *  limitations under the License.                                           *
174a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *                                                                           *
184a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *---------------------------------------------------------------------------*/
194a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
204a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
214a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
224a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "pcputimer.h"
234a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "pmemory.h"
244a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
254a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#if defined(_WIN32)
264a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
274a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/*
284a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  Note that this implementation assumes that GetThreadTimes is
294a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  available (requires NT 3.5 and above) and that 64 bit arithmetic is
304a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  available (requires VC)
314a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project*/
324a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
334a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectstruct PCPUTimer_t
344a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{
354a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  HANDLE hThread;
364a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  LARGE_INTEGER RefTime;
374a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  asr_uint32_t elapsed;
384a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project};
394a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
404a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
414a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/**
424a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Creates a new timer object.
434a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project **/
444a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode PCPUTimerCreate(PCPUTimer **timer)
454a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{
464a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  PCPUTimer *tmp = NULL;
474a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
484a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  if (timer == NULL)
494a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    return ESR_INVALID_ARGUMENT;
504a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  tmp = NEW(PCPUTimer, "PCPUTimer");
514a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  if (tmp == NULL) return ESR_OUT_OF_MEMORY;
524a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
534a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  tmp->hThread = GetCurrentThread();
544a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  tmp->RefTime.QuadPart = -1;
554a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  tmp->elapsed = 0;
564a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  *timer = tmp;
574a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
584a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  return ESR_SUCCESS;
594a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
604a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
614a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode PCPUTimerDestroy(PCPUTimer *timer)
624a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{
634a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  if (timer == NULL) return ESR_INVALID_ARGUMENT;
644a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  FREE(timer);
654a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  return ESR_SUCCESS;
664a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
674a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
684a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/**
694a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Starts the timer. This sets the reference time from which all new elapsed
704a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * time are computed.  This does not reset the elapsed time to 0.  This is
714a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * useful to pause the timer.
724a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project **/
734a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode PCPUTimerStart(PCPUTimer *timer)
744a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{
754a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  FILETIME CreationTime;
764a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  FILETIME ExitTime;
774a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  FILETIME KernelTime;
784a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  FILETIME UserTime;
794a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
804a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  if (timer == NULL) return ESR_INVALID_ARGUMENT;
814a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  if (!GetThreadTimes(timer->hThread,
824a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project                      &CreationTime, &ExitTime, &KernelTime, &UserTime))
834a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  {
844a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    return ESR_FATAL_ERROR;
854a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  }
864a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
874a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  timer->RefTime.QuadPart = (((LARGE_INTEGER*) & KernelTime)->QuadPart +
884a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project                             ((LARGE_INTEGER*) & UserTime)->QuadPart);
894a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
904a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  return ESR_SUCCESS;
914a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
924a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
934a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/**
944a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Stops the timer.
954a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project **/
964a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode PCPUTimerStop(PCPUTimer *timer)
974a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{
984a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  if (timer == NULL) return ESR_INVALID_ARGUMENT;
994a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  if (timer->RefTime.QuadPart != -1)
1004a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  {
1014a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    FILETIME CreationTime;
1024a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    FILETIME ExitTime;
1034a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    FILETIME KernelTime;
1044a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    FILETIME UserTime;
1054a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1064a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    if (!GetThreadTimes(timer->hThread,
1074a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project                        &CreationTime, &ExitTime, &KernelTime, &UserTime))
1084a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project      return ESR_FATAL_ERROR;
1094a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1104a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    timer->elapsed =
1114a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project      (asr_uint32_t) (((LARGE_INTEGER*) &KernelTime)->QuadPart +
1124a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project                  ((LARGE_INTEGER*) &UserTime)->QuadPart -
1134a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project                  timer->RefTime.QuadPart) / 10;
1144a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  }
1154a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  return ESR_SUCCESS;
1164a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
1174a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1184a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/**
1194a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Returns the timer elapsed time.  If the Timer is in the stopped state,
1204a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * successive calls to getElapsed() will always return the same value.  If
1214a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * the Timer is in the started state, successive calls will return the
1224a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * elapsed time since the last time PCPUTimerStart() was called.
1234a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */
1244a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode PCPUTimerGetElapsed(PCPUTimer *timer, asr_uint32_t *elapsed)
1254a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{
1264a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  if (timer == NULL || elapsed == NULL) return ESR_INVALID_ARGUMENT;
1274a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  if (timer->RefTime.QuadPart != -1)
1284a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  {
1294a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    FILETIME CreationTime;
1304a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    FILETIME ExitTime;
1314a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    FILETIME KernelTime;
1324a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    FILETIME UserTime;
1334a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1344a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    if (!GetThreadTimes(timer->hThread,
1354a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project                        &CreationTime, &ExitTime, &KernelTime, &UserTime))
1364a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project      return ESR_FATAL_ERROR;
1374a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1384a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    *elapsed = timer->elapsed +
1394a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project               (asr_uint32_t)(((LARGE_INTEGER*) & KernelTime)->QuadPart +
1404a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project                              ((LARGE_INTEGER*) & UserTime)->QuadPart -
1414a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project                              timer->RefTime.QuadPart) / 10;
1424a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  }
1434a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  else
1444a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    *elapsed = timer->elapsed;
1454a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  return ESR_SUCCESS;
1464a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
1474a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1484a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1494a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/**
1504a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Resets the elapsed time to 0 and resets the reference time of the Timer.
1514a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * This effectively reset the timer in the same state it was right after creation.
1524a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project **/
1534a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode PCPUTimerReset(PCPUTimer *timer)
1544a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{
1554a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  if (timer == NULL) return ESR_INVALID_ARGUMENT;
1564a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  timer->RefTime.QuadPart = -1;
1574a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  timer->elapsed = 0;
1584a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  return ESR_SUCCESS;
1594a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
1604a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1614a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#elif defined(POSIX)
1624a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/*
1634a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project*/
1644a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1654a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectstruct PCPUTimer_t
1664a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{
1674a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  HANDLE   hThread;
1684a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  asr_uint32_t RefTime;
1694a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  asr_uint32_t elapsed;
1704a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project};
1714a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1724a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/**
1734a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project* Creates a new timer object.
1744a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project**/
1754a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode PCPUTimerCreate(PCPUTimer **timer)
1764a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{
1774a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  PCPUTimer *tmp = NULL;
1784a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1794a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  if (timer == NULL) return ESR_INVALID_ARGUMENT;
1804a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  tmp = NEW(PCPUTimer, "PCPUTimer");
1814a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  if (tmp == NULL) return ESR_OUT_OF_MEMORY;
1824a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1834a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  tmp->hThread = (HANDLE)pthread_self();
1844a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  tmp->elapsed = 0;
1854a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  *timer = tmp;
1864a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1874a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  return ESR_SUCCESS;
1884a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
1894a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1904a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode PCPUTimerDestroy(PCPUTimer *timer)
1914a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{
1924a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  if (timer == NULL) return ESR_INVALID_ARGUMENT;
1934a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  FREE(timer);
1944a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  return ESR_SUCCESS;
1954a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
1964a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1974a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/**
1984a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project* Starts the timer. This sets the reference time from which all new elapsed
1994a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project* time are computed.  This does not reset the elapsed time to 0.  This is
2004a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project* useful to pause the timer.
2014a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project**/
2024a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode PCPUTimerStart(PCPUTimer *timer)
2034a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{
2044a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  return ESR_SUCCESS;
2054a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
2064a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
2074a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/**
2084a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project* Stops the timer.
2094a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project**/
2104a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode PCPUTimerStop(PCPUTimer *timer)
2114a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{
2124a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  return ESR_SUCCESS;
2134a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
2144a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
2154a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/**
2164a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project* Returns the timer elapsed time.  If the Timer is in the stopped state,
2174a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project* successive calls to getElapsed() will always return the same value.  If
2184a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project* the Timer is in the started state, successive calls will return the
2194a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project* elapsed time since the last time PCPUTimerStart() was called.
2204a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project*/
2214a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode PCPUTimerGetElapsed(PCPUTimer *timer, asr_uint32_t *elapsed)
2224a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{
2234a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  return ESR_SUCCESS;
2244a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
2254a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
2264a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
2274a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/**
2284a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project* Resets the elapsed time to 0 and resets the reference time of the Timer.
2294a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project* This effectively reset the timer in the same state it was right after creation.
2304a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project**/
2314a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode PCPUTimerReset(PCPUTimer *timer)
2324a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{
2334a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  return ESR_SUCCESS;
2344a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
2354a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
2364a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#else
2374a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/* #error "Ptimer not implemented for this platform." */
2384a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#endif
239