Skip to content

Conversation

@dd-oleksii
Copy link
Member

@dd-oleksii dd-oleksii commented Oct 31, 2025

Description

Integrate datadog-ffe from libdatadog: DataDog/libdatadog#1289

Testing

Tested manually that native bindings work:

>>> from ddtrace.internal.native._native import ffe
>>> with open("/Users/oleksii.shmalko/dd/libdatadog/datadog-ffe/tests/data/flags-v1.json", 'rb') as f:
...     json = f.read()
... 
>>> config = ffe.Configuration(json)
>>> details = config.resolve_value("numeric_flag", ffe.FlagType.Float, {})
>>> details.variant
'pi'
>>> details.value
3.1415926

More testing will be done as part of FFE feature.

Risks

Additional Notes

This PR is stacked against #15219

@dd-oleksii dd-oleksii requested a review from avara1986 October 31, 2025 02:41
@dd-oleksii dd-oleksii requested a review from a team as a code owner October 31, 2025 02:41
@dd-oleksii dd-oleksii requested a review from juanjux October 31, 2025 02:41
@github-actions
Copy link
Contributor

github-actions bot commented Oct 31, 2025

CODEOWNERS have been resolved as:

src/native/ffe.rs                                                       @DataDog/apm-core-python
tests/openfeature/config_helpers.py                                     @DataDog/asm-python @DataDog/apm-core-python
tests/openfeature/fixtures/test-case-boolean-one-of-matches.json        @DataDog/asm-python @DataDog/apm-core-python
tests/openfeature/fixtures/test-case-comparator-operator-flag.json      @DataDog/asm-python @DataDog/apm-core-python
tests/openfeature/fixtures/test-case-disabled-flag.json                 @DataDog/asm-python @DataDog/apm-core-python
tests/openfeature/fixtures/test-case-kill-switch-flag.json              @DataDog/asm-python @DataDog/apm-core-python
tests/openfeature/fixtures/test-case-new-user-onboarding-flag.json      @DataDog/asm-python @DataDog/apm-core-python
tests/openfeature/fixtures/test-case-no-allocations-flag.json           @DataDog/asm-python @DataDog/apm-core-python
tests/openfeature/fixtures/test-case-null-operator-flag.json            @DataDog/asm-python @DataDog/apm-core-python
tests/openfeature/fixtures/test-case-numeric-flag.json                  @DataDog/asm-python @DataDog/apm-core-python
tests/openfeature/fixtures/test-case-numeric-one-of.json                @DataDog/asm-python @DataDog/apm-core-python
tests/openfeature/fixtures/test-case-regex-flag.json                    @DataDog/asm-python @DataDog/apm-core-python
tests/openfeature/fixtures/test-case-start-and-end-date-flag.json       @DataDog/asm-python @DataDog/apm-core-python
tests/openfeature/fixtures/test-flag-that-does-not-exist.json           @DataDog/asm-python @DataDog/apm-core-python
tests/openfeature/fixtures/test-json-config-flag.json                   @DataDog/asm-python @DataDog/apm-core-python
tests/openfeature/fixtures/test-no-allocations-flag.json                @DataDog/asm-python @DataDog/apm-core-python
tests/openfeature/fixtures/test-special-characters.json                 @DataDog/asm-python @DataDog/apm-core-python
tests/openfeature/fixtures/test-string-with-special-characters.json     @DataDog/asm-python @DataDog/apm-core-python
tests/openfeature/flags-v1.json                                         @DataDog/asm-python @DataDog/apm-core-python
tests/openfeature/test_client_api.py                                    @DataDog/asm-python @DataDog/apm-core-python
tests/openfeature/test_provider_fixtures.py                             @DataDog/asm-python @DataDog/apm-core-python
tests/openfeature/test_provider_status.py                               @DataDog/asm-python @DataDog/apm-core-python
ddtrace/internal/native/__init__.py                                     @DataDog/apm-core-python
ddtrace/internal/native/_native.pyi                                     @DataDog/apm-core-python
ddtrace/internal/openfeature/_config.py                                 @DataDog/apm-core-python
ddtrace/internal/openfeature/_native.py                                 @DataDog/apm-core-python
ddtrace/internal/openfeature/_provider.py                               @DataDog/apm-core-python
ddtrace/internal/openfeature/_remoteconfiguration.py                    @DataDog/apm-core-python
ddtrace/openfeature/__init__.py                                         @DataDog/asm-python @DataDog/apm-core-python
riotfile.py                                                             @DataDog/apm-python
src/native/Cargo.lock                                                   @DataDog/apm-core-python
src/native/Cargo.toml                                                   @DataDog/apm-core-python
src/native/lib.rs                                                       @DataDog/apm-core-python
tests/openfeature/test_provider.py                                      @DataDog/asm-python @DataDog/apm-core-python
tests/openfeature/test_provider_e2e.py                                  @DataDog/asm-python @DataDog/apm-core-python
tests/openfeature/test_provider_env_var.py                              @DataDog/asm-python @DataDog/apm-core-python
tests/openfeature/test_provider_exposure.py                             @DataDog/asm-python @DataDog/apm-core-python
.riot/requirements/104618a.txt                                          @DataDog/apm-python
.riot/requirements/1346280.txt                                          @DataDog/apm-python
.riot/requirements/183bf88.txt                                          @DataDog/apm-python
.riot/requirements/1d5d90b.txt                                          @DataDog/apm-python
.riot/requirements/1fd3342.txt                                          @DataDog/apm-python
.riot/requirements/68eb9ac.txt                                          @DataDog/apm-python
.riot/requirements/db50e43.txt                                          @DataDog/apm-python
ddtrace/internal/openfeature/_ffe_mock.py                               @DataDog/apm-core-python
src/native/ffande.rs                                                    @DataDog/apm-core-python
tests/internal/ffande/__init__.py                                       @DataDog/apm-core-python
tests/internal/ffande/test_ffande.py                                    @DataDog/apm-core-python

@dd-oleksii dd-oleksii added the changelog/no-changelog A changelog entry is not required for this PR. label Oct 31, 2025
@dd-oleksii dd-oleksii changed the title [ffe] integrate datadog-ffe feat(ffe): integrate datadog-ffe Oct 31, 2025
@github-actions
Copy link
Contributor

github-actions bot commented Oct 31, 2025

Bootstrap import analysis

Comparison of import times between this PR and base.

Summary

The average import time from this PR is: 251 ± 8 ms.

The average import time from base is: 243 ± 4 ms.

The import time difference between this PR and base is: 8.3 ± 0.3 ms.

Import time breakdown

The following import paths have grown:

ddtrace.auto 4.802 ms (1.91%)
ddtrace 2.997 ms (1.19%)
ddtrace._logger 2.072 ms (0.83%)
ddtrace.internal.telemetry 2.072 ms (0.83%)
ddtrace.internal.telemetry.writer 1.049 ms (0.42%)
ddtrace.settings._telemetry 0.251 ms (0.10%)
http.client 0.247 ms (0.10%)
ssl 0.188 ms (0.07%)
_ssl 0.087 ms (0.03%)
ddtrace.internal.periodic 0.083 ms (0.03%)
ddtrace.internal._threads 0.055 ms (0.02%)
ddtrace.internal.service 0.028 ms (0.01%)
ddtrace.internal.endpoints 0.080 ms (0.03%)
ddtrace.internal.utils.http 0.070 ms (0.03%)
ddtrace.internal.packages 0.067 ms (0.03%)
_sysconfigdata__linux_x86_64-linux-gnu 0.067 ms (0.03%)
ddtrace.internal.telemetry.metrics_namespaces 0.056 ms (0.02%)
ddtrace.internal.encoding 0.056 ms (0.02%)
ddtrace.internal._encoding 0.056 ms (0.02%)
ddtrace.internal.runtime 0.048 ms (0.02%)
uuid 0.048 ms (0.02%)
platform 0.048 ms (0.02%)
ddtrace.internal.telemetry.data 0.029 ms (0.01%)
ddtrace.settings._agent 0.521 ms (0.21%)
ddtrace.settings 0.344 ms (0.14%)
ddtrace.vendor.debtcollector 0.344 ms (0.14%)
ddtrace.vendor 0.292 ms (0.12%)
ddtrace.internal.module 0.292 ms (0.12%)
ddtrace.internal.wrapping.context 0.292 ms (0.12%)
ddtrace.internal.wrapping 0.271 ms (0.11%)
bytecode 0.271 ms (0.11%)
bytecode.bytecode 0.271 ms (0.11%)
bytecode.flags 0.271 ms (0.11%)
bytecode.instr 0.271 ms (0.11%)
contextvars 0.021 ms (0.01%)
_contextvars 0.021 ms (0.01%)
ddtrace.vendor.debtcollector.moves 0.052 ms (0.02%)
ddtrace.settings._core 0.176 ms (0.07%)
ddtrace.internal.native 0.138 ms (0.06%)
ddtrace.internal.native._native 0.138 ms (0.06%)
ddtrace.internal.utils.formats 0.393 ms (0.16%)
ddtrace.internal.compat 0.366 ms (0.15%)
wrapt 0.366 ms (0.15%)
wrapt.importer 0.338 ms (0.13%)
importlib.metadata 0.338 ms (0.13%)
zipfile 0.040 ms (0.02%)
shutil 0.040 ms (0.02%)
importlib.metadata._adapters 0.035 ms (0.01%)
email.message 0.035 ms (0.01%)
email.utils 0.035 ms (0.01%)
socket 0.035 ms (0.01%)
_socket 0.035 ms (0.01%)
importlib.abc 0.033 ms (0.01%)
importlib.resources 0.033 ms (0.01%)
importlib.resources._common 0.033 ms (0.01%)
tempfile 0.033 ms (0.01%)
wrapt.__wrapt__ 0.028 ms (0.01%)
wrapt._wrappers 0.028 ms (0.01%)
ddtrace.settings._otel_remapper 0.058 ms (0.02%)
ddtrace.trace 0.925 ms (0.37%)
ddtrace._trace.filters 0.745 ms (0.30%)
ddtrace._trace.processor 0.745 ms (0.30%)
ddtrace.internal.writer 0.488 ms (0.19%)
ddtrace.internal.writer.writer 0.488 ms (0.19%)
ddtrace.settings.asm 0.328 ms (0.13%)
ddtrace.appsec._constants 0.273 ms (0.11%)
ddtrace.internal.dogstatsd 0.121 ms (0.05%)
ddtrace.vendor.dogstatsd 0.121 ms (0.05%)
ddtrace.vendor.dogstatsd.base 0.121 ms (0.05%)
ddtrace.vendor.dogstatsd.container 0.035 ms (0.01%)
ddtrace.vendor.dogstatsd.format 0.023 ms (0.01%)
gzip 0.039 ms (0.02%)
ddtrace._trace.sampler 0.200 ms (0.08%)
ddtrace._trace.span 0.200 ms (0.08%)
ddtrace.internal.core 0.061 ms (0.02%)
ddtrace.internal.core.event_hub 0.061 ms (0.02%)
ddtrace._trace._span_pointer 0.058 ms (0.02%)
hashlib 0.058 ms (0.02%)
_hashlib 0.058 ms (0.02%)
ddtrace.internal._rand 0.032 ms (0.01%)
ddtrace._trace.context 0.048 ms (0.02%)
ddtrace._trace._span_link 0.048 ms (0.02%)
ddtrace._trace.tracer 0.034 ms (0.01%)
ddtrace.internal.debug 0.034 ms (0.01%)
ddtrace.bootstrap.sitecustomize 1.805 ms (0.72%)
ddtrace.bootstrap.preload 1.360 ms (0.54%)
multiprocessing 0.420 ms (0.17%)
multiprocessing.context 0.420 ms (0.17%)
multiprocessing.reduction 0.386 ms (0.15%)
pickle 0.386 ms (0.15%)
_compat_pickle 0.315 ms (0.13%)
multiprocessing.process 0.035 ms (0.01%)
ddtrace.settings.profiling 0.386 ms (0.15%)
ddtrace.vendor.psutil 0.257 ms (0.10%)
ddtrace.vendor.psutil._pslinux 0.174 ms (0.07%)
ddtrace.vendor.psutil._psutil_linux 0.036 ms (0.01%)
glob 0.029 ms (0.01%)
ddtrace.internal.datadog.profiling.ddup 0.057 ms (0.02%)
ddtrace.internal.datadog.profiling.ddup._ddup 0.057 ms (0.02%)
ddtrace.internal.symbol_db.remoteconfig 0.238 ms (0.09%)
ddtrace.internal.symbol_db.symbols 0.171 ms (0.07%)
ddtrace.settings.symbol_db 0.032 ms (0.01%)
ddtrace.internal.core.crashtracking 0.124 ms (0.05%)
ddtrace.settings.dynamic_instrumentation 0.055 ms (0.02%)
ddtrace.internal.utils.config 0.018 ms (0.01%)
ddtrace.internal.runtime.runtime_metrics 0.044 ms (0.02%)
ddtrace.internal.runtime.metric_collectors 0.019 ms (0.01%)
multiprocessing.sharedctypes 0.038 ms (0.02%)
ctypes 0.038 ms (0.02%)
_ctypes 0.038 ms (0.02%)
ddtrace.internal.products 0.029 ms (0.01%)
ddtrace.settings.crashtracker 0.026 ms (0.01%)
ddtrace._trace.trace_handlers 0.241 ms (0.10%)
ddtrace._trace._inferred_proxy 0.123 ms (0.05%)
ddtrace.propagation.http 0.123 ms (0.05%)
ddtrace.internal._tagset 0.040 ms (0.02%)
ddtrace.contrib.trace_utils 0.031 ms (0.01%)
ddtrace.contrib.internal.trace_utils 0.031 ms (0.01%)
ddtrace.contrib.internal.trace_utils_base 0.031 ms (0.01%)

