< Summary

Class:DCL.Rendering.CullingObjectsTracker
Assembly:CullingController
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/Rendering/Culling/CullingObjectsTracker.cs
Covered lines:43
Uncovered lines:1
Coverable lines:44
Total lines:129
Line coverage:97.7% (43 of 44)
Covered branches:0
Total branches:0

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
CullingObjectsTracker()0%110100%
PopulateRenderersList()0%880100%
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 System.Linq;
 4using UnityEngine;
 5using Object = UnityEngine.Object;
 6
 7namespace DCL.Rendering
 8{
 9    /// <summary>
 10    /// This class is used for tracking all the renderers, skinnedMeshRenderers and Animations of the world.
 11    ///
 12    /// It currently uses a very lazy FindObjectsOfType approach, but is enough for its purposes as its used
 13    /// to optimize a bigger bottleneck.
 14    /// </summary>
 15    public class CullingObjectsTracker : ICullingObjectsTracker
 16    {
 17        private ICollection<Renderer> renderers;
 18        private ICollection<SkinnedMeshRenderer> skinnedRenderers;
 19        private Animation[] animations;
 20
 21        private int ignoredLayersMask;
 10322        private bool dirty = true;
 23
 24
 10325        public CullingObjectsTracker()
 26        {
 10327            PoolManager.i.OnGet -= MarkDirty;
 10328            PoolManager.i.OnGet += MarkDirty;
 10329        }
 30
 31        /// <summary>
 32        /// If the dirty flag is true, this coroutine will re-populate all the tracked objects.
 33        /// </summary>
 34        public IEnumerator PopulateRenderersList()
 35        {
 1636            if (!dirty)
 237                yield break;
 38
 1439            List<Renderer> renderersList = new List<Renderer>();
 1440            List<SkinnedMeshRenderer> skinnedRenderersList = new List<SkinnedMeshRenderer>();
 1441            Renderer[] allRenderers = Object.FindObjectsOfType<Renderer>();
 42
 7843            foreach (Renderer renderer in allRenderers)
 44            {
 2545                if ((((1 << renderer.gameObject.layer) & ignoredLayersMask) == 0)
 46                    && !(renderer is ParticleSystemRenderer))
 47                {
 2348                    if (renderer is SkinnedMeshRenderer)
 649                        skinnedRenderersList.Add((SkinnedMeshRenderer)renderer);
 50                    else
 1751                        renderersList.Add(renderer);
 52                }
 53            }
 1454            renderers = renderersList;
 1455            skinnedRenderers = skinnedRenderersList;
 56
 1457            yield return null;
 58
 1159            animations = Object.FindObjectsOfType<Animation>();
 60
 1161            dirty = false;
 1162        }
 63
 64        /// <summary>
 65        ///  This will re-populate all the tracked objects in a sync way.
 66        /// </summary>
 67        /// <param name="includeInactives">True for add inactive objects to the tracked list.</param>
 68        public void ForcePopulateRenderersList(bool includeInactives)
 69        {
 9770            List<Renderer> renderersList = new List<Renderer>();
 9771            List<SkinnedMeshRenderer> skinnedRenderersList = new List<SkinnedMeshRenderer>();
 9772            Renderer[] allRenderers = Object.FindObjectsOfType<Renderer>(includeInactives);
 73
 96674            foreach (Renderer renderer in allRenderers)
 75            {
 38676                if ((((1 << renderer.gameObject.layer) & ignoredLayersMask) == 0)
 77                    && !(renderer is ParticleSystemRenderer))
 78                {
 38679                    if (renderer is SkinnedMeshRenderer)
 080                        skinnedRenderersList.Add((SkinnedMeshRenderer)renderer);
 81                    else
 38682                        renderersList.Add(renderer);
 83                }
 84            }
 9785            renderers = renderersList;
 9786            skinnedRenderers = skinnedRenderersList;
 9787        }
 88
 23489        public void SetIgnoredLayersMask(int ignoredLayersMask) { this.ignoredLayersMask = ignoredLayersMask; }
 90
 91        /// <summary>
 92        /// Sets the dirty flag to true to make PopulateRenderersList retrieve all the scene objects on its next call.
 93        /// </summary>
 329694        public void MarkDirty() { dirty = true; }
 95
 96        /// <summary>
 97        /// Returns true if dirty.
 98        /// </summary>
 99        /// <returns>True if dirty.</returns>
 3100        public bool IsDirty() { return dirty; }
 101
 102        /// <summary>
 103        /// Returns the renderers list.
 104        /// </summary>
 105        /// <returns>An ICollection with all the tracked renderers.</returns>
 109106        public ICollection<Renderer> GetRenderers() { return renderers; }
 107
 108        /// <summary>
 109        /// Returns the skinned renderers list.
 110        /// </summary>
 111        /// <returns>An ICollection with all the tracked skinned renderers.</returns>
 108112        public ICollection<SkinnedMeshRenderer> GetSkinnedRenderers() { return skinnedRenderers; }
 113
 114        /// <summary>
 115        /// Returns the animations list.
 116        /// </summary>
 117        /// <returns>An array with all the tracked animations.</returns>
 103118        public Animation[] GetAnimations() { return animations; }
 119
 120        public void Dispose()
 121        {
 99122            dirty = true;
 99123            renderers = null;
 99124            animations = null;
 99125            skinnedRenderers = null;
 99126            PoolManager.i.OnGet -= MarkDirty;
 99127        }
 128    }
 129}