changeset 234:99f46c62ba59 draft

gethashespersec and added version and hashespersec to getinfo
author Satoshi Nakamoto <satoshin@gmx.com>
date Thu, 12 Aug 2010 13:23:02 +0000
parents e6e5741f4aca
children 3baca0ce4dac
files main.cpp main.h rpc.cpp serialize.h
diffstat 4 files changed, 41 insertions(+), 12 deletions(-) [+]
line wrap: on
line diff
--- a/main.cpp
+++ b/main.cpp
@@ -53,6 +53,9 @@
 
 vector<unsigned char> vchDefaultKey;
 
+double dHashesPerSec;
+int64 nHPSTimerStart;
+
 // Settings
 int fGenerateBitcoins = false;
 int64 nTransactionFee = 0;
@@ -2542,6 +2545,9 @@
         PrintException(NULL, "ThreadBitcoinMiner()");
     }
     UIThreadCall(bind(CalledSetStatusBar, "", 0));
+    nHPSTimerStart = 0;
+    if (vnThreadsRunning[3] == 0)
+        dHashesPerSec = 0;
     printf("ThreadBitcoinMiner exiting, %d threads remaining\n", vnThreadsRunning[3]);
 }
 
@@ -2768,25 +2774,28 @@
 
             // Update nTime every few seconds
             const unsigned int nMask = 0xffff;
+            const int nHashesPerCycle = (nMask+1);
             if ((++tmp.block.nNonce & nMask) == 0)
             {
                 // Meter hashes/sec
-                static int64 nTimerStart;
-                static int nHashCounter;
-                if (nTimerStart == 0)
-                    nTimerStart = GetTimeMillis();
+                static int nCycleCounter;
+                if (nHPSTimerStart == 0)
+                {
+                    nHPSTimerStart = GetTimeMillis();
+                    nCycleCounter = 0;
+                }
                 else
-                    nHashCounter++;
-                if (GetTimeMillis() - nTimerStart > 4000)
+                    nCycleCounter++;
+                if (GetTimeMillis() - nHPSTimerStart > 4000)
                 {
                     static CCriticalSection cs;
                     CRITICAL_BLOCK(cs)
                     {
-                        if (GetTimeMillis() - nTimerStart > 4000)
+                        if (GetTimeMillis() - nHPSTimerStart > 4000)
                         {
-                            double dHashesPerSec = 1000.0 * (nMask+1) * nHashCounter / (GetTimeMillis() - nTimerStart);
-                            nTimerStart = GetTimeMillis();
-                            nHashCounter = 0;
+                            dHashesPerSec = 1000.0 * nHashesPerCycle * nCycleCounter / (GetTimeMillis() - nHPSTimerStart);
+                            nHPSTimerStart = GetTimeMillis();
+                            nCycleCounter = 0;
                             string strStatus = strprintf("    %.0f khash/s", dHashesPerSec/1000.0);
                             UIThreadCall(bind(CalledSetStatusBar, strStatus, 0));
                             static int64 nLogTime;
--- a/main.h
+++ b/main.h
@@ -42,6 +42,8 @@
 extern map<string, string> mapAddressBook;
 extern CCriticalSection cs_mapAddressBook;
 extern vector<unsigned char> vchDefaultKey;
+extern double dHashesPerSec;
+extern int64 nHPSTimerStart;
 
 // Settings
 extern int fGenerateBitcoins;
--- a/rpc.cpp
+++ b/rpc.cpp
@@ -217,13 +217,28 @@
 }
 
 
+Value gethashespersec(const Array& params, bool fHelp)
+{
+    if (fHelp || params.size() != 0)
+        throw runtime_error(
+            "gethashespersec\n"
+            "Returns a recent hashes per second performance measurement while generating.");
+
+    if (GetTimeMillis() - nHPSTimerStart > 8000)
+        return (int64)0;
+    return (int64)dHashesPerSec;
+}
+
+
 Value getinfo(const Array& params, bool fHelp)
 {
     if (fHelp || params.size() != 0)
         throw runtime_error(
-            "getinfo");
+            "getinfo\n"
+            "Returns an object containing various state info.");
 
     Object obj;
+    obj.push_back(Pair("version",       (int)VERSION));
     obj.push_back(Pair("balance",       (double)GetBalance() / (double)COIN));
     obj.push_back(Pair("blocks",        (int)nBestHeight + 1));
     obj.push_back(Pair("connections",   (int)vNodes.size()));
@@ -231,6 +246,7 @@
     obj.push_back(Pair("generate",      (bool)fGenerateBitcoins));
     obj.push_back(Pair("genproclimit",  (int)(fLimitProcessors ? nLimitProcessors : -1)));
     obj.push_back(Pair("difficulty",    (double)GetDifficulty()));
+    obj.push_back(Pair("hashespersec",  gethashespersec(params, false)));
     return obj;
 }
 
@@ -467,6 +483,7 @@
 }
 
 
+
 struct tallyitem
 {
     int64 nAmount;
@@ -635,6 +652,7 @@
     make_pair("getbalance",            &getbalance),
     make_pair("getgenerate",           &getgenerate),
     make_pair("setgenerate",           &setgenerate),
+    make_pair("gethashespersec",       &gethashespersec),
     make_pair("getinfo",               &getinfo),
     make_pair("getnewaddress",         &getnewaddress),
     make_pair("setlabel",              &setlabel),
--- a/serialize.h
+++ b/serialize.h
@@ -20,7 +20,7 @@
 class CAutoFile;
 
 static const int VERSION = 308;
-static const char* pszSubVer = ".2";
+static const char* pszSubVer = ".3";