So, it’s not scripting code directly, so it’s not your C# code (that’d be blue). But it could be related to calls you make into the native backend and those calls executinf something that doesn’t fit into the other categories, like Logging Debug messages.
It can also relate to some work which you might be inderectly affecting with the content or settings, and in the Editor it’s usually all of the EditorLoop if you’re targeting Playmode.
Adding profiler markers is not gonna change the color about if those are placed around the calls to the native backend via the API, then it could help attribute the Other stuff but you’re better off starting at the top and just selecting things in the Hierarchy or Timeline view and checking how the selection filters the Chart colors. If what you selected contains time attributed to Other in itself (the self time of brown green markers in Timeline view vor example) or within the self time of its child profiler samples, then the Chart will show you how much of that is categorized as “Other”. This way you can narrow it down.
Beyond the above, pleas use Unity.Profiling.ProfiletMarkers instead. They have way less overhead, don’t clutter string memory, are Burst compatible and are for all of those reasons mostly ok to leave in your code, even as it goes into Release. (Begin and End calls are entirely compiled out in release, Auto() returns a null object)
Please don’t take your information on that sample from the forums, but from the Common Marker documentation page.
The forum threads discussing these are full of stab-in-the-dark, random unity bug or performance regression related issues and confusion mingled together under the most surface level expression of an issue that is almost always destinct for each project hitting it. In fact, these threads are the reason that Documentation page exists in the first place.
Case in point: you are not GPU bound and the marker doesn’t mean that either. The “GfxThread” it is waiting on is the Render Thread, which is running on the CPU. In your screenshot you can clearly see that the last frame’s Render Thread work overlaps onto this frames WaitForPresentOnGfxThread. So the GPU hasn’t even finished getting all the Commands from the Render Thread, but as soon as it has, Gfx.Present actually seems to be done with this frame (or the last one) within 4.5ms.
So you’ll likely need to reducing your draw calls batching costs or similar. What exactly I can’t tell you based on screenshotsscreenshots alone, as it’s rather project specific and requires deeper analysis. The Frames Debugger is going to be your friend and guide through some of that, as is the Profiler Timeline view, with a focus on the Render thread and rendering work happening on the main thread.