The following import paths have shrunk:

ddtrace.auto 1.042 ms (0.41%)
ddtrace 0.655 ms (0.26%)
ddtrace.internal._unpatched 0.022 ms (0.01%)
json 0.022 ms (0.01%)
json.decoder 0.022 ms (0.01%)
re 0.022 ms (0.01%)
enum 0.022 ms (0.01%)
types 0.022 ms (0.01%)
ddtrace.bootstrap.sitecustomize 0.387 ms (0.15%)
ddtrace.bootstrap.preload 0.387 ms (0.15%)
ddtrace.internal.remoteconfig.client 0.387 ms (0.15%)

@pr-commenter
Copy link

pr-commenter bot commented Oct 31, 2025

Performance SLOs

Comparing candidate datadog-ffe (ee2ecfc) with baseline main (d86c66f)

❌ Test Failures (1 suite)
telemetryaddmetric - 29/30

✅ 1-count-metric-1-times

Time: ✅ 3.065µs (SLO: <20.000µs 📉 -84.7%) vs baseline: +4.8%

Memory: ✅ 32.145MB (SLO: <34.000MB -5.5%) vs baseline: +5.5%


✅ 1-count-metrics-100-times

Time: ✅ 207.547µs (SLO: <220.000µs -5.7%) vs baseline: +4.3%

Memory: ✅ 32.086MB (SLO: <34.000MB -5.6%) vs baseline: +5.2%


✅ 1-distribution-metric-1-times

Time: ✅ 3.384µs (SLO: <20.000µs 📉 -83.1%) vs baseline: +3.7%

Memory: ✅ 32.145MB (SLO: <34.000MB -5.5%) vs baseline: +5.6%


❌ 1-distribution-metrics-100-times

Time: ❌ 221.921µs (SLO: <220.000µs +0.9%) vs baseline: +5.0%

Memory: ✅ 32.145MB (SLO: <34.000MB -5.5%) vs baseline: +5.7%


✅ 1-gauge-metric-1-times

Time: ✅ 2.192µs (SLO: <20.000µs 📉 -89.0%) vs baseline: +0.3%

Memory: ✅ 32.185MB (SLO: <34.000MB -5.3%) vs baseline: +5.4%


✅ 1-gauge-metrics-100-times

Time: ✅ 136.501µs (SLO: <150.000µs -9.0%) vs baseline: ~same

Memory: ✅ 32.145MB (SLO: <34.000MB -5.5%) vs baseline: +5.6%


✅ 1-rate-metric-1-times

Time: ✅ 3.148µs (SLO: <20.000µs 📉 -84.3%) vs baseline: +2.4%

Memory: ✅ 32.224MB (SLO: <34.000MB -5.2%) vs baseline: +5.7%


✅ 1-rate-metrics-100-times

Time: ✅ 221.209µs (SLO: <250.000µs 📉 -11.5%) vs baseline: +4.8%

Memory: ✅ 32.106MB (SLO: <34.000MB -5.6%) vs baseline: +5.4%


✅ 100-count-metrics-100-times

Time: ✅ 20.833ms (SLO: <22.000ms -5.3%) vs baseline: +4.5%

Memory: ✅ 32.106MB (SLO: <34.000MB -5.6%) vs baseline: +5.6%


✅ 100-distribution-metrics-100-times

Time: ✅ 2.294ms (SLO: <2.300ms 🟡 -0.3%) vs baseline: +3.4%

Memory: ✅ 32.126MB (SLO: <34.000MB -5.5%) vs baseline: +5.3%


✅ 100-gauge-metrics-100-times

Time: ✅ 1.414ms (SLO: <1.550ms -8.8%) vs baseline: +1.4%

Memory: ✅ 32.086MB (SLO: <34.000MB -5.6%) vs baseline: +5.6%


✅ 100-rate-metrics-100-times

Time: ✅ 2.267ms (SLO: <2.550ms 📉 -11.1%) vs baseline: +3.9%

Memory: ✅ 32.145MB (SLO: <34.000MB -5.5%) vs baseline: +5.8%


✅ flush-1-metric

Time: ✅ 4.606µs (SLO: <20.000µs 📉 -77.0%) vs baseline: +5.0%

Memory: ✅ 32.185MB (SLO: <34.000MB -5.3%) vs baseline: +6.0%


✅ flush-100-metrics

Time: ✅ 177.997µs (SLO: <250.000µs 📉 -28.8%) vs baseline: +1.1%

Memory: ✅ 32.185MB (SLO: <34.000MB -5.3%) vs baseline: +5.6%


✅ flush-1000-metrics

Time: ✅ 2.139ms (SLO: <2.500ms 📉 -14.4%) vs baseline: +0.8%

Memory: ✅ 32.952MB (SLO: <34.500MB -4.5%) vs baseline: +5.6%

📈 Performance Regressions (3 suites)
📈 iast_aspects - 40/40

✅ re_expand_aspect

Time: ✅ 33.698µs (SLO: <40.000µs 📉 -15.8%) vs baseline: +6.0%

Memory: ✅ 37.690MB (SLO: <39.000MB -3.4%) vs baseline: +5.3%


✅ re_expand_noaspect

Time: ✅ 29.936µs (SLO: <40.000µs 📉 -25.2%) vs baseline: +4.5%

Memory: ✅ 37.729MB (SLO: <39.000MB -3.3%) vs baseline: +5.5%


✅ re_findall_aspect

Time: ✅ 2.966µs (SLO: <10.000µs 📉 -70.3%) vs baseline: +2.1%

Memory: ✅ 37.729MB (SLO: <39.000MB -3.3%) vs baseline: +5.2%


✅ re_findall_noaspect

Time: ✅ 1.422µs (SLO: <10.000µs 📉 -85.8%) vs baseline: +0.6%

Memory: ✅ 37.729MB (SLO: <39.000MB -3.3%) vs baseline: +5.5%


✅ re_finditer_aspect

Time: ✅ 4.607µs (SLO: <10.000µs 📉 -53.9%) vs baseline: +5.3%

Memory: ✅ 37.749MB (SLO: <39.000MB -3.2%) vs baseline: +5.6%


✅ re_finditer_noaspect

Time: ✅ 1.410µs (SLO: <10.000µs 📉 -85.9%) vs baseline: ~same

Memory: ✅ 37.749MB (SLO: <39.000MB -3.2%) vs baseline: +5.3%


✅ re_fullmatch_aspect

Time: ✅ 2.889µs (SLO: <10.000µs 📉 -71.1%) vs baseline: +6.8%

Memory: ✅ 37.749MB (SLO: <39.000MB -3.2%) vs baseline: +5.5%


✅ re_fullmatch_noaspect

Time: ✅ 1.291µs (SLO: <10.000µs 📉 -87.1%) vs baseline: -1.0%

Memory: ✅ 37.729MB (SLO: <39.000MB -3.3%) vs baseline: +5.2%


✅ re_group_aspect

Time: ✅ 3.221µs (SLO: <10.000µs 📉 -67.8%) vs baseline: 📈 +10.4%

Memory: ✅ 37.729MB (SLO: <39.000MB -3.3%) vs baseline: +5.2%


✅ re_group_noaspect

Time: ✅ 1.603µs (SLO: <10.000µs 📉 -84.0%) vs baseline: -0.2%

Memory: ✅ 37.729MB (SLO: <39.000MB -3.3%) vs baseline: +5.2%


✅ re_groups_aspect

Time: ✅ 3.330µs (SLO: <10.000µs 📉 -66.7%) vs baseline: +7.3%

Memory: ✅ 37.709MB (SLO: <39.000MB -3.3%) vs baseline: +5.3%


✅ re_groups_noaspect

Time: ✅ 1.690µs (SLO: <10.000µs 📉 -83.1%) vs baseline: -0.3%

