• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

aio-libs / multidict / 37772235297
86%

Build:
DEFAULT BRANCH: master
Ran 08 Oct 2026 11:48AM UTC
Jobs 1
Files 49
Run time 1min
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

08 Oct 2026 11:46AM UTC coverage: 85.9%. Remained the same
37772235297

push

github

web-flow
Bring NOINLINE back for helpers GCC keeps re-inlining (#1750)

<!-- Thank you for your contribution! -->

## What do these changes do?

Brings back the `NOINLINE` macro that #1739 removed, and uses it on four
helpers that GCC inlined into every caller once they became plain
`static`:

- `_multidict_view_new()`, in all seven view getters (undoing #1683);
- `md_shell_alloc()`, in every constructor;
- `_init_iter()`, together with its critical section, in every iterator
constructor;
- `md_clear()`, in dealloc and both `clear()` entry points on GIL
(undoing #1670).

Plain `static` was tried first. Having the proxy view getters delegate
to the multidict ones changed nothing: GCC inlined the delegate as well,
and the object came out byte-identical.

It also splits `_bitmap_word()`. The inline part keeps only the dense
test, and the sparse-summary leg moves to `_bitmap_word_sparse()`. This
drops the out-of-line copy of `_bitmap_word()` along with its `.cold`
part.

`.text` shrinks by 1053 B on GIL and grows by 472 B on FT, where GCC
spends the freed budget on `_md_update_replace()`, `md_walk_with_hash()`
and `_md_contains_locked()`.

Callgrind, Ir per op, rows that moved by 0.5% or more:

| Build | Row | Before | After | Change |
|---|---|---|---|---|
| GIL | MultiDict `update` | 42702.0 | 40899.0 | -4.22% |
| GIL | MultiDict `getitem_istr` | 767.0 | 737.0 | -3.91% |
| GIL | MultiDict `setitem_istr` | 896.0 | 891.1 | -0.55% |
| GIL | `iter_new` (both classes) | 493.0 | 500.0 | +1.42% |
| GIL | `copy_small` (MultiDict / CIMultiDict) | 1430.0 / 1947.0 |
1446.0 / 1963.0 | +1.12% / +0.82% |
| GIL | `ctor_empty` (MultiDict / CIMultiDict) | 612.0 / 753.0 | 617.0 /
758.0 | +0.82% / +0.66% |
| GIL | `items_view` (both classes) | 319.0 | 321.0 | +0.63% |
| GIL | `getitem_hit` (MultiDict), `getitem_istr` (CIMultiDict) | | | +1
Ir |
| FT | MultiDict `update` | 51957.0 | 51413.0 | -1.05% |
| FT | CIMultiDict `ctor_items`, `reinit_items`, `ctor_small`,
`reinit_items_smal... (continued)

793 of 1586 branches covered (50.0%)

Branch coverage included in aggregate %.

9326 of 10194 relevant lines covered (91.49%)

1.83 hits per line

Jobs
ID Job ID Ran Files Coverage
1 MyPy - 37772235297.1 08 Oct 2026 11:48AM UTC 98
85.9
GitHub Action Run
Source Files on build 37772235297
  • Tree
  • List 49
  • Changed 2
  • Source Changed 0
  • Coverage Changed 2
Coverage ∆ File Lines Relevant Covered Missed Hits/Line Branch Hits Branch Misses
  • Back to Repo
  • Github Actions Build #37772235297
  • 66853b73 on github
  • Prev Build on master (#37770274933)
  • Next Build on master (#37775699769)
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE TRIAL · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc