\r
vector<unsigned char> vchDefaultKey;\r
\r
+double dHashesPerSec;\r
+int64 nHPSTimerStart;\r
+\r
// Settings\r
int fGenerateBitcoins = false;\r
int64 nTransactionFee = 0;\r
PrintException(NULL, "ThreadBitcoinMiner()");\r
}\r
UIThreadCall(bind(CalledSetStatusBar, "", 0));\r
+ nHPSTimerStart = 0;\r
+ if (vnThreadsRunning[3] == 0)\r
+ dHashesPerSec = 0;\r
printf("ThreadBitcoinMiner exiting, %d threads remaining\n", vnThreadsRunning[3]);\r
}\r
\r
\r
// Update nTime every few seconds\r
const unsigned int nMask = 0xffff;\r
+ const int nHashesPerCycle = (nMask+1);\r
if ((++tmp.block.nNonce & nMask) == 0)\r
{\r
// Meter hashes/sec\r
- static int64 nTimerStart;\r
- static int nHashCounter;\r
- if (nTimerStart == 0)\r
- nTimerStart = GetTimeMillis();\r
+ static int nCycleCounter;\r
+ if (nHPSTimerStart == 0)\r
+ {\r
+ nHPSTimerStart = GetTimeMillis();\r
+ nCycleCounter = 0;\r
+ }\r
else\r
- nHashCounter++;\r
- if (GetTimeMillis() - nTimerStart > 4000)\r
+ nCycleCounter++;\r
+ if (GetTimeMillis() - nHPSTimerStart > 4000)\r
{\r
static CCriticalSection cs;\r
CRITICAL_BLOCK(cs)\r
{\r
- if (GetTimeMillis() - nTimerStart > 4000)\r
+ if (GetTimeMillis() - nHPSTimerStart > 4000)\r
{\r
- double dHashesPerSec = 1000.0 * (nMask+1) * nHashCounter / (GetTimeMillis() - nTimerStart);\r
- nTimerStart = GetTimeMillis();\r
- nHashCounter = 0;\r
+ dHashesPerSec = 1000.0 * nHashesPerCycle * nCycleCounter / (GetTimeMillis() - nHPSTimerStart);\r
+ nHPSTimerStart = GetTimeMillis();\r
+ nCycleCounter = 0;\r
string strStatus = strprintf(" %.0f khash/s", dHashesPerSec/1000.0);\r
UIThreadCall(bind(CalledSetStatusBar, strStatus, 0));\r
static int64 nLogTime;\r
extern map<string, string> mapAddressBook;\r
extern CCriticalSection cs_mapAddressBook;\r
extern vector<unsigned char> vchDefaultKey;\r
+extern double dHashesPerSec;\r
+extern int64 nHPSTimerStart;\r
\r
// Settings\r
extern int fGenerateBitcoins;\r
}\r
\r
\r
+Value gethashespersec(const Array& params, bool fHelp)\r
+{\r
+ if (fHelp || params.size() != 0)\r
+ throw runtime_error(\r
+ "gethashespersec\n"\r
+ "Returns a recent hashes per second performance measurement while generating.");\r
+\r
+ if (GetTimeMillis() - nHPSTimerStart > 8000)\r
+ return (int64)0;\r
+ return (int64)dHashesPerSec;\r
+}\r
+\r
+\r
Value getinfo(const Array& params, bool fHelp)\r
{\r
if (fHelp || params.size() != 0)\r
throw runtime_error(\r
- "getinfo");\r
+ "getinfo\n"\r
+ "Returns an object containing various state info.");\r
\r
Object obj;\r
+ obj.push_back(Pair("version", (int)VERSION));\r
obj.push_back(Pair("balance", (double)GetBalance() / (double)COIN));\r
obj.push_back(Pair("blocks", (int)nBestHeight + 1));\r
obj.push_back(Pair("connections", (int)vNodes.size()));\r
obj.push_back(Pair("generate", (bool)fGenerateBitcoins));\r
obj.push_back(Pair("genproclimit", (int)(fLimitProcessors ? nLimitProcessors : -1)));\r
obj.push_back(Pair("difficulty", (double)GetDifficulty()));\r
+ obj.push_back(Pair("hashespersec", gethashespersec(params, false)));\r
return obj;\r
}\r
\r
}\r
\r
\r
+\r
struct tallyitem\r
{\r
int64 nAmount;\r
make_pair("getbalance", &getbalance),\r
make_pair("getgenerate", &getgenerate),\r
make_pair("setgenerate", &setgenerate),\r
+ make_pair("gethashespersec", &gethashespersec),\r
make_pair("getinfo", &getinfo),\r
make_pair("getnewaddress", &getnewaddress),\r
make_pair("setlabel", &setlabel),\r
class CAutoFile;\r
\r
static const int VERSION = 308;\r
-static const char* pszSubVer = ".2";\r
+static const char* pszSubVer = ".3";\r
\r
\r
\r