From a692e4e3de60e1a10906511fb8ef2d14937d4a19 Mon Sep 17 00:00:00 2001 From: Jo-Philipp Wich Date: Sun, 5 Aug 2018 12:24:01 +0200 Subject: [PATCH] scripts: time.pl: avoid hard Time::HiRes dependency Use Time::HiRes when available and fallback to raw syscall interface when not. If that fails too, simply report 0, 0 as real time. Signed-off-by: Jo-Philipp Wich --- scripts/time.pl | 31 +++++++++++++++++++++++++++---- 1 file changed, 27 insertions(+), 4 deletions(-) diff --git a/scripts/time.pl b/scripts/time.pl index cdc5824c83..a23b57c89e 100755 --- a/scripts/time.pl +++ b/scripts/time.pl @@ -2,14 +2,37 @@ use strict; use warnings; -use Time::HiRes qw(gettimeofday); +use Config; if (@ARGV < 2) { die "Usage: $0 \n"; } +sub gettime { + my ($sec, $usec); + + eval { + require Time::HiRes; + ($sec, $usec) = Time::HiRes::gettimeofday(); + }; + + unless (defined($sec) && defined($usec)) { + my $tv_t = ($Config{'longsize'} == 8) ? 'qq' : 'll'; + my $tv = pack $tv_t, 0, 0; + + eval { + require 'syscall.ph'; + syscall(SYS_gettimeofday(), $tv, 0); + }; + + ($sec, $usec) = unpack $tv_t, $tv; + } + + return ($sec, $usec); +} + my ($prefix, @cmd) = @ARGV; -my ($sec, $msec) = gettimeofday(); +my ($sec, $usec) = gettime(); my $pid = fork(); if (!defined($pid)) { @@ -28,12 +51,12 @@ else { } my $exitcode = $? >> 8; - my ($sec2, $msec2) = gettimeofday(); + my ($sec2, $usec2) = gettime(); my (undef, undef, $cuser, $csystem) = times(); printf STDERR "%s#%.2f#%.2f#%.2f\n", $prefix, $cuser, $csystem, - ($sec2 - $sec) + ($msec2 - $msec) / 1000000; + ($sec2 - $sec) + ($usec2 - $usec) / 1000000; $SIG{'INT'} = 'DEFAULT'; $SIG{'QUIT'} = 'DEFAULT'; -- 2.30.2