19dee40527b352ebbe386a178cea3a374673a00a2Cyril Hrubis/* 29dee40527b352ebbe386a178cea3a374673a00a2Cyril Hrubis * Copyright (C) 2015 Cyril Hrubis <chrubis@suse.cz> 39dee40527b352ebbe386a178cea3a374673a00a2Cyril Hrubis * 49dee40527b352ebbe386a178cea3a374673a00a2Cyril Hrubis * This program is free software; you can redistribute it and/or modify it 59dee40527b352ebbe386a178cea3a374673a00a2Cyril Hrubis * under the terms of version 2 of the GNU General Public License as 69dee40527b352ebbe386a178cea3a374673a00a2Cyril Hrubis * published by the Free Software Foundation. 79dee40527b352ebbe386a178cea3a374673a00a2Cyril Hrubis * 89dee40527b352ebbe386a178cea3a374673a00a2Cyril Hrubis * This program is distributed in the hope that it would be useful, but 99dee40527b352ebbe386a178cea3a374673a00a2Cyril Hrubis * WITHOUT ANY WARRANTY; without even the implied warranty of 109dee40527b352ebbe386a178cea3a374673a00a2Cyril Hrubis * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 119dee40527b352ebbe386a178cea3a374673a00a2Cyril Hrubis * 129dee40527b352ebbe386a178cea3a374673a00a2Cyril Hrubis * Further, this software is distributed without any warranty that it is 139dee40527b352ebbe386a178cea3a374673a00a2Cyril Hrubis * free of the rightful claim of any third person regarding infringement 149dee40527b352ebbe386a178cea3a374673a00a2Cyril Hrubis * or the like. Any license provided herein, whether implied or 159dee40527b352ebbe386a178cea3a374673a00a2Cyril Hrubis * otherwise, applies only to this software file. Patent licenses, if 169dee40527b352ebbe386a178cea3a374673a00a2Cyril Hrubis * any, provided herein do not apply to combinations of this program with 179dee40527b352ebbe386a178cea3a374673a00a2Cyril Hrubis * other software, or any other product whatsoever. 189dee40527b352ebbe386a178cea3a374673a00a2Cyril Hrubis * 199dee40527b352ebbe386a178cea3a374673a00a2Cyril Hrubis * You should have received a copy of the GNU General Public License along 209dee40527b352ebbe386a178cea3a374673a00a2Cyril Hrubis * with this program; if not, write the Free Software Foundation, Inc., 219dee40527b352ebbe386a178cea3a374673a00a2Cyril Hrubis * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 229dee40527b352ebbe386a178cea3a374673a00a2Cyril Hrubis */ 239dee40527b352ebbe386a178cea3a374673a00a2Cyril Hrubis 249dee40527b352ebbe386a178cea3a374673a00a2Cyril Hrubis#include <errno.h> 259dee40527b352ebbe386a178cea3a374673a00a2Cyril Hrubis 269dee40527b352ebbe386a178cea3a374673a00a2Cyril Hrubis#include "test.h" 279dee40527b352ebbe386a178cea3a374673a00a2Cyril Hrubis#include "tst_timer.h" 289dee40527b352ebbe386a178cea3a374673a00a2Cyril Hrubis#include "lapi/posix_clocks.h" 299dee40527b352ebbe386a178cea3a374673a00a2Cyril Hrubis 309dee40527b352ebbe386a178cea3a374673a00a2Cyril Hrubisstatic struct timespec start_time, stop_time; 319dee40527b352ebbe386a178cea3a374673a00a2Cyril Hrubisstatic clockid_t clock_id; 329dee40527b352ebbe386a178cea3a374673a00a2Cyril Hrubis 339dee40527b352ebbe386a178cea3a374673a00a2Cyril Hrubisstatic const char *clock_name(clockid_t clk_id) 349dee40527b352ebbe386a178cea3a374673a00a2Cyril Hrubis{ 359dee40527b352ebbe386a178cea3a374673a00a2Cyril Hrubis switch (clk_id) { 369dee40527b352ebbe386a178cea3a374673a00a2Cyril Hrubis case CLOCK_REALTIME: 379dee40527b352ebbe386a178cea3a374673a00a2Cyril Hrubis return "CLOCK_REALTIME"; 389dee40527b352ebbe386a178cea3a374673a00a2Cyril Hrubis case CLOCK_REALTIME_COARSE: 399dee40527b352ebbe386a178cea3a374673a00a2Cyril Hrubis return "CLOCK_REALTIME_COARSE"; 409dee40527b352ebbe386a178cea3a374673a00a2Cyril Hrubis case CLOCK_MONOTONIC: 419dee40527b352ebbe386a178cea3a374673a00a2Cyril Hrubis return "CLOCK_MONOTONIC"; 429dee40527b352ebbe386a178cea3a374673a00a2Cyril Hrubis case CLOCK_MONOTONIC_COARSE: 439dee40527b352ebbe386a178cea3a374673a00a2Cyril Hrubis return "CLOCK_MONOTONIC_COARSE"; 449dee40527b352ebbe386a178cea3a374673a00a2Cyril Hrubis case CLOCK_MONOTONIC_RAW: 459dee40527b352ebbe386a178cea3a374673a00a2Cyril Hrubis return "CLOCK_MONOTONIC_RAW"; 469dee40527b352ebbe386a178cea3a374673a00a2Cyril Hrubis case CLOCK_BOOTTIME: 479dee40527b352ebbe386a178cea3a374673a00a2Cyril Hrubis return "CLOCK_BOOTTIME"; 489dee40527b352ebbe386a178cea3a374673a00a2Cyril Hrubis case CLOCK_PROCESS_CPUTIME_ID: 499dee40527b352ebbe386a178cea3a374673a00a2Cyril Hrubis return "CLOCK_PROCESS_CPUTIME_ID"; 509dee40527b352ebbe386a178cea3a374673a00a2Cyril Hrubis case CLOCK_THREAD_CPUTIME_ID: 519dee40527b352ebbe386a178cea3a374673a00a2Cyril Hrubis return "CLOCK_THREAD_CPUTIME_ID"; 529dee40527b352ebbe386a178cea3a374673a00a2Cyril Hrubis default: 539dee40527b352ebbe386a178cea3a374673a00a2Cyril Hrubis return "UNKNOWN/INVALID"; 549dee40527b352ebbe386a178cea3a374673a00a2Cyril Hrubis } 559dee40527b352ebbe386a178cea3a374673a00a2Cyril Hrubis} 569dee40527b352ebbe386a178cea3a374673a00a2Cyril Hrubis 579dee40527b352ebbe386a178cea3a374673a00a2Cyril Hrubisvoid tst_timer_check(clockid_t clk_id) 589dee40527b352ebbe386a178cea3a374673a00a2Cyril Hrubis{ 599dee40527b352ebbe386a178cea3a374673a00a2Cyril Hrubis if (clock_gettime(clk_id, &start_time)) { 609dee40527b352ebbe386a178cea3a374673a00a2Cyril Hrubis if (errno == EINVAL) { 619dee40527b352ebbe386a178cea3a374673a00a2Cyril Hrubis tst_brkm(TCONF, NULL, 629dee40527b352ebbe386a178cea3a374673a00a2Cyril Hrubis "Clock id %s(%u) not supported by kernel", 639dee40527b352ebbe386a178cea3a374673a00a2Cyril Hrubis clock_name(clk_id), clk_id); 64d101cabf6356d7a3fb027b20ef709d235d708c2bCyril Hrubis return; 659dee40527b352ebbe386a178cea3a374673a00a2Cyril Hrubis } 669dee40527b352ebbe386a178cea3a374673a00a2Cyril Hrubis 679dee40527b352ebbe386a178cea3a374673a00a2Cyril Hrubis tst_brkm(TBROK | TERRNO, NULL, "clock_gettime() failed"); 689dee40527b352ebbe386a178cea3a374673a00a2Cyril Hrubis } 699dee40527b352ebbe386a178cea3a374673a00a2Cyril Hrubis} 709dee40527b352ebbe386a178cea3a374673a00a2Cyril Hrubis 719dee40527b352ebbe386a178cea3a374673a00a2Cyril Hrubisvoid tst_timer_start(clockid_t clk_id) 729dee40527b352ebbe386a178cea3a374673a00a2Cyril Hrubis{ 739dee40527b352ebbe386a178cea3a374673a00a2Cyril Hrubis clock_id = clk_id; 749dee40527b352ebbe386a178cea3a374673a00a2Cyril Hrubis 759dee40527b352ebbe386a178cea3a374673a00a2Cyril Hrubis if (clock_gettime(clock_id, &start_time)) 769dee40527b352ebbe386a178cea3a374673a00a2Cyril Hrubis tst_resm(TWARN | TERRNO, "clock_gettime() failed"); 779dee40527b352ebbe386a178cea3a374673a00a2Cyril Hrubis} 789dee40527b352ebbe386a178cea3a374673a00a2Cyril Hrubis 799dee40527b352ebbe386a178cea3a374673a00a2Cyril Hrubisvoid tst_timer_stop(void) 809dee40527b352ebbe386a178cea3a374673a00a2Cyril Hrubis{ 819dee40527b352ebbe386a178cea3a374673a00a2Cyril Hrubis if (clock_gettime(clock_id, &stop_time)) 829dee40527b352ebbe386a178cea3a374673a00a2Cyril Hrubis tst_resm(TWARN | TERRNO, "clock_gettime() failed"); 839dee40527b352ebbe386a178cea3a374673a00a2Cyril Hrubis} 849dee40527b352ebbe386a178cea3a374673a00a2Cyril Hrubis 859dee40527b352ebbe386a178cea3a374673a00a2Cyril Hrubisstruct timespec tst_timer_elapsed(void) 869dee40527b352ebbe386a178cea3a374673a00a2Cyril Hrubis{ 879dee40527b352ebbe386a178cea3a374673a00a2Cyril Hrubis return tst_timespec_diff(stop_time, start_time); 889dee40527b352ebbe386a178cea3a374673a00a2Cyril Hrubis} 89