URP performance: hefty regression in editor, steady @ runtime

Quick benchmark to check out regressions and such.
With a fps script that uses ongui, frequency 30 seconds, 2060rtx i5 8400
Scene uses no realtime lights or lightprobes, 1 refprobe, all baked & realtime volume lit by The Bakery, 20 vfx graph, 580K tris, 100 skinmesh, rufat’s post processing bloom

editor fullscreen 1280x720:
2020.1.17 105fps
2021.1.1 80fps
regression of 25%

build fullscreen 1440p:
2020.1.17 328fps → 310fps (drops slowly to 310)
2021.1.1 296fps → 310fps (ramps up slowly to stabilize at 310fps)

4 Likes

Can you share the FPS script?

using UnityEngine;
using System.Collections;

[AddComponentMenu( "Utilities/HUDFPS")]
public class FPS : MonoBehaviour
{
    // Attach this to any object to make a frames/second indicator.
    //
    // It calculates frames/second over each updateInterval,
    // so the display does not keep changing wildly.
    //
    // It is also fairly accurate at very low FPS counts (<10).
    // We do this not by simply counting frames per interval, but
    // by accumulating FPS for each frame. This way we end up with
    // corstartRect overall FPS even if the interval renders something like
    // 5.5 frames.

    public Rect startRect = new Rect( 10, 10, 75, 50 ); // The rect the window is initially displayed at.
    public bool updateColor = true; // Do you want the color to change if the FPS gets low
    public bool allowDrag = true; // Do you want to allow the dragging of the FPS window
    public  float frequency = 0.5F; // The update frequency of the fps
    public int nbDecimal = 1; // How many decimal do you want to display

    private float accum   = 0f; // FPS accumulated over the interval
    private int   frames  = 0; // Frames drawn over the interval
    private Color color = Color.white; // The color of the GUI, depending of the FPS ( R < 10, Y < 30, G >= 30 )
    private string sFPS = ""; // The fps formatted into a string.
    private GUIStyle style; // The style the text will be displayed at, based en defaultSkin.label.

    void Start()
    {
        StartCoroutine( FP() );
    }

    void Update()
    {
        accum += Time.timeScale/ Time.deltaTime;
        ++frames;
    }

    IEnumerator FP()
    {
        // Infinite loop executed every "frenquency" secondes.
        while( true )
        {
            // Update the FPS
            float fps = accum/frames;
            sFPS = fps.ToString( "f2");

            //Update the color
            color = (fps >= 30) ? Color.green : ((fps > 10) ? Color.red : Color.yellow);

            accum = 0.0F;
            frames = 0;

            yield return new WaitForSeconds( frequency );
        }
    }

    void OnGUI()
    {
        // Copy the default label skin, change the color and the alignement
        if( style == null ){
            style = new GUIStyle( GUI.skin.label );
            style.normal.textColor = Color.white;
            style.alignment = TextAnchor.MiddleCenter;
        }

        GUI.color = updateColor ? color : Color.white;
        GUI.Label( new Rect(0, 0, startRect.width, startRect.height), $"{sFPS} FPS", style );
    }
}
2 Likes

It’s likely that the editor portion of the gameloop got slower. Could you report a bug on this?

2 Likes

1326946

3 Likes

You’ve been reporting a lot of good performance regression bugs lately. I’m sure our lord and savior @Peter77 is proud up there in the sky.

8 Likes

shame he ascended with his RTX 2080

8 Likes

It’s not really related to the RTX Unity Technologies sent me, it’s more related to my interests having shifted. That’s mainly the reason why I’m not so much around here lately. But I see how it looks like I was bought and it’s a funny thought. :smile:

9 Likes