Implement a cross-platform system HTTP client abstraction#2528
Conversation
0890c9b to
73e50a4
Compare
73e50a4 to
f567171
Compare
🤖 Augment PR SummarySummary: Adds a new cross-platform “system HTTP client” abstraction to Sourcemeta Core. Changes:
Technical Notes: The cURL backend shares logic between a link-time and runtime-loaded mode via a small function-pointer API table, and all backends support redirects, timeouts, automatic decompression, and optional maximum response size enforcement. 🤖 Was this summary useful? React with 👍 or 👎 |
| auto operator=(CurlHeaderList &&) -> CurlHeaderList & = delete; | ||
|
|
||
| auto append(const std::string &line) -> void { | ||
| auto *result{this->api_.slist_append(this->list_, line.c_str())}; |
There was a problem hiding this comment.
src/core/http/client_curl.cc:134-139: libcurl failures are currently silent here (e.g. curl_slist_append can return nullptr, and curl_easy_setopt/curl_easy_getinfo can fail), which can drop headers/options or leave response metadata unset without surfacing an error. Consider checking these return codes and failing the request when required configuration/info retrieval cannot be applied.
Severity: medium
Other Locations
src/core/http/client_curl.cc:321src/core/http/client_curl.cc:396
🤖 Was this useful? React with 👍 or 👎, or 🚀 if it prevented an incident/outage.
| void *user_data) -> std::size_t { | ||
| auto *context{static_cast<BodyContext *>(user_data)}; | ||
| if (context->maximum_size.has_value() && | ||
| context->output->size() + (size * count) > |
There was a problem hiding this comment.
src/core/http/client_curl.cc:154-166: the maximum response size check uses output->size() + (size * count), which can overflow size_t and potentially bypass maximum_response_size_ for very large responses/chunks. Consider guarding against overflow in the size arithmetic before comparing/enforcing the limit.
Severity: medium
Other Locations
src/core/http/client_windows.cc:233src/core/http/client_darwin.mm:71
🤖 Was this useful? React with 👍 or 👎, or 🚀 if it prevented an incident/outage.
| this->connect_timeout_.has_value() | ||
| ? static_cast<int>(this->connect_timeout_.value().count()) | ||
| : total_timeout}; | ||
| WinHttpSetTimeouts(request_handle.get(), connect_timeout, connect_timeout, |
There was a problem hiding this comment.
src/core/http/client_windows.cc:149-170: return values from WinHttpSetOption and WinHttpSetTimeouts are ignored, so redirects/timeouts/decompression may silently fail and the request won’t honor the HTTPSystemRequest configuration. Consider checking these APIs and surfacing an HTTPError when WinHTTP configuration cannot be applied.
Severity: medium
Other Locations
src/core/http/client_windows.cc:151src/core/http/client_windows.cc:169
🤖 Was this useful? React with 👍 or 👎, or 🚀 if it prevented an incident/outage.
|
|
||
| auto *headers{&self.response->headers}; | ||
| [http_response.allHeaderFields | ||
| enumerateKeysAndObjectsUsingBlock:^(NSString *name, NSString *value, |
There was a problem hiding this comment.
src/core/http/client_darwin.mm:102-108: NSHTTPURLResponse.allHeaderFields isn’t guaranteed to contain NSString* values for every entry, but the block assumes value is an NSString* and calls UTF8String, which could crash for other Foundation types. Consider defensively validating/casting/stringifying header values before converting to UTF-8.
Severity: low
🤖 Was this useful? React with 👍 or 👎, or 🚀 if it prevented an incident/outage.
| cmake -S . -B ./build | ||
| -DCMAKE_BUILD_TYPE:STRING=Release | ||
| -DSOURCEMETA_CORE_TESTS:BOOL=ON | ||
| -DSOURCEMETA_CORE_TESTS_CI:BOOL=ON |
There was a problem hiding this comment.
.github/workflows/ci.yml:96: CI now enables SOURCEMETA_CORE_TESTS_CI, which runs HTTP integration tests against schemas.sourcemeta.com; this can introduce flaky failures due to network/DNS/service availability rather than code regressions. Consider gating these tests (opt-in job/label, retries, or a skip mechanism when outbound network isn’t available).
Severity: medium
Other Locations
.github/workflows/ci.yml:108test/http/ci/http_system_request_test.cc:8
🤖 Was this useful? React with 👍 or 👎, or 🚀 if it prevented an incident/outage.
| "https://schemas.sourcemeta.com/self/v1/health"}; | ||
| const auto response{request.send()}; | ||
| EXPECT_EQ(response.status, sourcemeta::core::HTTP_STATUS_OK); | ||
| EXPECT_EQ(response.url, "https://schemas.sourcemeta.com/self/v1/health"); |
There was a problem hiding this comment.
test/http/ci/http_system_request_test.cc:13: asserting exact string equality for response.url may be brittle across backends (e.g., normalization around default ports or trailing slashes), causing false failures while behavior is equivalent. Consider asserting on a normalized/parsed URL shape (scheme/host/path) rather than exact string match.
Severity: medium
🤖 Was this useful? React with 👍 or 👎, or 🚀 if it prevented an incident/outage.
There was a problem hiding this comment.
9 issues found and verified against the latest diff
Prompt for AI agents (unresolved issues)
Check if these issues are valid — if so, understand the root cause of each and fix them. If appropriate, use sub-agents to investigate and fix each issue separately.
<file name="src/core/http/include/sourcemeta/core/http_system.h">
<violation number="1" location="src/core/http/include/sourcemeta/core/http_system.h:141">
P2: `maximum_redirects()` accepts values that can overflow when converted to backend API types. Validate/clamp before storing to prevent truncation-driven misconfiguration.</violation>
<violation number="2" location="src/core/http/include/sourcemeta/core/http_system.h:147">
P2: `timeout()` allows durations larger than backend integer ranges. Add range validation to avoid overflow that can produce incorrect or negative-equivalent timeouts.</violation>
</file>
<file name="src/core/http/client_darwin.mm">
<violation number="1" location="src/core/http/client_darwin.mm:154">
P2: `connect_timeout_` is mapped to request idle/read timeout semantics on Darwin, not a connect-phase timeout. This makes timeout behavior inconsistent across backends and can fail requests during slow response gaps after connection.</violation>
</file>
<file name=".github/workflows/ci.yml">
<violation number="1" location=".github/workflows/ci.yml:96">
P2: Enabling `SOURCEMETA_CORE_TESTS_CI` unconditionally in CI runs HTTP integration tests against the live `schemas.sourcemeta.com` service. Transient network or DNS failures will cause false-negative test results. Consider adding a retry mechanism, gating behind a dedicated CI label/job, or skipping when the service is unreachable.</violation>
</file>
<file name="src/core/http/client_curl.cc">
<violation number="1" location="src/core/http/client_curl.cc:136">
P2: Header list allocation failure is silently ignored. This can drop required headers without error and change request semantics.</violation>
<violation number="2" location="src/core/http/client_curl.cc:321">
P2: libcurl option-setting errors are ignored; request can run with unintended defaults. Fail fast on non-CURLE_OK from each curl_easy_setopt/curl_easy_getinfo call.</violation>
</file>
<file name="src/core/http/client_windows.cc">
<violation number="1" location="src/core/http/client_windows.cc:165">
P2: WinHttpSetTimeouts return value is ignored. Timeout configuration failures become silent misconfiguration.</violation>
</file>
Reply with feedback, questions, or to request a fix.
Re-trigger cubic
|
|
||
| /// Set the maximum number of redirects to follow, 20 by default | ||
| auto maximum_redirects(const std::size_t value) -> HTTPSystemRequest & { | ||
| this->maximum_redirects_ = value; |
There was a problem hiding this comment.
P2: maximum_redirects() accepts values that can overflow when converted to backend API types. Validate/clamp before storing to prevent truncation-driven misconfiguration.
Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At src/core/http/include/sourcemeta/core/http_system.h, line 141:
<comment>`maximum_redirects()` accepts values that can overflow when converted to backend API types. Validate/clamp before storing to prevent truncation-driven misconfiguration.</comment>
<file context>
@@ -0,0 +1,192 @@
+
+ /// Set the maximum number of redirects to follow, 20 by default
+ auto maximum_redirects(const std::size_t value) -> HTTPSystemRequest & {
+ this->maximum_redirects_ = value;
+ return *this;
+ }
</file context>
|
|
||
| /// Set the total request timeout, 30 seconds by default | ||
| auto timeout(const std::chrono::milliseconds value) -> HTTPSystemRequest & { | ||
| this->timeout_ = value; |
There was a problem hiding this comment.
P2: timeout() allows durations larger than backend integer ranges. Add range validation to avoid overflow that can produce incorrect or negative-equivalent timeouts.
Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At src/core/http/include/sourcemeta/core/http_system.h, line 147:
<comment>`timeout()` allows durations larger than backend integer ranges. Add range validation to avoid overflow that can produce incorrect or negative-equivalent timeouts.</comment>
<file context>
@@ -0,0 +1,192 @@
+
+ /// Set the total request timeout, 30 seconds by default
+ auto timeout(const std::chrono::milliseconds value) -> HTTPSystemRequest & {
+ this->timeout_ = value;
+ return *this;
+ }
</file context>
|
|
||
| auto append(const std::string &line) -> void { | ||
| auto *result{this->api_.slist_append(this->list_, line.c_str())}; | ||
| if (result) { |
There was a problem hiding this comment.
P2: Header list allocation failure is silently ignored. This can drop required headers without error and change request semantics.
Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At src/core/http/client_curl.cc, line 136:
<comment>Header list allocation failure is silently ignored. This can drop required headers without error and change request semantics.</comment>
<file context>
@@ -0,0 +1,409 @@
+
+ auto append(const std::string &line) -> void {
+ auto *result{this->api_.slist_append(this->list_, line.c_str())};
+ if (result) {
+ this->list_ = result;
+ }
</file context>
| } | ||
|
|
||
| HTTPResponse response; | ||
| api.easy_setopt(handle.get(), CURLOPT_URL, this->url_.c_str()); |
There was a problem hiding this comment.
P2: libcurl option-setting errors are ignored; request can run with unintended defaults. Fail fast on non-CURLE_OK from each curl_easy_setopt/curl_easy_getinfo call.
Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At src/core/http/client_curl.cc, line 321:
<comment>libcurl option-setting errors are ignored; request can run with unintended defaults. Fail fast on non-CURLE_OK from each curl_easy_setopt/curl_easy_getinfo call.</comment>
<file context>
@@ -0,0 +1,409 @@
+ }
+
+ HTTPResponse response;
+ api.easy_setopt(handle.get(), CURLOPT_URL, this->url_.c_str());
+ api.easy_setopt(handle.get(), CURLOPT_FOLLOWLOCATION,
+ this->follow_redirects_ ? 1L : 0L);
</file context>
| configuration.timeoutIntervalForResource = | ||
| static_cast<double>(this->timeout_.count()) / 1000.0; | ||
| if (this->connect_timeout_.has_value()) { | ||
| configuration.timeoutIntervalForRequest = |
There was a problem hiding this comment.
P2: connect_timeout_ is mapped to request idle/read timeout semantics on Darwin, not a connect-phase timeout. This makes timeout behavior inconsistent across backends and can fail requests during slow response gaps after connection.
Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At src/core/http/client_darwin.mm, line 154:
<comment>`connect_timeout_` is mapped to request idle/read timeout semantics on Darwin, not a connect-phase timeout. This makes timeout behavior inconsistent across backends and can fail requests during slow response gaps after connection.</comment>
<file context>
@@ -0,0 +1,192 @@
+ configuration.timeoutIntervalForResource =
+ static_cast<double>(this->timeout_.count()) / 1000.0;
+ if (this->connect_timeout_.has_value()) {
+ configuration.timeoutIntervalForRequest =
+ static_cast<double>(this->connect_timeout_.value().count()) /
+ 1000.0;
</file context>
| this->connect_timeout_.has_value() | ||
| ? static_cast<int>(this->connect_timeout_.value().count()) | ||
| : total_timeout}; | ||
| WinHttpSetTimeouts(request_handle.get(), connect_timeout, connect_timeout, |
There was a problem hiding this comment.
P2: WinHttpSetTimeouts return value is ignored. Timeout configuration failures become silent misconfiguration.
Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At src/core/http/client_windows.cc, line 165:
<comment>WinHttpSetTimeouts return value is ignored. Timeout configuration failures become silent misconfiguration.</comment>
<file context>
@@ -0,0 +1,256 @@
+ this->connect_timeout_.has_value()
+ ? static_cast<int>(this->connect_timeout_.value().count())
+ : total_timeout};
+ WinHttpSetTimeouts(request_handle.get(), connect_timeout, connect_timeout,
+ total_timeout, total_timeout);
+
</file context>
| cmake -S . -B ./build | ||
| -DCMAKE_BUILD_TYPE:STRING=Release | ||
| -DSOURCEMETA_CORE_TESTS:BOOL=ON | ||
| -DSOURCEMETA_CORE_TESTS_CI:BOOL=ON |
There was a problem hiding this comment.
P2: Enabling SOURCEMETA_CORE_TESTS_CI unconditionally in CI runs HTTP integration tests against the live schemas.sourcemeta.com service. Transient network or DNS failures will cause false-negative test results. Consider adding a retry mechanism, gating behind a dedicated CI label/job, or skipping when the service is unreachable.
Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At .github/workflows/ci.yml, line 96:
<comment>Enabling `SOURCEMETA_CORE_TESTS_CI` unconditionally in CI runs HTTP integration tests against the live `schemas.sourcemeta.com` service. Transient network or DNS failures will cause false-negative test results. Consider adding a retry mechanism, gating behind a dedicated CI label/job, or skipping when the service is unreachable.</comment>
<file context>
@@ -93,6 +93,7 @@ jobs:
cmake -S . -B ./build
-DCMAKE_BUILD_TYPE:STRING=Release
-DSOURCEMETA_CORE_TESTS:BOOL=ON
+ -DSOURCEMETA_CORE_TESTS_CI:BOOL=ON
-DSOURCEMETA_CORE_BENCHMARK:BOOL=ON
-DSOURCEMETA_CORE_DOCS:BOOL=OFF
</file context>
Signed-off-by: Juan Cruz Viotti <jv@jviotti.com>
dcc2564 to
55ffefb
Compare
55ffefb to
0611d41
Compare
There was a problem hiding this comment.
Benchmark (linux/llvm)
Details
| Benchmark suite | Current: 15e91b5 | Previous: 8cc4718 | Ratio |
|---|---|---|---|
Regex_Lower_S_Or_Upper_S_Asterisk |
2.5043952700548684 ns/iter |
2.8156307009646726 ns/iter |
0.89 |
Regex_Caret_Lower_S_Or_Upper_S_Asterisk_Dollar |
2.1800998008819517 ns/iter |
2.463348366074538 ns/iter |
0.89 |
Regex_Period_Asterisk |
2.180638536764764 ns/iter |
2.4617047634927394 ns/iter |
0.89 |
Regex_Group_Period_Asterisk_Group |
2.491568815977314 ns/iter |
2.8151947048760926 ns/iter |
0.89 |
Regex_Period_Plus |
3.117266443618897 ns/iter |
4.224681981702455 ns/iter |
0.74 |
Regex_Period |
2.8024207847838527 ns/iter |
3.8691645328961126 ns/iter |
0.72 |
Regex_Caret_Period_Plus_Dollar |
2.803274086864416 ns/iter |
3.8697604095820632 ns/iter |
0.72 |
Regex_Caret_Group_Period_Plus_Group_Dollar |
3.1122996805210006 ns/iter |
4.220290814793648 ns/iter |
0.74 |
Regex_Caret_Period_Asterisk_Dollar |
2.491701775890014 ns/iter |
3.175717817318527 ns/iter |
0.78 |
Regex_Caret_Group_Period_Asterisk_Group_Dollar |
2.1813468394475524 ns/iter |
2.818053828296593 ns/iter |
0.77 |
Regex_Caret_X_Hyphen |
5.6119476152716095 ns/iter |
7.039442436225255 ns/iter |
0.80 |
Regex_Period_Md_Dollar |
28.091692858182693 ns/iter |
26.455207849162953 ns/iter |
1.06 |
Regex_Caret_Slash_Period_Asterisk |
6.228409141092894 ns/iter |
7.693009946919405 ns/iter |
0.81 |
Regex_Caret_Period_Range_Dollar |
3.7335883032534736 ns/iter |
3.8727090782388327 ns/iter |
0.96 |
Regex_Nested_Backtrack |
44.23671075734317 ns/iter |
37.10696803974887 ns/iter |
1.19 |
JSON_Array_Of_Objects_Unique |
408.81008107181947 ns/iter |
444.20021572608863 ns/iter |
0.92 |
JSON_Parse_1 |
4884.311396368454 ns/iter |
4757.524556208544 ns/iter |
1.03 |
JSON_Parse_Real |
5500.174064498947 ns/iter |
5326.640874526267 ns/iter |
1.03 |
JSON_Parse_Decimal |
7709.29510674696 ns/iter |
7788.020395284032 ns/iter |
0.99 |
JSON_Parse_Schema_ISO_Language |
3401948.17961186 ns/iter |
3499798.0398008907 ns/iter |
0.97 |
JSON_Parse_Integer |
3763.581637158918 ns/iter |
3976.4839314205756 ns/iter |
0.95 |
JSON_Parse_String_NonSSO_Plain |
5158.456809389788 ns/iter |
5084.1877202926535 ns/iter |
1.01 |
JSON_Parse_String_SSO_Plain |
2799.6125584422853 ns/iter |
2778.123651287989 ns/iter |
1.01 |
JSON_Parse_String_Escape_Heavy |
13943.01852920682 ns/iter |
14643.650375703817 ns/iter |
0.95 |
JSON_Parse_Object_Short_Keys |
7750.64372191184 ns/iter |
7764.679445630389 ns/iter |
1.00 |
JSON_Parse_Object_Scalar_Properties |
4037.2019209187883 ns/iter |
3850.86835690143 ns/iter |
1.05 |
JSON_Parse_Object_Array_Properties |
5719.61170005902 ns/iter |
5718.361681781186 ns/iter |
1.00 |
JSON_Parse_Object_Object_Properties |
5737.75717413979 ns/iter |
5690.4300582537935 ns/iter |
1.01 |
JSON_Parse_Nested_Containers |
44577.43428680389 ns/iter |
46236.16596732906 ns/iter |
0.96 |
JSON_From_String_Copy |
20.572663788029114 ns/iter |
22.879959601155434 ns/iter |
0.90 |
JSON_From_String_Temporary |
17.78891043096609 ns/iter |
20.413384417112063 ns/iter |
0.87 |
JSON_Number_To_Double |
22.87608264398521 ns/iter |
22.95619496534264 ns/iter |
1.00 |
JSON_Object_At_Last_Key/8 |
3.75375349213719 ns/iter |
3.8762367484757028 ns/iter |
0.97 |
JSON_Object_At_Last_Key/32 |
11.94331456351558 ns/iter |
13.02994839201094 ns/iter |
0.92 |
JSON_Object_At_Last_Key/128 |
48.283950615583336 ns/iter |
47.03383045659184 ns/iter |
1.03 |
JSON_Object_At_Last_Key/512 |
383.2353420984974 ns/iter |
366.75866986184315 ns/iter |
1.04 |
JSON_Fast_Hash_Helm_Chart_Lock |
60.43251007067362 ns/iter |
72.81320103060604 ns/iter |
0.83 |
JSON_Equality_Helm_Chart_Lock |
158.65855513375212 ns/iter |
160.82744541445973 ns/iter |
0.99 |
JSON_Divisible_By_Decimal |
243.20909286708107 ns/iter |
248.74527696378675 ns/iter |
0.98 |
JSON_String_Equal/10 |
7.160490143932489 ns/iter |
6.109661117132174 ns/iter |
1.17 |
JSON_String_Equal/100 |
6.861259718337364 ns/iter |
6.687837425866767 ns/iter |
1.03 |
JSON_String_Equal_Small_By_Perfect_Hash/10 |
0.935212400265319 ns/iter |
1.0556085150386019 ns/iter |
0.89 |
JSON_String_Equal_Small_By_Runtime_Perfect_Hash/10 |
14.93416393537132 ns/iter |
12.34274332135921 ns/iter |
1.21 |
JSON_String_Fast_Hash/10 |
2.4901185785376727 ns/iter |
2.4823847034277 ns/iter |
1.00 |
JSON_String_Fast_Hash/100 |
2.4921081502898286 ns/iter |
2.4641360891570225 ns/iter |
1.01 |
JSON_String_Key_Hash/10 |
2.738949592140605 ns/iter |
2.463138792963701 ns/iter |
1.11 |
JSON_String_Key_Hash/100 |
9.085696024009819 ns/iter |
8.088235610124437 ns/iter |
1.12 |
JSON_Object_Defines_Miss_Same_Length |
2.7443419513113763 ns/iter |
2.981125770378 ns/iter |
0.92 |
JSON_Object_Defines_Miss_Too_Small |
3.7350851499593554 ns/iter |
4.222984968605876 ns/iter |
0.88 |
JSON_Object_Defines_Miss_Too_Large |
2.6762252304225584 ns/iter |
2.9099548803424016 ns/iter |
0.92 |
Pointer_Object_Traverse |
24.178056257343187 ns/iter |
25.74308727792707 ns/iter |
0.94 |
Pointer_Object_Try_Traverse |
28.45796648886305 ns/iter |
30.674251928131838 ns/iter |
0.93 |
Pointer_Push_Back_Pointer_To_Weak_Pointer |
207.850830658179 ns/iter |
197.91891590061195 ns/iter |
1.05 |
Pointer_Walker_Schema_ISO_Language |
1759382.4522610526 ns/iter |
1827710.7565446096 ns/iter |
0.96 |
Pointer_Maybe_Tracked_Deeply_Nested/0 |
1230911.526041625 ns/iter |
1239590.0645161518 ns/iter |
0.99 |
Pointer_Maybe_Tracked_Deeply_Nested/1 |
1567032.4489796127 ns/iter |
1566242.6116071413 ns/iter |
1.00 |
Pointer_Position_Tracker_Get_Deeply_Nested |
672.1913140508691 ns/iter |
718.4756792419525 ns/iter |
0.94 |
URITemplateRouter_Create |
33766.99547877413 ns/iter |
30948.368970992546 ns/iter |
1.09 |
URITemplateRouter_Match |
175.44835755104646 ns/iter |
182.2162353564315 ns/iter |
0.96 |
URITemplateRouter_Match_BasePath |
202.57783297787017 ns/iter |
217.92006588785208 ns/iter |
0.93 |
URITemplateRouterView_Restore |
7938.241110806008 ns/iter |
8674.388605317181 ns/iter |
0.92 |
URITemplateRouterView_Match |
164.77311412319187 ns/iter |
172.8256573072147 ns/iter |
0.95 |
URITemplateRouterView_Match_BasePath |
187.61326167949034 ns/iter |
196.04989933626322 ns/iter |
0.96 |
URITemplateRouterView_Arguments |
440.3576959404083 ns/iter |
451.84494017343746 ns/iter |
0.97 |
JSONL_Parse_Large |
9774434.35211421 ns/iter |
9167416.346666263 ns/iter |
1.07 |
JSONL_Parse_Large_GZIP |
11379639.000001736 ns/iter |
10922879.749999836 ns/iter |
1.04 |
HTML_Build_Table_100000 |
68172330.40000018 ns/iter |
71511895.90000513 ns/iter |
0.95 |
HTML_Render_Table_100000 |
5425906.196850928 ns/iter |
4881447.867133333 ns/iter |
1.11 |
GZIP_Compress_ISO_Language_Set_3_Locations |
33564457.66666552 ns/iter |
35962984.894737065 ns/iter |
0.93 |
GZIP_Decompress_ISO_Language_Set_3_Locations |
4257334.503067573 ns/iter |
4273794.506097945 ns/iter |
1.00 |
GZIP_Compress_ISO_Language_Set_3_Schema |
1889667.9459458396 ns/iter |
2135543.798780551 ns/iter |
0.88 |
GZIP_Decompress_ISO_Language_Set_3_Schema |
352535.1664989953 ns/iter |
277583.9999999787 ns/iter |
1.27 |
JOSE_VerifySignature_RS256 |
60341.46360582761 ns/iter |
63838.899268739544 ns/iter |
0.95 |
JOSE_VerifySignature_ES512 |
2358725.2222222276 ns/iter |
2693099.861538538 ns/iter |
0.88 |
This comment was automatically generated by workflow using github-action-benchmark.
There was a problem hiding this comment.
Benchmark (macos/llvm)
Details
| Benchmark suite | Current: 15e91b5 | Previous: 8cc4718 | Ratio |
|---|---|---|---|
Regex_Lower_S_Or_Upper_S_Asterisk |
1.771042700913171 ns/iter |
2.3109914921063894 ns/iter |
0.77 |
Regex_Caret_Lower_S_Or_Upper_S_Asterisk_Dollar |
1.8069315830705204 ns/iter |
2.147494012492912 ns/iter |
0.84 |
Regex_Period_Asterisk |
1.7779934860260738 ns/iter |
2.612487986724751 ns/iter |
0.68 |
Regex_Group_Period_Asterisk_Group |
1.9246047503509986 ns/iter |
2.1638214478855784 ns/iter |
0.89 |
Regex_Period_Plus |
2.3161332015709455 ns/iter |
2.5354249118670613 ns/iter |
0.91 |
Regex_Period |
2.0357544486105783 ns/iter |
2.627342969260629 ns/iter |
0.77 |
Regex_Caret_Period_Plus_Dollar |
2.222197870558822 ns/iter |
2.595556171903885 ns/iter |
0.86 |
Regex_Caret_Group_Period_Plus_Group_Dollar |
2.2581349485016733 ns/iter |
2.423151505968675 ns/iter |
0.93 |
Regex_Caret_Period_Asterisk_Dollar |
1.9363453956321344 ns/iter |
2.1592320033897736 ns/iter |
0.90 |
Regex_Caret_Group_Period_Asterisk_Group_Dollar |
1.978029305224305 ns/iter |
2.085981286747236 ns/iter |
0.95 |
Regex_Caret_X_Hyphen |
6.471800122093434 ns/iter |
8.306892637310098 ns/iter |
0.78 |
Regex_Period_Md_Dollar |
17.110202340067413 ns/iter |
22.704344766129022 ns/iter |
0.75 |
Regex_Caret_Slash_Period_Asterisk |
4.486927898148282 ns/iter |
5.643096695784644 ns/iter |
0.80 |
Regex_Caret_Period_Range_Dollar |
1.9644181442330328 ns/iter |
2.5374413093582326 ns/iter |
0.77 |
Regex_Nested_Backtrack |
24.998951272791214 ns/iter |
29.16777803486938 ns/iter |
0.86 |
JSON_Array_Of_Objects_Unique |
335.32266657792826 ns/iter |
420.0116351427246 ns/iter |
0.80 |
JSON_Parse_1 |
3636.6298523212677 ns/iter |
4766.647565350533 ns/iter |
0.76 |
JSON_Parse_Real |
5085.877869203895 ns/iter |
6370.26249191023 ns/iter |
0.80 |
JSON_Parse_Decimal |
5624.721300326662 ns/iter |
6834.64094557151 ns/iter |
0.82 |
JSON_Parse_Schema_ISO_Language |
2955247.6451613074 ns/iter |
3897561.9610388186 ns/iter |
0.76 |
JSON_Parse_Integer |
3180.364513386416 ns/iter |
3692.9674606626586 ns/iter |
0.86 |
JSON_Parse_String_NonSSO_Plain |
3494.178343209702 ns/iter |
4433.294993693247 ns/iter |
0.79 |
JSON_Parse_String_SSO_Plain |
1774.5430973783443 ns/iter |
2145.264419237668 ns/iter |
0.83 |
JSON_Parse_String_Escape_Heavy |
15824.19623296416 ns/iter |
19804.477972315737 ns/iter |
0.80 |
JSON_Parse_Object_Short_Keys |
5202.567910000653 ns/iter |
6440.799325642464 ns/iter |
0.81 |
JSON_Parse_Object_Scalar_Properties |
2681.9140252365964 ns/iter |
3520.641790289996 ns/iter |
0.76 |
JSON_Parse_Object_Array_Properties |
3465.7007184711697 ns/iter |
4547.456895964538 ns/iter |
0.76 |
JSON_Parse_Object_Object_Properties |
3503.469103361908 ns/iter |
4989.694599293121 ns/iter |
0.70 |
JSON_Parse_Nested_Containers |
27831.531048091565 ns/iter |
34593.8685650666 ns/iter |
0.80 |
JSON_From_String_Copy |
23.66173633433458 ns/iter |
33.88394606933448 ns/iter |
0.70 |
JSON_From_String_Temporary |
19.43000145064645 ns/iter |
29.21159320002604 ns/iter |
0.67 |
JSON_Number_To_Double |
33.260326521898875 ns/iter |
43.00041938777272 ns/iter |
0.77 |
JSON_Object_At_Last_Key/8 |
3.742107607824787 ns/iter |
4.365342340273569 ns/iter |
0.86 |
JSON_Object_At_Last_Key/32 |
11.516916857068042 ns/iter |
14.221800437155357 ns/iter |
0.81 |
JSON_Object_At_Last_Key/128 |
54.457837594136706 ns/iter |
58.402352838574295 ns/iter |
0.93 |
JSON_Object_At_Last_Key/512 |
181.76649768143915 ns/iter |
247.53614818776197 ns/iter |
0.73 |
JSON_Fast_Hash_Helm_Chart_Lock |
58.34223277054955 ns/iter |
66.28732858069706 ns/iter |
0.88 |
JSON_Equality_Helm_Chart_Lock |
133.64813538149122 ns/iter |
166.81510350985437 ns/iter |
0.80 |
JSON_Divisible_By_Decimal |
178.01284766550106 ns/iter |
238.6984881976832 ns/iter |
0.75 |
JSON_String_Equal/10 |
7.458282272186299 ns/iter |
8.227128035575953 ns/iter |
0.91 |
JSON_String_Equal/100 |
6.70714253749499 ns/iter |
7.860591361461829 ns/iter |
0.85 |
JSON_String_Equal_Small_By_Perfect_Hash/10 |
0.7611700792934681 ns/iter |
0.8324565341212145 ns/iter |
0.91 |
JSON_String_Equal_Small_By_Runtime_Perfect_Hash/10 |
3.259320572142822 ns/iter |
3.8988657508019666 ns/iter |
0.84 |
JSON_String_Fast_Hash/10 |
2.6965462990546896 ns/iter |
2.596193126710756 ns/iter |
1.04 |
JSON_String_Fast_Hash/100 |
2.200198451905795 ns/iter |
2.4887125366504486 ns/iter |
0.88 |
JSON_String_Key_Hash/10 |
1.3757537695751054 ns/iter |
1.6491119016951523 ns/iter |
0.83 |
JSON_String_Key_Hash/100 |
2.1623976986218985 ns/iter |
2.802576177532386 ns/iter |
0.77 |
JSON_Object_Defines_Miss_Same_Length |
2.3295188045737527 ns/iter |
4.464525042125819 ns/iter |
0.52 |
JSON_Object_Defines_Miss_Too_Small |
2.387139699671595 ns/iter |
2.940615769779611 ns/iter |
0.81 |
JSON_Object_Defines_Miss_Too_Large |
2.3333493304625907 ns/iter |
3.311204418310936 ns/iter |
0.70 |
Pointer_Object_Traverse |
13.806383348926621 ns/iter |
19.243814084285205 ns/iter |
0.72 |
Pointer_Object_Try_Traverse |
22.866385509381534 ns/iter |
33.56020473534882 ns/iter |
0.68 |
Pointer_Push_Back_Pointer_To_Weak_Pointer |
153.47899916362707 ns/iter |
238.071189378282 ns/iter |
0.64 |
Pointer_Walker_Schema_ISO_Language |
2365745.583038713 ns/iter |
3810275.3544974625 ns/iter |
0.62 |
Pointer_Maybe_Tracked_Deeply_Nested/0 |
911299.5689654304 ns/iter |
1433296.778151173 ns/iter |
0.64 |
Pointer_Maybe_Tracked_Deeply_Nested/1 |
1305352.1719858018 ns/iter |
1899862.4134899895 ns/iter |
0.69 |
Pointer_Position_Tracker_Get_Deeply_Nested |
362.3155914983313 ns/iter |
510.2640445036355 ns/iter |
0.71 |
URITemplateRouter_Create |
22870.76968016557 ns/iter |
34655.20349801766 ns/iter |
0.66 |
URITemplateRouter_Match |
159.9729411241958 ns/iter |
224.916150983148 ns/iter |
0.71 |
URITemplateRouter_Match_BasePath |
191.17536091055482 ns/iter |
245.15512791913974 ns/iter |
0.78 |
URITemplateRouterView_Restore |
9388.900633031353 ns/iter |
14858.768191227704 ns/iter |
0.63 |
URITemplateRouterView_Match |
130.48141690154534 ns/iter |
178.84804895223473 ns/iter |
0.73 |
URITemplateRouterView_Match_BasePath |
142.76455064156121 ns/iter |
216.54056612126394 ns/iter |
0.66 |
URITemplateRouterView_Arguments |
405.3166929196069 ns/iter |
547.9634732618877 ns/iter |
0.74 |
JSONL_Parse_Large |
11995544.551723469 ns/iter |
18194417.717950273 ns/iter |
0.66 |
JSONL_Parse_Large_GZIP |
13433967.942306098 ns/iter |
19767892.26829424 ns/iter |
0.68 |
HTML_Build_Table_100000 |
62605891.60000336 ns/iter |
73003606.55555475 ns/iter |
0.86 |
HTML_Render_Table_100000 |
3389315.688235349 ns/iter |
4974511.075949631 ns/iter |
0.68 |
GZIP_Compress_ISO_Language_Set_3_Locations |
25634163.461540118 ns/iter |
33612636.90476335 ns/iter |
0.76 |
GZIP_Decompress_ISO_Language_Set_3_Locations |
5562088.000000239 ns/iter |
6062128.335999659 ns/iter |
0.92 |
GZIP_Compress_ISO_Language_Set_3_Schema |
1488599.6008677273 ns/iter |
1693128.67254399 ns/iter |
0.88 |
GZIP_Decompress_ISO_Language_Set_3_Schema |
281722.9382342023 ns/iter |
285833.285823458 ns/iter |
0.99 |
JOSE_VerifySignature_RS256 |
21475.92978071964 ns/iter |
26763.697332524727 ns/iter |
0.80 |
JOSE_VerifySignature_ES512 |
982712.8814016836 ns/iter |
1171767.154191653 ns/iter |
0.84 |
This comment was automatically generated by workflow using github-action-benchmark.
There was a problem hiding this comment.
1 issue found across 2 files (changes from recent commits).
Prompt for AI agents (unresolved issues)
Check if these issues are valid — if so, understand the root cause of each and fix them. If appropriate, use sub-agents to investigate and fix each issue separately.
<file name="src/core/http/include/sourcemeta/core/http_system.h">
<violation number="1" location="src/core/http/include/sourcemeta/core/http_system.h:141">
P2: `maximum_redirects()` accepts values that can overflow when converted to backend API types. Validate/clamp before storing to prevent truncation-driven misconfiguration.</violation>
<violation number="2" location="src/core/http/include/sourcemeta/core/http_system.h:147">
P2: `timeout()` allows durations larger than backend integer ranges. Add range validation to avoid overflow that can produce incorrect or negative-equivalent timeouts.</violation>
</file>
<file name="src/core/http/client_darwin.mm">
<violation number="1" location="src/core/http/client_darwin.mm:154">
P2: `connect_timeout_` is mapped to request idle/read timeout semantics on Darwin, not a connect-phase timeout. This makes timeout behavior inconsistent across backends and can fail requests during slow response gaps after connection.</violation>
</file>
<file name=".github/workflows/ci.yml">
<violation number="1" location=".github/workflows/ci.yml:96">
P2: Enabling `SOURCEMETA_CORE_TESTS_CI` unconditionally in CI runs HTTP integration tests against the live `schemas.sourcemeta.com` service. Transient network or DNS failures will cause false-negative test results. Consider adding a retry mechanism, gating behind a dedicated CI label/job, or skipping when the service is unreachable.</violation>
</file>
<file name="src/core/http/client_curl.cc">
<violation number="1" location="src/core/http/client_curl.cc:136">
P2: Header list allocation failure is silently ignored. This can drop required headers without error and change request semantics.</violation>
<violation number="2" location="src/core/http/client_curl.cc:321">
P2: libcurl option-setting errors are ignored; request can run with unintended defaults. Fail fast on non-CURLE_OK from each curl_easy_setopt/curl_easy_getinfo call.</violation>
</file>
<file name="src/core/http/client_windows.cc">
<violation number="1" location="src/core/http/client_windows.cc:165">
P2: WinHttpSetTimeouts return value is ignored. Timeout configuration failures become silent misconfiguration.</violation>
</file>
Tip: Review your code locally with the cubic CLI to iterate faster.
Re-trigger cubic
There was a problem hiding this comment.
1 issue found across 1 file (changes from recent commits).
Prompt for AI agents (unresolved issues)
Check if these issues are valid — if so, understand the root cause of each and fix them. If appropriate, use sub-agents to investigate and fix each issue separately.
<file name="src/core/http/include/sourcemeta/core/http_system.h">
<violation number="1" location="src/core/http/include/sourcemeta/core/http_system.h:141">
P2: `maximum_redirects()` accepts values that can overflow when converted to backend API types. Validate/clamp before storing to prevent truncation-driven misconfiguration.</violation>
<violation number="2" location="src/core/http/include/sourcemeta/core/http_system.h:147">
P2: `timeout()` allows durations larger than backend integer ranges. Add range validation to avoid overflow that can produce incorrect or negative-equivalent timeouts.</violation>
</file>
<file name="src/core/http/client_darwin.mm">
<violation number="1" location="src/core/http/client_darwin.mm:154">
P2: `connect_timeout_` is mapped to request idle/read timeout semantics on Darwin, not a connect-phase timeout. This makes timeout behavior inconsistent across backends and can fail requests during slow response gaps after connection.</violation>
</file>
<file name=".github/workflows/ci.yml">
<violation number="1" location=".github/workflows/ci.yml:96">
P2: Enabling `SOURCEMETA_CORE_TESTS_CI` unconditionally in CI runs HTTP integration tests against the live `schemas.sourcemeta.com` service. Transient network or DNS failures will cause false-negative test results. Consider adding a retry mechanism, gating behind a dedicated CI label/job, or skipping when the service is unreachable.</violation>
</file>
<file name="src/core/http/client_curl.cc">
<violation number="1" location="src/core/http/client_curl.cc:136">
P2: Header list allocation failure is silently ignored. This can drop required headers without error and change request semantics.</violation>
<violation number="2" location="src/core/http/client_curl.cc:321">
P2: libcurl option-setting errors are ignored; request can run with unintended defaults. Fail fast on non-CURLE_OK from each curl_easy_setopt/curl_easy_getinfo call.</violation>
</file>
<file name="src/core/http/client_windows.cc">
<violation number="1" location="src/core/http/client_windows.cc:165">
P2: WinHttpSetTimeouts return value is ignored. Timeout configuration failures become silent misconfiguration.</violation>
</file>
Tip: Review your code locally with the cubic CLI to iterate faster.
Re-trigger cubic
There was a problem hiding this comment.
Benchmark (linux/gcc)
Details
| Benchmark suite | Current: 15e91b5 | Previous: 8cc4718 | Ratio |
|---|---|---|---|
JOSE_VerifySignature_RS256 |
24390.81919263432 ns/iter |
24477.169080427142 ns/iter |
1.00 |
JOSE_VerifySignature_ES512 |
641865.3685662393 ns/iter |
644499.9688358385 ns/iter |
1.00 |
GZIP_Compress_ISO_Language_Set_3_Locations |
39452504.555552214 ns/iter |
39392853.83333097 ns/iter |
1.00 |
GZIP_Decompress_ISO_Language_Set_3_Locations |
4044464.1965316446 ns/iter |
4065827.38372134 ns/iter |
0.99 |
GZIP_Compress_ISO_Language_Set_3_Schema |
2287122.7450982025 ns/iter |
2286099.3366015125 ns/iter |
1.00 |
GZIP_Decompress_ISO_Language_Set_3_Schema |
276509.88064234186 ns/iter |
278028.25482451636 ns/iter |
0.99 |
HTML_Build_Table_100000 |
70506527.60000275 ns/iter |
70296137.29999937 ns/iter |
1.00 |
HTML_Render_Table_100000 |
1878919.948509437 ns/iter |
2002931.999999705 ns/iter |
0.94 |
JSONL_Parse_Large |
12394692.70175457 ns/iter |
12411864.303570854 ns/iter |
1.00 |
JSONL_Parse_Large_GZIP |
13963031.55999931 ns/iter |
13910502.300000189 ns/iter |
1.00 |
URITemplateRouter_Create |
30890.85160128638 ns/iter |
30211.324689241643 ns/iter |
1.02 |
URITemplateRouter_Match |
154.73957910092622 ns/iter |
156.60064034394333 ns/iter |
0.99 |
URITemplateRouter_Match_BasePath |
183.66439322597543 ns/iter |
185.9655893471588 ns/iter |
0.99 |
URITemplateRouterView_Restore |
8636.406642023832 ns/iter |
8700.620403854102 ns/iter |
0.99 |
URITemplateRouterView_Match |
126.82798805929666 ns/iter |
126.77290182549558 ns/iter |
1.00 |
URITemplateRouterView_Match_BasePath |
144.78874227776328 ns/iter |
144.88346985762433 ns/iter |
1.00 |
URITemplateRouterView_Arguments |
457.68809682116944 ns/iter |
457.6003802254374 ns/iter |
1.00 |
Pointer_Object_Traverse |
29.616100715494564 ns/iter |
29.624655136244623 ns/iter |
1.00 |
Pointer_Object_Try_Traverse |
22.921146830237834 ns/iter |
22.84916200844287 ns/iter |
1.00 |
Pointer_Push_Back_Pointer_To_Weak_Pointer |
169.18350879161738 ns/iter |
170.84905804772623 ns/iter |
0.99 |
Pointer_Walker_Schema_ISO_Language |
1963286.0769232002 ns/iter |
1913362.9610028507 ns/iter |
1.03 |
Pointer_Maybe_Tracked_Deeply_Nested/0 |
1520830.030434779 ns/iter |
1527477.006578842 ns/iter |
1.00 |
Pointer_Maybe_Tracked_Deeply_Nested/1 |
1662674.5690476105 ns/iter |
1660372.520094541 ns/iter |
1.00 |
Pointer_Position_Tracker_Get_Deeply_Nested |
538.8513303484352 ns/iter |
589.6198253309873 ns/iter |
0.91 |
JSON_Array_Of_Objects_Unique |
376.55991982375275 ns/iter |
402.40652901071655 ns/iter |
0.94 |
JSON_Parse_1 |
7554.73135672356 ns/iter |
7392.9423118028035 ns/iter |
1.02 |
JSON_Parse_Real |
6612.248716721771 ns/iter |
6618.941851771369 ns/iter |
1.00 |
JSON_Parse_Decimal |
9516.477686758899 ns/iter |
9483.980298296132 ns/iter |
1.00 |
JSON_Parse_Schema_ISO_Language |
5088987.978102145 ns/iter |
5108958.288888566 ns/iter |
1.00 |
JSON_Parse_Integer |
4816.7796050140305 ns/iter |
4819.605481853288 ns/iter |
1.00 |
JSON_Parse_String_NonSSO_Plain |
8456.126240192858 ns/iter |
8819.15560669446 ns/iter |
0.96 |
JSON_Parse_String_SSO_Plain |
3558.893011032113 ns/iter |
3690.888682344534 ns/iter |
0.96 |
JSON_Parse_String_Escape_Heavy |
19246.16829457879 ns/iter |
19365.130246060042 ns/iter |
0.99 |
JSON_Parse_Object_Short_Keys |
11388.28662751917 ns/iter |
11343.538485280704 ns/iter |
1.00 |
JSON_Parse_Object_Scalar_Properties |
5783.117864450018 ns/iter |
5789.464182296807 ns/iter |
1.00 |
JSON_Parse_Object_Array_Properties |
9505.25785643622 ns/iter |
8999.73724814563 ns/iter |
1.06 |
JSON_Parse_Object_Object_Properties |
9473.880650383215 ns/iter |
9325.373990103539 ns/iter |
1.02 |
JSON_Parse_Nested_Containers |
72910.3111814383 ns/iter |
73383.79450343704 ns/iter |
0.99 |
JSON_From_String_Copy |
20.214152336994392 ns/iter |
19.508591657260446 ns/iter |
1.04 |
JSON_From_String_Temporary |
17.10414706133229 ns/iter |
16.348598475216324 ns/iter |
1.05 |
JSON_Number_To_Double |
19.720778327033628 ns/iter |
19.68631179397995 ns/iter |
1.00 |
JSON_Object_At_Last_Key/8 |
6.686721748846806 ns/iter |
6.684935610333219 ns/iter |
1.00 |
JSON_Object_At_Last_Key/32 |
23.575308998938958 ns/iter |
23.61576353386631 ns/iter |
1.00 |
JSON_Object_At_Last_Key/128 |
91.1032243404916 ns/iter |
91.11316519547869 ns/iter |
1.00 |
JSON_Object_At_Last_Key/512 |
379.89909208396824 ns/iter |
379.5457120668015 ns/iter |
1.00 |
JSON_Fast_Hash_Helm_Chart_Lock |
52.00889949658747 ns/iter |
54.16526688826668 ns/iter |
0.96 |
JSON_Equality_Helm_Chart_Lock |
149.77872900371156 ns/iter |
155.73211617079326 ns/iter |
0.96 |
JSON_Divisible_By_Decimal |
232.26197605931236 ns/iter |
234.39696984866976 ns/iter |
0.99 |
JSON_String_Equal/10 |
5.3237707002525 ns/iter |
5.320591007164517 ns/iter |
1.00 |
JSON_String_Equal/100 |
6.378226957788638 ns/iter |
6.0276745752925445 ns/iter |
1.06 |
JSON_String_Equal_Small_By_Perfect_Hash/10 |
0.7098915825057519 ns/iter |
0.714870701463157 ns/iter |
0.99 |
JSON_String_Equal_Small_By_Runtime_Perfect_Hash/10 |
21.943499203318844 ns/iter |
21.94406950767342 ns/iter |
1.00 |
JSON_String_Fast_Hash/10 |
1.0556379122296573 ns/iter |
1.0556214366823131 ns/iter |
1.00 |
JSON_String_Fast_Hash/100 |
1.0604411901224406 ns/iter |
1.0549720998286016 ns/iter |
1.01 |
JSON_String_Key_Hash/10 |
1.083949643690296 ns/iter |
1.0857451706235925 ns/iter |
1.00 |
JSON_String_Key_Hash/100 |
14.761282328553333 ns/iter |
15.07363266661416 ns/iter |
0.98 |
JSON_Object_Defines_Miss_Same_Length |
3.8712329228546603 ns/iter |
3.8822455221215004 ns/iter |
1.00 |
JSON_Object_Defines_Miss_Too_Small |
3.869079140212956 ns/iter |
3.867185370849452 ns/iter |
1.00 |
JSON_Object_Defines_Miss_Too_Large |
3.518057400069883 ns/iter |
3.5162223313607326 ns/iter |
1.00 |
Regex_Lower_S_Or_Upper_S_Asterisk |
1.0592777219386091 ns/iter |
1.0547183702199425 ns/iter |
1.00 |
Regex_Caret_Lower_S_Or_Upper_S_Asterisk_Dollar |
1.055290265446265 ns/iter |
1.055505964297968 ns/iter |
1.00 |
Regex_Period_Asterisk |
0.7048836967818491 ns/iter |
0.7041312384808168 ns/iter |
1.00 |
Regex_Group_Period_Asterisk_Group |
0.7039157588288492 ns/iter |
0.7037498420280308 ns/iter |
1.00 |
Regex_Period_Plus |
1.0558842196593887 ns/iter |
1.0556266841706763 ns/iter |
1.00 |
Regex_Period |
1.055802841496768 ns/iter |
1.0546888791178899 ns/iter |
1.00 |
Regex_Caret_Period_Plus_Dollar |
0.7034426030560573 ns/iter |
0.7052515712377729 ns/iter |
1.00 |
Regex_Caret_Group_Period_Plus_Group_Dollar |
0.7052692825756661 ns/iter |
0.7039869784848539 ns/iter |
1.00 |
Regex_Caret_Period_Asterisk_Dollar |
1.0550607784102242 ns/iter |
1.0556755619425715 ns/iter |
1.00 |
Regex_Caret_Group_Period_Asterisk_Group_Dollar |
1.0552450661397135 ns/iter |
1.0818170008855115 ns/iter |
0.98 |
Regex_Caret_X_Hyphen |
4.21966528957093 ns/iter |
4.221724488268305 ns/iter |
1.00 |
Regex_Period_Md_Dollar |
33.20293300534798 ns/iter |
34.77601956177343 ns/iter |
0.95 |
Regex_Caret_Slash_Period_Asterisk |
3.8691459325754987 ns/iter |
3.8687559930649837 ns/iter |
1.00 |
Regex_Caret_Period_Range_Dollar |
1.0554731290976767 ns/iter |
1.06024489674554 ns/iter |
1.00 |
Regex_Nested_Backtrack |
38.965657374046 ns/iter |
43.53478409452232 ns/iter |
0.90 |
This comment was automatically generated by workflow using github-action-benchmark.
There was a problem hiding this comment.
Benchmark (windows/msvc)
Details
| Benchmark suite | Current: 15e91b5 | Previous: 8cc4718 | Ratio |
|---|---|---|---|
Regex_Lower_S_Or_Upper_S_Asterisk |
5.086918000001788 ns/iter |
5.072033999999803 ns/iter |
1.00 |
Regex_Caret_Lower_S_Or_Upper_S_Asterisk_Dollar |
5.013089999997646 ns/iter |
5.247021000000132 ns/iter |
0.96 |
Regex_Period_Asterisk |
5.0246510000033595 ns/iter |
5.026106249999884 ns/iter |
1.00 |
Regex_Group_Period_Asterisk_Group |
5.0188696428555035 ns/iter |
5.125762813641865 ns/iter |
0.98 |
Regex_Period_Plus |
4.819870313577468 ns/iter |
4.833065178571262 ns/iter |
1.00 |
Regex_Period |
4.823859988156383 ns/iter |
4.811622099288711 ns/iter |
1.00 |
Regex_Caret_Period_Plus_Dollar |
4.825545112683114 ns/iter |
4.8667149117976924 ns/iter |
0.99 |
Regex_Caret_Group_Period_Plus_Group_Dollar |
4.818914710897399 ns/iter |
4.812733393929167 ns/iter |
1.00 |
Regex_Caret_Period_Asterisk_Dollar |
5.020226999999977 ns/iter |
5.0107230000003256 ns/iter |
1.00 |
Regex_Caret_Group_Period_Asterisk_Group_Dollar |
5.014057999997021 ns/iter |
5.325587499998262 ns/iter |
0.94 |
Regex_Caret_X_Hyphen |
8.165433445693074 ns/iter |
8.155876116074774 ns/iter |
1.00 |
Regex_Period_Md_Dollar |
44.31582499998399 ns/iter |
44.28878749999399 ns/iter |
1.00 |
Regex_Caret_Slash_Period_Asterisk |
7.84509374999536 ns/iter |
7.929349330356875 ns/iter |
0.99 |
Regex_Caret_Period_Range_Dollar |
5.953354000002945 ns/iter |
5.956174107142584 ns/iter |
1.00 |
Regex_Nested_Backtrack |
54.18077999997877 ns/iter |
54.14916071430298 ns/iter |
1.00 |
JSON_Array_Of_Objects_Unique |
497.9296000001341 ns/iter |
493.0466570854778 ns/iter |
1.01 |
JSON_Parse_1 |
8761.659099740693 ns/iter |
8771.759947502711 ns/iter |
1.00 |
JSON_Parse_Real |
16022.354910713178 ns/iter |
15976.267857149245 ns/iter |
1.00 |
JSON_Parse_Decimal |
11833.403571423722 ns/iter |
11810.414285711042 ns/iter |
1.00 |
JSON_Parse_Schema_ISO_Language |
7679374.444443157 ns/iter |
7209916.666665272 ns/iter |
1.07 |
JSON_Parse_Integer |
6105.2714285706 ns/iter |
6142.543750002005 ns/iter |
0.99 |
JSON_Parse_String_NonSSO_Plain |
7794.733258929146 ns/iter |
7675.143973214305 ns/iter |
1.02 |
JSON_Parse_String_SSO_Plain |
3702.749726617548 ns/iter |
3681.7093894223303 ns/iter |
1.01 |
JSON_Parse_String_Escape_Heavy |
21787.55625000406 ns/iter |
21734.584374996753 ns/iter |
1.00 |
JSON_Parse_Object_Short_Keys |
13179.057142857735 ns/iter |
13147.341071430674 ns/iter |
1.00 |
JSON_Parse_Object_Scalar_Properties |
6780.968749998197 ns/iter |
6765.068750001189 ns/iter |
1.00 |
JSON_Parse_Object_Array_Properties |
11374.99821429141 ns/iter |
11327.296428573522 ns/iter |
1.00 |
JSON_Parse_Object_Object_Properties |
11548.380357136726 ns/iter |
11536.295312502887 ns/iter |
1.00 |
JSON_Parse_Nested_Containers |
79539.9330357327 ns/iter |
78740.8370536115 ns/iter |
1.01 |
JSON_From_String_Copy |
66.62970535712377 ns/iter |
63.89991964287642 ns/iter |
1.04 |
JSON_From_String_Temporary |
61.60445000000436 ns/iter |
59.05656250003436 ns/iter |
1.04 |
JSON_Number_To_Double |
120.67637499995955 ns/iter |
119.39903571430932 ns/iter |
1.01 |
JSON_Object_At_Last_Key/8 |
7.391925223210195 ns/iter |
7.233046875003066 ns/iter |
1.02 |
JSON_Object_At_Last_Key/32 |
23.27759237413083 ns/iter |
23.33445174848743 ns/iter |
1.00 |
JSON_Object_At_Last_Key/128 |
89.27707637155146 ns/iter |
89.31918351249558 ns/iter |
1.00 |
JSON_Object_At_Last_Key/512 |
423.82690104442827 ns/iter |
424.94951059480405 ns/iter |
1.00 |
JSON_Fast_Hash_Helm_Chart_Lock |
63.91376785712412 ns/iter |
63.32599107143518 ns/iter |
1.01 |
JSON_Equality_Helm_Chart_Lock |
300.018872765788 ns/iter |
300.6451785714554 ns/iter |
1.00 |
JSON_Divisible_By_Decimal |
296.3271477313059 ns/iter |
300.82823874690575 ns/iter |
0.99 |
JSON_String_Equal/10 |
15.080667410712422 ns/iter |
15.176564732146044 ns/iter |
0.99 |
JSON_String_Equal/100 |
16.322069979983226 ns/iter |
16.379312500000815 ns/iter |
1.00 |
JSON_String_Equal_Small_By_Perfect_Hash/10 |
2.5071310714289603 ns/iter |
2.507871785714347 ns/iter |
1.00 |
JSON_String_Equal_Small_By_Runtime_Perfect_Hash/10 |
14.186611543817076 ns/iter |
14.152690785030796 ns/iter |
1.00 |
JSON_String_Fast_Hash/10 |
4.702198001567373 ns/iter |
4.782502622185683 ns/iter |
0.98 |
JSON_String_Fast_Hash/100 |
4.703623001571218 ns/iter |
4.989934999998695 ns/iter |
0.94 |
JSON_String_Key_Hash/10 |
5.33486964285755 ns/iter |
5.337740999998459 ns/iter |
1.00 |
JSON_String_Key_Hash/100 |
11.878314285711765 ns/iter |
11.878142857142393 ns/iter |
1.00 |
JSON_Object_Defines_Miss_Same_Length |
4.084356257293997 ns/iter |
4.082210379464815 ns/iter |
1.00 |
JSON_Object_Defines_Miss_Too_Small |
5.029437999996844 ns/iter |
5.01872053571414 ns/iter |
1.00 |
JSON_Object_Defines_Miss_Too_Large |
4.391819998040913 ns/iter |
4.392032500001619 ns/iter |
1.00 |
Pointer_Object_Traverse |
70.0294464285532 ns/iter |
69.69215401783556 ns/iter |
1.00 |
Pointer_Object_Try_Traverse |
70.99121428568976 ns/iter |
70.71739955359288 ns/iter |
1.00 |
Pointer_Push_Back_Pointer_To_Weak_Pointer |
193.50390120570907 ns/iter |
190.98317776636162 ns/iter |
1.01 |
Pointer_Walker_Schema_ISO_Language |
8004906.666666203 ns/iter |
7077117.857140332 ns/iter |
1.13 |
Pointer_Maybe_Tracked_Deeply_Nested/0 |
2436905.2208827217 ns/iter |
2302085.3571421998 ns/iter |
1.06 |
Pointer_Maybe_Tracked_Deeply_Nested/1 |
3728352.941178013 ns/iter |
3583633.8461544635 ns/iter |
1.04 |
Pointer_Position_Tracker_Get_Deeply_Nested |
550.3070535711784 ns/iter |
564.9139508930391 ns/iter |
0.97 |
URITemplateRouter_Create |
40597.759851434625 ns/iter |
40809.90656373775 ns/iter |
0.99 |
URITemplateRouter_Match |
219.155343750117 ns/iter |
193.4435529859713 ns/iter |
1.13 |
URITemplateRouter_Match_BasePath |
238.0566428571131 ns/iter |
213.49893749999185 ns/iter |
1.12 |
URITemplateRouterView_Restore |
31191.57725095408 ns/iter |
31213.223631195477 ns/iter |
1.00 |
URITemplateRouterView_Match |
157.70388392856 ns/iter |
157.8578634884692 ns/iter |
1.00 |
URITemplateRouterView_Match_BasePath |
175.34465236679816 ns/iter |
174.80968749999144 ns/iter |
1.00 |
URITemplateRouterView_Arguments |
522.1019000000524 ns/iter |
520.441000000119 ns/iter |
1.00 |
JSONL_Parse_Large |
33395819.047611788 ns/iter |
32521419.04762798 ns/iter |
1.03 |
JSONL_Parse_Large_GZIP |
33486837.50001176 ns/iter |
33209386.363627017 ns/iter |
1.01 |
HTML_Build_Table_100000 |
90860457.14288308 ns/iter |
97988557.1428635 ns/iter |
0.93 |
HTML_Render_Table_100000 |
8376426.666664984 ns/iter |
7070202.222222279 ns/iter |
1.18 |
GZIP_Compress_ISO_Language_Set_3_Locations |
36632642.105264254 ns/iter |
36266315.7894818 ns/iter |
1.01 |
GZIP_Decompress_ISO_Language_Set_3_Locations |
10260509.333329538 ns/iter |
9236263.999997998 ns/iter |
1.11 |
GZIP_Compress_ISO_Language_Set_3_Schema |
2114485.797102279 ns/iter |
2116300.289854616 ns/iter |
1.00 |
GZIP_Decompress_ISO_Language_Set_3_Schema |
651489.017857086 ns/iter |
595491.9642854455 ns/iter |
1.09 |
JOSE_VerifySignature_RS256 |
21286.20799721459 ns/iter |
21156.96562499636 ns/iter |
1.01 |
JOSE_VerifySignature_ES512 |
1538275.6696433425 ns/iter |
1531241.5178568375 ns/iter |
1.00 |
This comment was automatically generated by workflow using github-action-benchmark.
Signed-off-by: Juan Cruz Viotti jv@jviotti.com