Browse Source

Create a cgminer specific gettimeofday wrapper that is always called with tz set to NULL and increases the resolution on windows.

nfactor-troky
Con Kolivas 12 years ago
parent
commit
3d7f824363
  1. 22
      util.c
  2. 1
      util.h

22
util.c

@ -258,7 +258,7 @@ static void last_nettime(struct timeval *last)
static void set_nettime(void) static void set_nettime(void)
{ {
wr_lock(&netacc_lock); wr_lock(&netacc_lock);
gettimeofday(&nettime, NULL); cgtime(&nettime);
wr_unlock(&netacc_lock); wr_unlock(&netacc_lock);
} }
@ -382,7 +382,7 @@ json_t *json_rpc_call(CURL *curl, const char *url,
long long now_msecs, last_msecs; long long now_msecs, last_msecs;
struct timeval now, last; struct timeval now, last;
gettimeofday(&now, NULL); cgtime(&now);
last_nettime(&last); last_nettime(&last);
now_msecs = (long long)now.tv_sec * 1000; now_msecs = (long long)now.tv_sec * 1000;
now_msecs += now.tv_usec / 1000; now_msecs += now.tv_usec / 1000;
@ -842,6 +842,20 @@ void nmsleep(unsigned int msecs)
#endif #endif
} }
/* This is a cgminer gettimeofday wrapper. Since we always call gettimeofday
* with tz set to NULL, and windows' default resolution is only 15ms, this
* gives us higher resolution times on windows. */
void cgtime(struct timeval *tv)
{
#ifdef WIN32
timeBeginPeriod(1);
#endif
gettimeofday(tv, NULL);
#ifdef WIN32
timeEndPeriod(1);
#endif
}
/* Returns the microseconds difference between end and start times as a double */ /* Returns the microseconds difference between end and start times as a double */
double us_tdiff(struct timeval *end, struct timeval *start) double us_tdiff(struct timeval *end, struct timeval *start)
{ {
@ -1054,7 +1068,7 @@ char *recv_line(struct pool *pool)
enum recv_ret ret = RECV_OK; enum recv_ret ret = RECV_OK;
struct timeval rstart, now; struct timeval rstart, now;
gettimeofday(&rstart, NULL); cgtime(&rstart);
if (!socket_full(pool, true)) { if (!socket_full(pool, true)) {
applog(LOG_DEBUG, "Timed out waiting for data on socket_full"); applog(LOG_DEBUG, "Timed out waiting for data on socket_full");
goto out; goto out;
@ -1079,7 +1093,7 @@ char *recv_line(struct pool *pool)
slen = strlen(s); slen = strlen(s);
recalloc_sock(pool, slen); recalloc_sock(pool, slen);
strcat(pool->sockbuf, s); strcat(pool->sockbuf, s);
gettimeofday(&now, NULL); cgtime(&now);
} while (tdiff(&now, &rstart) < 60 && !strstr(pool->sockbuf, "\n")); } while (tdiff(&now, &rstart) < 60 && !strstr(pool->sockbuf, "\n"));
mutex_unlock(&pool->stratum_lock); mutex_unlock(&pool->stratum_lock);

1
util.h

@ -45,6 +45,7 @@
struct pool; struct pool;
enum dev_reason; enum dev_reason;
struct cgpu_info; struct cgpu_info;
void cgtime(struct timeval *tv);
bool stratum_send(struct pool *pool, char *s, ssize_t len); bool stratum_send(struct pool *pool, char *s, ssize_t len);
bool sock_full(struct pool *pool); bool sock_full(struct pool *pool);
char *recv_line(struct pool *pool); char *recv_line(struct pool *pool);

Loading…
Cancel
Save