gethashespersec and added version and hashespersec to getinfo
authors_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
Tue, 10 Aug 2010 22:55:23 +0000 (22:55 +0000)
committers_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
Tue, 10 Aug 2010 22:55:23 +0000 (22:55 +0000)
git-svn-id: https://bitcoin.svn.sourceforge.net/svnroot/bitcoin/trunk@127 1a98c847-1fd6-4fd8-948a-caf3550aa51b

main.cpp
main.h
rpc.cpp
serialize.h

index 2d71437..441f49a 100644 (file)
--- a/main.cpp
+++ b/main.cpp
@@ -53,6 +53,9 @@ CCriticalSection cs_mapAddressBook;
 \r
 vector<unsigned char> vchDefaultKey;\r
 \r
+double dHashesPerSec;\r
+int64 nHPSTimerStart;\r
+\r
 // Settings\r
 int fGenerateBitcoins = false;\r
 int64 nTransactionFee = 0;\r
@@ -2542,6 +2545,9 @@ void ThreadBitcoinMiner(void* parg)
         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
@@ -2768,25 +2774,28 @@ void BitcoinMiner()
 \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
diff --git a/main.h b/main.h
index 093eb9d..2ddac59 100644 (file)
--- a/main.h
+++ b/main.h
@@ -42,6 +42,8 @@ extern CCriticalSection cs_mapRequestCount;
 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
diff --git a/rpc.cpp b/rpc.cpp
index d058981..56e5bb5 100644 (file)
--- a/rpc.cpp
+++ b/rpc.cpp
@@ -217,13 +217,28 @@ Value setgenerate(const Array& params, bool fHelp)
 }\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
@@ -231,6 +246,7 @@ Value getinfo(const Array& params, bool fHelp)
     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
@@ -467,6 +483,7 @@ Value getreceivedbylabel(const Array& params, bool fHelp)
 }\r
 \r
 \r
+\r
 struct tallyitem\r
 {\r
     int64 nAmount;\r
@@ -635,6 +652,7 @@ pair<string, rpcfn_type> pCallTable[] =
     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
index 6120a36..1afd6c0 100644 (file)
@@ -20,7 +20,7 @@ class CDataStream;
 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