< Summary

Class:ResourcesLoadTrackerECS
Assembly:SceneResourcesLoadTracker
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/WorldRuntime/SceneResourcesLoadTracker/ResourcesLoadTrackerECS.cs
Covered lines:30
Uncovered lines:5
Coverable lines:35
Total lines:91
Line coverage:85.7% (30 of 35)
Covered branches:0
Total branches:0

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
ResourcesLoadTrackerECS(...)0%110100%
Dispose()0%110100%
PrintWaitingResourcesDebugInfo()0%20400%
GetStateString()0%2.062075%
CheckPendingResources()0%110100%
ResourcesUpdate(...)0%220100%
PendingResourceAdded(...)0%220100%
ResourceReady(...)0%550100%

File(s)

/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/WorldRuntime/SceneResourcesLoadTracker/ResourcesLoadTrackerECS.cs

#LineLine coverage
 1using System;
 2using System.Collections.Generic;
 3using DCL;
 4using DCL.WorldRuntime;
 5using UnityEngine;
 6
 7public class ResourcesLoadTrackerECS : IResourcesLoadTracker
 8{
 249    public int pendingResourcesCount => resourcesNotReady.Count;
 10
 11    public float loadingProgress
 12    {
 13        get
 14        {
 815            if (resourcesReady < pendingResourcesCount)
 016                return 0;
 817            return resourcesReady > 0 ? (resourcesReady - pendingResourcesCount) * 100f / resourcesReady : 100f;
 18        }
 19    }
 20
 21    public event Action OnResourcesLoaded;
 22    public event Action OnStatusUpdate;
 23
 24    private int resourcesReady;
 25
 1126    private readonly List<object> resourcesNotReady = new List<object>();
 27    private readonly int sceneNumber;
 28    private readonly DataStore_ECS7 dataStore;
 29
 1130    public ResourcesLoadTrackerECS(DataStore_ECS7 dataStoreEcs7, int sceneNumber)
 31    {
 1132        this.dataStore = dataStoreEcs7;
 1133        this.sceneNumber = sceneNumber;
 1134        dataStore.pendingSceneResources.AddOrSet(sceneNumber, new BaseRefCountedCollection<object>());
 1135        dataStore.pendingSceneResources[sceneNumber].OnRefCountUpdated += ResourcesUpdate;
 1136    }
 37
 38    public void Dispose()
 39    {
 240        dataStore.pendingSceneResources[sceneNumber].OnRefCountUpdated -= ResourcesUpdate;
 241    }
 42
 43    public void PrintWaitingResourcesDebugInfo()
 44    {
 045        foreach (var model in resourcesNotReady)
 46        {
 047            Debug.Log($"This model is waiting to be loaded: " + model);
 48        }
 049    }
 50
 51    public string GetStateString()
 52    {
 253        int totalComponents = resourcesNotReady.Count + resourcesReady;
 254        if (totalComponents > 0)
 055            return $"left to ready:{totalComponents - resourcesReady}/{totalComponents} ({loadingProgress}%)";
 56
 257        return $"no components. waiting...";
 58    }
 59
 60    public bool CheckPendingResources()
 61    {
 262        return pendingResourcesCount > 0;
 63    }
 64
 65    private void ResourcesUpdate(object model, int refCount)
 66    {
 1267        if (refCount > 0)
 668            PendingResourceAdded(model);
 69        else
 670            ResourceReady(model);
 671    }
 72
 73    private void PendingResourceAdded(object model)
 74    {
 675        if(!resourcesNotReady.Contains(model))
 676            resourcesNotReady.Add(model);
 677    }
 78
 79    private void ResourceReady(object model)
 80    {
 681        if(resourcesNotReady.Contains(model))
 682            resourcesNotReady.Remove(model);
 83
 684        resourcesReady++;
 85
 686        if (resourcesNotReady.Count == 0)
 587            OnResourcesLoaded?.Invoke();
 88        else
 189            OnStatusUpdate?.Invoke();
 190    }
 91}