Memory: ✅ 37.729MB (SLO: <39.000MB -3.3%) vs baseline: +5.7%


✅ re_match_aspect

Time: ✅ 3.038µs (SLO: <10.000µs 📉 -69.6%) vs baseline: 📈 +11.5%

Memory: ✅ 37.749MB (SLO: <39.000MB -3.2%) vs baseline: +5.5%


✅ re_match_noaspect

Time: ✅ 1.312µs (SLO: <10.000µs 📉 -86.9%) vs baseline: +0.9%

Memory: ✅ 37.749MB (SLO: <39.000MB -3.2%) vs baseline: +5.4%


✅ re_search_aspect

Time: ✅ 2.564µs (SLO: <10.000µs 📉 -74.4%) vs baseline: +2.1%

Memory: ✅ 37.709MB (SLO: <39.000MB -3.3%) vs baseline: +5.1%


✅ re_search_noaspect

Time: ✅ 1.203µs (SLO: <10.000µs 📉 -88.0%) vs baseline: +0.7%

Memory: ✅ 37.709MB (SLO: <39.000MB -3.3%) vs baseline: +5.2%


✅ re_sub_aspect

Time: ✅ 3.561µs (SLO: <10.000µs 📉 -64.4%) vs baseline: +5.9%

Memory: ✅ 37.749MB (SLO: <39.000MB -3.2%) vs baseline: +5.4%


✅ re_sub_noaspect

Time: ✅ 1.531µs (SLO: <10.000µs 📉 -84.7%) vs baseline: -0.6%

Memory: ✅ 37.729MB (SLO: <39.000MB -3.3%) vs baseline: +5.3%


✅ re_subn_aspect

Time: ✅ 3.718µs (SLO: <10.000µs 📉 -62.8%) vs baseline: +3.4%

Memory: ✅ 37.768MB (SLO: <39.000MB -3.2%) vs baseline: +5.6%


✅ re_subn_noaspect

Time: ✅ 1.607µs (SLO: <10.000µs 📉 -83.9%) vs baseline: -1.4%

Memory: ✅ 37.729MB (SLO: <39.000MB -3.3%) vs baseline: +5.7%


📈 iastaspects - 118/118

✅ add_aspect

Time: ✅ 0.402µs (SLO: <10.000µs 📉 -96.0%) vs baseline: ~same

Memory: ✅ 38.142MB (SLO: <39.000MB -2.2%) vs baseline: +5.8%


✅ add_inplace_aspect

Time: ✅ 0.411µs (SLO: <10.000µs 📉 -95.9%) vs baseline: +0.7%

Memory: ✅ 38.142MB (SLO: <39.000MB -2.2%) vs baseline: +5.5%


✅ add_inplace_noaspect

Time: ✅ 0.320µs (SLO: <10.000µs 📉 -96.8%) vs baseline: -0.4%

Memory: ✅ 38.122MB (SLO: <39.000MB -2.3%) vs baseline: +5.6%


✅ add_noaspect

Time: ✅ 0.274µs (SLO: <10.000µs 📉 -97.3%) vs baseline: +0.4%

Memory: ✅ 38.142MB (SLO: <39.000MB -2.2%) vs baseline: +5.4%


✅ bytearray_aspect

Time: ✅ 1.320µs (SLO: <10.000µs 📉 -86.8%) vs baseline: -0.4%

Memory: ✅ 38.142MB (SLO: <39.000MB -2.2%) vs baseline: +5.2%


✅ bytearray_extend_aspect

Time: ✅ 1.474µs (SLO: <10.000µs 📉 -85.3%) vs baseline: -3.9%

Memory: ✅ 38.083MB (SLO: <39.000MB -2.4%) vs baseline: +5.3%


✅ bytearray_extend_noaspect

Time: ✅ 0.615µs (SLO: <10.000µs 📉 -93.8%) vs baseline: ~same

Memory: ✅ 38.122MB (SLO: <39.000MB -2.3%) vs baseline: +5.3%


✅ bytearray_noaspect

Time: ✅ 0.482µs (SLO: <10.000µs 📉 -95.2%) vs baseline: +0.6%

Memory: ✅ 38.122MB (SLO: <39.000MB -2.3%) vs baseline: +5.5%


✅ bytes_aspect

Time: ✅ 1.301µs (SLO: <10.000µs 📉 -87.0%) vs baseline: +1.1%

Memory: ✅ 38.142MB (SLO: <39.000MB -2.2%) vs baseline: +5.2%


✅ bytes_noaspect

Time: ✅ 0.497µs (SLO: <10.000µs 📉 -95.0%) vs baseline: +1.5%

Memory: ✅ 38.122MB (SLO: <39.000MB -2.3%) vs baseline: +4.9%


✅ bytesio_aspect

Time: ✅ 1.358µs (SLO: <10.000µs 📉 -86.4%) vs baseline: +4.4%

Memory: ✅ 38.142MB (SLO: <39.000MB -2.2%) vs baseline: +5.3%


✅ bytesio_noaspect

Time: ✅ 0.493µs (SLO: <10.000µs 📉 -95.1%) vs baseline: -0.5%

Memory: ✅ 38.142MB (SLO: <39.000MB -2.2%) vs baseline: +5.3%


✅ capitalize_aspect

Time: ✅ 0.741µs (SLO: <10.000µs 📉 -92.6%) vs baseline: +0.1%

Memory: ✅ 38.063MB (SLO: <39.000MB -2.4%) vs baseline: +5.3%


✅ capitalize_noaspect

Time: ✅ 0.432µs (SLO: <10.000µs 📉 -95.7%) vs baseline: -0.1%

Memory: ✅ 38.142MB (SLO: <39.000MB -2.2%) vs baseline: +5.5%


✅ casefold_aspect

Time: ✅ 0.737µs (SLO: <10.000µs 📉 -92.6%) vs baseline: +0.1%

Memory: ✅ 38.142MB (SLO: <39.000MB -2.2%) vs baseline: +5.6%


✅ casefold_noaspect

Time: ✅ 0.367µs (SLO: <10.000µs 📉 -96.3%) vs baseline: +0.5%

Memory: ✅ 38.142MB (SLO: <39.000MB -2.2%) vs baseline: +5.5%


✅ decode_aspect

Time: ✅ 0.720µs (SLO: <10.000µs 📉 -92.8%) vs baseline: -0.5%

Memory: ✅ 38.142MB (SLO: <39.000MB -2.2%) vs baseline: +5.3%


✅ decode_noaspect

Time: ✅ 0.420µs (SLO: <10.000µs 📉 -95.8%) vs baseline: +1.0%

Memory: ✅ 38.142MB (SLO: <39.000MB -2.2%) vs baseline: +5.2%


✅ encode_aspect

Time: ✅ 0.715µs (SLO: <10.000µs 📉 -92.8%) vs baseline: +1.6%

Memory: ✅ 38.103MB (SLO: <39.000MB -2.3%) vs baseline: +5.2%


✅ encode_noaspect

Time: ✅ 0.411µs (SLO: <10.000µs 📉 -95.9%) vs baseline: +3.0%

Memory: ✅ 38.122MB (SLO: <39.000MB -2.3%) vs baseline: +5.4%


✅ format_aspect

Time: ✅ 3.388µs (SLO: <10.000µs 📉 -66.1%) vs baseline: +2.3%

Memory: ✅ 38.122MB (SLO: <39.000MB -2.3%) vs baseline: +5.2%


✅ format_map_aspect

Time: ✅ 4.206µs (SLO: <10.000µs 📉 -57.9%) vs baseline: 📈 +20.4%

Memory: ✅ 38.122MB (SLO: <39.000MB -2.3%) vs baseline: +5.3%


✅ format_map_noaspect

Time: ✅ 0.777µs (SLO: <10.000µs 📉 -92.2%) vs baseline: +0.4%

Memory: ✅ 38.083MB (SLO: <39.000MB -2.4%) vs baseline: +5.5%


✅ format_noaspect

Time: ✅ 0.597µs (SLO: <10.000µs 📉 -94.0%) vs baseline: +0.3%

Memory: ✅ 38.162MB (SLO: <39.000MB -2.1%) vs baseline: +5.5%


✅ index_aspect

Time: ✅ 0.356µs (SLO: <10.000µs 📉 -96.4%) vs baseline: ~same

Memory: ✅ 38.103MB (SLO: <39.000MB -2.3%) vs baseline: +5.2%


✅ index_noaspect

Time: ✅ 0.276µs (SLO: <10.000µs 📉 -97.2%) vs baseline: ~same

Memory: ✅ 38.142MB (SLO: <39.000MB -2.2%) vs baseline: +5.2%


✅ join_aspect

Time: ✅ 1.351µs (SLO: <10.000µs 📉 -86.5%) vs baseline: -0.9%

Memory: ✅ 38.103MB (SLO: <39.000MB -2.3%) vs baseline: +5.1%


✅ join_noaspect

Time: ✅ 0.491µs (SLO: <10.000µs 📉 -95.1%) vs baseline: -0.5%

Memory: ✅ 38.142MB (SLO: <39.000MB -2.2%) vs baseline: +5.4%


✅ ljust_aspect

Time: ✅ 2.486µs (SLO: <20.000µs 📉 -87.6%) vs baseline: -1.1%

Memory: ✅ 38.122MB (SLO: <39.000MB -2.3%) vs baseline: +5.4%


✅ ljust_noaspect

Time: ✅ 0.404µs (SLO: <10.000µs 📉 -96.0%) vs baseline: +0.3%

Memory: ✅ 38.103MB (SLO: <39.000MB -2.3%) vs baseline: +5.5%


✅ lower_aspect

Time: ✅ 2.259µs (SLO: <10.000µs 📉 -77.4%) vs baseline: +3.6%

Memory: ✅ 38.103MB (SLO: <39.000MB -2.3%) vs baseline: +5.3%


✅ lower_noaspect

Time: ✅ 0.367µs (SLO: <10.000µs 📉 -96.3%) vs baseline: -0.2%

Memory: ✅ 38.142MB (SLO: <39.000MB -2.2%) vs baseline: +5.4%


✅ lstrip_aspect

Time: ✅ 2.219µs (SLO: <20.000µs 📉 -88.9%) vs baseline: -0.9%

Memory: ✅ 38.142MB (SLO: <39.000MB -2.2%) vs baseline: +5.2%


✅ lstrip_noaspect

Time: ✅ 0.382µs (SLO: <10.000µs 📉 -96.2%) vs baseline: +0.7%

Memory: ✅ 38.103MB (SLO: <39.000MB -2.3%) vs baseline: +5.5%


✅ modulo_aspect

Time: ✅ 0.986µs (SLO: <10.000µs 📉 -90.1%) vs baseline: -5.5%

