Skip to content

Conversation

@indietyp
Copy link
Member

@indietyp indietyp commented Jan 2, 2026

🌟 What is the purpose of this PR?

Implements a function inlining pass for HashQL's MIR (Mid-level Intermediate Representation). The pass reduces function call overhead and enables further optimizations by replacing call sites with the callee's body. It uses a two-phase approach: heuristic-based normal inlining followed by aggressive inlining for filter closures in graph read pipelines.

🔍 What does this change?

  • Adds libs/@local/hashql/mir/src/pass/transform/inline/ module with:
    • mod.rs: Main pass implementation with two-phase inlining (normal + aggressive)
    • analysis.rs: Cost estimation and body analysis (loop detection, caller counting)
    • heuristics.rs: Scoring algorithm with configurable bonuses (leaf, single-caller, unique-callsite, loop)
    • find.rs: Callsite discovery for aggressive filter closure inlining
    • rename.rs: Reference renaming for inlined code (locals, blocks, places)
    • tests.rs: Comprehensive unit tests and snapshot tests
  • Processes SCCs in dependency order to ensure callees are optimized before inlining
  • Never inlines recursive calls (same SCC) to prevent infinite expansion
  • Respects per-caller budget (default: 120) to avoid code bloat
  • Aggressive phase runs until fixpoint or cutoff (default: 16 iterations

Pre-Merge Checklist 🚀

🚢 Has this modified a publishable library?

This PR:

  • does not modify any publishable blocks or libraries, or modifications do not need publishing

📜 Does this require a change to the docs?

The changes in this PR:

  • are internal and do not require a docs change

🕸️ Does this require a change to the Turbo Graph?

The changes in this PR:

  • do not affect the execution graph

Copy link
Member Author

indietyp commented Jan 2, 2026

Warning

This pull request is not mergeable via GitHub because a downstack PR is open. Once all requirements are satisfied, merge this PR as a stack on Graphite.
Learn more

This stack of pull requests is managed by Graphite. Learn more about stacking.

@codecov
Copy link

codecov bot commented Jan 2, 2026

Codecov Report

❌ Patch coverage is 97.16851% with 41 lines in your changes missing coverage. Please review.
✅ Project coverage is 64.93%. Comparing base (2dcec85) to head (c391344).

Files with missing lines Patch % Lines
...ocal/hashql/mir/src/pass/analysis/callgraph/mod.rs 85.24% 9 Missing ⚠️
...@local/hashql/mir/src/pass/transform/inline/mod.rs 96.98% 6 Missing and 3 partials ⚠️
...ocal/hashql/mir/src/pass/transform/inline/tests.rs 98.83% 2 Missing and 6 partials ⚠️
...cal/hashql/core/src/graph/algorithms/tarjan/mod.rs 92.00% 4 Missing ⚠️
...pass/transform/administrative_reduction/visitor.rs 55.55% 2 Missing and 2 partials ⚠️
...local/hashql/mir/src/pass/transform/inline/find.rs 80.95% 2 Missing and 2 partials ⚠️
...l/hashql/mir/src/pass/transform/inline/analysis.rs 98.33% 2 Missing ⚠️
libs/@local/hashql/core/src/graph/linked.rs 0.00% 1 Missing ⚠️
Additional details and impacted files
@@                                            Coverage Diff                                             @@
##           bm/be-267-hashql-do-not-reset-the-scratch-space-but-instead-use-scopes    #8236      +/-   ##
==========================================================================================================
+ Coverage                                                                   59.86%   64.93%   +5.06%     
==========================================================================================================
  Files                                                                        1067      735     -332     
  Lines                                                                      106458    62952   -43506     
  Branches                                                                     4479     3676     -803     
==========================================================================================================
- Hits                                                                        63730    40877   -22853     
+ Misses                                                                      41991    21596   -20395     
+ Partials                                                                      737      479     -258     
Flag Coverage Δ
blockprotocol.type-system ?
local.claude-hooks ?
local.harpc-client ?
rust.antsi ?
rust.error-stack ?
rust.harpc-codec ?
rust.harpc-net ?
rust.harpc-tower ?
rust.harpc-types ?
rust.harpc-wire-protocol ?
rust.hash-codec ?
rust.hash-graph-authorization ?
rust.hash-graph-postgres-store ?
rust.hash-graph-store ?
rust.hash-graph-temporal-versioning ?
rust.hash-graph-types ?
rust.hash-graph-validation ?
rust.hashql-compiletest 46.65% <ø> (ø)
rust.hashql-diagnostics ?
rust.hashql-mir 89.67% <97.22%> (+2.03%) ⬆️

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@vercel vercel bot temporarily deployed to Preview – petrinaut January 2, 2026 22:26 Inactive
Copy link
Member Author

indietyp commented Jan 2, 2026

some of the compiletest tests (and tests.rs) will need pruning. The current amount of lines is unacceptable.

@augmentcode
Copy link

augmentcode bot commented Jan 2, 2026

🤖 Augment PR Summary

Summary: Implements a MIR-level function inliner for HashQL, reducing call overhead and enabling downstream MIR optimizations.

Changes:

  • Added a new MIR transform pass Inline with two phases: heuristic, budgeted inlining across all bodies + aggressive fixpoint inlining for filter closures in graph-read pipelines
  • Introduced cost estimation + loop detection (CFG SCC analysis) and a configurable scoring heuristic (leaf/loop/single-caller/unique-callsite bonuses)
  • Extended call-graph analysis with CallSite and helper queries (apply callsites, filter discovery, leaf/single-caller queries)
  • Enhanced Tarjan SCC utilities with a public SccId newtype and a members()/members_in() API for SCC membership iteration
  • Added allocator-backed helpers to IdSlice and iterator support for &IdVec/&mut IdVec
  • Updated MIR builder/test infrastructure (new body sources incl. ctor/intrinsic) and added compiletest/UI coverage for the inliner (including excessive-depth diagnostics)

Technical Notes: Normal inlining processes SCCs in dependency order and skips recursive (same-SCC) inlines; aggressive filter inlining is bounded by aggressive_inline_cutoff and emits a warning when the cutoff is hit.

🤖 Was this summary useful? React with 👍 or 👎

Copy link

@augmentcode augmentcode bot left a comment

Choose a reason for hiding this comment

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

Review completed. 1 suggestions posted.

Fix All in Augment

Comment augment review to trigger a new review at any time.

@codspeed-hq
Copy link

codspeed-hq bot commented Jan 2, 2026

CodSpeed Performance Report

Merging #8236 will not alter performance

Comparing bm/be-197-hashql-implement-inlining (c391344) with bm/be-267-hashql-do-not-reset-the-scratch-space-but-instead-use-scopes (2dcec85)

Summary

✅ 17 untouched
🗄️ 12 archived benchmarks run1

Footnotes

  1. 12 benchmarks were run, but are now archived. If they were deleted in another branch, consider rebasing to remove them from the report. Instead if they were added back, click here to restore them.

@graphite-app graphite-app bot requested review from a team January 2, 2026 22:45
@vilkinsons vilkinsons changed the title BE-197: Implement MIR inline pass for HashQ BE-197: Implement MIR inline pass for HashQL Jan 2, 2026
@vercel vercel bot temporarily deployed to Preview – petrinaut January 2, 2026 23:07 Inactive
@vercel vercel bot temporarily deployed to Preview – petrinaut January 2, 2026 23:12 Inactive
@github-actions
Copy link
Contributor

github-actions bot commented Jan 3, 2026

Benchmark results

@rust/hash-graph-benches – Integrations

policy_resolution_large

Function Value Mean Flame graphs
resolve_policies_for_actor user: empty, selectivity: high, policies: 2002 $$25.9 \mathrm{ms} \pm 176 \mathrm{μs}\left({\color{lightgreen}-15.317 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: empty, selectivity: low, policies: 1 $$3.26 \mathrm{ms} \pm 14.1 \mathrm{μs}\left({\color{gray}0.322 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: empty, selectivity: medium, policies: 1001 $$11.8 \mathrm{ms} \pm 58.2 \mathrm{μs}\left({\color{gray}-2.999 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: seeded, selectivity: high, policies: 3314 $$41.9 \mathrm{ms} \pm 305 \mathrm{μs}\left({\color{gray}-1.323 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: seeded, selectivity: low, policies: 1 $$13.8 \mathrm{ms} \pm 74.3 \mathrm{μs}\left({\color{gray}-1.395 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: seeded, selectivity: medium, policies: 1526 $$22.7 \mathrm{ms} \pm 147 \mathrm{μs}\left({\color{gray}-3.088 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: system, selectivity: high, policies: 2078 $$25.8 \mathrm{ms} \pm 133 \mathrm{μs}\left({\color{lightgreen}-40.578 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: system, selectivity: low, policies: 1 $$3.64 \mathrm{ms} \pm 19.9 \mathrm{μs}\left({\color{lightgreen}-81.846 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: system, selectivity: medium, policies: 1033 $$11.1 \mathrm{ms} \pm 75.5 \mathrm{μs}\left({\color{lightgreen}-60.532 \mathrm{\%}}\right) $$ Flame Graph

policy_resolution_medium

Function Value Mean Flame graphs
resolve_policies_for_actor user: empty, selectivity: high, policies: 102 $$3.63 \mathrm{ms} \pm 18.8 \mathrm{μs}\left({\color{gray}-0.023 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: empty, selectivity: low, policies: 1 $$2.87 \mathrm{ms} \pm 18.3 \mathrm{μs}\left({\color{gray}1.60 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: empty, selectivity: medium, policies: 51 $$3.21 \mathrm{ms} \pm 17.4 \mathrm{μs}\left({\color{gray}0.622 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: seeded, selectivity: high, policies: 269 $$5.01 \mathrm{ms} \pm 30.2 \mathrm{μs}\left({\color{gray}0.620 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: seeded, selectivity: low, policies: 1 $$3.38 \mathrm{ms} \pm 11.1 \mathrm{μs}\left({\color{gray}-0.328 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: seeded, selectivity: medium, policies: 107 $$3.97 \mathrm{ms} \pm 19.6 \mathrm{μs}\left({\color{gray}0.938 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: system, selectivity: high, policies: 133 $$4.26 \mathrm{ms} \pm 21.4 \mathrm{μs}\left({\color{gray}-0.173 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: system, selectivity: low, policies: 1 $$3.27 \mathrm{ms} \pm 12.6 \mathrm{μs}\left({\color{gray}0.739 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: system, selectivity: medium, policies: 63 $$3.85 \mathrm{ms} \pm 25.0 \mathrm{μs}\left({\color{gray}0.274 \mathrm{\%}}\right) $$ Flame Graph

policy_resolution_none

Function Value Mean Flame graphs
resolve_policies_for_actor user: empty, selectivity: high, policies: 2 $$2.65 \mathrm{ms} \pm 9.19 \mathrm{μs}\left({\color{red}9.70 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: empty, selectivity: low, policies: 1 $$2.61 \mathrm{ms} \pm 11.5 \mathrm{μs}\left({\color{red}10.9 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: empty, selectivity: medium, policies: 1 $$2.71 \mathrm{ms} \pm 14.7 \mathrm{μs}\left({\color{red}10.2 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: system, selectivity: high, policies: 8 $$2.85 \mathrm{ms} \pm 12.2 \mathrm{μs}\left({\color{red}7.81 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: system, selectivity: low, policies: 1 $$2.76 \mathrm{ms} \pm 10.7 \mathrm{μs}\left({\color{red}9.31 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: system, selectivity: medium, policies: 3 $$2.96 \mathrm{ms} \pm 13.0 \mathrm{μs}\left({\color{red}8.42 \mathrm{\%}}\right) $$ Flame Graph

policy_resolution_small

Function Value Mean Flame graphs
resolve_policies_for_actor user: empty, selectivity: high, policies: 52 $$2.92 \mathrm{ms} \pm 14.4 \mathrm{μs}\left({\color{red}5.32 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: empty, selectivity: low, policies: 1 $$2.64 \mathrm{ms} \pm 13.5 \mathrm{μs}\left({\color{red}7.43 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: empty, selectivity: medium, policies: 25 $$2.79 \mathrm{ms} \pm 14.8 \mathrm{μs}\left({\color{red}7.58 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: seeded, selectivity: high, policies: 94 $$3.32 \mathrm{ms} \pm 21.1 \mathrm{μs}\left({\color{red}7.24 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: seeded, selectivity: low, policies: 1 $$2.85 \mathrm{ms} \pm 11.5 \mathrm{μs}\left({\color{red}5.89 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: seeded, selectivity: medium, policies: 26 $$3.06 \mathrm{ms} \pm 14.0 \mathrm{μs}\left({\color{gray}4.76 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: system, selectivity: high, policies: 66 $$3.17 \mathrm{ms} \pm 14.0 \mathrm{μs}\left({\color{gray}4.86 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: system, selectivity: low, policies: 1 $$2.83 \mathrm{ms} \pm 15.0 \mathrm{μs}\left({\color{red}6.48 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: system, selectivity: medium, policies: 29 $$3.06 \mathrm{ms} \pm 15.6 \mathrm{μs}\left({\color{red}6.07 \mathrm{\%}}\right) $$ Flame Graph

read_scaling_complete

Function Value Mean Flame graphs
entity_by_id;one_depth 1 entities $$38.3 \mathrm{ms} \pm 140 \mathrm{μs}\left({\color{gray}-1.922 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;one_depth 10 entities $$75.9 \mathrm{ms} \pm 347 \mathrm{μs}\left({\color{gray}-0.970 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;one_depth 25 entities $$43.7 \mathrm{ms} \pm 188 \mathrm{μs}\left({\color{gray}1.61 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;one_depth 5 entities $$45.7 \mathrm{ms} \pm 167 \mathrm{μs}\left({\color{gray}-1.310 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;one_depth 50 entities $$53.5 \mathrm{ms} \pm 286 \mathrm{μs}\left({\color{gray}-0.326 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;two_depth 1 entities $$41.0 \mathrm{ms} \pm 194 \mathrm{μs}\left({\color{gray}0.415 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;two_depth 10 entities $$418 \mathrm{ms} \pm 1.06 \mathrm{ms}\left({\color{gray}-0.657 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;two_depth 25 entities $$94.9 \mathrm{ms} \pm 382 \mathrm{μs}\left({\color{gray}1.36 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;two_depth 5 entities $$84.9 \mathrm{ms} \pm 410 \mathrm{μs}\left({\color{gray}-3.347 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;two_depth 50 entities $$285 \mathrm{ms} \pm 927 \mathrm{μs}\left({\color{gray}-0.039 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;zero_depth 1 entities $$14.9 \mathrm{ms} \pm 86.4 \mathrm{μs}\left({\color{gray}-0.506 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;zero_depth 10 entities $$15.1 \mathrm{ms} \pm 82.7 \mathrm{μs}\left({\color{gray}2.63 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;zero_depth 25 entities $$15.2 \mathrm{ms} \pm 65.2 \mathrm{μs}\left({\color{gray}0.192 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;zero_depth 5 entities $$14.7 \mathrm{ms} \pm 85.2 \mathrm{μs}\left({\color{gray}0.511 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;zero_depth 50 entities $$18.1 \mathrm{ms} \pm 103 \mathrm{μs}\left({\color{gray}0.049 \mathrm{\%}}\right) $$ Flame Graph

read_scaling_linkless

Function Value Mean Flame graphs
entity_by_id 1 entities $$15.1 \mathrm{ms} \pm 88.9 \mathrm{μs}\left({\color{gray}3.85 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id 10 entities $$14.7 \mathrm{ms} \pm 49.2 \mathrm{μs}\left({\color{gray}0.564 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id 100 entities $$14.8 \mathrm{ms} \pm 63.6 \mathrm{μs}\left({\color{gray}1.07 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id 1000 entities $$15.4 \mathrm{ms} \pm 75.6 \mathrm{μs}\left({\color{gray}0.042 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id 10000 entities $$22.2 \mathrm{ms} \pm 157 \mathrm{μs}\left({\color{gray}-1.098 \mathrm{\%}}\right) $$ Flame Graph

representative_read_entity

Function Value Mean Flame graphs
entity_by_id entity type ID: https://blockprotocol.org/@alice/types/entity-type/block/v/1 $$30.2 \mathrm{ms} \pm 333 \mathrm{μs}\left({\color{gray}-0.255 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id entity type ID: https://blockprotocol.org/@alice/types/entity-type/book/v/1 $$28.9 \mathrm{ms} \pm 254 \mathrm{μs}\left({\color{gray}-3.794 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id entity type ID: https://blockprotocol.org/@alice/types/entity-type/building/v/1 $$29.8 \mathrm{ms} \pm 234 \mathrm{μs}\left({\color{gray}-1.580 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id entity type ID: https://blockprotocol.org/@alice/types/entity-type/organization/v/1 $$30.1 \mathrm{ms} \pm 305 \mathrm{μs}\left({\color{gray}0.343 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id entity type ID: https://blockprotocol.org/@alice/types/entity-type/page/v/2 $$29.5 \mathrm{ms} \pm 280 \mathrm{μs}\left({\color{gray}-1.139 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id entity type ID: https://blockprotocol.org/@alice/types/entity-type/person/v/1 $$29.1 \mathrm{ms} \pm 241 \mathrm{μs}\left({\color{gray}-2.491 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id entity type ID: https://blockprotocol.org/@alice/types/entity-type/playlist/v/1 $$28.3 \mathrm{ms} \pm 279 \mathrm{μs}\left({\color{gray}-4.695 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id entity type ID: https://blockprotocol.org/@alice/types/entity-type/song/v/1 $$29.0 \mathrm{ms} \pm 241 \mathrm{μs}\left({\color{gray}-3.470 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id entity type ID: https://blockprotocol.org/@alice/types/entity-type/uk-address/v/1 $$29.5 \mathrm{ms} \pm 333 \mathrm{μs}\left({\color{gray}-2.419 \mathrm{\%}}\right) $$ Flame Graph

representative_read_entity_type

Function Value Mean Flame graphs
get_entity_type_by_id Account ID: bf5a9ef5-dc3b-43cf-a291-6210c0321eba $$8.18 \mathrm{ms} \pm 37.4 \mathrm{μs}\left({\color{gray}0.218 \mathrm{\%}}\right) $$ Flame Graph

representative_read_multiple_entities

Function Value Mean Flame graphs
entity_by_property traversal_paths=0 0 $$45.9 \mathrm{ms} \pm 230 \mathrm{μs}\left({\color{gray}-1.796 \mathrm{\%}}\right) $$
entity_by_property traversal_paths=255 1,resolve_depths=inherit:1;values:255;properties:255;links:127;link_dests:126;type:true $$94.6 \mathrm{ms} \pm 418 \mathrm{μs}\left({\color{gray}-0.923 \mathrm{\%}}\right) $$
entity_by_property traversal_paths=2 1,resolve_depths=inherit:0;values:0;properties:0;links:0;link_dests:0;type:false $$51.6 \mathrm{ms} \pm 280 \mathrm{μs}\left({\color{gray}-1.858 \mathrm{\%}}\right) $$
entity_by_property traversal_paths=2 1,resolve_depths=inherit:0;values:0;properties:0;links:1;link_dests:0;type:true $$60.2 \mathrm{ms} \pm 359 \mathrm{μs}\left({\color{gray}-2.060 \mathrm{\%}}\right) $$
entity_by_property traversal_paths=2 1,resolve_depths=inherit:0;values:0;properties:2;links:1;link_dests:0;type:true $$68.6 \mathrm{ms} \pm 339 \mathrm{μs}\left({\color{gray}-1.862 \mathrm{\%}}\right) $$
entity_by_property traversal_paths=2 1,resolve_depths=inherit:0;values:2;properties:2;links:1;link_dests:0;type:true $$75.4 \mathrm{ms} \pm 313 \mathrm{μs}\left({\color{gray}-0.158 \mathrm{\%}}\right) $$
link_by_source_by_property traversal_paths=0 0 $$49.0 \mathrm{ms} \pm 235 \mathrm{μs}\left({\color{gray}-2.454 \mathrm{\%}}\right) $$
link_by_source_by_property traversal_paths=255 1,resolve_depths=inherit:1;values:255;properties:255;links:127;link_dests:126;type:true $$76.2 \mathrm{ms} \pm 419 \mathrm{μs}\left({\color{gray}-2.228 \mathrm{\%}}\right) $$
link_by_source_by_property traversal_paths=2 1,resolve_depths=inherit:0;values:0;properties:0;links:0;link_dests:0;type:false $$55.9 \mathrm{ms} \pm 325 \mathrm{μs}\left({\color{gray}-2.179 \mathrm{\%}}\right) $$
link_by_source_by_property traversal_paths=2 1,resolve_depths=inherit:0;values:0;properties:0;links:1;link_dests:0;type:true $$63.2 \mathrm{ms} \pm 348 \mathrm{μs}\left({\color{gray}-1.986 \mathrm{\%}}\right) $$
link_by_source_by_property traversal_paths=2 1,resolve_depths=inherit:0;values:0;properties:2;links:1;link_dests:0;type:true $$65.6 \mathrm{ms} \pm 397 \mathrm{μs}\left({\color{gray}-2.085 \mathrm{\%}}\right) $$
link_by_source_by_property traversal_paths=2 1,resolve_depths=inherit:0;values:2;properties:2;links:1;link_dests:0;type:true $$65.6 \mathrm{ms} \pm 369 \mathrm{μs}\left({\color{gray}-1.894 \mathrm{\%}}\right) $$

scenarios

Function Value Mean Flame graphs
full_test query-limited $$134 \mathrm{ms} \pm 569 \mathrm{μs}\left({\color{gray}4.82 \mathrm{\%}}\right) $$ Flame Graph
full_test query-unlimited $$132 \mathrm{ms} \pm 563 \mathrm{μs}\left({\color{gray}2.35 \mathrm{\%}}\right) $$ Flame Graph
linked_queries query-limited $$40.3 \mathrm{ms} \pm 199 \mathrm{μs}\left({\color{lightgreen}-67.341 \mathrm{\%}}\right) $$ Flame Graph
linked_queries query-unlimited $$576 \mathrm{ms} \pm 920 \mathrm{μs}\left({\color{lightgreen}-7.671 \mathrm{\%}}\right) $$ Flame Graph

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area/infra Relates to version control, CI, CD or IaC (area) area/libs Relates to first-party libraries/crates/packages (area) area/tests New or updated tests type/eng > backend Owned by the @backend team

Development

Successfully merging this pull request may close these issues.

2 participants