GeezerVisonThe World Wide Web, restored to 800 pixels of glory. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Home|About|Gaming cabinet|Archives|How it works|Starter sites | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GeezerVison is showing github.com — Reuse collected sub fields for objects of the same type by Meemaw · Pull Request #4501 · graphql-java/graphql-java Conversation
Contributor
Problem
The result only depends on the merged field, the resolved object type, the variables and the fragments, and the last two are fixed for an execution. Async-profiler on ChangeThe collected sub fields are memoized per execution in
BenchmarksApple Silicon, JDK 21. Base vs this branch jars were run interleaved (alternating, 3 rounds × 2 forks each = 6 forks per side) to cancel out machine drift. Δ shows the 95% confidence interval.
An earlier run on a quieter machine of the same change (before a cosmetic ¹ Introspection bytes/op vary between forks even for the same jar (96.9M vs 114.5M observed for base), so treat that row as indicative only. TestsNew
To check the tests guard the fallbacks, I temporarily removed the bypass condition: the 🤖 Generated with Claude Code
Sorry, something went wrong. Uh oh!
There was an error while loading. Please reload this page. All reactionscompleteValueForObject collected the sub fields of the current field for every object in the result, so a list of N objects repeated the same selection set walk, @skip/@include evaluation and fragment expansion N times. The result only depends on the merged field and the object type, since variables and fragments are fixed for an execution, so it is now memoized per execution in ExecutionContext. The cache is bypassed when incremental support is enabled (deferred executions are created per collection) or when a custom ConditionalNodeDecision is present (it may not be deterministic). Co-Authored-By: Claude Opus 5.5 <[email protected]>
Meemaw
marked this pull request as ready for review
|
There was an error while loading. Please reload this page.
Test ReportTest Results
Code Coverage (Java 25)
Changed Class Coverage (25 classes)
FieldComplexityEnvironment — method details
FloatValue.Builder — method details
UnicodeUtil — method details
GraphQLAppliedDirective — method details
GraphQLAppliedDirectiveArgument — method details
GraphQLArgument — method details
GraphQLEnumType — method details
GraphQLEnumValueDefinition — method details
GraphQLInputObjectField — method details
GraphQLInputObjectType — method details
GraphQLInterfaceType — method details
GraphQLScalarType — method details
GraphQLUnionType — method details
SchemaGeneratorAppliedDirectiveHelper — method details
SchemaGeneratorHelper — method details
SchemaPrinter — method details
TypeDefinitionRegistry — method details
AppliedDirectiveArgumentsAreValid — method details
TypesImplementInterfaces — method details
Anonymizer.1 — method details
Anonymizer.2 — method details
|
Sorry, something went wrong.
There was an error while loading. Please reload this page.
There was an error while loading. Please reload this page.
Successfully merging this pull request may close these issues.
There was an error while loading. Please reload this page.