Skip to content

Conversation

@KowalskiThomas
Copy link
Contributor

@KowalskiThomas KowalskiThomas commented Nov 3, 2025

Description

https://datadoghq.atlassian.net/browse/PROF-12842

This PR updates the wrapping and thread-registering logic for the Profiler in order to track the running loop when it exists.

This is needed because otherwise, importing/starting the Profiler after starting a Task (or a loop more generally) will make us blind to the existing running loop.
Currently, we wrap the asyncio.set_event_loop function to capture when the Event Loop is first set (or is swapped). However, if the _asyncio module that sets up wrapping is imported/executed after the loop has been set, we will miss that first call to set_event_loop and be blind to asyncio Tasks until the Event Loop is changed (which in many cases never happens).

Note that we also need to execute the "find loop and track it" logic when we start the Profiler generally speaking, as in this case we may have tried (earlier) to call track_event_loop but that would have failed as no thread was registered in the Profiler.

I added four tests that account for various edge cases. Unfortunately, currently, two of them fail (marked them as xfail) and there is no way to correctly fix them. The issue is that we can only get the current running loop and not the current (non-running) event loop.
In other words, if an event loop is created and set in asyncio, and immediately after the Profiler is started without a Task having first been started, we will not be able to see that loop from the initialisation code and we will thus not be able to observe it from the Profiler thread.

In short, what works is the most common case:

  • ✅ Import Profiler, start Profiler, start Tasks
  • ✅ Import Profiler, start Tasks (from within the Tasks)
  • 🚫 Import Profiler, create (non running) event loop, start Profiler, start Task
  • 🚫 Import Profiler, create (non running) event loop, create Task, start Profiler

It is OK to start with that as I really consider the latter two to be edge cases.

Example: today we miss all asyncio data with the following code

# 0. Profiler is NOT imported here, no watching is set up
import os
import asyncio


async def my_coroutine(n):
    await asyncio.sleep(n)

# 0. Function is defined, not run, Profiler is still not imported
async def main():
    # 3. We get here, import the Profiler module (and _asyncio as well)
    #    We also start watching for set_event_loop_calls – we don't see the existing loop
    from ddtrace.profiling import Profiler

    prof = Profiler()
    prof.start()  # Should be as early as possible, eg before other imports, to ensure everything is profiled

    EXECUTION_TIME_SEC = int(os.environ.get("EXECUTION_TIME_SEC", "2"))

    t = asyncio.create_task(my_coroutine(EXECUTION_TIME_SEC / 2))
    await asyncio.gather(t, my_coroutine(EXECUTION_TIME_SEC))

    # 4. Interestingly, we detect a set_event_loop call here, but it's
    #    being set to None before exiting


# 1. This is executed first
if __name__ == "__main__":
    # 2. This implicitly creates and set the Event Loop
    asyncio.run(main())

Testing

I have tested this in prof-correctness (initially just replicated that it did not work) and it now works as expected. I will be adding more correctness tests, one with a "top of file" import and Profiler start, one with a "top of file import" and "in-code Profiler start", and one with both an "in-code file import" and "in-code Profiler start".

I also added four new tests to make sure we catch different edge cases with order of imports and order of task/profiler starts. Currently, two of them are marked as XFAILED because there is no way to reliably make them pass.

@github-actions
Copy link
Contributor

github-actions bot commented Nov 3, 2025

CODEOWNERS have been resolved as:

releasenotes/notes/profiling-fix-untracked-existing-event-loop-6842ff15328dae9c.yaml  @DataDog/apm-python
ddtrace/internal/datadog/profiling/stack_v2/__init__.pyi                @DataDog/profiling-python
ddtrace/profiling/_asyncio.py                                           @DataDog/profiling-python
ddtrace/profiling/collector/threading.py                                @DataDog/profiling-python
tests/profiling_v2/collector/test_stack_asyncio.py                      @DataDog/profiling-python

@KowalskiThomas KowalskiThomas force-pushed the kowalski/bug-profiling-track-existing-asyncio-loop-if-it-exists branch 3 times, most recently from c464371 to c22f6d7 Compare November 3, 2025 14:15
@KowalskiThomas KowalskiThomas changed the title bug(profiling): track existing asyncio loop if it exists fix(profiling): track existing asyncio loop if it exists Nov 3, 2025
@github-actions
Copy link
Contributor

github-actions bot commented Nov 3, 2025

Bootstrap import analysis

Comparison of import times between this PR and base.

Summary

The average import time from this PR is: 253 ± 3 ms.

The average import time from base is: 239 ± 3 ms.

The import time difference between this PR and base is: 13.9 ± 0.1 ms.

Import time breakdown

The following import paths have grown:

ddtrace.auto 12.139 ms (4.80%)
ddtrace 8.637 ms (3.41%)
ddtrace._logger 5.722 ms (2.26%)
ddtrace.internal.telemetry 5.179 ms (2.05%)
ddtrace.internal.telemetry.writer 2.112 ms (0.83%)
http.client 0.501 ms (0.20%)
ssl 0.301 ms (0.12%)
_ssl 0.129 ms (0.05%)
email.parser 0.058 ms (0.02%)
email.feedparser 0.058 ms (0.02%)
http 0.056 ms (0.02%)
ddtrace.settings._telemetry 0.394 ms (0.16%)
ddtrace.settings._inferred_base_service 0.029 ms (0.01%)
ddtrace.internal.packages 0.288 ms (0.11%)
_sysconfigdata__linux_x86_64-linux-gnu 0.097 ms (0.04%)
sysconfig 0.057 ms (0.02%)
ddtrace.settings.third_party 0.026 ms (0.01%)
ddtrace.internal.periodic 0.138 ms (0.05%)
ddtrace.internal._threads 0.100 ms (0.04%)
ddtrace.internal.service 0.039 ms (0.02%)
ddtrace.internal.endpoints 0.122 ms (0.05%)
ddtrace.internal.runtime 0.112 ms (0.04%)
uuid 0.112 ms (0.04%)
platform 0.066 ms (0.03%)
ddtrace.internal.utils.http 0.102 ms (0.04%)
ddtrace.internal.utils.version 0.097 ms (0.04%)
ddtrace.vendor.packaging.version 0.097 ms (0.04%)
ddtrace.internal.encoding 0.085 ms (0.03%)
ddtrace.internal._encoding 0.085 ms (0.03%)
ddtrace.internal.telemetry.data 0.078 ms (0.03%)
ddtrace.internal.runtime.container 0.051 ms (0.02%)
ddtrace.internal.telemetry.metrics_namespaces 0.077 ms (0.03%)
ddtrace.internal.forksafe 0.024 ms (0.01%)
ddtrace.internal.utils.formats 1.606 ms (0.63%)
ddtrace.internal.compat 1.571 ms (0.62%)
wrapt 1.505 ms (0.59%)
wrapt.importer 1.404 ms (0.55%)
importlib.metadata 1.380 ms (0.55%)
importlib.metadata._adapters 0.454 ms (0.18%)
email.message 0.432 ms (0.17%)
email.utils 0.352 ms (0.14%)
socket 0.165 ms (0.07%)
_socket 0.054 ms (0.02%)
array 0.022 ms (0.01%)
email._parseaddr 0.070 ms (0.03%)
calendar 0.050 ms (0.02%)
random 0.032 ms (0.01%)
datetime 0.018 ms (0.01%)
_datetime 0.018 ms (0.01%)
email.charset 0.015 ms (0.01%)
email._policybase 0.029 ms (0.01%)
email.header 0.029 ms (0.01%)
zipfile 0.208 ms (0.08%)
shutil 0.113 ms (0.04%)
lzma 0.037 ms (0.01%)
_lzma 0.019 ms (0.01%)
zlib 0.019 ms (0.01%)
binascii 0.029 ms (0.01%)
importlib.abc 0.134 ms (0.05%)
importlib.resources 0.105 ms (0.04%)
importlib.resources._common 0.105 ms (0.04%)
tempfile 0.048 ms (0.02%)
importlib.resources.abc 0.025 ms (0.01%)
pathlib 0.129 ms (0.05%)
urllib.parse 0.073 ms (0.03%)
csv 0.045 ms (0.02%)
_csv 0.022 ms (0.01%)
importlib.metadata._meta 0.042 ms (0.02%)
importlib.metadata._collections 0.019 ms (0.01%)
wrapt.__wrapt__ 0.069 ms (0.03%)
wrapt._wrappers 0.046 ms (0.02%)
wrapt.wrappers 0.023 ms (0.01%)
wrapt.patches 0.017 ms (0.01%)
ipaddress 0.065 ms (0.03%)
ddtrace.settings._agent 1.304 ms (0.52%)
ddtrace.settings 0.943 ms (0.37%)
ddtrace.vendor.debtcollector 0.943 ms (0.37%)
ddtrace.vendor 0.781 ms (0.31%)
ddtrace.internal.module 0.781 ms (0.31%)
ddtrace.internal.wrapping.context 0.720 ms (0.28%)
ddtrace.internal.wrapping 0.621 ms (0.25%)
bytecode 0.594 ms (0.23%)
bytecode.bytecode 0.458 ms (0.18%)
bytecode.flags 0.421 ms (0.17%)
bytecode.instr 0.421 ms (0.17%)
bytecode.cfg 0.115 ms (0.05%)
bytecode.concrete 0.046 ms (0.02%)
contextvars 0.033 ms (0.01%)
_contextvars 0.033 ms (0.01%)
ddtrace.internal.utils.inspection 0.029 ms (0.01%)
ddtrace.vendor.debtcollector.moves 0.068 ms (0.03%)
ddtrace.vendor.debtcollector.removals 0.046 ms (0.02%)
ddtrace.settings._core 0.312 ms (0.12%)
ddtrace.internal.native 0.143 ms (0.06%)
ddtrace.internal.native._native 0.143 ms (0.06%)
envier 0.101 ms (0.04%)
envier.env 0.101 ms (0.04%)
ddtrace.settings._otel_remapper 0.091 ms (0.04%)
ddtrace.internal.logger 0.356 ms (0.14%)
dataclasses 0.285 ms (0.11%)
inspect 0.248 ms (0.10%)
dis 0.070 ms (0.03%)
opcode 0.023 ms (0.01%)
_opcode 0.023 ms (0.01%)
ast 0.058 ms (0.02%)
typing 0.104 ms (0.04%)
logging 0.083 ms (0.03%)
ddtrace.trace 2.196 ms (0.87%)
ddtrace._trace.filters 1.661 ms (0.66%)
ddtrace._trace.processor 1.661 ms (0.66%)
ddtrace.internal.writer 1.034 ms (0.41%)
ddtrace.internal.writer.writer 1.018 ms (0.40%)
ddtrace.settings.asm 0.492 ms (0.19%)
ddtrace.appsec._constants 0.419 ms (0.17%)
ddtrace.internal.dogstatsd 0.301 ms (0.12%)
ddtrace.vendor.dogstatsd 0.301 ms (0.12%)
ddtrace.vendor.dogstatsd.base 0.301 ms (0.12%)
queue 0.108 ms (0.04%)
heapq 0.051 ms (0.02%)
_heapq 0.031 ms (0.01%)
_queue 0.024 ms (0.01%)
ddtrace.vendor.dogstatsd.container 0.049 ms (0.02%)
ddtrace.vendor.dogstatsd.context 0.026 ms (0.01%)
ddtrace.vendor.dogstatsd.context_async 0.026 ms (0.01%)
ddtrace.vendor.dogstatsd.format 0.025 ms (0.01%)
gzip 0.055 ms (0.02%)
ddtrace.internal.agent 0.035 ms (0.01%)
ddtrace._trace.sampler 0.563 ms (0.22%)
ddtrace._trace.span 0.474 ms (0.19%)
ddtrace._trace._span_pointer 0.195 ms (0.08%)
hashlib 0.150 ms (0.06%)
_hashlib 0.095 ms (0.04%)
_blake2 0.026 ms (0.01%)
ddtrace.internal.core 0.128 ms (0.05%)
ddtrace.internal.core.event_hub 0.094 ms (0.04%)
ddtrace.internal._rand 0.040 ms (0.02%)
ddtrace.ext.http 0.023 ms (0.01%)
ddtrace.internal.rate_limiter 0.049 ms (0.02%)
ddtrace.internal.sampling 0.040 ms (0.02%)
ddtrace._trace.tracer 0.253 ms (0.10%)
ddtrace.internal.processor.endpoint_call_counter 0.087 ms (0.03%)
ddtrace.internal.debug 0.051 ms (0.02%)
ddtrace._trace.processor.resource_renaming 0.025 ms (0.01%)
ddtrace._trace.context 0.108 ms (0.04%)
ddtrace._trace._span_link 0.072 ms (0.03%)
ddtrace._trace.pin 0.023 ms (0.01%)
ddtrace.internal._unpatched 0.308 ms (0.12%)
subprocess 0.260 ms (0.10%)
contextlib 0.152 ms (0.06%)
locale 0.032 ms (0.01%)
selectors 0.026 ms (0.01%)
fcntl 0.016 ms (0.01%)
json 0.047 ms (0.02%)
json.decoder 0.047 ms (0.02%)
re 0.024 ms (0.01%)
enum 0.024 ms (0.01%)
functools 0.024 ms (0.01%)
json.scanner 0.023 ms (0.01%)
_json 0.023 ms (0.01%)
ddtrace.settings._config 0.259 ms (0.10%)
ddtrace.internal.gitmetadata 0.057 ms (0.02%)
ddtrace.ext.ci 0.057 ms (0.02%)
ddtrace.internal.schema 0.030 ms (0.01%)
ddtrace.internal.schema.span_attribute_schema 0.030 ms (0.01%)
ddtrace.settings.endpoint_config 0.026 ms (0.01%)
ddtrace.internal.utils.retry 0.026 ms (0.01%)
ddtrace._monkey 0.152 ms (0.06%)
ddtrace.vendor.packaging.specifiers 0.102 ms (0.04%)
ddtrace.bootstrap.sitecustomize 3.502 ms (1.38%)
ddtrace.bootstrap.preload 2.662 ms (1.05%)
ddtrace.settings.profiling 0.808 ms (0.32%)
ddtrace.vendor.psutil 0.536 ms (0.21%)
ddtrace.vendor.psutil._pslinux 0.262 ms (0.10%)
ddtrace.vendor.psutil._psutil_linux 0.056 ms (0.02%)
glob 0.039 ms (0.02%)
ddtrace.vendor.psutil._common 0.123 ms (0.05%)
ddtrace.vendor.psutil._compat 0.029 ms (0.01%)
ddtrace.internal.datadog.profiling.ddup 0.127 ms (0.05%)
ddtrace.internal.datadog.profiling.ddup._ddup 0.127 ms (0.05%)
ddtrace.internal.datadog.profiling.code_provenance 0.020 ms (0.01%)
ddtrace.internal.datadog.profiling._types 0.016 ms (0.01%)
ddtrace.internal.datadog.profiling.stack_v2 0.041 ms (0.02%)
ddtrace.internal.datadog.profiling.stack_v2._stack_v2 0.041 ms (0.02%)
multiprocessing 0.762 ms (0.30%)
multiprocessing.context 0.762 ms (0.30%)
multiprocessing.reduction 0.680 ms (0.27%)
pickle 0.642 ms (0.25%)
_compat_pickle 0.483 ms (0.19%)
_pickle 0.056 ms (0.02%)
multiprocessing.process 0.045 ms (0.02%)
ddtrace.internal.symbol_db.remoteconfig 0.270 ms (0.11%)
ddtrace.internal.symbol_db.symbols 0.170 ms (0.07%)
multiprocessing.sharedctypes 0.220 ms (0.09%)
ctypes 0.110 ms (0.04%)
_ctypes 0.053 ms (0.02%)
multiprocessing.heap 0.071 ms (0.03%)
multiprocessing.util 0.037 ms (0.01%)
ddtrace.internal.core.crashtracking 0.180 ms (0.07%)
ddtrace.debugging._import 0.081 ms (0.03%)
ddtrace.debugging._function.discovery 0.053 ms (0.02%)
ddtrace.settings.dynamic_instrumentation 0.066 ms (0.03%)
ddtrace.internal.remoteconfig.worker 0.057 ms (0.02%)
ddtrace.internal.products 0.042 ms (0.02%)
ddtrace.settings.crashtracker 0.039 ms (0.02%)
ddtrace.internal.remoteconfig._connectors 0.037 ms (0.01%)
ddtrace.settings.code_origin 0.037 ms (0.01%)
ddtrace.internal.remoteconfig._pubsub 0.033 ms (0.01%)
ddtrace.internal.remoteconfig._subscribers 0.033 ms (0.01%)
ddtrace.internal.runtime.runtime_metrics 0.029 ms (0.01%)
ddtrace._trace.trace_handlers 0.510 ms (0.20%)
ddtrace._trace._inferred_proxy 0.220 ms (0.09%)
ddtrace.propagation.http 0.200 ms (0.08%)
ddtrace.internal._tagset 0.067 ms (0.03%)
ddtrace.contrib.trace_utils 0.164 ms (0.06%)
ddtrace.contrib.internal.trace_utils 0.099 ms (0.04%)
ddtrace.contrib.internal.trace_utils_base 0.047 ms (0.02%)
ddtrace.contrib.internal.redis_utils 0.038 ms (0.02%)
shlex 0.038 ms (0.01%)
ddtrace.bootstrap.cloning 0.024 ms (0.01%)

The following import paths have shrunk:

ddtrace.auto 0.622 ms (0.25%)
ddtrace 0.622 ms (0.25%)

@pr-commenter
Copy link

pr-commenter bot commented Nov 3, 2025

Performance SLOs

Comparing candidate kowalski/bug-profiling-track-existing-asyncio-loop-if-it-exists (fc60cfd) with baseline main (2555353)

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

✅ appsec

Time: ✅ 20.405ms (SLO: <22.300ms -8.5%) vs baseline: ~same

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


✅ exception-replay-enabled

Time: ✅ 1.343ms (SLO: <1.450ms -7.4%) vs baseline: +0.5%

Memory: ✅ 64.282MB (SLO: <67.000MB -4.1%) vs baseline: +4.8%


✅ iast

Time: ✅ 20.440ms (SLO: <22.250ms -8.1%) vs baseline: -0.4%

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


✅ profiler

Time: ✅ 15.501ms (SLO: <16.550ms -6.3%) vs baseline: +0.4%

Memory: ✅ 54.089MB (SLO: <54.500MB 🟡 -0.8%) vs baseline: +5.1%


✅ resource-renaming

Time: ✅ 20.551ms (SLO: <21.750ms -5.5%) vs baseline: +0.3%

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


✅ span-code-origin

Time: ✅ 25.330ms (SLO: <28.200ms 📉 -10.2%) vs baseline: -0.4%

Memory: ✅ 68.119MB (SLO: <69.500MB 🟡 -2.0%) vs baseline: +6.3%


✅ tracer

Time: ✅ 20.375ms (SLO: <21.750ms -6.3%) vs baseline: -0.7%

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


✅ tracer-and-profiler

Time: ✅ 22.746ms (SLO: <23.500ms -3.2%) vs baseline: +0.4%

Memory: ✅ 67.731MB (SLO: <68.000MB 🟡 -0.4%) vs baseline: +4.6%


✅ tracer-dont-create-db-spans

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

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


✅ tracer-minimal

Time: ✅ 16.650ms (SLO: <17.500ms -4.9%) vs baseline: +0.2%

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


✅ tracer-native

Time: ✅ 20.467ms (SLO: <21.750ms -5.9%) vs baseline: ~same

Memory: ✅ 67.725MB (SLO: <72.500MB -6.6%) vs baseline: +4.8%


✅ tracer-no-caches

Time: ✅ 18.466ms (SLO: <19.650ms -6.0%) vs baseline: +0.4%

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


✅ tracer-no-databases

Time: ✅ 18.801ms (SLO: <20.100ms -6.5%) vs baseline: +0.3%

Memory: ✅ 65.856MB (SLO: <67.000MB 🟡 -1.7%) vs baseline: +4.5%


✅ tracer-no-middleware

Time: ✅ 20.169ms (SLO: <21.500ms -6.2%) vs baseline: +0.5%

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


✅ tracer-no-templates

Time: ✅ 20.329ms (SLO: <22.000ms -7.6%) vs baseline: ~same

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


🟡 errortrackingdjangosimple - 6/6

✅ errortracking-enabled-all

Time: ✅ 18.296ms (SLO: <19.850ms -7.8%) vs baseline: +1.3%

Memory: ✅ 66.060MB (SLO: <66.500MB 🟡 -0.7%) vs baseline: +4.7%


✅ errortracking-enabled-user

Time: ✅ 18.026ms (SLO: <19.400ms -7.1%) vs baseline: +0.3%

Memory: ✅ 66.159MB (SLO: <66.500MB 🟡 -0.5%) vs baseline: +4.9%


✅ tracer-enabled

Time: ✅ 18.072ms (SLO: <19.450ms -7.1%) vs baseline: +0.5%

Memory: ✅ 65.844MB (SLO: <66.500MB 🟡 -1.0%) vs baseline: +4.7%


🟡 errortrackingflasksqli - 6/6

✅ errortracking-enabled-all

Time: ✅ 2.062ms (SLO: <2.300ms 📉 -10.4%) vs baseline: -0.5%

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


✅ errortracking-enabled-user

Time: ✅ 2.080ms (SLO: <2.250ms -7.6%) vs baseline: +0.4%

Memory: ✅ 52.652MB (SLO: <53.500MB 🟡 -1.6%) vs baseline: +4.9%


✅ tracer-enabled

Time: ✅ 2.069ms (SLO: <2.300ms 📉 -10.0%) vs baseline: -0.4%

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


🟡 flasksimple - 18/18

✅ appsec-get

Time: ✅ 4.602ms (SLO: <4.750ms -3.1%) vs baseline: +0.6%

Memory: ✅ 62.417MB (SLO: <65.000MB -4.0%) vs baseline: +4.9%


✅ appsec-post

Time: ✅ 6.634ms (SLO: <6.750ms 🟡 -1.7%) vs baseline: +0.1%

Memory: ✅ 62.387MB (SLO: <65.000MB -4.0%) vs baseline: +4.9%


✅ appsec-telemetry

Time: ✅ 4.603ms (SLO: <4.750ms -3.1%) vs baseline: +0.3%

Memory: ✅ 62.283MB (SLO: <65.000MB -4.2%) vs baseline: +4.7%


✅ debugger

Time: ✅ 1.859ms (SLO: <2.000ms -7.0%) vs baseline: +0.2%

Memory: ✅ 45.355MB (SLO: <47.000MB -3.5%) vs baseline: +5.1%


✅ iast-get

Time: ✅ 1.856ms (SLO: <2.000ms -7.2%) vs baseline: ~same

Memory: ✅ 42.239MB (SLO: <49.000MB 📉 -13.8%) vs baseline: +4.8%


✅ profiler

Time: ✅ 1.911ms (SLO: <2.100ms -9.0%) vs baseline: +0.2%

Memory: ✅ 46.751MB (SLO: <47.000MB 🟡 -0.5%) vs baseline: +5.1%


✅ resource-renaming

Time: ✅ 3.369ms (SLO: <3.650ms -7.7%) vs baseline: +0.4%

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


✅ tracer

Time: ✅ 3.350ms (SLO: <3.650ms -8.2%) vs baseline: ~same

Memory: ✅ 52.549MB (SLO: <53.500MB 🟡 -1.8%) vs baseline: +4.9%


✅ tracer-native

Time: ✅ 3.354ms (SLO: <3.650ms -8.1%) vs baseline: -0.3%

Memory: ✅ 54.085MB (SLO: <60.000MB -9.9%) vs baseline: +4.8%


🟡 flasksqli - 6/6

✅ appsec-enabled

Time: ✅ 3.979ms (SLO: <4.200ms -5.3%) vs baseline: +0.3%

Memory: ✅ 62.305MB (SLO: <66.000MB -5.6%) vs baseline: +4.8%


✅ iast-enabled

Time: ✅ 2.453ms (SLO: <2.800ms 📉 -12.4%) vs baseline: +0.8%

Memory: ✅ 59.179MB (SLO: <60.000MB 🟡 -1.4%) vs baseline: +4.8%


✅ tracer-enabled

Time: ✅ 2.059ms (SLO: <2.250ms -8.5%) vs baseline: -0.6%

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


🟡 recursivecomputation - 8/8

✅ deep

Time: ✅ 309.428ms (SLO: <320.950ms -3.6%) vs baseline: +0.2%

Memory: ✅ 32.755MB (SLO: <34.500MB -5.1%) vs baseline: +4.9%


✅ deep-profiled

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

Memory: ✅ 38.641MB (SLO: <39.000MB 🟡 -0.9%) vs baseline: +5.5%


✅ medium

Time: ✅ 7.054ms (SLO: <7.400ms -4.7%) vs baseline: +0.6%

Memory: ✅ 32.008MB (SLO: <34.000MB -5.9%) vs baseline: +5.1%


✅ shallow

Time: ✅ 0.947ms (SLO: <1.050ms -9.9%) vs baseline: +0.3%

Memory: ✅ 31.949MB (SLO: <34.000MB -6.0%) vs baseline: +4.9%

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

⚠️ context_with_data_listeners

Time: ⚠️ 13.322µs (SLO: <20.000µs 📉 -33.4%) vs baseline: +0.7%

Memory: ✅ 31.477MB (SLO: <33.500MB -6.0%) vs baseline: +4.3%


✅ context_with_data_no_listeners

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

Memory: ✅ 31.556MB (SLO: <33.500MB -5.8%) vs baseline: +4.7%


✅ get_item_exists

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

Memory: ✅ 31.536MB (SLO: <33.500MB -5.9%) vs baseline: +4.7%


✅ get_item_missing

Time: ✅ 0.651µs (SLO: <10.000µs 📉 -93.5%) vs baseline: +1.7%

Memory: ✅ 31.516MB (SLO: <33.500MB -5.9%) vs baseline: +4.9%


✅ set_item

Time: ✅ 24.050µs (SLO: <30.000µs 📉 -19.8%) vs baseline: +0.7%

Memory: ✅ 31.634MB (SLO: <33.500MB -5.6%) vs baseline: +5.1%

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

✅ all_styles_all_headers

Time: ✅ 81.305µs (SLO: <100.000µs 📉 -18.7%) vs baseline: -0.2%