Memory: ✅ 38.122MB (SLO: <39.000MB -2.3%) vs baseline: +5.1%


✅ modulo_aspect_for_bytearray_bytearray

Time: ✅ 1.547µs (SLO: <10.000µs 📉 -84.5%) vs baseline: +0.8%

Memory: ✅ 38.103MB (SLO: <39.000MB -2.3%) vs baseline: +5.3%


✅ modulo_aspect_for_bytes

Time: ✅ 0.986µs (SLO: <10.000µs 📉 -90.1%) vs baseline: +1.3%

Memory: ✅ 38.122MB (SLO: <39.000MB -2.3%) vs baseline: +5.5%


✅ modulo_aspect_for_bytes_bytearray

Time: ✅ 1.229µs (SLO: <10.000µs 📉 -87.7%) vs baseline: -0.5%

Memory: ✅ 38.122MB (SLO: <39.000MB -2.3%) vs baseline: +5.3%


✅ modulo_noaspect

Time: ✅ 0.626µs (SLO: <10.000µs 📉 -93.7%) vs baseline: -0.8%

Memory: ✅ 38.122MB (SLO: <39.000MB -2.3%) vs baseline: +5.6%


✅ replace_aspect

Time: ✅ 4.757µs (SLO: <10.000µs 📉 -52.4%) vs baseline: -1.7%

Memory: ✅ 38.103MB (SLO: <39.000MB -2.3%) vs baseline: +5.5%


✅ replace_noaspect

Time: ✅ 0.459µs (SLO: <10.000µs 📉 -95.4%) vs baseline: ~same

Memory: ✅ 38.142MB (SLO: <39.000MB -2.2%) vs baseline: +5.5%


✅ repr_aspect

Time: ✅ 0.903µs (SLO: <10.000µs 📉 -91.0%) vs baseline: -0.4%

Memory: ✅ 38.103MB (SLO: <39.000MB -2.3%) vs baseline: +5.0%


✅ repr_noaspect

Time: ✅ 0.414µs (SLO: <10.000µs 📉 -95.9%) vs baseline: -1.1%

Memory: ✅ 38.122MB (SLO: <39.000MB -2.3%) vs baseline: +5.2%


✅ rstrip_aspect

Time: ✅ 2.007µs (SLO: <20.000µs 📉 -90.0%) vs baseline: +7.3%

Memory: ✅ 38.103MB (SLO: <39.000MB -2.3%) vs baseline: +5.3%


✅ rstrip_noaspect

Time: ✅ 0.384µs (SLO: <10.000µs 📉 -96.2%) vs baseline: +1.3%

Memory: ✅ 38.122MB (SLO: <39.000MB -2.3%) vs baseline: +5.4%


✅ slice_aspect

Time: ✅ 0.495µs (SLO: <10.000µs 📉 -95.0%) vs baseline: +1.0%

Memory: ✅ 38.083MB (SLO: <39.000MB -2.4%) vs baseline: +5.5%


✅ slice_noaspect

Time: ✅ 0.442µs (SLO: <10.000µs 📉 -95.6%) vs baseline: -2.0%

Memory: ✅ 38.122MB (SLO: <39.000MB -2.3%) vs baseline: +5.6%


✅ stringio_aspect

Time: ✅ 1.541µs (SLO: <10.000µs 📉 -84.6%) vs baseline: +1.3%

Memory: ✅ 38.122MB (SLO: <39.000MB -2.3%) vs baseline: +5.1%


✅ stringio_noaspect

Time: ✅ 0.721µs (SLO: <10.000µs 📉 -92.8%) vs baseline: ~same

Memory: ✅ 38.142MB (SLO: <39.000MB -2.2%) vs baseline: +5.2%


✅ strip_aspect

Time: ✅ 2.548µs (SLO: <20.000µs 📉 -87.3%) vs baseline: 📈 +14.1%

Memory: ✅ 38.103MB (SLO: <39.000MB -2.3%) vs baseline: +5.3%


✅ strip_noaspect

Time: ✅ 0.383µs (SLO: <10.000µs 📉 -96.2%) vs baseline: -0.8%

Memory: ✅ 38.103MB (SLO: <39.000MB -2.3%) vs baseline: +5.6%


✅ swapcase_aspect

Time: ✅ 2.447µs (SLO: <10.000µs 📉 -75.5%) vs baseline: +1.6%

Memory: ✅ 38.142MB (SLO: <39.000MB -2.2%) vs baseline: +5.5%


✅ swapcase_noaspect

Time: ✅ 0.538µs (SLO: <10.000µs 📉 -94.6%) vs baseline: +0.1%

Memory: ✅ 38.122MB (SLO: <39.000MB -2.3%) vs baseline: +5.2%


✅ title_aspect

Time: ✅ 2.338µs (SLO: <10.000µs 📉 -76.6%) vs baseline: +0.7%

Memory: ✅ 38.122MB (SLO: <39.000MB -2.3%) vs baseline: +5.5%


✅ title_noaspect

Time: ✅ 0.500µs (SLO: <10.000µs 📉 -95.0%) vs baseline: +0.7%

Memory: ✅ 38.122MB (SLO: <39.000MB -2.3%) vs baseline: +5.3%


✅ translate_aspect

Time: ✅ 3.470µs (SLO: <10.000µs 📉 -65.3%) vs baseline: +7.4%

Memory: ✅ 38.103MB (SLO: <39.000MB -2.3%) vs baseline: +5.5%


✅ translate_noaspect

Time: ✅ 1.038µs (SLO: <10.000µs 📉 -89.6%) vs baseline: -0.2%

Memory: ✅ 38.142MB (SLO: <39.000MB -2.2%) vs baseline: +5.5%


✅ upper_aspect

Time: ✅ 2.431µs (SLO: <10.000µs 📉 -75.7%) vs baseline: 📈 +10.4%

Memory: ✅ 38.122MB (SLO: <39.000MB -2.3%) vs baseline: +5.2%


✅ upper_noaspect

Time: ✅ 0.370µs (SLO: <10.000µs 📉 -96.3%) vs baseline: -0.7%

Memory: ✅ 38.103MB (SLO: <39.000MB -2.3%) vs baseline: +5.5%


📈 iastaspectsospath - 24/24

✅ ospathbasename_aspect

Time: ✅ 4.310µs (SLO: <10.000µs 📉 -56.9%) vs baseline: +2.0%

Memory: ✅ 38.142MB (SLO: <39.000MB -2.2%) vs baseline: +6.3%


✅ ospathbasename_noaspect

Time: ✅ 1.083µs (SLO: <10.000µs 📉 -89.2%) vs baseline: -0.3%

Memory: ✅ 38.122MB (SLO: <39.000MB -2.3%) vs baseline: +6.3%


✅ ospathjoin_aspect

Time: ✅ 6.052µs (SLO: <10.000µs 📉 -39.5%) vs baseline: -1.6%

Memory: ✅ 38.024MB (SLO: <39.000MB -2.5%) vs baseline: +5.6%


✅ ospathjoin_noaspect

Time: ✅ 2.298µs (SLO: <10.000µs 📉 -77.0%) vs baseline: -0.3%

Memory: ✅ 38.142MB (SLO: <39.000MB -2.2%) vs baseline: +6.4%


✅ ospathnormcase_aspect

Time: ✅ 3.535µs (SLO: <10.000µs 📉 -64.7%) vs baseline: +1.6%

Memory: ✅ 38.083MB (SLO: <39.000MB -2.4%) vs baseline: +6.2%


✅ ospathnormcase_noaspect

Time: ✅ 0.577µs (SLO: <10.000µs 📉 -94.2%) vs baseline: -0.9%

Memory: ✅ 38.083MB (SLO: <39.000MB -2.4%) vs baseline: +6.3%


✅ ospathsplit_aspect

Time: ✅ 4.807µs (SLO: <10.000µs 📉 -51.9%) vs baseline: +0.2%

Memory: ✅ 38.122MB (SLO: <39.000MB -2.3%) vs baseline: +6.7%


✅ ospathsplit_noaspect

Time: ✅ 1.592µs (SLO: <10.000µs 📉 -84.1%) vs baseline: -0.1%

Memory: ✅ 38.122MB (SLO: <39.000MB -2.3%) vs baseline: +6.2%


✅ ospathsplitdrive_aspect

Time: ✅ 3.677µs (SLO: <10.000µs 📉 -63.2%) vs baseline: +0.2%

Memory: ✅ 38.103MB (SLO: <39.000MB -2.3%) vs baseline: +6.3%


✅ ospathsplitdrive_noaspect

Time: ✅ 0.699µs (SLO: <10.000µs 📉 -93.0%) vs baseline: -0.7%

Memory: ✅ 38.122MB (SLO: <39.000MB -2.3%) vs baseline: +6.3%


✅ ospathsplitext_aspect

Time: ✅ 5.309µs (SLO: <10.000µs 📉 -46.9%) vs baseline: 📈 +17.1%

Memory: ✅ 38.103MB (SLO: <39.000MB -2.3%) vs baseline: +6.5%


✅ ospathsplitext_noaspect

Time: ✅ 1.390µs (SLO: <10.000µs 📉 -86.1%) vs baseline: +0.5%

Memory: ✅ 38.103MB (SLO: <39.000MB -2.3%) vs baseline: +6.3%

🟡 Near SLO Breach (6 suites)
🟡 djangosimple - 30/30

✅ appsec

Time: ✅ 20.481ms (SLO: <22.300ms -8.2%) vs baseline: ~same

Memory: ✅ 66.268MB (SLO: <67.000MB 🟡 -1.1%) vs baseline: +4.9%


✅ exception-replay-enabled

Time: ✅ 1.343ms (SLO: <1.450ms -7.4%) vs baseline: ~same

Memory: ✅ 64.374MB (SLO: <67.000MB -3.9%) vs baseline: +5.2%


✅ iast

Time: ✅ 20.420ms (SLO: <22.250ms -8.2%) vs baseline: -0.2%

Memory: ✅ 66.273MB (SLO: <67.000MB 🟡 -1.1%) vs baseline: +5.1%


✅ profiler

Time: ✅ 15.486ms (SLO: <16.550ms -6.4%) vs baseline: -0.3%

Memory: ✅ 54.277MB (SLO: <54.500MB 🟡 -0.4%) vs baseline: +5.4%


✅ resource-renaming

Time: ✅ 20.459ms (SLO: <21.750ms -5.9%) vs baseline: -0.2%

Memory: ✅ 66.266MB (SLO: <67.000MB 🟡 -1.1%) vs baseline: +5.1%


✅ span-code-origin

Time: ✅ 25.427ms (SLO: <28.200ms -9.8%) vs baseline: +1.6%

Memory: ✅ 67.198MB (SLO: <69.500MB -3.3%) vs baseline: +4.3%


✅ tracer

