← Commit list

7fe13265ac

Daniel Stenberg
Daniel Stenberg
2026-09-01
SUCCESS Duration: 397s

Subject

perf/percent: basic percent encode/decode performance test

Binary

No binary (build failed)

Architecture & Compiler Flags

Architecture: x86_64-linux-gnu Compiler: gcc (Ubuntu 11.4.0-1ubuntu1~22.04.3) 11.4.0

—

Build Log

(log yok)

Commit Diff GitHub →

tests/perf/Makefile.inc+1 -0
@@ -44,5 +44,6 @@ CURLX_C = \
# All performance test programs
TESTS_C = \
base64.c \
+ percent.c \
snprintf.c \
urlparser.c
tests/perf/percent.c+78 -0
@@ -0,0 +1,78 @@
+/***************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) Daniel Stenberg, <[email protected]>, et al.
+ *
+ * This software is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution. The terms
+ * are also available at https://curl.se/docs/copyright.html.
+ *
+ * You may opt to use, copy, modify, merge, publish, distribute and/or sell
+ * copies of the Software, and permit persons to whom the Software is
+ * furnished to do so, under the terms of the COPYING file.
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+ * KIND, either express or implied.
+ *
+ * SPDX-License-Identifier: curl
+ *
+ ***************************************************************************/
+#include "first.h"
+
+static int test_percent(int argc, const char **argv)
+{
+ struct curltime start;
+ struct curltime end;
+ timediff_t us;
+ long long hn;
+ curl_off_t loops = 2500000, loop;
+ unsigned char array[256];
+ unsigned int c;
+
+ if(argc > 1) {
+ const char *ptr = argv[1];
+ curl_off_t num;
+ if(!curlx_str_number(&ptr, &num, CURL_OFF_T_MAX) && !*ptr)
+ loops = num;
+ }
+
+ for(c = 0; c < 256; c++)
+ array[c] = (unsigned char)c;
+
+ start = curlx_now();
+ for(loop = 0; loop < loops; loop++) {
+ char *encoded =
+ curl_easy_escape(NULL, (char *)array, (int)sizeof(array));
+ if(encoded) {
+ char *unesc = NULL;
+ int unlen = 0;
+ /* now unescape it again */
+ unesc = curl_easy_unescape(NULL, encoded, 0, &unlen);
+ if(!unesc) {
+ curl_mfprintf(stderr, "unexpected unescape error\n");
+ return 1;
+ }
+ curl_free(unesc);
+ }
+ else {
+ curl_mfprintf(stderr, "unexpected escape error\n");
+ return 1;
+ }
+ curl_free(encoded);
+ }
+ end = curlx_now();
+ us = curlx_timediff_us(end, start); /* how many microseconds */
+ hn = loop ? us * 100000 / loops : 0; /* 100 times too big */
+ curl_mprintf("Loops: %" CURL_FORMAT_CURL_OFF_T "\n"
+ "Time: %lld usecs\n"
+ "Time/loop: %lld.%0lld ns\n",
+ loops,
+ (long long)us,
+ (long long)hn / 100,
+ (long long)hn % 100);
+ return 0;
+}