1
0
Fork 0
mirror of https://github.com/transmission/transmission synced 2024-12-26 01:27:28 +00:00

save a few bytes from each torrent by removing some vestigal rate control locks

This commit is contained in:
Charles Kerr 2008-03-23 20:54:54 +00:00
parent bc188e86f0
commit c6d57fcdbe

View file

@ -29,7 +29,7 @@
#include "ratecontrol.h" #include "ratecontrol.h"
#include "utils.h" #include "utils.h"
#define GRANULARITY_MSEC 250 #define GRANULARITY_MSEC 500
#define SHORT_INTERVAL_MSEC 4000 #define SHORT_INTERVAL_MSEC 4000
#define LONG_INTERVAL_MSEC 8000 #define LONG_INTERVAL_MSEC 8000
#define HISTORY_SIZE (LONG_INTERVAL_MSEC / GRANULARITY_MSEC) #define HISTORY_SIZE (LONG_INTERVAL_MSEC / GRANULARITY_MSEC)
@ -42,7 +42,6 @@ struct tr_transfer
struct tr_ratecontrol struct tr_ratecontrol
{ {
tr_lock * lock;
int limit; int limit;
int newest; int newest;
struct tr_transfer transfers[HISTORY_SIZE]; struct tr_transfer transfers[HISTORY_SIZE];
@ -78,7 +77,6 @@ tr_rcInit( void )
{ {
tr_ratecontrol * r = tr_new0( tr_ratecontrol, 1 ); tr_ratecontrol * r = tr_new0( tr_ratecontrol, 1 );
r->limit = 0; r->limit = 0;
r->lock = tr_lockNew( );
return r; return r;
} }
@ -86,7 +84,6 @@ void
tr_rcClose( tr_ratecontrol * r ) tr_rcClose( tr_ratecontrol * r )
{ {
tr_rcReset( r ); tr_rcReset( r );
tr_lockFree( r->lock );
tr_free( r ); tr_free( r );
} }
@ -101,16 +98,10 @@ tr_rcBytesLeft( const tr_ratecontrol * r )
if( r != NULL ) if( r != NULL )
{ {
float cur, max, kb; const float cur = rateForInterval( r, SHORT_INTERVAL_MSEC );
const float max = r->limit;
tr_lockLock( (tr_lock*)r->lock ); const float kb = max>cur ? max-cur : 0;
cur = rateForInterval( r, SHORT_INTERVAL_MSEC );
max = r->limit;
kb = max>cur ? max-cur : 0;
bytes = (size_t)(kb * 1024); bytes = (size_t)(kb * 1024);
tr_lockUnlock( (tr_lock*)r->lock );
} }
return bytes; return bytes;
@ -119,15 +110,10 @@ tr_rcBytesLeft( const tr_ratecontrol * r )
float float
tr_rcRate( const tr_ratecontrol * r ) tr_rcRate( const tr_ratecontrol * r )
{ {
float ret; float ret = 0.0f;
if( r == NULL ) if( r )
ret = 0.0f;
else {
tr_lockLock( (tr_lock*)r->lock );
ret = rateForInterval( r, LONG_INTERVAL_MSEC ); ret = rateForInterval( r, LONG_INTERVAL_MSEC );
tr_lockUnlock( (tr_lock*)r->lock );
}
return ret; return ret;
} }
@ -139,11 +125,8 @@ tr_rcRate( const tr_ratecontrol * r )
void void
tr_rcTransferred( tr_ratecontrol * r, size_t size ) tr_rcTransferred( tr_ratecontrol * r, size_t size )
{ {
uint64_t now; const uint64_t now = tr_date ();
tr_lockLock( (tr_lock*)r->lock );
now = tr_date ();
if( r->transfers[r->newest].date + GRANULARITY_MSEC >= now ) if( r->transfers[r->newest].date + GRANULARITY_MSEC >= now )
r->transfers[r->newest].size += size; r->transfers[r->newest].size += size;
else { else {
@ -151,25 +134,19 @@ tr_rcTransferred( tr_ratecontrol * r, size_t size )
r->transfers[r->newest].date = now; r->transfers[r->newest].date = now;
r->transfers[r->newest].size = size; r->transfers[r->newest].size = size;
} }
tr_lockUnlock( (tr_lock*)r->lock );
} }
void void
tr_rcReset( tr_ratecontrol * r ) tr_rcReset( tr_ratecontrol * r )
{ {
tr_lockLock( (tr_lock*)r->lock );
r->newest = 0; r->newest = 0;
memset( r->transfers, 0, sizeof(struct tr_transfer) * HISTORY_SIZE ); memset( r->transfers, 0, sizeof(struct tr_transfer) * HISTORY_SIZE );
tr_lockUnlock( (tr_lock*)r->lock );
} }
void void
tr_rcSetLimit( tr_ratecontrol * r, int limit ) tr_rcSetLimit( tr_ratecontrol * r, int limit )
{ {
tr_lockLock( (tr_lock*)r->lock );
r->limit = limit; r->limit = limit;
tr_lockUnlock( (tr_lock*)r->lock );
} }
int int