< 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

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
 5117        public UIRefresherController( IUpdateEventHandler updateEventHandler,
 18            IntVariable sceneNumberVariable,
 19            BaseVariable<Dictionary<int, Queue<IUIRefreshable>>> dirtyShapesVariable)
 20        {
 5121            eventHandler = updateEventHandler;
 5122            sceneNumber = sceneNumberVariable;
 5123            dirtyShapes = dirtyShapesVariable;
 5124            eventHandler.AddListener(IUpdateEventHandler.EventType.LateUpdate, OnLateUpdate);
 5125        }
 26
 27        public void Dispose()
 28        {
 5129            eventHandler.RemoveListener(IUpdateEventHandler.EventType.LateUpdate, OnLateUpdate);
 5130        }
 31
 32        private void OnLateUpdate()
 33        {
 121234            var currentSceneNumber = sceneNumber.Get();
 35
 121236            if (currentSceneNumber <= 0)
 79337                currentSceneNumber = 9999999;
 38
 121239            var dirtyShapesByScene = dirtyShapes.Get();
 121240            var startTime = Time.realtimeSinceStartup;
 41
 42            // prioritize current scene
 121243            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
 270657            foreach (KeyValuePair<int,Queue<IUIRefreshable>> valuePair in dirtyShapesByScene)
 58            {
 14159                if (valuePair.Key == currentSceneNumber) continue;
 60
 8161                var queue = valuePair.Value;
 62
 9463                while (queue.Count > 0)
 64                {
 1365                    var uiShape = queue.Dequeue();
 1366                    uiShape.Refresh();
 67
 1368                    if (!CanRefreshMore(startTime)) return;
 69                }
 70            }
 121271        }
 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}