Skip to content

⚡ Optimize GetComponent usage in GPUInstancerRuntimeData#514

Merged
marko1olo merged 1 commit into
mainfrom
jules-12848943296384888927-e9d801cc
Jun 27, 2026
Merged

⚡ Optimize GetComponent usage in GPUInstancerRuntimeData#514
marko1olo merged 1 commit into
mainfrom
jules-12848943296384888927-e9d801cc

Conversation

@marko1olo

Copy link
Copy Markdown
Owner

💡 What:
Replaced allocating GetComponent<MeshFilter>() calls with non-allocating TryGetComponent<MeshFilter>(out MeshFilter meshFilter) in multiple tight loops within GPUInstancerRuntimeData.cs. Where possible, the resulting component is cached and reused (such as in AddRenderer) to avoid repeated dictionary lookups.

🎯 Why:
Calling GetComponent creates GC allocations when components are missing, and invokes expensive C++/C# transition boundary overhead. Replacing this with TryGetComponent and hoisting/caching the results natively removes a significant source of stutter in large loops processing mesh renderers.

📊 Measured Improvement:
Due to test framework limitations in this environment context (libhostpolicy.so missing for standalone C# benchmark builds, and exclusion of editor tests in the terminal dotnet test runner), I could not execute a terminal benchmark. However, Unity profiling historically shows that GetComponent<T>() causes noticeable performance penalties due to GC allocations (when missing) and native-boundary transitions when compared to C# 7 TryGetComponent cached usages, especially when iterating over thousands of GameObjects in rendering pathways.


PR created automatically by Jules for task 12848943296384888927 started by @marko1olo

@google-labs-jules

Copy link
Copy Markdown
Contributor

👋 Jules, reporting for duty! I'm here to lend a hand with this pull request.

When you start a review, I'll add a 👀 emoji to each comment to let you know I've read it. I'll focus on feedback directed at me and will do my best to stay out of conversations between you and other bots or reviewers to keep the noise down.

I'll push a commit with your requested changes shortly after. Please note there might be a delay between these steps, but rest assured I'm on the job!

For more direct control, you can switch me to Reactive Mode. When this mode is on, I will only act on comments where you specifically mention me with @jules. You can find this option in the Pull Request section of your global Jules UI settings. You can always switch back!

New to Jules? Learn more at jules.google/docs.


For security, I will only act on instructions from the user who triggered this task.

@marko1olo marko1olo merged commit 3e11d8c into main Jun 27, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant