tolerate additional IPv4 address now available for gnunet.org
[oweals/gnunet.git] / src / util / benchmark.h
index 6e00906c461c2e27984dbd967f1b17bf87e72d6b..4148ac6555b521f9c1cd00ef74fe1608aa2197f8 100644 (file)
@@ -14,6 +14,8 @@
     
      You should have received a copy of the GNU Affero General Public License
      along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+     SPDX-License-Identifier: AGPL3.0-or-later
 */
 
 /**
  */
 #define MAX_BENCHMARK_URL_LEN 128
 
+#if ENABLE_BENCHMARK
+#define BENCHMARK_START(opname) \
+    struct GNUNET_TIME_Absolute _benchmark_##opname##_start = GNUNET_TIME_absolute_get ()
+#define BENCHMARK_END(opname) do { \
+  { \
+    struct GNUNET_TIME_Absolute _benchmark_##opname##_end = GNUNET_TIME_absolute_get (); \
+    struct BenchmarkData *bd = get_benchmark_data (); \
+    bd->opname##_count++; \
+    bd->opname##_time = \
+        GNUNET_TIME_relative_add (bd->opname##_time, \
+                                  GNUNET_TIME_absolute_get_difference (_benchmark_##opname##_start, \
+                                                                       _benchmark_##opname##_end)); \
+  } \
+} while (0)
+#else
+#define BENCHMARK_START(opname) do { } while (0)
+#define BENCHMARK_END(opname) do { } while (0)
+#endif
+
 
 /**
  * Struct for benchmark data for one URL.
@@ -54,6 +75,16 @@ struct UrlRequestData
    */
   uint64_t count;
 
+  /**
+   * How many bytes were sent in total to request the URL.
+   */
+  uint64_t bytes_sent;
+
+  /**
+   * How many bytes were received in total as response to requesting this URL.
+   */
+  uint64_t bytes_received;
+
   /**
    * Total time spent requesting this URL.
    */
@@ -70,20 +101,40 @@ struct UrlRequestData
   struct GNUNET_TIME_Relative time_min;
 };
 
+#define GNUNET_DECLARE_BENCHMARK_OP(opname) \
+    uint64_t opname##_count; \
+    struct GNUNET_TIME_Relative opname##_time
+
 /**
  * Thread-local struct for benchmarking data.
  */
 struct BenchmarkData
 {
-  /**
-   * Number of eddsa_sign operations.
-   */
-  uint64_t eddsa_sign_count;
-
-  /**
-   * Time spent in eddsa_sign.
-   */
-  struct GNUNET_TIME_Relative eddsa_sign_time;
+  GNUNET_DECLARE_BENCHMARK_OP (ecc_ecdh);
+  GNUNET_DECLARE_BENCHMARK_OP (ecdh_eddsa);
+  GNUNET_DECLARE_BENCHMARK_OP (ecdhe_key_create);
+  GNUNET_DECLARE_BENCHMARK_OP (ecdhe_key_get_public);
+  GNUNET_DECLARE_BENCHMARK_OP (ecdsa_ecdh);
+  GNUNET_DECLARE_BENCHMARK_OP (ecdsa_key_create);
+  GNUNET_DECLARE_BENCHMARK_OP (ecdsa_key_get_public);
+  GNUNET_DECLARE_BENCHMARK_OP (ecdsa_sign);
+  GNUNET_DECLARE_BENCHMARK_OP (ecdsa_verify);
+  GNUNET_DECLARE_BENCHMARK_OP (eddsa_ecdh);
+  GNUNET_DECLARE_BENCHMARK_OP (eddsa_key_create);
+  GNUNET_DECLARE_BENCHMARK_OP (eddsa_key_get_public);
+  GNUNET_DECLARE_BENCHMARK_OP (eddsa_sign);
+  GNUNET_DECLARE_BENCHMARK_OP (eddsa_verify);
+  GNUNET_DECLARE_BENCHMARK_OP (hash);
+  GNUNET_DECLARE_BENCHMARK_OP (hash_context_finish);
+  GNUNET_DECLARE_BENCHMARK_OP (hash_context_read);
+  GNUNET_DECLARE_BENCHMARK_OP (hash_context_start);
+  GNUNET_DECLARE_BENCHMARK_OP (hkdf);
+  GNUNET_DECLARE_BENCHMARK_OP (rsa_blind);
+  GNUNET_DECLARE_BENCHMARK_OP (rsa_private_key_create);
+  GNUNET_DECLARE_BENCHMARK_OP (rsa_private_key_get_public);
+  GNUNET_DECLARE_BENCHMARK_OP (rsa_sign_blinded);
+  GNUNET_DECLARE_BENCHMARK_OP (rsa_unblind);
+  GNUNET_DECLARE_BENCHMARK_OP (rsa_verify);
 
   struct UrlRequestData *urd;
 
@@ -92,6 +143,8 @@ struct BenchmarkData
   unsigned int urd_capacity;
 };
 
+#undef GNUNET_DECLARE_BENCHMARK_OP
+
 
 /**
  * Acquire the benchmark data for the current thread, allocate if necessary.