Memory: ✅ 32.027MB (SLO: <33.500MB -4.4%) vs baseline: +4.7%


✅ b3_headers

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

Memory: ✅ 32.067MB (SLO: <33.500MB -4.3%) vs baseline: +4.9%


✅ b3_single_headers

Time: ✅ 14.224µs (SLO: <20.000µs 📉 -28.9%) vs baseline: +6.6%

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


✅ datadog_tracecontext_tracestate_not_propagated_on_trace_id_no_match

Time: ✅ 63.787µs (SLO: <80.000µs 📉 -20.3%) vs baseline: +0.1%

Memory: ✅ 32.047MB (SLO: <33.500MB -4.3%) vs baseline: +4.9%


✅ datadog_tracecontext_tracestate_propagated_on_trace_id_match

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

Memory: ✅ 32.027MB (SLO: <33.500MB -4.4%) vs baseline: +4.8%


✅ empty_headers

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

Memory: ✅ 32.067MB (SLO: <33.500MB -4.3%) vs baseline: +4.9%


✅ full_t_id_datadog_headers

Time: ✅ 22.803µs (SLO: <30.000µs 📉 -24.0%) vs baseline: ~same

Memory: ✅ 32.008MB (SLO: <33.500MB -4.5%) vs baseline: +4.6%


✅ invalid_priority_header

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

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


✅ invalid_span_id_header

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

Memory: ✅ 32.008MB (SLO: <33.500MB -4.5%) vs baseline: +4.7%


✅ invalid_tags_header

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

Memory: ✅ 32.047MB (SLO: <33.500MB -4.3%) vs baseline: +5.1%


✅ invalid_trace_id_header

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

Memory: ✅ 32.106MB (SLO: <33.500MB -4.2%) vs baseline: +5.0%


✅ large_header_no_matches

Time: ✅ 27.802µs (SLO: <30.000µs -7.3%) vs baseline: +1.0%

Memory: ✅ 32.008MB (SLO: <33.500MB -4.5%) vs baseline: +4.7%


✅ large_valid_headers_all

Time: ✅ 28.637µs (SLO: <40.000µs 📉 -28.4%) vs baseline: -0.1%

Memory: ✅ 32.086MB (SLO: <33.500MB -4.2%) vs baseline: +5.0%


✅ medium_header_no_matches

Time: ✅ 9.895µs (SLO: <20.000µs 📉 -50.5%) vs baseline: +0.7%

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


✅ medium_valid_headers_all

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

Memory: ✅ 32.047MB (SLO: <33.500MB -4.3%) vs baseline: +4.7%


✅ none_propagation_style

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

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


✅ tracecontext_headers

Time: ✅ 36.054µs (SLO: <40.000µs -9.9%) vs baseline: +4.6%

Memory: ✅ 32.047MB (SLO: <33.500MB -4.3%) vs baseline: +4.9%


✅ valid_headers_all

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

Memory: ✅ 32.086MB (SLO: <33.500MB -4.2%) vs baseline: +4.9%


✅ valid_headers_basic

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

Memory: ✅ 32.067MB (SLO: <33.500MB -4.3%) vs baseline: +4.9%


✅ wsgi_empty_headers

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

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


✅ wsgi_invalid_priority_header

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

Memory: ✅ 32.047MB (SLO: <33.500MB -4.3%) vs baseline: +5.1%


✅ wsgi_invalid_span_id_header

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

Memory: ✅ 32.047MB (SLO: <33.500MB -4.3%) vs baseline: +5.1%


✅ wsgi_invalid_tags_header

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

Memory: ✅ 32.067MB (SLO: <33.500MB -4.3%) vs baseline: +4.7%


✅ wsgi_invalid_trace_id_header

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

Memory: ✅ 32.027MB (SLO: <33.500MB -4.4%) vs baseline: +4.9%


✅ wsgi_large_header_no_matches

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

Memory: ✅ 32.086MB (SLO: <33.500MB -4.2%) vs baseline: +4.9%


✅ wsgi_large_valid_headers_all

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

Memory: ✅ 31.949MB (SLO: <33.500MB -4.6%) vs baseline: +4.5%


✅ wsgi_medium_header_no_matches

Time: ✅ 10.194µs (SLO: <20.000µs 📉 -49.0%) vs baseline: +0.9%

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


✅ wsgi_medium_valid_headers_all

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

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


✅ wsgi_valid_headers_all

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

Memory: ✅ 32.047MB (SLO: <33.500MB -4.3%) vs baseline: +4.9%


✅ wsgi_valid_headers_basic

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

Memory: ✅ 32.067MB (SLO: <33.500MB -4.3%) vs baseline: +5.0%


httppropagationinject - 16/16

✅ ids_only

Time: ✅ 20.948µs (SLO: <30.000µs 📉 -30.2%) vs baseline: -0.4%

Memory: ✅ 32.086MB (SLO: <33.500MB -4.2%) vs baseline: +4.9%


✅ with_all

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

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


✅ with_dd_origin

Time: ✅ 24.761µs (SLO: <30.000µs 📉 -17.5%) vs baseline: -0.2%

Memory: ✅ 32.086MB (SLO: <33.500MB -4.2%) vs baseline: +5.1%


✅ with_priority_and_origin

Time: ✅ 24.359µs (SLO: <40.000µs 📉 -39.1%) vs baseline: +0.5%

Memory: ✅ 32.047MB (SLO: <33.500MB -4.3%) vs baseline: +4.9%


✅ with_sampling_priority

Time: ✅ 22.081µs (SLO: <30.000µs 📉 -26.4%) vs baseline: +5.1%

Memory: ✅ 31.968MB (SLO: <33.500MB -4.6%) vs baseline: +4.7%


✅ with_tags

Time: ✅ 26.856µs (SLO: <40.000µs 📉 -32.9%) vs baseline: +1.3%

Memory: ✅ 32.106MB (SLO: <33.500MB -4.2%) vs baseline: +5.1%


✅ with_tags_invalid

Time: ✅ 28.306µs (SLO: <40.000µs 📉 -29.2%) vs baseline: +0.9%

Memory: ✅ 32.008MB (SLO: <33.500MB -4.5%) vs baseline: +4.9%


✅ with_tags_max_size

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

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


iast_aspects - 40/40

✅ re_expand_aspect

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

Memory: ✅ 37.611MB (SLO: <39.000MB -3.6%) vs baseline: +5.1%


✅ re_expand_noaspect

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

Memory: ✅ 37.572MB (SLO: <39.000MB -3.7%) vs baseline: +4.9%


✅ re_findall_aspect

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

Memory: ✅ 37.532MB (SLO: <39.000MB -3.8%) vs baseline: +4.5%


✅ re_findall_noaspect

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

Memory: ✅ 37.513MB (SLO: <39.000MB -3.8%) vs baseline: +4.5%


✅ re_finditer_aspect

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

Memory: ✅ 37.552MB (SLO: <39.000MB -3.7%) vs baseline: +4.8%


✅ re_finditer_noaspect

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

Memory: ✅ 37.572MB (SLO: <39.000MB -3.7%) vs baseline: +4.6%


✅ re_fullmatch_aspect

Time: ✅ 2.815µs (SLO: <10.000µs 📉 -71.9%) vs baseline: +6.1%

Memory: ✅ 37.532MB (SLO: <39.000MB -3.8%) vs baseline: +4.6%


✅ re_fullmatch_noaspect

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

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


✅ re_group_aspect

Time: ✅ 2.962µs (SLO: <10.000µs 📉 -70.4%) vs baseline: -3.7%

Memory: ✅ 37.572MB (SLO: <39.000MB -3.7%) vs baseline: +4.9%


✅ re_group_noaspect

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

Memory: ✅ 37.572MB (SLO: <39.000MB -3.7%) vs baseline: +4.4%


✅ re_groups_aspect

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

Memory: ✅ 37.631MB (SLO: <39.000MB -3.5%) vs baseline: +4.7%


✅ re_groups_noaspect

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

Memory: ✅ 37.591MB (SLO: <39.000MB -3.6%) vs baseline: +4.9%


✅ re_match_aspect

Time: ✅ 2.773µs (SLO: <10.000µs 📉 -72.3%) vs baseline: -2.2%

Memory: ✅ 37.493MB (SLO: <39.000MB -3.9%) vs baseline: +4.5%


✅ re_match_noaspect

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

Memory: ✅ 37.552MB (SLO: <39.000MB -3.7%) vs baseline: +4.7%


✅ re_search_aspect

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

Memory: ✅ 37.552MB (SLO: <39.000MB -3.7%) vs baseline: +4.6%


✅ re_search_noaspect

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

Memory: ✅ 37.572MB (SLO: <39.000MB -3.7%) vs baseline: +4.8%


✅ re_sub_aspect

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

Memory: ✅ 37.611MB (SLO: <39.000MB -3.6%) vs baseline: +4.7%


✅ re_sub_noaspect

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