Time: ✅ 20.465ms (SLO: <21.750ms -5.9%) vs baseline: -0.3%

Memory: ✅ 66.127MB (SLO: <67.000MB 🟡 -1.3%) vs baseline: +4.8%


✅ tracer-and-profiler

Time: ✅ 22.652ms (SLO: <23.500ms -3.6%) vs baseline: -0.3%

Memory: ✅ 68.117MB (SLO: <68.000MB +0.2%) vs baseline: +5.3%


✅ tracer-dont-create-db-spans

Time: ✅ 19.337ms (SLO: <21.500ms 📉 -10.1%) vs baseline: ~same

Memory: ✅ 66.080MB (SLO: <67.000MB 🟡 -1.4%) vs baseline: +4.7%


✅ tracer-minimal

Time: ✅ 16.584ms (SLO: <17.500ms -5.2%) vs baseline: -0.5%

Memory: ✅ 66.187MB (SLO: <67.000MB 🟡 -1.2%) vs baseline: +5.2%


✅ tracer-native

Time: ✅ 20.492ms (SLO: <21.750ms -5.8%) vs baseline: +0.3%

Memory: ✅ 68.144MB (SLO: <72.500MB -6.0%) vs baseline: +5.4%


✅ tracer-no-caches

Time: ✅ 18.457ms (SLO: <19.650ms -6.1%) vs baseline: -0.4%

Memory: ✅ 66.182MB (SLO: <67.000MB 🟡 -1.2%) vs baseline: +5.0%


✅ tracer-no-databases

Time: ✅ 18.754ms (SLO: <20.100ms -6.7%) vs baseline: ~same

Memory: ✅ 66.157MB (SLO: <67.000MB 🟡 -1.3%) vs baseline: +5.3%


✅ tracer-no-middleware

Time: ✅ 20.120ms (SLO: <21.500ms -6.4%) vs baseline: -0.1%

Memory: ✅ 66.293MB (SLO: <67.000MB 🟡 -1.1%) vs baseline: +5.1%


✅ tracer-no-templates

Time: ✅ 20.279ms (SLO: <22.000ms -7.8%) vs baseline: ~same

Memory: ✅ 66.179MB (SLO: <67.000MB 🟡 -1.2%) vs baseline: +5.0%


🟡 errortrackingdjangosimple - 6/6

✅ errortracking-enabled-all

Time: ✅ 18.293ms (SLO: <19.850ms -7.8%) vs baseline: +1.0%

Memory: ✅ 66.277MB (SLO: <66.500MB 🟡 -0.3%) vs baseline: +5.2%


✅ errortracking-enabled-user

Time: ✅ 18.073ms (SLO: <19.400ms -6.8%) vs baseline: +0.5%

Memory: ✅ 66.296MB (SLO: <66.500MB 🟡 -0.3%) vs baseline: +5.3%


✅ tracer-enabled

Time: ✅ 18.230ms (SLO: <19.450ms -6.3%) vs baseline: +0.9%

Memory: ✅ 66.375MB (SLO: <66.500MB 🟡 -0.2%) vs baseline: +5.6%


🟡 errortrackingflasksqli - 6/6

✅ errortracking-enabled-all

Time: ✅ 2.074ms (SLO: <2.300ms -9.8%) vs baseline: +0.2%

Memory: ✅ 52.730MB (SLO: <53.500MB 🟡 -1.4%) vs baseline: +5.0%


✅ errortracking-enabled-user

Time: ✅ 2.074ms (SLO: <2.250ms -7.8%) vs baseline: -0.2%

Memory: ✅ 52.612MB (SLO: <53.500MB 🟡 -1.7%) vs baseline: +4.8%


✅ tracer-enabled

Time: ✅ 2.070ms (SLO: <2.300ms 📉 -10.0%) vs baseline: +0.1%

Memory: ✅ 52.730MB (SLO: <53.500MB 🟡 -1.4%) vs baseline: +5.2%


🟡 flasksimple - 18/18

✅ appsec-get

Time: ✅ 4.597ms (SLO: <4.750ms -3.2%) vs baseline: -0.1%

Memory: ✅ 62.423MB (SLO: <65.000MB -4.0%) vs baseline: +5.0%


✅ appsec-post

Time: ✅ 6.636ms (SLO: <6.750ms 🟡 -1.7%) vs baseline: ~same

Memory: ✅ 62.469MB (SLO: <65.000MB -3.9%) vs baseline: +5.0%


✅ appsec-telemetry

Time: ✅ 4.588ms (SLO: <4.750ms -3.4%) vs baseline: -0.4%

Memory: ✅ 62.437MB (SLO: <65.000MB -3.9%) vs baseline: +5.1%


✅ debugger

Time: ✅ 1.860ms (SLO: <2.000ms -7.0%) vs baseline: ~same

Memory: ✅ 45.513MB (SLO: <47.000MB -3.2%) vs baseline: +5.3%


✅ iast-get

Time: ✅ 1.857ms (SLO: <2.000ms -7.2%) vs baseline: +0.2%

Memory: ✅ 42.298MB (SLO: <49.000MB 📉 -13.7%) vs baseline: +5.1%


✅ profiler

Time: ✅ 1.916ms (SLO: <2.100ms -8.8%) vs baseline: ~same

Memory: ✅ 46.855MB (SLO: <47.000MB 🟡 -0.3%) vs baseline: +5.2%


✅ resource-renaming

Time: ✅ 3.369ms (SLO: <3.650ms -7.7%) vs baseline: ~same

Memory: ✅ 52.762MB (SLO: <53.500MB 🟡 -1.4%) vs baseline: +5.2%


✅ tracer

Time: ✅ 3.360ms (SLO: <3.650ms -7.9%) vs baseline: ~same

Memory: ✅ 52.675MB (SLO: <53.500MB 🟡 -1.5%) vs baseline: +5.0%


✅ tracer-native

Time: ✅ 3.349ms (SLO: <3.650ms -8.2%) vs baseline: +0.2%

Memory: ✅ 54.529MB (SLO: <60.000MB -9.1%) vs baseline: +5.5%


🟡 flasksqli - 6/6

✅ appsec-enabled

Time: ✅ 3.964ms (SLO: <4.200ms -5.6%) vs baseline: -0.3%

Memory: ✅ 62.482MB (SLO: <66.000MB -5.3%) vs baseline: +5.0%


✅ iast-enabled

Time: ✅ 2.441ms (SLO: <2.800ms 📉 -12.8%) vs baseline: -0.7%

Memory: ✅ 59.277MB (SLO: <60.000MB 🟡 -1.2%) vs baseline: +5.0%


✅ tracer-enabled

Time: ✅ 2.057ms (SLO: <2.250ms -8.6%) vs baseline: -0.2%

Memory: ✅ 52.632MB (SLO: <54.500MB -3.4%) vs baseline: +4.8%


🟡 recursivecomputation - 8/8

✅ deep

Time: ✅ 309.102ms (SLO: <320.950ms -3.7%) vs baseline: +0.1%

Memory: ✅ 32.952MB (SLO: <34.500MB -4.5%) vs baseline: +5.6%


✅ deep-profiled

Time: ✅ 328.005ms (SLO: <359.150ms -8.7%) vs baseline: +0.2%

Memory: ✅ 38.350MB (SLO: <39.000MB 🟡 -1.7%) vs baseline: +5.9%


✅ medium

Time: ✅ 7.004ms (SLO: <7.400ms -5.3%) vs baseline: -0.2%

Memory: ✅ 32.126MB (SLO: <34.000MB -5.5%) vs baseline: +5.2%


✅ shallow

Time: ✅ 0.939ms (SLO: <1.050ms 📉 -10.5%) vs baseline: ~same

Memory: ✅ 32.126MB (SLO: <34.000MB -5.5%) vs baseline: +5.4%

⚠️ Unstable Tests (1 suite)
⚠️ coreapiscenario - 10/10 (1 unstable)

⚠️ context_with_data_listeners

Time: ⚠️ 13.282µs (SLO: <20.000µs 📉 -33.6%) vs baseline: +0.3%

Memory: ✅ 32.126MB (SLO: <33.500MB -4.1%) vs baseline: +6.5%


✅ context_with_data_no_listeners

Time: ✅ 3.283µs (SLO: <10.000µs 📉 -67.2%) vs baseline: +1.1%

Memory: ✅ 31.988MB (SLO: <33.500MB -4.5%) vs baseline: +6.2%


✅ get_item_exists

Time: ✅ 0.582µs (SLO: <10.000µs 📉 -94.2%) vs baseline: -0.9%

Memory: ✅ 31.752MB (SLO: <33.500MB -5.2%) vs baseline: +5.5%


✅ get_item_missing

Time: ✅ 0.644µs (SLO: <10.000µs 📉 -93.6%) vs baseline: +0.1%

Memory: ✅ 31.752MB (SLO: <33.500MB -5.2%) vs baseline: +5.4%


✅ set_item

Time: ✅ 24.182µs (SLO: <30.000µs 📉 -19.4%) vs baseline: +0.6%

Memory: ✅ 31.752MB (SLO: <33.500MB -5.2%) vs baseline: +5.2%

✅ All Tests Passing (13 suites)
httppropagationextract - 60/60

✅ all_styles_all_headers

Time: ✅ 81.831µs (SLO: <100.000µs 📉 -18.2%) vs baseline: +0.1%

Memory: ✅ 32.244MB (SLO: <33.500MB -3.8%) vs baseline: +5.5%


✅ b3_headers

Time: ✅ 14.243µs (SLO: <20.000µs 📉 -28.8%) vs baseline: ~same

Memory: ✅ 32.244MB (SLO: <33.500MB -3.8%) vs baseline: +5.4%


✅ b3_single_headers

Time: ✅ 13.285µs (SLO: <20.000µs 📉 -33.6%) vs baseline: -0.9%

Memory: ✅ 32.244MB (SLO: <33.500MB -3.8%) vs baseline: +5.4%


✅ datadog_tracecontext_tracestate_not_propagated_on_trace_id_no_match

Time: ✅ 65.901µs (SLO: <80.000µs 📉 -17.6%) vs baseline: +3.3%

Memory: ✅ 32.244MB (SLO: <33.500MB -3.8%) vs baseline: +5.4%


✅ datadog_tracecontext_tracestate_propagated_on_trace_id_match

Time: ✅ 66.051µs (SLO: <80.000µs 📉 -17.4%) vs baseline: ~same

Memory: ✅ 32.244MB (SLO: <33.500MB -3.8%) vs baseline: +5.4%


✅ empty_headers

Time: ✅ 1.602µs (SLO: <10.000µs 📉 -84.0%) vs baseline: -0.1%

Memory: ✅ 32.244MB (SLO: <33.500MB -3.8%) vs baseline: +5.4%


✅ full_t_id_datadog_headers

