needle-tools / selective-profiling

Selectively deep profile single methods while your game is running in Unity's Profiler 🔬

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Feedback from trying to selectively profile our character health events using Unity 2020.1.3f1

opened this issue · comments

General

  • when methods successfully added (via profiler hierarchy, methods explorer or component) and performance stays normal, it works great so far
  • hard to tell in profiler hierarchy view which samples were added due to selection. suggestions:
    • customize sample names (seems to be the case in some screenshots in documentation?)
    • change background color of the row
    • display an icon somewhere
  • adding class names to sample names should be an option, otherwise it might get confusing. especially when using deep profiling

Add profiling via component context menu

  • "Component->enable profiling on all" takes a long time (~45s on one of our biggest components (character class with 385 methods), ~15s on medium sized component (health class with 115 methods))
  • when adding during runtime: can i only turn this off again by going to the same component? methods do not show up in the Selective Profiling window when added this way. can be easily forgotten.
  • nice to have: option to only add methods of this class specifically (basically excluding inherited methods). or maybe allow fine grained selection of full inheritance tree?
  • could this also be added to script file context menu? so it doesn't only work on components
  • NOTE: most runtime performance issues described below might be caused by high deep profiling depth when adding the methods (i set it to 5 for testing early on and forgot it for a while).
  • performance drop (to below 1fps) after adding profiling for medium sized component during playmode. disabling this again takes ~120s, but performance still low
    • the component does not have any expensive update functions, it should only incur profiling overhead when actually triggering character/health specific events such as damaging an NPC
    • UnitySynchronizationContext.ExecuteTasks with ~3000ms and allocating a few MB each frame
    • complete editor hang when adding ^ this expensive thing to selective profiling
    • also complete editor hang when triggering some health related events (component that was added to profile)
  • editor hangs a while after enabling profling for big component (see above) in editmode and bad performance afterwards
    • EditorApplication.Internal_CallUpdateFunctions with ~2000ms per frame and a few hundred (!) MB GC Alloc per frame
    • stabilizes after a while?
    • same behaviour when removing all methods again, but does not seem to stabilize or takes way longer editor_performance_after_remove
    • can be reproduced by 1) starting unity 2) adding component 3) removing all methods in Selective Profiling window

Tech specs:

Intel-i5 10400 @2.9GHz
32GB RAM
Project & Unity install on nvme SSD
Playmode normally runs at 90-100FPS on this machine in the scene i was testing