rt: Remove timer

This commit is contained in:
Brian Anderson 2013-08-22 22:29:04 -07:00
parent a9d28b2d9d
commit 0a1baef4f5
5 changed files with 26 additions and 127 deletions

View file

@ -11,7 +11,6 @@
/* Foreign builtins. */
#include "rust_util.h"
#include "sync/timer.h"
#include "sync/rust_thread.h"
#include "sync/lock_and_signal.h"
#include "memory_region.h"
@ -25,6 +24,7 @@
#ifdef __APPLE__
#include <crt_externs.h>
#include <mach/mach_time.h>
#endif
#if !defined(__WIN32__)
@ -242,10 +242,33 @@ get_time(int64_t *sec, int32_t *nsec) {
}
#endif
const uint64_t ns_per_s = 1000000000LL;
extern "C" CDECL void
precise_time_ns(uint64_t *ns) {
timer t;
*ns = t.time_ns();
#ifdef __APPLE__
uint64_t time = mach_absolute_time();
mach_timebase_info_data_t info = {0, 0};
if (info.denom == 0) {
mach_timebase_info(&info);
}
uint64_t time_nano = time * (info.numer / info.denom);
*ns = time_nano;
#elif __WIN32__
uint64_t ticks_per_s;
QueryPerformanceFrequency((LARGE_INTEGER *)&ticks_per_s);
if (ticks_per_s == 0LL) {
ticks_per_s = 1LL;
}
uint64_t ticks;
QueryPerformanceCounter((LARGE_INTEGER *)&ticks);
*ns = ((ticks * ns_per_s) / ticks_per_s);
#else
timespec ts;
clock_gettime(CLOCK_MONOTONIC, &ts);
*ns = (ts.tv_sec * ns_per_s + ts.tv_nsec);
#endif
}
struct rust_tm {

View file

@ -11,7 +11,6 @@
// Helper functions used only in tests
#include "rust_util.h"
#include "sync/timer.h"
#include "sync/rust_thread.h"
#include "sync/lock_and_signal.h"
#include "rust_abi.h"

View file

@ -1,85 +0,0 @@
// Copyright 2012 The Rust Project Developers. See the COPYRIGHT
// file at the top-level directory of this distribution and at
// http://rust-lang.org/COPYRIGHT.
//
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
// option. This file may not be copied, modified, or distributed
// except according to those terms.
#include "../rust_globals.h"
#include "timer.h"
#if defined(__APPLE__)
#include <mach/mach_time.h>
#endif
uint64_t ns_per_s = 1000000000LL;
timer::timer() {
#if __WIN32__
_ticks_per_s = 0LL;
// FIXME (#2675): assert this works or have a workaround.
QueryPerformanceFrequency((LARGE_INTEGER *)&_ticks_per_s);
if (_ticks_per_s == 0LL) {
_ticks_per_s = 1LL;
}
#endif
reset_us(0);
}
void
timer::reset_us(uint64_t timeout_us) {
_start_us = time_us();
_timeout_us = timeout_us;
}
uint64_t
timer::elapsed_us() {
return time_us() - _start_us;
}
double
timer::elapsed_ms() {
return (double) elapsed_us() / 1000.0;
}
int64_t
timer::remaining_us() {
return _timeout_us - elapsed_us();
}
bool
timer::has_timed_out() {
return remaining_us() <= 0;
}
uint64_t
timer::time_ns() {
#ifdef __APPLE__
uint64_t time = mach_absolute_time();
mach_timebase_info_data_t info = {0, 0};
if (info.denom == 0) {
mach_timebase_info(&info);
}
uint64_t time_nano = time * (info.numer / info.denom);
return time_nano;
#elif __WIN32__
uint64_t ticks;
QueryPerformanceCounter((LARGE_INTEGER *)&ticks);
return ((ticks * ns_per_s) / _ticks_per_s);
#else
timespec ts;
clock_gettime(CLOCK_MONOTONIC, &ts);
return (ts.tv_sec * ns_per_s + ts.tv_nsec);
#endif
}
uint64_t
timer::time_us() {
return time_ns() / 1000;
}
timer::~timer() {
}

View file

@ -1,37 +0,0 @@
// Copyright 2012 The Rust Project Developers. See the COPYRIGHT
// file at the top-level directory of this distribution and at
// http://rust-lang.org/COPYRIGHT.
//
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
// option. This file may not be copied, modified, or distributed
// except according to those terms.
/*
* Utility class to measure time in a platform independent way.
*/
#ifndef TIMER_H
#define TIMER_H
class timer {
private:
uint64_t _start_us;
uint64_t _timeout_us;
uint64_t time_us();
#if __WIN32__
uint64_t _ticks_per_s;
#endif
public:
timer();
void reset_us(uint64_t timeout);
uint64_t elapsed_us();
double elapsed_ms();
int64_t remaining_us();
bool has_timed_out();
uint64_t time_ns();
virtual ~timer();
};
#endif /* TIMER_H */