< Summary

Class:DCL.Rendering.CullingObjectsTracker
Assembly:CullingController
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/Rendering/Culling/CullingObjectsTracker.cs
Covered lines:49
Uncovered lines:3
Coverable lines:52
Total lines:144
Line coverage:94.2% (49 of 52)
Covered branches:0
Total branches:0

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
CullingObjectsTracker()0%110100%
PopulateRenderersList()0%12.0712092.31%
ForcePopulateRenderersList(...)0%5.015092.31%
SetIgnoredLayersMask(...)0%110100%
MarkDirty()0%110100%
IsDirty()0%110100%
GetRenderers()0%110100%
GetSkinnedRenderers()0%110100%
GetAnimations()0%110100%
Dispose()0%110100%

File(s)

/tmp/workspace/unity-renderer/unity-renderer/Assets/Rendering/Culling/CullingObjectsTracker.cs

#LineLine coverage
 1using System.Collections;
 2using System.Collections.Generic;
 3using UnityEngine;
 4using Object = UnityEngine.Object;
 5
 6namespace DCL.Rendering
 7{
 8    /// <summary>
 9    /// This class is used for tracking all the renderers, skinnedMeshRenderers and Animations of the world.
 10    ///
 11    /// It currently uses a very lazy FindObjectsOfType approach, but is enough for its purposes as its used
 12    /// to optimize a bigger bottleneck.
 13    /// </summary>
 14    public class CullingObjectsTracker : ICullingObjectsTracker
 15    {
 16        private ICollection<Renderer> renderers;
 17        private ICollection<SkinnedMeshRenderer> skinnedRenderers;
 18        private Animation[] animations;
 19
 20        private int ignoredLayersMask;
 10521        private bool dirty = true;
 22
 23
 10524        public CullingObjectsTracker()
 25        {
 10526            PoolManager.i.OnGet -= MarkDirty;
 10527            PoolManager.i.OnGet += MarkDirty;
 10528        }
 29
 30        /// <summary>
 31        /// If the dirty flag is true, this coroutine will re-populate all the tracked objects.
 32        /// </summary>
 33        public IEnumerator PopulateRenderersList()
 34        {
 1635            if (!dirty)
 136                yield break;
 37
 1538            List<Renderer> renderersList = new List<Renderer>();
 1539            List<SkinnedMeshRenderer> skinnedRenderersList = new List<SkinnedMeshRenderer>();
 1540            Renderer[] allRenderers = Object.FindObjectsOfType<Renderer>();
 41
 42            // TODO new task, avoid FindGameObjectsOfType and use:
 43            // SceneManager.GetActiveScene().GetRootGameObjects(), calculate from there.
 44
 1545            yield return null;
 46
 1147            int amount = 0;
 7248            foreach (Renderer renderer in allRenderers)
 49            {
 2550                if (renderer == null)
 51                    continue;
 52
 2553                if (amount >= CullingControllerSettings.MAX_POPULATING_ELEMENTS_PER_FRAME)
 54                {
 055                    yield return null;
 056                    amount = 0;
 57                }
 2558                amount++;
 59
 2560                if ((((1 << renderer.gameObject.layer) & ignoredLayersMask) == 0)
 61                    && !(renderer is ParticleSystemRenderer))
 62                {
 2363                    if (renderer is SkinnedMeshRenderer)
 664                        skinnedRenderersList.Add((SkinnedMeshRenderer)renderer);
 65                    else
 1766                        renderersList.Add(renderer);
 67                }
 2568            }
 1169            renderers = renderersList;
 1170            skinnedRenderers = skinnedRenderersList;
 71
 1172            yield return null;
 73
 1074            animations = Object.FindObjectsOfType<Animation>();
 75
 1076            dirty = false;
 1077        }
 78
 79        /// <summary>
 80        ///  This will re-populate all the tracked objects in a sync way.
 81        /// </summary>
 82        /// <param name="includeInactives">True for add inactive objects to the tracked list.</param>
 83        public void ForcePopulateRenderersList(bool includeInactives)
 84        {
 9985            List<Renderer> renderersList = new List<Renderer>();
 9986            List<SkinnedMeshRenderer> skinnedRenderersList = new List<SkinnedMeshRenderer>();
 9987            Renderer[] allRenderers = Object.FindObjectsOfType<Renderer>(includeInactives);
 88
 99489            foreach (Renderer renderer in allRenderers)
 90            {
 39891                if ((((1 << renderer.gameObject.layer) & ignoredLayersMask) == 0)
 92                    && !(renderer is ParticleSystemRenderer))
 93                {
 39894                    if (renderer is SkinnedMeshRenderer)
 095                        skinnedRenderersList.Add((SkinnedMeshRenderer)renderer);
 96                    else
 39897                        renderersList.Add(renderer);
 98                }
 99            }
 99100            renderers = renderersList;
 99101            skinnedRenderers = skinnedRenderersList;
 99102        }
 103
 238104        public void SetIgnoredLayersMask(int ignoredLayersMask) { this.ignoredLayersMask = ignoredLayersMask; }
 105
 106        /// <summary>
 107        /// Sets the dirty flag to true to make PopulateRenderersList retrieve all the scene objects on its next call.
 108        /// </summary>
 3372109        public void MarkDirty() { dirty = true; }
 110
 111        /// <summary>
 112        /// Returns true if dirty.
 113        /// </summary>
 114        /// <returns>True if dirty.</returns>
 3115        public bool IsDirty() { return dirty; }
 116
 117        /// <summary>
 118        /// Returns the renderers list.
 119        /// </summary>
 120        /// <returns>An ICollection with all the tracked renderers.</returns>
 110121        public ICollection<Renderer> GetRenderers() { return renderers; }
 122
 123        /// <summary>
 124        /// Returns the skinned renderers list.
 125        /// </summary>
 126        /// <returns>An ICollection with all the tracked skinned renderers.</returns>
 109127        public ICollection<SkinnedMeshRenderer> GetSkinnedRenderers() { return skinnedRenderers; }
 128
 129        /// <summary>
 130        /// Returns the animations list.
 131        /// </summary>
 132        /// <returns>An array with all the tracked animations.</returns>
 104133        public Animation[] GetAnimations() { return animations; }
 134
 135        public void Dispose()
 136        {
 101137            dirty = true;
 101138            renderers = null;
 101139            animations = null;
 101140            skinnedRenderers = null;
 101141            PoolManager.i.OnGet -= MarkDirty;
 101142        }
 143    }
 144}