Time: ✅ 23.032µs (SLO: <30.000µs 📉 -23.2%) vs baseline: +0.5%

Memory: ✅ 32.244MB (SLO: <33.500MB -3.8%) vs baseline: +5.5%


✅ invalid_priority_header

Time: ✅ 6.555µs (SLO: <10.000µs 📉 -34.4%) vs baseline: ~same

Memory: ✅ 32.244MB (SLO: <33.500MB -3.8%) vs baseline: +5.6%


✅ invalid_span_id_header

Time: ✅ 6.618µs (SLO: <10.000µs 📉 -33.8%) vs baseline: +0.7%

Memory: ✅ 32.244MB (SLO: <33.500MB -3.8%) vs baseline: +5.5%


✅ invalid_tags_header

Time: ✅ 6.491µs (SLO: <10.000µs 📉 -35.1%) vs baseline: -0.3%

Memory: ✅ 32.244MB (SLO: <33.500MB -3.8%) vs baseline: +5.6%


✅ invalid_trace_id_header

Time: ✅ 6.471µs (SLO: <10.000µs 📉 -35.3%) vs baseline: -0.8%

Memory: ✅ 32.244MB (SLO: <33.500MB -3.8%) vs baseline: +5.6%


✅ large_header_no_matches

Time: ✅ 27.596µs (SLO: <30.000µs -8.0%) vs baseline: -0.3%

Memory: ✅ 32.244MB (SLO: <33.500MB -3.8%) vs baseline: +5.6%


✅ large_valid_headers_all

Time: ✅ 28.730µs (SLO: <40.000µs 📉 -28.2%) vs baseline: +0.4%

Memory: ✅ 32.244MB (SLO: <33.500MB -3.8%) vs baseline: +5.7%


✅ medium_header_no_matches

Time: ✅ 9.888µs (SLO: <20.000µs 📉 -50.6%) vs baseline: -0.2%

Memory: ✅ 32.244MB (SLO: <33.500MB -3.8%) vs baseline: +5.4%


✅ medium_valid_headers_all

Time: ✅ 11.212µs (SLO: <20.000µs 📉 -43.9%) vs baseline: -0.3%

Memory: ✅ 32.244MB (SLO: <33.500MB -3.8%) vs baseline: +5.5%


✅ none_propagation_style

Time: ✅ 1.702µs (SLO: <10.000µs 📉 -83.0%) vs baseline: -1.2%

Memory: ✅ 32.244MB (SLO: <33.500MB -3.8%) vs baseline: +5.6%


✅ tracecontext_headers

Time: ✅ 34.513µs (SLO: <40.000µs 📉 -13.7%) vs baseline: +0.6%

Memory: ✅ 32.244MB (SLO: <33.500MB -3.8%) vs baseline: +5.5%


✅ valid_headers_all

Time: ✅ 6.543µs (SLO: <10.000µs 📉 -34.6%) vs baseline: -0.7%

Memory: ✅ 32.244MB (SLO: <33.500MB -3.8%) vs baseline: +5.6%


✅ valid_headers_basic

Time: ✅ 6.178µs (SLO: <10.000µs 📉 -38.2%) vs baseline: +1.4%

Memory: ✅ 32.244MB (SLO: <33.500MB -3.8%) vs baseline: +5.8%


✅ wsgi_empty_headers

Time: ✅ 1.604µs (SLO: <10.000µs 📉 -84.0%) vs baseline: -0.6%

Memory: ✅ 32.244MB (SLO: <33.500MB -3.8%) vs baseline: +5.9%


✅ wsgi_invalid_priority_header

Time: ✅ 6.685µs (SLO: <10.000µs 📉 -33.2%) vs baseline: +1.6%

Memory: ✅ 32.244MB (SLO: <33.500MB -3.8%) vs baseline: +5.8%


✅ wsgi_invalid_span_id_header

Time: ✅ 1.605µs (SLO: <10.000µs 📉 -84.0%) vs baseline: +0.5%

Memory: ✅ 32.244MB (SLO: <33.500MB -3.8%) vs baseline: +5.2%


✅ wsgi_invalid_tags_header

Time: ✅ 6.608µs (SLO: <10.000µs 📉 -33.9%) vs baseline: +0.5%

Memory: ✅ 32.244MB (SLO: <33.500MB -3.8%) vs baseline: +5.6%


✅ wsgi_invalid_trace_id_header

Time: ✅ 6.549µs (SLO: <10.000µs 📉 -34.5%) vs baseline: -0.5%

Memory: ✅ 32.244MB (SLO: <33.500MB -3.8%) vs baseline: +5.6%


✅ wsgi_large_header_no_matches

Time: ✅ 28.747µs (SLO: <40.000µs 📉 -28.1%) vs baseline: +0.3%

Memory: ✅ 32.244MB (SLO: <33.500MB -3.8%) vs baseline: +5.6%


✅ wsgi_large_valid_headers_all

Time: ✅ 29.769µs (SLO: <40.000µs 📉 -25.6%) vs baseline: +0.3%

Memory: ✅ 32.244MB (SLO: <33.500MB -3.8%) vs baseline: +5.4%


✅ wsgi_medium_header_no_matches

Time: ✅ 10.173µs (SLO: <20.000µs 📉 -49.1%) vs baseline: -0.2%

Memory: ✅ 32.244MB (SLO: <33.500MB -3.8%) vs baseline: +5.6%


✅ wsgi_medium_valid_headers_all

Time: ✅ 11.543µs (SLO: <20.000µs 📉 -42.3%) vs baseline: -0.9%

Memory: ✅ 32.244MB (SLO: <33.500MB -3.8%) vs baseline: +5.1%


✅ wsgi_valid_headers_all

Time: ✅ 6.581µs (SLO: <10.000µs 📉 -34.2%) vs baseline: -0.1%

Memory: ✅ 32.244MB (SLO: <33.500MB -3.8%) vs baseline: +5.4%


✅ wsgi_valid_headers_basic

Time: ✅ 6.132µs (SLO: <10.000µs 📉 -38.7%) vs baseline: -0.2%

Memory: ✅ 32.244MB (SLO: <33.500MB -3.8%) vs baseline: +5.4%


httppropagationinject - 16/16

✅ ids_only

Time: ✅ 20.968µs (SLO: <30.000µs 📉 -30.1%) vs baseline: -0.3%

Memory: ✅ 32.244MB (SLO: <33.500MB -3.8%) vs baseline: +5.5%


✅ with_all

Time: ✅ 28.463µs (SLO: <40.000µs 📉 -28.8%) vs baseline: -0.3%

Memory: ✅ 32.244MB (SLO: <33.500MB -3.8%) vs baseline: +5.4%


✅ with_dd_origin

Time: ✅ 24.807µs (SLO: <30.000µs 📉 -17.3%) vs baseline: +0.3%

Memory: ✅ 32.244MB (SLO: <33.500MB -3.8%) vs baseline: +5.8%


✅ with_priority_and_origin

Time: ✅ 24.250µs (SLO: <40.000µs 📉 -39.4%) vs baseline: -0.9%

Memory: ✅ 32.244MB (SLO: <33.500MB -3.8%) vs baseline: +5.3%


✅ with_sampling_priority

Time: ✅ 20.905µs (SLO: <30.000µs 📉 -30.3%) vs baseline: -0.5%

Memory: ✅ 32.244MB (SLO: <33.500MB -3.8%) vs baseline: +5.6%


✅ with_tags

Time: ✅ 26.589µs (SLO: <40.000µs 📉 -33.5%) vs baseline: -0.3%

Memory: ✅ 32.244MB (SLO: <33.500MB -3.8%) vs baseline: +5.7%


✅ with_tags_invalid

Time: ✅ 27.959µs (SLO: <40.000µs 📉 -30.1%) vs baseline: -0.4%

Memory: ✅ 32.244MB (SLO: <33.500MB -3.8%) vs baseline: +5.4%


✅ with_tags_max_size

Time: ✅ 26.971µs (SLO: <40.000µs 📉 -32.6%) vs baseline: -0.4%

Memory: ✅ 32.244MB (SLO: <33.500MB -3.8%) vs baseline: +5.4%


iastaspectssplit - 12/12

✅ rsplit_aspect

Time: ✅ 1.472µs (SLO: <10.000µs 📉 -85.3%) vs baseline: +3.9%

Memory: ✅ 37.749MB (SLO: <39.000MB -3.2%) vs baseline: +5.3%


✅ rsplit_noaspect

Time: ✅ 0.577µs (SLO: <10.000µs 📉 -94.2%) vs baseline: +0.2%

Memory: ✅ 37.709MB (SLO: <39.000MB -3.3%) vs baseline: +5.5%


✅ split_aspect

Time: ✅ 1.452µs (SLO: <10.000µs 📉 -85.5%) vs baseline: +4.0%

Memory: ✅ 37.749MB (SLO: <39.000MB -3.2%) vs baseline: +5.4%


✅ split_noaspect

Time: ✅ 0.575µs (SLO: <10.000µs 📉 -94.3%) vs baseline: +1.1%

Memory: ✅ 37.670MB (SLO: <39.000MB -3.4%) vs baseline: +5.3%


✅ splitlines_aspect

Time: ✅ 1.441µs (SLO: <10.000µs 📉 -85.6%) vs baseline: +2.2%

Memory: ✅ 37.729MB (SLO: <39.000MB -3.3%) vs baseline: +5.5%


✅ splitlines_noaspect

Time: ✅ 0.581µs (SLO: <10.000µs 📉 -94.2%) vs baseline: -0.5%

Memory: ✅ 37.749MB (SLO: <39.000MB -3.2%) vs baseline: +5.7%


iastpropagation - 2/2

✅ no-propagation

Time: ✅ 49.200µs (SLO: <60.000µs 📉 -18.0%) vs baseline: +1.2%

Memory: ✅ 37.768MB (SLO: <39.000MB -3.2%) vs baseline: +5.5%


otelsdkspan - 24/24

✅ add-event

Time: ✅ 40.184ms (SLO: <42.000ms -4.3%) vs baseline: -0.6%

Memory: ✅ 34.564MB (SLO: <39.000MB 📉 -11.4%) vs baseline: +5.5%


✅ add-link

Time: ✅ 36.475ms (SLO: <38.550ms -5.4%) vs baseline: +0.4%

Memory: ✅ 34.544MB (SLO: <39.000MB 📉 -11.4%) vs baseline: +5.6%


✅ add-metrics

Time: ✅ 217.539ms (SLO: <232.000ms -6.2%) vs baseline: -1.1%

Memory: ✅ 34.544MB (SLO: <39.000MB 📉 -11.4%) vs baseline: +5.5%


✅ add-tags

Time: ✅ 214.009ms (SLO: <221.600ms -3.4%) vs baseline: +0.5%

