< Summary

Class:ResourcesLoadTrackerECS
Assembly:SceneResourcesLoadTracker
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/WorldRuntime/SceneResourcesLoadTracker/ResourcesLoadTrackerECS.cs
Covered lines:25
Uncovered lines:9
Coverable lines:34
Total lines:90
Line coverage:73.5% (25 of 34)
Covered branches:0
Total branches:0

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
ResourcesLoadTrackerECS(...)0%110100%
Dispose()0%2100%
PrintWaitingResourcesDebugInfo()0%20400%
GetStateString()0%6200%
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{
 109    public int pendingResourcesCount => resourcesNotReady.Count;
 10
 11    public float loadingProgress
 12    {
 13        get
 14        {
 415            int resourcesReadyCount = resourcesReady;
 416            return resourcesReadyCount > 0 ? (resourcesReadyCount - pendingResourcesCount) * 100f / resourcesReadyCount 
 17        }
 18    }
 19
 20    public event Action OnResourcesLoaded;
 21    public event Action OnStatusUpdate;
 22
 23    private int resourcesReady;
 24
 925    private readonly List<object> resourcesNotReady = new List<object>();
 26    private readonly string sceneId;
 27    private readonly DataStore_ECS7 dataStore;
 28
 929    public ResourcesLoadTrackerECS(DataStore_ECS7 dataStoreEcs7,string sceneId)
 30    {
 931        this.dataStore = dataStoreEcs7;
 932        this.sceneId = sceneId;
 933        dataStore.pendingSceneResources.AddOrSet(sceneId, new BaseRefCountedCollection<object>());
 934        dataStore.pendingSceneResources[sceneId].OnRefCountUpdated += ResourcesUpdate;
 935    }
 36
 37    public void Dispose()
 38    {
 039        dataStore.pendingSceneResources[sceneId].OnRefCountUpdated -= ResourcesUpdate;
 040    }
 41
 42    public void PrintWaitingResourcesDebugInfo()
 43    {
 044        foreach (var model in resourcesNotReady)
 45        {
 046            Debug.Log($"This model is waiting to be loaded: " + model);
 47        }
 048    }
 49
 50    public string GetStateString()
 51    {
 052        int totalComponents = resourcesNotReady.Count + resourcesReady;
 053        if (totalComponents > 0)
 054            return $"left to ready:{totalComponents - resourcesReady}/{totalComponents} ({loadingProgress}%)";
 55
 056        return $"no components. waiting...";
 57    }
 58
 59    public bool CheckPendingResources()
 60    {
 261        return pendingResourcesCount > 0;
 62    }
 63
 64    private void ResourcesUpdate(object model, int refCount)
 65    {
 1066        if (refCount > 0)
 567            PendingResourceAdded(model);
 68        else
 569            ResourceReady(model);
 570    }
 71
 72    private void PendingResourceAdded(object model)
 73    {
 574        if(!resourcesNotReady.Contains(model))
 575            resourcesNotReady.Add(model);
 576    }
 77
 78    private void ResourceReady(object model)
 79    {
 580        if(resourcesNotReady.Contains(model))
 581            resourcesNotReady.Remove(model);
 82
 583        resourcesReady++;
 84
 585        if (resourcesNotReady.Count == 0)
 486            OnResourcesLoaded?.Invoke();
 87        else
 188            OnStatusUpdate?.Invoke();
 189    }
 90}