Memory: ✅ 37.591MB (SLO: <39.000MB -3.6%) vs baseline: +4.9%


✅ re_subn_aspect

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

Memory: ✅ 37.572MB (SLO: <39.000MB -3.7%) vs baseline: +4.9%


✅ re_subn_noaspect

Time: ✅ 1.641µs (SLO: <10.000µs 📉 -83.6%) vs baseline: +2.4%

Memory: ✅ 37.591MB (SLO: <39.000MB -3.6%) vs baseline: +5.0%


iastaspects - 118/118

✅ add_aspect

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

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


✅ add_inplace_aspect

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

Memory: ✅ 37.906MB (SLO: <39.000MB -2.8%) vs baseline: +4.7%


✅ add_inplace_noaspect

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

Memory: ✅ 37.906MB (SLO: <39.000MB -2.8%) vs baseline: +5.1%


✅ add_noaspect

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

Memory: ✅ 37.965MB (SLO: <39.000MB -2.7%) vs baseline: +4.9%


✅ bytearray_aspect

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

Memory: ✅ 37.886MB (SLO: <39.000MB -2.9%) vs baseline: +4.8%


✅ bytearray_extend_aspect

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

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


✅ bytearray_extend_noaspect

Time: ✅ 0.620µs (SLO: <10.000µs 📉 -93.8%) vs baseline: +1.9%

Memory: ✅ 37.985MB (SLO: <39.000MB -2.6%) vs baseline: +5.0%


✅ bytearray_noaspect

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

Memory: ✅ 37.906MB (SLO: <39.000MB -2.8%) vs baseline: +4.6%


✅ bytes_aspect

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

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


✅ bytes_noaspect

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

Memory: ✅ 37.827MB (SLO: <39.000MB -3.0%) vs baseline: +4.4%


✅ bytesio_aspect

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

Memory: ✅ 37.926MB (SLO: <39.000MB -2.8%) vs baseline: +4.7%


✅ bytesio_noaspect

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

Memory: ✅ 37.906MB (SLO: <39.000MB -2.8%) vs baseline: +4.6%


✅ capitalize_aspect

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

Memory: ✅ 38.004MB (SLO: <39.000MB -2.6%) vs baseline: +5.0%


✅ capitalize_noaspect

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

Memory: ✅ 37.985MB (SLO: <39.000MB -2.6%) vs baseline: +5.1%


✅ casefold_aspect

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

Memory: ✅ 37.867MB (SLO: <39.000MB -2.9%) vs baseline: +4.7%


✅ casefold_noaspect

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

Memory: ✅ 37.965MB (SLO: <39.000MB -2.7%) vs baseline: +5.1%


✅ decode_aspect

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

Memory: ✅ 37.926MB (SLO: <39.000MB -2.8%) vs baseline: +4.7%


✅ decode_noaspect

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

Memory: ✅ 37.906MB (SLO: <39.000MB -2.8%) vs baseline: +4.6%


✅ encode_aspect

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

Memory: ✅ 38.004MB (SLO: <39.000MB -2.6%) vs baseline: +4.9%


✅ encode_noaspect

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

Memory: ✅ 37.886MB (SLO: <39.000MB -2.9%) vs baseline: +4.8%


✅ format_aspect

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

Memory: ✅ 38.044MB (SLO: <39.000MB -2.5%) vs baseline: +5.2%


✅ format_map_aspect

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

Memory: ✅ 37.985MB (SLO: <39.000MB -2.6%) vs baseline: +5.0%


✅ format_map_noaspect

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

Memory: ✅ 37.945MB (SLO: <39.000MB -2.7%) vs baseline: +5.0%


✅ format_noaspect

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

Memory: ✅ 37.965MB (SLO: <39.000MB -2.7%) vs baseline: +4.9%


✅ index_aspect

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

Memory: ✅ 37.926MB (SLO: <39.000MB -2.8%) vs baseline: +4.6%


✅ index_noaspect

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

Memory: ✅ 37.985MB (SLO: <39.000MB -2.6%) vs baseline: +4.7%


✅ join_aspect

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

Memory: ✅ 37.965MB (SLO: <39.000MB -2.7%) vs baseline: +4.8%


✅ join_noaspect

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

Memory: ✅ 37.965MB (SLO: <39.000MB -2.7%) vs baseline: +5.2%


✅ ljust_aspect

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

Memory: ✅ 37.985MB (SLO: <39.000MB -2.6%) vs baseline: +5.1%


✅ ljust_noaspect

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

Memory: ✅ 37.867MB (SLO: <39.000MB -2.9%) vs baseline: +4.9%


✅ lower_aspect

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

Memory: ✅ 37.867MB (SLO: <39.000MB -2.9%) vs baseline: +4.7%


✅ lower_noaspect

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

Memory: ✅ 37.926MB (SLO: <39.000MB -2.8%) vs baseline: +4.7%


✅ lstrip_aspect

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

Memory: ✅ 37.985MB (SLO: <39.000MB -2.6%) vs baseline: +5.0%


✅ lstrip_noaspect

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

Memory: ✅ 37.926MB (SLO: <39.000MB -2.8%) vs baseline: +4.9%


✅ modulo_aspect

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

Memory: ✅ 37.965MB (SLO: <39.000MB -2.7%) vs baseline: +5.0%


✅ modulo_aspect_for_bytearray_bytearray

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

Memory: ✅ 37.945MB (SLO: <39.000MB -2.7%) vs baseline: +5.0%


✅ modulo_aspect_for_bytes

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

Memory: ✅ 37.906MB (SLO: <39.000MB -2.8%) vs baseline: +4.7%


✅ modulo_aspect_for_bytes_bytearray

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

Memory: ✅ 37.926MB (SLO: <39.000MB -2.8%) vs baseline: +4.9%


✅ modulo_noaspect

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

Memory: ✅ 37.926MB (SLO: <39.000MB -2.8%) vs baseline: +5.0%


✅ replace_aspect

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

Memory: ✅ 37.945MB (SLO: <39.000MB -2.7%) vs baseline: +5.0%


✅ replace_noaspect

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

Memory: ✅ 37.886MB (SLO: <39.000MB -2.9%) vs baseline: +4.9%


✅ repr_aspect

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

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


✅ repr_noaspect

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

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


✅ rstrip_aspect

Time: ✅ 1.888µs (SLO: <20.000µs 📉 -90.6%) vs baseline: +0.7%

Memory: ✅ 38.044MB (SLO: <39.000MB -2.5%) vs baseline: +5.0%


✅ rstrip_noaspect

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

Memory: ✅ 37.965MB (SLO: <39.000MB -2.7%) vs baseline: +5.1%


✅ slice_aspect

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

Memory: ✅ 37.867MB (SLO: <39.000MB -2.9%) vs baseline: +4.7%


✅ slice_noaspect

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

Memory: ✅ 37.847MB (SLO: <39.000MB -3.0%) vs baseline: +4.4%


✅ stringio_aspect

Time: ✅ 1.518µs (SLO: <10.000µs 📉 -84.8%) vs baseline: -1.3%

Memory: ✅ 38.004MB (SLO: <39.000MB -2.6%) vs baseline: +4.9%


✅ stringio_noaspect

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

Memory: ✅ 37.926MB (SLO: <39.000MB -2.8%) vs baseline: +4.8%


✅ strip_aspect

Time: ✅ 2.232µs (SLO: <20.000µs 📉 -88.8%) vs baseline: +0.5%

Memory: ✅ 37.945MB (SLO: <39.000MB -2.7%) vs baseline: +4.8%


✅ strip_noaspect

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

Memory: ✅ 37.965MB (SLO: <39.000MB -2.7%) vs baseline: +4.9%


✅ swapcase_aspect

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

Memory: ✅ 37.985MB (SLO: <39.000MB -2.6%) vs baseline: +5.0%


✅ swapcase_noaspect

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

Memory: ✅ 37.965MB (SLO: <39.000MB -2.7%) vs baseline: +5.0%


✅ title_aspect

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

Memory: ✅ 37.906MB (SLO: <39.000MB -2.8%) vs baseline: +4.7%


✅ title_noaspect

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

Memory: ✅ 37.965MB (SLO: <39.000MB -2.7%) vs baseline: +4.7%


✅ translate_aspect

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

Memory: ✅ 37.926MB (SLO: <39.000MB -2.8%) vs baseline: +4.8%


✅ translate_noaspect

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

Memory: ✅ 37.847MB (SLO: <39.000MB -3.0%) vs baseline: +4.5%


✅ upper_aspect

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

Memory: ✅ 37.808MB (SLO: <39.000MB -3.1%) vs baseline: +4.5%


✅ upper_noaspect

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

Memory: ✅ 37.945MB (SLO: <39.000MB -2.7%) vs baseline: +4.7%


iastaspectsospath - 24/24

✅ ospathbasename_aspect

Time: ✅ 4.420µs (SLO: <10.000µs 📉 -55.8%) vs baseline: +2.6%