Memory: ✅ 34.524MB (SLO: <39.000MB 📉 -11.5%) vs baseline: +5.3%


✅ get-context

Time: ✅ 28.958ms (SLO: <31.300ms -7.5%) vs baseline: -0.7%

Memory: ✅ 34.544MB (SLO: <39.000MB 📉 -11.4%) vs baseline: +5.4%


✅ is-recording

Time: ✅ 28.908ms (SLO: <31.000ms -6.7%) vs baseline: -0.3%

Memory: ✅ 34.603MB (SLO: <39.000MB 📉 -11.3%) vs baseline: +5.3%


✅ record-exception

Time: ✅ 62.819ms (SLO: <65.850ms -4.6%) vs baseline: -0.3%

Memory: ✅ 34.564MB (SLO: <39.000MB 📉 -11.4%) vs baseline: +5.3%


✅ set-status

Time: ✅ 31.943ms (SLO: <34.150ms -6.5%) vs baseline: +1.1%

Memory: ✅ 34.583MB (SLO: <39.000MB 📉 -11.3%) vs baseline: +5.5%


✅ start

Time: ✅ 28.729ms (SLO: <30.150ms -4.7%) vs baseline: -0.7%

Memory: ✅ 34.564MB (SLO: <39.000MB 📉 -11.4%) vs baseline: +5.6%


✅ start-finish

Time: ✅ 33.707ms (SLO: <35.350ms -4.6%) vs baseline: -0.1%

Memory: ✅ 34.505MB (SLO: <39.000MB 📉 -11.5%) vs baseline: +5.5%


✅ start-finish-telemetry

Time: ✅ 33.962ms (SLO: <35.450ms -4.2%) vs baseline: ~same

Memory: ✅ 34.524MB (SLO: <39.000MB 📉 -11.5%) vs baseline: +5.4%


✅ update-name

Time: ✅ 30.994ms (SLO: <33.400ms -7.2%) vs baseline: +0.3%

Memory: ✅ 34.583MB (SLO: <39.000MB 📉 -11.3%) vs baseline: +5.3%


otelspan - 22/22

✅ add-event

Time: ✅ 40.394ms (SLO: <47.150ms 📉 -14.3%) vs baseline: +0.2%

Memory: ✅ 43.795MB (SLO: <47.000MB -6.8%) vs baseline: +5.3%


✅ add-metrics

Time: ✅ 321.782ms (SLO: <344.800ms -6.7%) vs baseline: +1.7%

Memory: ✅ 653.373MB (SLO: <675.000MB -3.2%) vs baseline: +5.1%


✅ add-tags

Time: ✅ 289.528ms (SLO: <314.000ms -7.8%) vs baseline: -0.2%

Memory: ✅ 653.881MB (SLO: <675.000MB -3.1%) vs baseline: +4.9%


✅ get-context

Time: ✅ 80.226ms (SLO: <92.350ms 📉 -13.1%) vs baseline: +0.2%

Memory: ✅ 39.651MB (SLO: <46.500MB 📉 -14.7%) vs baseline: +5.1%


✅ is-recording

Time: ✅ 38.596ms (SLO: <44.500ms 📉 -13.3%) vs baseline: +1.2%

Memory: ✅ 43.187MB (SLO: <47.500MB -9.1%) vs baseline: +5.4%


✅ record-exception

Time: ✅ 58.350ms (SLO: <67.650ms 📉 -13.7%) vs baseline: ~same

Memory: ✅ 39.917MB (SLO: <47.000MB 📉 -15.1%) vs baseline: +5.3%


✅ set-status

Time: ✅ 44.143ms (SLO: <50.400ms 📉 -12.4%) vs baseline: +0.6%

Memory: ✅ 43.231MB (SLO: <47.000MB -8.0%) vs baseline: +5.5%


✅ start

Time: ✅ 37.449ms (SLO: <43.450ms 📉 -13.8%) vs baseline: ~same

Memory: ✅ 43.204MB (SLO: <47.000MB -8.1%) vs baseline: +5.3%


✅ start-finish

Time: ✅ 82.698ms (SLO: <88.000ms -6.0%) vs baseline: +1.5%

Memory: ✅ 34.603MB (SLO: <46.500MB 📉 -25.6%) vs baseline: +5.3%


✅ start-finish-telemetry

Time: ✅ 84.793ms (SLO: <89.000ms -4.7%) vs baseline: +1.7%

Memory: ✅ 34.603MB (SLO: <46.500MB 📉 -25.6%) vs baseline: +5.2%


✅ update-name

Time: ✅ 39.210ms (SLO: <45.150ms 📉 -13.2%) vs baseline: +0.9%

Memory: ✅ 43.537MB (SLO: <47.000MB -7.4%) vs baseline: +5.3%


packagespackageforrootmodulemapping - 4/4

✅ cache_off

Time: ✅ 343.461ms (SLO: <354.300ms -3.1%) vs baseline: -0.4%

Memory: ✅ 37.737MB (SLO: <40.000MB -5.7%) vs baseline: +3.7%


✅ cache_on

Time: ✅ 0.386µs (SLO: <10.000µs 📉 -96.1%) vs baseline: +0.9%

Memory: ✅ 37.007MB (SLO: <39.000MB -5.1%) vs baseline: +4.2%


packagesupdateimporteddependencies - 24/24

✅ import_many

Time: ✅ 155.361µs (SLO: <170.000µs -8.6%) vs baseline: ~same

Memory: ✅ 36.812MB (SLO: <38.500MB -4.4%) vs baseline: +3.9%


✅ import_many_cached

Time: ✅ 121.100µs (SLO: <130.000µs -6.8%) vs baseline: ~same

Memory: ✅ 36.594MB (SLO: <38.500MB -4.9%) vs baseline: +3.1%


✅ import_many_stdlib

Time: ✅ 1.616ms (SLO: <1.750ms -7.6%) vs baseline: -0.2%

Memory: ✅ 36.933MB (SLO: <38.500MB -4.1%) vs baseline: +4.0%


✅ import_many_stdlib_cached

Time: ✅ 0.972ms (SLO: <1.100ms 📉 -11.6%) vs baseline: -0.6%

Memory: ✅ 36.803MB (SLO: <38.500MB -4.4%) vs baseline: +3.6%


✅ import_many_unknown

Time: ✅ 829.952µs (SLO: <890.000µs -6.7%) vs baseline: -0.1%

Memory: ✅ 36.902MB (SLO: <38.500MB -4.2%) vs baseline: +3.9%


✅ import_many_unknown_cached

Time: ✅ 799.325µs (SLO: <870.000µs -8.1%) vs baseline: +1.4%

Memory: ✅ 36.808MB (SLO: <38.500MB -4.4%) vs baseline: +3.7%


✅ import_one

Time: ✅ 19.756µs (SLO: <30.000µs 📉 -34.1%) vs baseline: +0.3%

Memory: ✅ 36.611MB (SLO: <39.000MB -6.1%) vs baseline: +3.6%


✅ import_one_cache

Time: ✅ 6.240µs (SLO: <10.000µs 📉 -37.6%) vs baseline: -0.8%

Memory: ✅ 36.802MB (SLO: <38.500MB -4.4%) vs baseline: +3.8%


✅ import_one_stdlib

Time: ✅ 18.626µs (SLO: <20.000µs -6.9%) vs baseline: -0.8%

Memory: ✅ 36.848MB (SLO: <38.500MB -4.3%) vs baseline: +4.2%


✅ import_one_stdlib_cache

Time: ✅ 6.245µs (SLO: <10.000µs 📉 -37.6%) vs baseline: -0.9%

Memory: ✅ 36.840MB (SLO: <38.500MB -4.3%) vs baseline: +4.4%


✅ import_one_unknown

Time: ✅ 45.500µs (SLO: <50.000µs -9.0%) vs baseline: +0.2%

Memory: ✅ 36.573MB (SLO: <38.500MB -5.0%) vs baseline: +3.2%


✅ import_one_unknown_cache

Time: ✅ 6.267µs (SLO: <10.000µs 📉 -37.3%) vs baseline: +0.5%

Memory: ✅ 36.893MB (SLO: <38.500MB -4.2%) vs baseline: +4.5%


ratelimiter - 12/12

✅ defaults

Time: ✅ 2.354µs (SLO: <10.000µs 📉 -76.5%) vs baseline: +0.5%

Memory: ✅ 31.792MB (SLO: <34.000MB -6.5%) vs baseline: +5.7%


✅ high_rate_limit

Time: ✅ 2.408µs (SLO: <10.000µs 📉 -75.9%) vs baseline: -0.3%

Memory: ✅ 31.752MB (SLO: <34.000MB -6.6%) vs baseline: +5.4%


✅ long_window

Time: ✅ 2.362µs (SLO: <10.000µs 📉 -76.4%) vs baseline: +0.9%

Memory: ✅ 31.733MB (SLO: <34.000MB -6.7%) vs baseline: +5.3%


✅ low_rate_limit

Time: ✅ 2.357µs (SLO: <10.000µs 📉 -76.4%) vs baseline: -0.9%

Memory: ✅ 31.792MB (SLO: <34.000MB -6.5%) vs baseline: +5.7%


✅ no_rate_limit

Time: ✅ 0.837µs (SLO: <10.000µs 📉 -91.6%) vs baseline: +1.8%

Memory: ✅ 31.772MB (SLO: <34.000MB -6.6%) vs baseline: +5.5%


✅ short_window

Time: ✅ 2.478µs (SLO: <10.000µs 📉 -75.2%) vs baseline: +0.4%

Memory: ✅ 31.752MB (SLO: <34.000MB -6.6%) vs baseline: +5.6%


samplingrules - 8/8

✅ average_match

Time: ✅ 138.141µs (SLO: <290.000µs 📉 -52.4%) vs baseline: +0.5%

Memory: ✅ 32.126MB (SLO: <34.000MB -5.5%) vs baseline: +5.4%


✅ high_match

Time: ✅ 174.468µs (SLO: <480.000µs 📉 -63.7%) vs baseline: +0.4%

Memory: ✅ 32.165MB (SLO: <34.000MB -5.4%) vs baseline: +5.5%


✅ low_match

Time: ✅ 98.605µs (SLO: <120.000µs 📉 -17.8%) vs baseline: -1.3%

Memory: ✅ 600.969MB (SLO: <700.000MB 📉 -14.1%) vs baseline: +4.9%


✅ very_low_match

Time: ✅ 2.661ms (SLO: <8.500ms 📉 -68.7%) vs baseline: -0.6%

Memory: ✅ 68.197MB (SLO: <75.000MB -9.1%) vs baseline: +5.0%


sethttpmeta - 32/32

✅ all-disabled

Time: ✅ 10.480µs (SLO: <20.000µs 📉 -47.6%) vs baseline: -0.3%

