< Summary

Class:ECSSystems.ECSEngineInfoSystem.ECSEngineInfoSystem
Assembly:ECS7Plugin.Systems.EngineInfo
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/DCLPlugins/ECS7/Systems/EngineInfoSystem/ECSEngineInfoSystem.cs
Covered lines:20
Uncovered lines:0
Coverable lines:20
Total lines:58
Line coverage:100% (20 of 20)
Covered branches:0
Total branches:0
Covered methods:2
Total methods:2
Method coverage:100% (2 of 2)

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
ECSEngineInfoSystem(...)0%110100%
Update()0%330100%

File(s)

/tmp/workspace/unity-renderer/unity-renderer/Assets/DCLPlugins/ECS7/Systems/EngineInfoSystem/ECSEngineInfoSystem.cs

#LineLine coverage
 1using DCL.ECS7;
 2using DCL.ECS7.ComponentWrapper.Generic;
 3using DCL.ECS7.InternalComponents;
 4using DCL.ECSComponents;
 5using DCL.Models;
 6using System.Collections.Generic;
 7using UnityEngine;
 8
 9namespace ECSSystems.ECSEngineInfoSystem
 10{
 11    /// <summary>
 12    /// This system updates every scene's root entity EngineInfo component on every frame
 13    /// </summary>
 14    public class ECSEngineInfoSystem
 15    {
 16        private readonly IReadOnlyDictionary<int, ComponentWriter> componentsWriter;
 17        private readonly IInternalECSComponent<InternalEngineInfo> internalEngineInfo;
 18        private readonly WrappedComponentPool<IWrappedComponent<PBEngineInfo>> componentPool;
 19
 220        public ECSEngineInfoSystem(
 21            IReadOnlyDictionary<int, ComponentWriter> componentsWriter,
 22            WrappedComponentPool<IWrappedComponent<PBEngineInfo>> componentPool,
 23            IInternalECSComponent<InternalEngineInfo> internalEngineInfo)
 24        {
 225            this.componentsWriter = componentsWriter;
 226            this.internalEngineInfo = internalEngineInfo;
 227            this.componentPool = componentPool;
 228        }
 29
 30        public void Update()
 31        {
 232            int currentEngineFrameCount = Time.frameCount;
 233            float currentEngineRunTime = Time.realtimeSinceStartup;
 34
 35            // Scenes internal EngineInfo component is initialized at SceneStateHandler.InitializeEngineInfoComponent()
 236            var componentGroup = internalEngineInfo.GetForAll();
 37
 238            int entitiesCount = componentGroup.Count;
 39
 840            for (int i = 0; i < entitiesCount; i++)
 41            {
 242                var scene = componentGroup[i].value.scene;
 243                var model = componentGroup[i].value.model;
 44
 245                if (!componentsWriter.TryGetValue(scene.sceneData.sceneNumber, out var writer))
 46                    continue;
 47
 248                var componentPooled = componentPool.Get();
 249                var componentModel = componentPooled.WrappedComponent.Model;
 250                componentModel.TickNumber = model.SceneTick;
 251                componentModel.FrameNumber = (uint)(currentEngineFrameCount - model.SceneInitialFrameCount);
 252                componentModel.TotalRuntime = currentEngineRunTime - model.SceneInitialRunTime;
 53
 254                writer.Put(SpecialEntityId.SCENE_ROOT_ENTITY, ComponentID.ENGINE_INFO, componentPooled);
 55            }
 256        }
 57    }
 58}