Memory: ✅ 37.552MB (SLO: <39.000MB -3.7%) vs baseline: +4.8%


✅ ospathbasename_noaspect

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

Memory: ✅ 37.532MB (SLO: <39.000MB -3.8%) vs baseline: +4.7%


✅ ospathjoin_aspect

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

Memory: ✅ 37.552MB (SLO: <39.000MB -3.7%) vs baseline: +4.6%


✅ ospathjoin_noaspect

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

Memory: ✅ 37.611MB (SLO: <39.000MB -3.6%) vs baseline: +5.1%


✅ ospathnormcase_aspect

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

Memory: ✅ 37.552MB (SLO: <39.000MB -3.7%) vs baseline: +4.7%


✅ ospathnormcase_noaspect

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

Memory: ✅ 37.591MB (SLO: <39.000MB -3.6%) vs baseline: +4.9%


✅ ospathsplit_aspect

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

Memory: ✅ 37.591MB (SLO: <39.000MB -3.6%) vs baseline: +5.0%


✅ ospathsplit_noaspect

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

Memory: ✅ 37.513MB (SLO: <39.000MB -3.8%) vs baseline: +4.7%


✅ ospathsplitdrive_aspect

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

Memory: ✅ 37.611MB (SLO: <39.000MB -3.6%) vs baseline: +4.8%


✅ ospathsplitdrive_noaspect

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

Memory: ✅ 37.611MB (SLO: <39.000MB -3.6%) vs baseline: +4.8%


✅ ospathsplitext_aspect

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

Memory: ✅ 37.572MB (SLO: <39.000MB -3.7%) vs baseline: +5.0%


✅ ospathsplitext_noaspect

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

Memory: ✅ 37.532MB (SLO: <39.000MB -3.8%) vs baseline: +4.9%


iastaspectssplit - 12/12

✅ rsplit_aspect

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

Memory: ✅ 37.591MB (SLO: <39.000MB -3.6%) vs baseline: +5.0%


✅ rsplit_noaspect

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

Memory: ✅ 37.513MB (SLO: <39.000MB -3.8%) vs baseline: +4.7%


✅ split_aspect

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

Memory: ✅ 37.552MB (SLO: <39.000MB -3.7%) vs baseline: +5.0%


✅ split_noaspect

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

Memory: ✅ 37.532MB (SLO: <39.000MB -3.8%) vs baseline: +4.9%


✅ splitlines_aspect

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

Memory: ✅ 37.611MB (SLO: <39.000MB -3.6%) vs baseline: +5.0%


✅ splitlines_noaspect

Time: ✅ 0.589µs (SLO: <10.000µs 📉 -94.1%) vs baseline: +1.2%

Memory: ✅ 37.611MB (SLO: <39.000MB -3.6%) vs baseline: +5.2%


iastpropagation - 2/2

✅ no-propagation

Time: ✅ 48.924µs (SLO: <60.000µs 📉 -18.5%) vs baseline: +0.4%

Memory: ✅ 37.513MB (SLO: <39.000MB -3.8%) vs baseline: +4.9%


otelsdkspan - 24/24

✅ add-event

Time: ✅ 40.064ms (SLO: <42.000ms -4.6%) vs baseline: -0.8%

Memory: ✅ 34.367MB (SLO: <39.000MB 📉 -11.9%) vs baseline: +4.9%


✅ add-link

Time: ✅ 36.357ms (SLO: <38.550ms -5.7%) vs baseline: -0.1%

Memory: ✅ 34.367MB (SLO: <39.000MB 📉 -11.9%) vs baseline: +4.7%


✅ add-metrics

Time: ✅ 218.892ms (SLO: <232.000ms -5.6%) vs baseline: -1.5%

Memory: ✅ 34.446MB (SLO: <39.000MB 📉 -11.7%) vs baseline: +5.1%


✅ add-tags

Time: ✅ 210.600ms (SLO: <221.600ms -5.0%) vs baseline: -1.4%

Memory: ✅ 34.387MB (SLO: <39.000MB 📉 -11.8%) vs baseline: +5.0%


✅ get-context

Time: ✅ 28.986ms (SLO: <31.300ms -7.4%) vs baseline: -0.6%

Memory: ✅ 34.288MB (SLO: <39.000MB 📉 -12.1%) vs baseline: +4.7%


✅ is-recording

Time: ✅ 29.449ms (SLO: <31.000ms -5.0%) vs baseline: +0.5%

Memory: ✅ 34.406MB (SLO: <39.000MB 📉 -11.8%) vs baseline: +4.9%


✅ record-exception

Time: ✅ 63.917ms (SLO: <65.850ms -2.9%) vs baseline: +0.8%

Memory: ✅ 34.406MB (SLO: <39.000MB 📉 -11.8%) vs baseline: +5.0%


✅ set-status

Time: ✅ 32.380ms (SLO: <34.150ms -5.2%) vs baseline: +1.3%

Memory: ✅ 34.328MB (SLO: <39.000MB 📉 -12.0%) vs baseline: +4.7%


✅ start

Time: ✅ 28.784ms (SLO: <30.150ms -4.5%) vs baseline: ~same

Memory: ✅ 34.426MB (SLO: <39.000MB 📉 -11.7%) vs baseline: +4.9%


✅ start-finish

Time: ✅ 33.958ms (SLO: <35.350ms -3.9%) vs baseline: +0.2%

Memory: ✅ 34.387MB (SLO: <39.000MB 📉 -11.8%) vs baseline: +4.9%


✅ start-finish-telemetry

Time: ✅ 34.423ms (SLO: <35.450ms -2.9%) vs baseline: +1.0%

Memory: ✅ 34.387MB (SLO: <39.000MB 📉 -11.8%) vs baseline: +5.2%


✅ update-name

Time: ✅ 30.935ms (SLO: <33.400ms -7.4%) vs baseline: -0.8%

Memory: ✅ 34.347MB (SLO: <39.000MB 📉 -11.9%) vs baseline: +4.9%


otelspan - 22/22

✅ add-event

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

Memory: ✅ 43.552MB (SLO: <47.000MB -7.3%) vs baseline: +4.7%


✅ add-metrics

Time: ✅ 314.341ms (SLO: <344.800ms -8.8%) vs baseline: -1.1%

Memory: ✅ 652.063MB (SLO: <675.000MB -3.4%) vs baseline: +4.9%


✅ add-tags

Time: ✅ 288.044ms (SLO: <314.000ms -8.3%) vs baseline: ~same

Memory: ✅ 654.017MB (SLO: <675.000MB -3.1%) vs baseline: +5.1%


✅ get-context

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

Memory: ✅ 39.542MB (SLO: <46.500MB 📉 -15.0%) vs baseline: +4.6%


✅ is-recording

Time: ✅ 37.998ms (SLO: <44.500ms 📉 -14.6%) vs baseline: ~same

Memory: ✅ 42.986MB (SLO: <47.500MB -9.5%) vs baseline: +4.6%


✅ record-exception

Time: ✅ 58.138ms (SLO: <67.650ms 📉 -14.1%) vs baseline: -0.3%

Memory: ✅ 39.749MB (SLO: <47.000MB 📉 -15.4%) vs baseline: +4.8%


✅ set-status

Time: ✅ 43.921ms (SLO: <50.400ms 📉 -12.9%) vs baseline: ~same

Memory: ✅ 43.085MB (SLO: <47.000MB -8.3%) vs baseline: +4.9%


✅ start

Time: ✅ 37.540ms (SLO: <43.450ms 📉 -13.6%) vs baseline: +0.9%

Memory: ✅ 42.971MB (SLO: <47.000MB -8.6%) vs baseline: +4.7%


✅ start-finish

Time: ✅ 81.833ms (SLO: <88.000ms -7.0%) vs baseline: +0.1%

Memory: ✅ 34.465MB (SLO: <46.500MB 📉 -25.9%) vs baseline: +4.9%


✅ start-finish-telemetry

Time: ✅ 83.260ms (SLO: <89.000ms -6.4%) vs baseline: +0.2%

Memory: ✅ 34.485MB (SLO: <46.500MB 📉 -25.8%) vs baseline: +5.0%


✅ update-name

Time: ✅ 38.781ms (SLO: <45.150ms 📉 -14.1%) vs baseline: -0.4%

Memory: ✅ 43.341MB (SLO: <47.000MB -7.8%) vs baseline: +4.9%


packagespackageforrootmodulemapping - 4/4

✅ cache_off

Time: ✅ 343.497ms (SLO: <354.300ms -3.0%) vs baseline: -0.2%

Memory: ✅ 37.596MB (SLO: <40.000MB -6.0%) vs baseline: +4.6%


✅ cache_on

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

Memory: ✅ 36.016MB (SLO: <39.000MB -7.7%) vs baseline: +4.5%


packagesupdateimporteddependencies - 24/24

✅ import_many

Time: ✅ 156.280µs (SLO: <170.000µs -8.1%) vs baseline: +0.8%

Memory: ✅ 36.856MB (SLO: <38.500MB -4.3%) vs baseline: +4.8%


✅ import_many_cached

Time: ✅ 121.746µs (SLO: <130.000µs -6.3%) vs baseline: +0.3%

Memory: ✅ 36.978MB (SLO: <38.500MB -4.0%) vs baseline: +5.6%


✅ import_many_stdlib

Time: ✅ 1.615ms (SLO: <1.750ms -7.7%) vs baseline: ~same

Memory: ✅ 36.957MB (SLO: <38.500MB -4.0%) vs baseline: +4.8%


✅ import_many_stdlib_cached

Time: ✅ 0.974ms (SLO: <1.100ms 📉 -11.5%) vs baseline: -0.5%

Memory: ✅ 36.925MB (SLO: <38.500MB -4.1%) vs baseline: +4.9%


✅ import_many_unknown

Time: ✅ 837.360µs (SLO: <890.000µs -5.9%) vs baseline: -0.7%

Memory: ✅ 36.897MB (SLO: <38.500MB -4.2%) vs baseline: +4.9%


✅ import_many_unknown_cached

Time: ✅ 794.471µs (SLO: <870.000µs -8.7%) vs baseline: -0.3%

Memory: ✅ 37.017MB (SLO: <38.500MB -3.9%) vs baseline: +5.3%


✅ import_one

Time: ✅ 19.889µs (SLO: <30.000µs 📉 -33.7%) vs baseline: +1.0%

Memory: ✅ 36.534MB (SLO: <39.000MB -6.3%) vs baseline: +4.8%


✅ import_one_cache

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

Memory: ✅ 36.633MB (SLO: <38.500MB -4.9%) vs baseline: +4.7%


✅ import_one_stdlib

Time: ✅ 19.008µs (SLO: <20.000µs -5.0%) vs baseline: +0.7%

Memory: ✅ 36.549MB (SLO: <38.500MB -5.1%) vs baseline: +4.4%


✅ import_one_stdlib_cache

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

Memory: ✅ 36.550MB (SLO: <38.500MB -5.1%) vs baseline: +4.3%


✅ import_one_unknown

Time: ✅ 45.527µs (SLO: <50.000µs -8.9%) vs baseline: ~same

Memory: ✅ 36.785MB (SLO: <38.500MB -4.5%) vs baseline: +5.0%


✅ import_one_unknown_cache

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

Memory: ✅ 36.512MB (SLO: <38.500MB -5.2%) vs baseline: +4.4%


ratelimiter - 12/12

✅ defaults

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

Memory: ✅ 31.536MB (SLO: <34.000MB -7.2%) vs baseline: +4.7%


✅ high_rate_limit

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

Memory: ✅ 31.575MB (SLO: <34.000MB -7.1%) vs baseline: +4.9%


✅ long_window

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

Memory: ✅ 31.556MB (SLO: <34.000MB -7.2%) vs baseline: +4.8%


✅ low_rate_limit

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

Memory: ✅ 31.575MB (SLO: <34.000MB -7.1%) vs baseline: +5.1%


✅ no_rate_limit

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

Memory: ✅ 31.595MB (SLO: <34.000MB -7.1%) vs baseline: +4.7%


✅ short_window

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

Memory: ✅ 31.516MB (SLO: <34.000MB -7.3%) vs baseline: +4.5%


samplingrules - 8/8

✅ average_match

Time: ✅ 136.899µs (SLO: <290.000µs 📉 -52.8%) vs baseline: -0.5%

Memory: ✅ 31.654MB (SLO: <34.000MB -6.9%) vs baseline: +3.8%


✅ high_match

Time: ✅ 174.610µs (SLO: <480.000µs 📉 -63.6%) vs baseline: ~same

Memory: ✅ 31.595MB (SLO: <34.000MB -7.1%) vs baseline: +4.0%


✅ low_match

Time: ✅ 99.889µs (SLO: <120.000µs 📉 -16.8%) vs baseline: +0.7%

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


✅ very_low_match

Time: ✅ 2.654ms (SLO: <8.500ms 📉 -68.8%) vs baseline: -0.4%

Memory: ✅ 68.000MB (SLO: <75.000MB -9.3%) vs baseline: +4.8%


sethttpmeta - 32/32

✅ all-disabled

Time: ✅ 10.463µs (SLO: <20.000µs 📉 -47.7%) vs baseline: -0.5%

Memory: ✅ 32.460MB (SLO: <34.000MB -4.5%) vs baseline: +4.8%


✅ all-enabled

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

Memory: ✅ 32.401MB (SLO: <34.000MB -4.7%) vs baseline: +4.7%


✅ collectipvariant_exists

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

Memory: ✅ 32.362MB (SLO: <34.000MB -4.8%) vs baseline: +4.5%


✅ no-collectipvariant

Time: ✅ 40.506µs (SLO: <50.000µs 📉 -19.0%) vs baseline: +1.1%

Memory: ✅ 32.381MB (SLO: <34.000MB -4.8%) vs baseline: +4.9%


✅ no-useragentvariant

Time: ✅ 39.311µs (SLO: <50.000µs 📉 -21.4%) vs baseline: +1.5%

Memory: ✅ 32.401MB (SLO: <34.000MB -4.7%) vs baseline: +4.9%


✅ obfuscation-no-query

Time: ✅ 41.142µs (SLO: <50.000µs 📉 -17.7%) vs baseline: +1.6%

Memory: ✅ 32.421MB (SLO: <34.000MB -4.6%) vs baseline: +4.7%


✅ obfuscation-regular-case-explicit-query

Time: ✅ 76.265µs (SLO: <90.000µs 📉 -15.3%) vs baseline: +0.9%

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


✅ obfuscation-regular-case-implicit-query

Time: ✅ 76.012µs (SLO: <90.000µs 📉 -15.5%) vs baseline: -0.4%

Memory: ✅ 32.558MB (SLO: <34.000MB -4.2%) vs baseline: +4.1%


✅ obfuscation-send-querystring-disabled

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

Memory: ✅ 32.775MB (SLO: <34.500MB -5.0%) vs baseline: +4.7%


✅ obfuscation-worst-case-explicit-query

Time: ✅ 149.177µs (SLO: <160.000µs -6.8%) vs baseline: +0.5%

Memory: ✅ 32.853MB (SLO: <34.500MB -4.8%) vs baseline: +4.7%


✅ obfuscation-worst-case-implicit-query

Time: ✅ 155.284µs (SLO: <170.000µs -8.7%) vs baseline: +0.1%

Memory: ✅ 32.755MB (SLO: <34.500MB -5.1%) vs baseline: +4.8%


✅ useragentvariant_exists_1

Time: ✅ 40.032µs (SLO: <50.000µs 📉 -19.9%) vs baseline: +1.8%

Memory: ✅ 32.421MB (SLO: <34.000MB -4.6%) vs baseline: +4.9%


✅ useragentvariant_exists_2

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

Memory: ✅ 32.440MB (SLO: <34.000MB -4.6%) vs baseline: +5.0%


✅ useragentvariant_exists_3

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

Memory: ✅ 32.401MB (SLO: <34.000MB -4.7%) vs baseline: +4.7%


✅ useragentvariant_not_exists_1

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

Memory: ✅ 32.381MB (SLO: <34.000MB -4.8%) vs baseline: +4.9%


✅ useragentvariant_not_exists_2

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

Memory: ✅ 32.362MB (SLO: <34.000MB -4.8%) vs baseline: +4.5%


span - 26/26

✅ add-event

Time: ✅ 19.970ms (SLO: <22.500ms 📉 -11.2%) vs baseline: +0.5%

Memory: ✅ 48.513MB (SLO: <53.000MB -8.5%) vs baseline: +4.7%


✅ add-metrics

Time: ✅ 90.233ms (SLO: <93.500ms -3.5%) vs baseline: -0.2%

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


✅ add-tags

Time: ✅ 146.599ms (SLO: <155.000ms -5.4%) vs baseline: -0.4%

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


✅ get-context

Time: ✅ 18.680ms (SLO: <20.500ms -8.9%) vs baseline: +2.3%

Memory: ✅ 47.376MB (SLO: <53.000MB 📉 -10.6%) vs baseline: +5.1%


✅ is-recording

Time: ✅ 18.957ms (SLO: <20.500ms -7.5%) vs baseline: +2.5%

Memory: ✅ 47.250MB (SLO: <53.000MB 📉 -10.8%) vs baseline: +4.7%


✅ record-exception

Time: ✅ 37.429ms (SLO: <40.000ms -6.4%) vs baseline: -0.3%

Memory: ✅ 41.778MB (SLO: <53.000MB 📉 -21.2%) vs baseline: +5.1%


✅ set-status

Time: ✅ 20.189ms (SLO: <22.000ms -8.2%) vs baseline: ~same

Memory: ✅ 47.209MB (SLO: <53.000MB 📉 -10.9%) vs baseline: +4.5%


✅ start