Memory: ✅ 32.617MB (SLO: <34.000MB -4.1%) vs baseline: +5.4%


✅ all-enabled

Time: ✅ 39.864µs (SLO: <50.000µs 📉 -20.3%) vs baseline: -0.3%

Memory: ✅ 32.617MB (SLO: <34.000MB -4.1%) vs baseline: +5.2%


✅ collectipvariant_exists

Time: ✅ 40.864µs (SLO: <50.000µs 📉 -18.3%) vs baseline: +0.3%

Memory: ✅ 32.598MB (SLO: <34.000MB -4.1%) vs baseline: +5.7%


✅ no-collectipvariant

Time: ✅ 39.877µs (SLO: <50.000µs 📉 -20.2%) vs baseline: -0.6%

Memory: ✅ 32.617MB (SLO: <34.000MB -4.1%) vs baseline: +5.4%


✅ no-useragentvariant

Time: ✅ 38.591µs (SLO: <50.000µs 📉 -22.8%) vs baseline: -0.5%

Memory: ✅ 32.637MB (SLO: <34.000MB -4.0%) vs baseline: +5.6%


✅ obfuscation-no-query

Time: ✅ 40.480µs (SLO: <50.000µs 📉 -19.0%) vs baseline: -0.2%

Memory: ✅ 32.637MB (SLO: <34.000MB -4.0%) vs baseline: +5.5%


✅ obfuscation-regular-case-explicit-query

Time: ✅ 76.707µs (SLO: <90.000µs 📉 -14.8%) vs baseline: +1.2%

Memory: ✅ 32.991MB (SLO: <34.000MB -3.0%) vs baseline: +5.5%


✅ obfuscation-regular-case-implicit-query

Time: ✅ 76.465µs (SLO: <90.000µs 📉 -15.0%) vs baseline: +0.3%

Memory: ✅ 33.010MB (SLO: <34.000MB -2.9%) vs baseline: +5.5%


✅ obfuscation-send-querystring-disabled

Time: ✅ 153.926µs (SLO: <170.000µs -9.5%) vs baseline: ~same

Memory: ✅ 33.010MB (SLO: <34.500MB -4.3%) vs baseline: +5.6%


✅ obfuscation-worst-case-explicit-query

Time: ✅ 148.221µs (SLO: <160.000µs -7.4%) vs baseline: -0.2%

Memory: ✅ 32.991MB (SLO: <34.500MB -4.4%) vs baseline: +5.5%


✅ obfuscation-worst-case-implicit-query

Time: ✅ 154.736µs (SLO: <170.000µs -9.0%) vs baseline: +0.3%

Memory: ✅ 33.010MB (SLO: <34.500MB -4.3%) vs baseline: +5.5%


✅ useragentvariant_exists_1

Time: ✅ 39.437µs (SLO: <50.000µs 📉 -21.1%) vs baseline: -0.3%

Memory: ✅ 32.637MB (SLO: <34.000MB -4.0%) vs baseline: +5.7%


✅ useragentvariant_exists_2

Time: ✅ 40.541µs (SLO: <50.000µs 📉 -18.9%) vs baseline: +0.1%

Memory: ✅ 32.598MB (SLO: <34.000MB -4.1%) vs baseline: +5.6%


✅ useragentvariant_exists_3

Time: ✅ 40.806µs (SLO: <50.000µs 📉 -18.4%) vs baseline: +2.0%

Memory: ✅ 32.637MB (SLO: <34.000MB -4.0%) vs baseline: +5.4%


✅ useragentvariant_not_exists_1

Time: ✅ 39.606µs (SLO: <50.000µs 📉 -20.8%) vs baseline: ~same

Memory: ✅ 32.617MB (SLO: <34.000MB -4.1%) vs baseline: +5.6%


✅ useragentvariant_not_exists_2

Time: ✅ 39.282µs (SLO: <50.000µs 📉 -21.4%) vs baseline: -0.8%

Memory: ✅ 32.598MB (SLO: <34.000MB -4.1%) vs baseline: +5.4%


span - 26/26

✅ add-event

Time: ✅ 20.026ms (SLO: <22.500ms 📉 -11.0%) vs baseline: +0.4%

Memory: ✅ 48.708MB (SLO: <53.000MB -8.1%) vs baseline: +5.4%


✅ add-metrics

Time: ✅ 89.583ms (SLO: <93.500ms -4.2%) vs baseline: -1.2%

Memory: ✅ 735.023MB (SLO: <961.000MB 📉 -23.5%) vs baseline: +4.8%


✅ add-tags

Time: ✅ 147.003ms (SLO: <155.000ms -5.2%) vs baseline: +0.5%

Memory: ✅ 735.990MB (SLO: <962.500MB 📉 -23.5%) vs baseline: +4.9%


✅ get-context

Time: ✅ 18.207ms (SLO: <20.500ms 📉 -11.2%) vs baseline: -1.3%

Memory: ✅ 47.570MB (SLO: <53.000MB 📉 -10.2%) vs baseline: +5.4%


✅ is-recording

Time: ✅ 18.545ms (SLO: <20.500ms -9.5%) vs baseline: -0.3%

Memory: ✅ 47.586MB (SLO: <53.000MB 📉 -10.2%) vs baseline: +5.4%


✅ record-exception

Time: ✅ 37.948ms (SLO: <40.000ms -5.1%) vs baseline: +1.6%

Memory: ✅ 41.835MB (SLO: <53.000MB 📉 -21.1%) vs baseline: +5.2%


✅ set-status

Time: ✅ 20.099ms (SLO: <22.000ms -8.6%) vs baseline: -1.0%

Memory: ✅ 47.578MB (SLO: <53.000MB 📉 -10.2%) vs baseline: +5.3%


✅ start

Time: ✅ 18.224ms (SLO: <20.500ms 📉 -11.1%) vs baseline: ~same

Memory: ✅ 47.464MB (SLO: <53.000MB 📉 -10.4%) vs baseline: +5.2%


✅ start-finish

Time: ✅ 50.920ms (SLO: <52.500ms -3.0%) vs baseline: -0.1%

Memory: ✅ 32.204MB (SLO: <34.000MB -5.3%) vs baseline: +5.6%


✅ start-finish-telemetry

Time: ✅ 52.312ms (SLO: <54.500ms -4.0%) vs baseline: ~same

Memory: ✅ 32.165MB (SLO: <34.000MB -5.4%) vs baseline: +5.4%


✅ start-finish-traceid128

Time: ✅ 53.943ms (SLO: <57.000ms -5.4%) vs baseline: +0.2%

Memory: ✅ 32.224MB (SLO: <34.000MB -5.2%) vs baseline: +5.8%


✅ start-traceid128

Time: ✅ 18.645ms (SLO: <22.500ms 📉 -17.1%) vs baseline: +0.2%

Memory: ✅ 47.618MB (SLO: <53.000MB 📉 -10.2%) vs baseline: +5.4%


✅ update-name

Time: ✅ 18.641ms (SLO: <22.000ms 📉 -15.3%) vs baseline: -1.0%

Memory: ✅ 48.239MB (SLO: <53.000MB -9.0%) vs baseline: +5.4%


tracer - 6/6

✅ large

Time: ✅ 29.070ms (SLO: <32.950ms 📉 -11.8%) vs baseline: +0.2%

Memory: ✅ 32.971MB (SLO: <34.500MB -4.4%) vs baseline: +6.0%


✅ medium

Time: ✅ 2.874ms (SLO: <3.200ms 📉 -10.2%) vs baseline: -0.2%

Memory: ✅ 31.772MB (SLO: <34.000MB -6.6%) vs baseline: +5.6%


✅ small

Time: ✅ 326.389µs (SLO: <370.000µs 📉 -11.8%) vs baseline: +0.4%

Memory: ✅ 31.772MB (SLO: <34.000MB -6.6%) vs baseline: +5.6%

ℹ️ Scenarios Missing SLO Configuration (9 scenarios)

The following scenarios exist in candidate data but have no SLO thresholds configured:

  • coreapiscenario-core_dispatch_listeners
  • coreapiscenario-core_dispatch_no_listeners
  • coreapiscenario-core_dispatch_with_results_listeners
  • coreapiscenario-core_dispatch_with_results_no_listeners
  • djangosimple-baseline
  • errortrackingdjangosimple-baseline
  • errortrackingflasksqli-baseline
  • flasksimple-baseline
  • flasksqli-baseline

@avara1986 avara1986 requested a review from a team as a code owner October 31, 2025 11:29
@avara1986
Copy link
Member

Tests fixed, libdatadog commit be5b5b22039141078d5e125824e338751f2d54a3 (branch avara1986/ffe-pyo3-methods)

@avara1986 avara1986 requested a review from a team as a code owner November 3, 2025 14:51
@avara1986 avara1986 requested a review from a team as a code owner November 3, 2025 17:52
@emmettbutler emmettbutler removed the changelog/no-changelog A changelog entry is not required for this PR. label Nov 3, 2025
@avara1986 avara1986 added the changelog/no-changelog A changelog entry is not required for this PR. label Nov 3, 2025
@dd-oleksii dd-oleksii changed the base branch from main to oleksii/libdatadog-24.0.0 November 12, 2025 14:18
@avara1986 avara1986 merged commit 5627047 into oleksii/libdatadog-24.0.0 Nov 12, 2025
615 of 727 checks passed
@avara1986 avara1986 deleted the datadog-ffe branch November 12, 2025 14:48
@avara1986 avara1986 restored the datadog-ffe branch November 12, 2025 14:49
@dd-oleksii
Copy link
Member Author

@avara1986 I have reopened the PR in #15231
We should wait for #15219 to get merged before merging this PR.

avara1986 added a commit that referenced this pull request Nov 13, 2025
Reopening #15098 as it was accidentally merged too early.

## Description

<!-- Provide an overview of the change and motivation for the change -->
Integrate datadog-ffe from libdatadog:
DataDog/libdatadog#1289

## Testing

<!-- Describe your testing strategy or note what tests are included -->

Tested manually that native bindings work:
```
>>> from ddtrace.internal.native._native import ffe
>>> with open("/Users/oleksii.shmalko/dd/libdatadog/datadog-ffe/tests/data/flags-v1.json", 'rb') as f:
...     json = f.read()
... 
>>> config = ffe.Configuration(json)
>>> details = config.resolve_value("numeric_flag", ffe.FlagType.Float, {})
>>> details.variant
'pi'
>>> details.value
3.1415926
```

More testing will be done as part of FFE feature.

## Risks

<!-- Note any risks associated with this change, or "None" if no risks
-->

## Additional Notes

<!-- Any other information that would be helpful for reviewers -->

This PR is stacked against
#15219

---------

Co-authored-by: Alberto Vara <alberto.vara@datadoghq.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

changelog/no-changelog A changelog entry is not required for this PR.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants