1ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com/* 2ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Copyright 2011 Google Inc. 3ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * 4ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Use of this source code is governed by a BSD-style license that can be 5ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * found in the LICENSE file. 6ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com */ 79ac68ee2594f28dfc1bd16a4bf004b1a4f6f228dmtklein#include "SysTimer_posix.h" 8be9ad4e5fc6126a1273a7dccf1a85db72e763df3bungeman@google.com 99ac68ee2594f28dfc1bd16a4bf004b1a4f6f228dmtkleinstatic double interval_in_ms(timespec start_clock, timespec end_clock) 10be9ad4e5fc6126a1273a7dccf1a85db72e763df3bungeman@google.com{ 11be9ad4e5fc6126a1273a7dccf1a85db72e763df3bungeman@google.com double duration_clock; 12be9ad4e5fc6126a1273a7dccf1a85db72e763df3bungeman@google.com if ((end_clock.tv_nsec - start_clock.tv_nsec) < 0) { 139ac68ee2594f28dfc1bd16a4bf004b1a4f6f228dmtklein duration_clock = (end_clock.tv_sec - start_clock.tv_sec - 1) * 1000; 149ac68ee2594f28dfc1bd16a4bf004b1a4f6f228dmtklein duration_clock += (1000000000 + end_clock.tv_nsec - start_clock.tv_nsec) / 1000000.0; 15be9ad4e5fc6126a1273a7dccf1a85db72e763df3bungeman@google.com } else { 169ac68ee2594f28dfc1bd16a4bf004b1a4f6f228dmtklein duration_clock = (end_clock.tv_sec - start_clock.tv_sec) * 1000; 17be9ad4e5fc6126a1273a7dccf1a85db72e763df3bungeman@google.com duration_clock += (end_clock.tv_nsec - start_clock.tv_nsec) / 1000000.0; 18be9ad4e5fc6126a1273a7dccf1a85db72e763df3bungeman@google.com } 19be9ad4e5fc6126a1273a7dccf1a85db72e763df3bungeman@google.com return duration_clock; 20be9ad4e5fc6126a1273a7dccf1a85db72e763df3bungeman@google.com} 21be9ad4e5fc6126a1273a7dccf1a85db72e763df3bungeman@google.com 229ac68ee2594f28dfc1bd16a4bf004b1a4f6f228dmtkleinvoid SysTimer::startWall() { 239ac68ee2594f28dfc1bd16a4bf004b1a4f6f228dmtklein if (-1 == clock_gettime(CLOCK_MONOTONIC, &fWall)) { 24be9ad4e5fc6126a1273a7dccf1a85db72e763df3bungeman@google.com timespec none = {0, 0}; 259ac68ee2594f28dfc1bd16a4bf004b1a4f6f228dmtklein fWall = none; 26be9ad4e5fc6126a1273a7dccf1a85db72e763df3bungeman@google.com } 27be9ad4e5fc6126a1273a7dccf1a85db72e763df3bungeman@google.com} 289ac68ee2594f28dfc1bd16a4bf004b1a4f6f228dmtkleinvoid SysTimer::startCpu() { 299ac68ee2594f28dfc1bd16a4bf004b1a4f6f228dmtklein if (-1 == clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &fCpu)) { 30be9ad4e5fc6126a1273a7dccf1a85db72e763df3bungeman@google.com timespec none = {0, 0}; 319ac68ee2594f28dfc1bd16a4bf004b1a4f6f228dmtklein fCpu = none; 32be9ad4e5fc6126a1273a7dccf1a85db72e763df3bungeman@google.com } 33be9ad4e5fc6126a1273a7dccf1a85db72e763df3bungeman@google.com} 34be9ad4e5fc6126a1273a7dccf1a85db72e763df3bungeman@google.com 359ac68ee2594f28dfc1bd16a4bf004b1a4f6f228dmtkleindouble SysTimer::endCpu() { 36be9ad4e5fc6126a1273a7dccf1a85db72e763df3bungeman@google.com timespec end_cpu; 37be9ad4e5fc6126a1273a7dccf1a85db72e763df3bungeman@google.com if (-1 == clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &end_cpu)) { 38be9ad4e5fc6126a1273a7dccf1a85db72e763df3bungeman@google.com timespec none = {0, 0}; 39be9ad4e5fc6126a1273a7dccf1a85db72e763df3bungeman@google.com end_cpu = none; 40be9ad4e5fc6126a1273a7dccf1a85db72e763df3bungeman@google.com } 419ac68ee2594f28dfc1bd16a4bf004b1a4f6f228dmtklein return interval_in_ms(fCpu, end_cpu); 42be9ad4e5fc6126a1273a7dccf1a85db72e763df3bungeman@google.com} 43be9ad4e5fc6126a1273a7dccf1a85db72e763df3bungeman@google.com 449ac68ee2594f28dfc1bd16a4bf004b1a4f6f228dmtkleindouble SysTimer::endWall() { 45be9ad4e5fc6126a1273a7dccf1a85db72e763df3bungeman@google.com timespec end_wall; 46be9ad4e5fc6126a1273a7dccf1a85db72e763df3bungeman@google.com if (-1 == clock_gettime(CLOCK_MONOTONIC, &end_wall)) { 47be9ad4e5fc6126a1273a7dccf1a85db72e763df3bungeman@google.com timespec none = {0, 0}; 48be9ad4e5fc6126a1273a7dccf1a85db72e763df3bungeman@google.com end_wall = none; 49be9ad4e5fc6126a1273a7dccf1a85db72e763df3bungeman@google.com } 509ac68ee2594f28dfc1bd16a4bf004b1a4f6f228dmtklein return interval_in_ms(fWall, end_wall); 51be9ad4e5fc6126a1273a7dccf1a85db72e763df3bungeman@google.com} 52