< Summary

Class:DCLPlugins.UIRefresherPlugin.UIRefresherController
Assembly:DCL.Plugins.UIRefresher
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/DCLPlugins/UIRefresherPlugin/UIRefresherController.cs
Covered lines:28
Uncovered lines:1
Coverable lines:29
Total lines:78
Line coverage:96.5% (28 of 29)
Covered branches:0
Total branches:0
Covered methods:4
Total methods:4
Method coverage:100% (4 of 4)

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
UIRefresherController(...)0%110100%
Dispose()0%110100%
OnLateUpdate()0%9.059091.3%
CanRefreshMore(...)0%2.152066.67%

File(s)

/tmp/workspace/unity-renderer/unity-renderer/Assets/DCLPlugins/UIRefresherPlugin/UIRefresherController.cs

#LineLine coverage
 1using System;
 2using System.Collections.Generic;
 3using DCL;
 4using DCL.Components.Interfaces;
 5using UnityEngine;
 6
 7namespace DCLPlugins.UIRefresherPlugin
 8{
 9    public class UIRefresherController : IDisposable
 10    {
 11        private const float DIRTY_WATCHER_UPDATE_BUDGET = 2/1000f;
 12
 13        private readonly IUpdateEventHandler eventHandler;
 14        private readonly IntVariable sceneNumber;
 15        private readonly BaseVariable<Dictionary<int, Queue<IUIRefreshable>>> dirtyShapes;
 16
 4617        public UIRefresherController( IUpdateEventHandler updateEventHandler,
 18            IntVariable sceneNumberVariable,
 19            BaseVariable<Dictionary<int, Queue<IUIRefreshable>>> dirtyShapesVariable)
 20        {
 4621            eventHandler = updateEventHandler;
 4622            sceneNumber = sceneNumberVariable;
 4623            dirtyShapes = dirtyShapesVariable;
 4624            eventHandler.AddListener(IUpdateEventHandler.EventType.LateUpdate, OnLateUpdate);
 4625        }
 26
 27        public void Dispose()
 28        {
 4629            eventHandler.RemoveListener(IUpdateEventHandler.EventType.LateUpdate, OnLateUpdate);
 4630        }
 31
 32        private void OnLateUpdate()
 33        {
 85934            var currentSceneNumber = sceneNumber.Get();
 35
 85936            if (currentSceneNumber <= 0)
 56337                currentSceneNumber = 9999999;
 38
 85939            var dirtyShapesByScene = dirtyShapes.Get();
 85940            var startTime = Time.realtimeSinceStartup;
 41
 42            // prioritize current scene
 85943            if (dirtyShapesByScene.ContainsKey(currentSceneNumber))
 44            {
 6045                var queue = dirtyShapesByScene[sceneNumber];
 46
 10247                while (queue.Count > 0)
 48                {
 4249                    var uiShape = queue.Dequeue();
 4250                    uiShape.Refresh();
 51
 4252                    if (!CanRefreshMore(startTime)) return;
 53                }
 54            }
 55
 56            // update other scenes, this prevents hiccups when entering scenes with huge UIs that already loaded them
 200857            foreach (KeyValuePair<int,Queue<IUIRefreshable>> valuePair in dirtyShapesByScene)
 58            {
 14559                if (valuePair.Key == currentSceneNumber) continue;
 60
 8561                var queue = valuePair.Value;
 62
 9863                while (queue.Count > 0)
 64                {
 1365                    var uiShape = queue.Dequeue();
 1366                    uiShape.Refresh();
 67
 1368                    if (!CanRefreshMore(startTime)) return;
 69                }
 70            }
 85971        }
 72        private static bool CanRefreshMore(float startTime)
 73        {
 11074            if (Application.isBatchMode) return true;
 075            return Time.realtimeSinceStartup - startTime < DIRTY_WATCHER_UPDATE_BUDGET;
 76        }
 77    }
 78}