Time: ✅ 18.362ms (SLO: <20.500ms 📉 -10.4%) vs baseline: +1.4%

Memory: ✅ 47.404MB (SLO: <53.000MB 📉 -10.6%) vs baseline: +5.1%


✅ start-finish

Time: ✅ 51.261ms (SLO: <52.500ms -2.4%) vs baseline: +0.8%

Memory: ✅ 32.008MB (SLO: <34.000MB -5.9%) vs baseline: +4.8%


✅ start-finish-telemetry

Time: ✅ 52.800ms (SLO: <54.500ms -3.1%) vs baseline: +1.2%

Memory: ✅ 32.027MB (SLO: <34.000MB -5.8%) vs baseline: +4.9%


✅ start-finish-traceid128

Time: ✅ 53.853ms (SLO: <57.000ms -5.5%) vs baseline: -0.3%

Memory: ✅ 31.949MB (SLO: <34.000MB -6.0%) vs baseline: +4.7%


✅ start-traceid128

Time: ✅ 18.711ms (SLO: <22.500ms 📉 -16.8%) vs baseline: +0.9%

Memory: ✅ 47.327MB (SLO: <53.000MB 📉 -10.7%) vs baseline: +5.0%


✅ update-name

Time: ✅ 19.056ms (SLO: <22.000ms 📉 -13.4%) vs baseline: +2.1%

Memory: ✅ 47.973MB (SLO: <53.000MB -9.5%) vs baseline: +4.9%


telemetryaddmetric - 30/30

✅ 1-count-metric-1-times

Time: ✅ 3.019µs (SLO: <20.000µs 📉 -84.9%) vs baseline: +2.9%

Memory: ✅ 31.929MB (SLO: <34.000MB -6.1%) vs baseline: +4.8%


✅ 1-count-metrics-100-times

Time: ✅ 200.373µs (SLO: <220.000µs -8.9%) vs baseline: +1.3%

Memory: ✅ 31.949MB (SLO: <34.000MB -6.0%) vs baseline: +4.9%


✅ 1-distribution-metric-1-times

Time: ✅ 3.308µs (SLO: <20.000µs 📉 -83.5%) vs baseline: +1.7%

Memory: ✅ 31.850MB (SLO: <34.000MB -6.3%) vs baseline: +4.3%


✅ 1-distribution-metrics-100-times

Time: ✅ 211.853µs (SLO: <220.000µs -3.7%) vs baseline: ~same

Memory: ✅ 31.929MB (SLO: <34.000MB -6.1%) vs baseline: +4.9%


✅ 1-gauge-metric-1-times

Time: ✅ 2.180µs (SLO: <20.000µs 📉 -89.1%) vs baseline: +0.2%

Memory: ✅ 31.890MB (SLO: <34.000MB -6.2%) vs baseline: +4.8%


✅ 1-gauge-metrics-100-times

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

Memory: ✅ 31.968MB (SLO: <34.000MB -6.0%) vs baseline: +5.0%


✅ 1-rate-metric-1-times

Time: ✅ 3.063µs (SLO: <20.000µs 📉 -84.7%) vs baseline: -1.0%

Memory: ✅ 31.988MB (SLO: <34.000MB -5.9%) vs baseline: +5.0%


✅ 1-rate-metrics-100-times

Time: ✅ 212.586µs (SLO: <250.000µs 📉 -15.0%) vs baseline: +0.2%

Memory: ✅ 31.890MB (SLO: <34.000MB -6.2%) vs baseline: +4.7%


✅ 100-count-metrics-100-times

Time: ✅ 20.078ms (SLO: <22.000ms -8.7%) vs baseline: +0.3%

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


✅ 100-distribution-metrics-100-times

Time: ✅ 2.232ms (SLO: <2.300ms -2.9%) vs baseline: +0.3%

Memory: ✅ 31.968MB (SLO: <34.000MB -6.0%) vs baseline: +4.7%


✅ 100-gauge-metrics-100-times

Time: ✅ 1.406ms (SLO: <1.550ms -9.3%) vs baseline: +1.1%

Memory: ✅ 31.949MB (SLO: <34.000MB -6.0%) vs baseline: +4.8%


✅ 100-rate-metrics-100-times

Time: ✅ 2.192ms (SLO: <2.550ms 📉 -14.0%) vs baseline: +1.1%

Memory: ✅ 31.850MB (SLO: <34.000MB -6.3%) vs baseline: +4.6%


✅ flush-1-metric

Time: ✅ 4.416µs (SLO: <20.000µs 📉 -77.9%) vs baseline: +0.4%

Memory: ✅ 31.988MB (SLO: <34.000MB -5.9%) vs baseline: +5.2%


✅ flush-100-metrics

Time: ✅ 174.397µs (SLO: <250.000µs 📉 -30.2%) vs baseline: -0.4%

Memory: ✅ 32.008MB (SLO: <34.000MB -5.9%) vs baseline: +4.8%


✅ flush-1000-metrics

Time: ✅ 2.110ms (SLO: <2.500ms 📉 -15.6%) vs baseline: -0.6%

Memory: ✅ 32.716MB (SLO: <34.500MB -5.2%) vs baseline: +4.8%


tracer - 6/6

✅ large

Time: ✅ 29.412ms (SLO: <32.950ms 📉 -10.7%) vs baseline: +1.0%

Memory: ✅ 32.755MB (SLO: <34.500MB -5.1%) vs baseline: +4.7%


✅ medium

Time: ✅ 2.870ms (SLO: <3.200ms 📉 -10.3%) vs baseline: -0.2%

Memory: ✅ 31.536MB (SLO: <34.000MB -7.2%) vs baseline: +4.6%


✅ small

Time: ✅ 326.650µs (SLO: <370.000µs 📉 -11.7%) vs baseline: +0.6%

Memory: ✅ 31.575MB (SLO: <34.000MB -7.1%) vs baseline: +5.1%

ℹ️ 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

@KowalskiThomas KowalskiThomas marked this pull request as ready for review November 3, 2025 15:10
@KowalskiThomas KowalskiThomas requested a review from a team as a code owner November 3, 2025 15:10
@KowalskiThomas KowalskiThomas force-pushed the kowalski/bug-profiling-track-existing-asyncio-loop-if-it-exists branch from c22f6d7 to 4b6068d Compare November 3, 2025 15:44
@KowalskiThomas KowalskiThomas requested a review from a team as a code owner November 3, 2025 15:44
@KowalskiThomas KowalskiThomas changed the title fix(profiling): track existing asyncio loop if it exists (PROF-12842) fix(profiling): track existing asyncio loop if it exists Nov 3, 2025
Copy link
Contributor

@taegyunkim taegyunkim left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I know you've already checked that this works on some example app or service, but would it be too hard to add a regression test for this using the sample code you put together?

@taegyunkim taegyunkim changed the title (PROF-12842) fix(profiling): track existing asyncio loop if it exists fix(profiling): track existing asyncio loop if it exists Nov 3, 2025
@KowalskiThomas
Copy link
Contributor Author

@taegyunkim I know you've already checked that this works on some example app or service, but would it be too hard to add a regression test for this using the sample code you put together?

Oh yes, good point. I was planning to add one but then I got carried away and forgot. Will do 🙏

@taegyunkim taegyunkim added the Profiling Continous Profling label Nov 3, 2025
@KowalskiThomas KowalskiThomas force-pushed the kowalski/bug-profiling-track-existing-asyncio-loop-if-it-exists branch 2 times, most recently from 9e60d80 to f8a44eb Compare November 3, 2025 17:05
@KowalskiThomas
Copy link
Contributor Author

Okay I wasn't able to run my test locally yet and it's failing in the CI. I'll fix and merge tomorrow! 🙇

@KowalskiThomas KowalskiThomas force-pushed the kowalski/bug-profiling-track-existing-asyncio-loop-if-it-exists branch from f8a44eb to 1324408 Compare November 4, 2025 08:30
@KowalskiThomas KowalskiThomas force-pushed the kowalski/bug-profiling-track-existing-asyncio-loop-if-it-exists branch 4 times, most recently from 7b0f9ab to 57ec9b2 Compare November 5, 2025 16:53
@KowalskiThomas KowalskiThomas changed the title fix(profiling): track existing asyncio loop if it exists fix(profiling): track running asyncio loop if it exists Nov 5, 2025
@KowalskiThomas KowalskiThomas force-pushed the kowalski/bug-profiling-track-existing-asyncio-loop-if-it-exists branch from 57ec9b2 to 5558205 Compare November 5, 2025 16:59
@KowalskiThomas KowalskiThomas force-pushed the kowalski/bug-profiling-track-existing-asyncio-loop-if-it-exists branch from 5558205 to 234570a Compare November 5, 2025 17:04
@KowalskiThomas KowalskiThomas force-pushed the kowalski/bug-profiling-track-existing-asyncio-loop-if-it-exists branch from 234570a to fc60cfd Compare November 5, 2025 17:07
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Profiling Continous Profling

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants