< Summary

Class:DCL.GLTFast.Wrappers.GltFastDeferAgent
Assembly:AssetPromiseKeeper
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/AssetManager/GLTFast/Wrappers/GLTFastDeferAgent.cs
Covered lines:28
Uncovered lines:1
Coverable lines:29
Total lines:79
Line coverage:96.5% (28 of 29)
Covered branches:0
Total branches:0
Covered methods:12
Total methods:12
Method coverage:100% (12 of 12)

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
GltFastDeferAgent()0%110100%
Start()0%110100%
OnRenderStateChanged(...)0%110100%
UpdateTimeBudget()0%440100%
Awake()0%110100%
Update()0%110100%
ResetLastTime()0%110100%
ShouldDefer()0%110100%
ShouldDefer(...)0%110100%
FitsInCurrentFrame(...)0%110100%
BreakPoint()0%440100%
BreakPoint()0%7.464040%

File(s)

/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/AssetManager/GLTFast/Wrappers/GLTFastDeferAgent.cs

#LineLine coverage
 1using System.Threading.Tasks;
 2using GLTFast;
 3using UnityEngine;
 4
 5namespace DCL.GLTFast.Wrappers
 6{
 7    // Note (Kinerius) This is a straight up copy of TimeBudgetPerFrameDeferAgent but it reacts to the renderer being in
 8    [DefaultExecutionOrder(-10)]
 9    public class GltFastDeferAgent : MonoBehaviour, IDeferAgent
 10    {
 11        [SerializeField]
 12        [Range(.01f, 5f)]
 13        [Tooltip("Per-frame time budget as fraction of the targeted frame time. Keep it well below 0.5, so there's enoug
 114        private float frameBudget = .5f;
 15
 16        private float lastTime;
 117        private float timeBudget = .5f / 30;
 18        private bool isRendererActive;
 19
 20        private void Start()
 21        {
 122            CommonScriptableObjects.rendererState.OnChange += OnRenderStateChanged;
 123            OnRenderStateChanged(CommonScriptableObjects.rendererState.Get(), false);
 124        }
 25
 26        private void OnRenderStateChanged(bool current, bool previous)
 27        {
 228            isRendererActive = current;
 229            UpdateTimeBudget();
 230        }
 31
 32        private void UpdateTimeBudget()
 33        {
 334            float targetFrameRate = Application.targetFrameRate;
 35
 336            if (targetFrameRate < 0)
 337                targetFrameRate = 30;
 38
 339            timeBudget = isRendererActive ? frameBudget / targetFrameRate : float.MaxValue;
 340            ResetLastTime();
 341        }
 42
 43        private void Awake()
 44        {
 145            UpdateTimeBudget();
 146        }
 47
 48        private void Update()
 49        {
 950            ResetLastTime();
 951        }
 52
 53        private void ResetLastTime()
 54        {
 1255            lastTime = Time.realtimeSinceStartup;
 1256        }
 57
 58        public bool ShouldDefer() =>
 599159            !FitsInCurrentFrame(0);
 60
 61        public bool ShouldDefer(float duration) =>
 61662            !FitsInCurrentFrame(duration);
 63
 64        private bool FitsInCurrentFrame(float duration) =>
 660765            duration <= timeBudget - (Time.realtimeSinceStartup - lastTime);
 66
 67        public async Task BreakPoint()
 68        {
 599169            if (ShouldDefer())
 670                await Task.Yield();
 599171        }
 72
 73        public async Task BreakPoint(float duration)
 74        {
 35175            if (ShouldDefer(duration))
 076                await Task.Yield();
 35177        }
 78    }
 79}