< 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 StringVariable sceneID;
 15        private readonly BaseVariable<Dictionary<string, Queue<IUIRefreshable>>> dirtyShapes;
 16
 5117        public UIRefresherController( IUpdateEventHandler updateEventHandler,
 18            StringVariable sceneIDVariable,
 19            BaseVariable<Dictionary<string, Queue<IUIRefreshable>>> dirtyShapesVariable)
 20        {
 5121            eventHandler = updateEventHandler;
 5122            sceneID = sceneIDVariable;
 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        {
 100034            var currentScene = sceneID.Get();
 35
 100036            if (string.IsNullOrEmpty(currentScene))
 64237                currentScene = "default";
 38
 100039            var dirtyShapesByScene = dirtyShapes.Get();
 100040            var startTime = Time.realtimeSinceStartup;
 41
 42            // prioritize current scene
 100043            if (dirtyShapesByScene.ContainsKey(currentScene))
 44            {
 6045                var queue = dirtyShapesByScene[sceneID];
 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
 228257            foreach (KeyValuePair<string,Queue<IUIRefreshable>> valuePair in dirtyShapesByScene)
 58            {
 14159                if (valuePair.Key == currentScene) 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            }
 100071        }
 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}