mirror of
https://github.com/WinampDesktop/winamp.git
synced 2024-09-24 15:54:12 +00:00
118 lines
3 KiB
C++
118 lines
3 KiB
C++
|
#include "bandwidth.h"
|
||
|
#include "global.h"
|
||
|
#include "services/stdServiceImpl.h"
|
||
|
|
||
|
using namespace std;
|
||
|
using namespace uniString;
|
||
|
using namespace stringUtil;
|
||
|
|
||
|
#define DEBUG_LOG(...) do { if (gOptions.statsDebug()) DLOG(__VA_ARGS__); } while (0)
|
||
|
|
||
|
#define LOGNAME "[BANDWIDTH] "
|
||
|
|
||
|
static __uint64 g_bandWidthTable[bandWidth::ALL_OTHER];
|
||
|
static AOL_namespace::rwLock g_bandwidthLock;
|
||
|
|
||
|
const __uint64 bandWidth::getAmount(const bandWidth::usageType_t type)
|
||
|
{
|
||
|
stackRWLock sl (g_bandwidthLock);
|
||
|
|
||
|
if (type < ALL_SENT)
|
||
|
{
|
||
|
return g_bandWidthTable[type];
|
||
|
}
|
||
|
|
||
|
switch (type)
|
||
|
{
|
||
|
case bandWidth::ALL_SENT:
|
||
|
{
|
||
|
return g_bandWidthTable[CLIENT_V1_SENT] +
|
||
|
g_bandWidthTable[CLIENT_V2_SENT] +
|
||
|
g_bandWidthTable[CLIENT_HTTP_SENT] +
|
||
|
g_bandWidthTable[CLIENT_FLV_SENT] +
|
||
|
g_bandWidthTable[CLIENT_M4A_SENT] +
|
||
|
g_bandWidthTable[SOURCE_V1_SENT] +
|
||
|
g_bandWidthTable[SOURCE_V2_SENT] +
|
||
|
g_bandWidthTable[PUBLIC_WEB] +
|
||
|
g_bandWidthTable[PRIVATE_WEB] +
|
||
|
g_bandWidthTable[FLASH_POLICY] +
|
||
|
g_bandWidthTable[RELAY_V2_SENT]+
|
||
|
g_bandWidthTable[YP_SENT] +
|
||
|
g_bandWidthTable[AUTH_AND_METRICS];
|
||
|
}
|
||
|
case bandWidth::ALL_RECV:
|
||
|
{
|
||
|
return g_bandWidthTable[SOURCE_V1_RECV] +
|
||
|
g_bandWidthTable[SOURCE_V2_RECV] +
|
||
|
g_bandWidthTable[RELAY_MISC_RECV] +
|
||
|
g_bandWidthTable[RELAY_V1_RECV] +
|
||
|
g_bandWidthTable[RELAY_V2_RECV] +
|
||
|
g_bandWidthTable[YP_RECV] +
|
||
|
g_bandWidthTable[ADVERTS];
|
||
|
}
|
||
|
case bandWidth::ALL_WEB:
|
||
|
{
|
||
|
return g_bandWidthTable[PUBLIC_WEB] +
|
||
|
g_bandWidthTable[PRIVATE_WEB];
|
||
|
}
|
||
|
case bandWidth::ALL_SOURCE_SENT:
|
||
|
{
|
||
|
return g_bandWidthTable[SOURCE_V1_SENT] +
|
||
|
g_bandWidthTable[SOURCE_V2_SENT];
|
||
|
}
|
||
|
case bandWidth::ALL_SOURCE_RECV:
|
||
|
{
|
||
|
return g_bandWidthTable[SOURCE_V1_RECV] +
|
||
|
g_bandWidthTable[SOURCE_V2_RECV];
|
||
|
}
|
||
|
case bandWidth::ALL_CLIENT_SENT:
|
||
|
{
|
||
|
return g_bandWidthTable[CLIENT_V1_SENT] +
|
||
|
g_bandWidthTable[CLIENT_V2_SENT] +
|
||
|
g_bandWidthTable[CLIENT_HTTP_SENT] +
|
||
|
g_bandWidthTable[CLIENT_FLV_SENT] +
|
||
|
g_bandWidthTable[CLIENT_M4A_SENT];
|
||
|
}
|
||
|
case bandWidth::ALL_RELAY_RECV:
|
||
|
{
|
||
|
return g_bandWidthTable[RELAY_MISC_RECV] +
|
||
|
g_bandWidthTable[RELAY_V1_RECV] +
|
||
|
g_bandWidthTable[RELAY_V2_RECV];
|
||
|
}
|
||
|
case bandWidth::ALL_OTHER:
|
||
|
{
|
||
|
return g_bandWidthTable[FLASH_POLICY] +
|
||
|
g_bandWidthTable[RELAY_V2_SENT] +
|
||
|
g_bandWidthTable[YP_SENT] +
|
||
|
g_bandWidthTable[YP_RECV] +
|
||
|
g_bandWidthTable[AUTH_AND_METRICS] +
|
||
|
g_bandWidthTable[ADVERTS];
|
||
|
}
|
||
|
default:
|
||
|
{
|
||
|
return 0;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void bandWidth::updateAmount(const bandWidth::usageType_t type, const __uint64 amount)
|
||
|
{
|
||
|
if (amount > 0)
|
||
|
{
|
||
|
stackRWLock sl (g_bandwidthLock, false);
|
||
|
g_bandWidthTable[type] += amount;
|
||
|
g_bandWidthTable[bandWidth::ALL] += amount;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void bandWidth::getFinalAmounts()
|
||
|
{
|
||
|
__uint64 all = getAmount(bandWidth::ALL);
|
||
|
if (all > 0)
|
||
|
{
|
||
|
ILOG(LOGNAME "Total: " + tos(all) +
|
||
|
", Sent: " + tos(getAmount(bandWidth::ALL_SENT)) +
|
||
|
", Recv: " + tos(getAmount(bandWidth::ALL_RECV)));
|
||
|
}
|
||
|
}
|