static UIRRepaintUpdater()
 {
     UIRRepaintUpdater.s_MarkerDrawChain = new ProfilerMarker("DrawChain");
     UIRRepaintUpdater.s_Description     = "UIRepaint";
     UIRRepaintUpdater.s_ProfilerMarker  = new ProfilerMarker(UIRRepaintUpdater.s_Description);
     Utility.GraphicsResourcesRecreate  += new Action <bool>(UIRRepaintUpdater.OnGraphicsResourcesRecreate);
 }
        public unsafe void TestRecreateDuplicateMarkersMultithreadedGetCachedOnceInThreads()
        {
            var markers = CreateMarkersThreadedDuplicates();

            ManualResetEvent mre = new ManualResetEvent(false);

            Thread[] threads = new Thread[16];

            for (int i = 0; i < threads.Length; i++)
            {
                threads[i] = new Thread((object p) =>
                {
                    int section = (int)p;
                    mre.WaitOne();
                    for (int j = 0; j < threads.Length; j++)
                    {
                        int index             = section * threads.Length + j;
                        ProfilerMarker marker = new ProfilerMarker($"Test {j}");
                        Assert.IsTrue(marker.Handle == markers[index]);
                    }
                });
                threads[i].Start(i);
            }

            Thread.Sleep(100);
            mre.Set();

            for (int i = 0; i < threads.Length; i++)
            {
                threads[i].Join();
            }
        }
Exemplo n.º 3
0
        public void OnCreate(WorldUnmanaged world)
        {
            m_World            = world;
            m_TypeArrayIndices = (ushort *)Memory.Unmanaged.Allocate(sizeof(ushort) * kMaxTypes, 16, Allocator.Persistent);
            UnsafeUtility.MemSet(m_TypeArrayIndices, 0xFF, sizeof(ushort) * kMaxTypes);

            m_ReadJobFences = (JobHandle *)Memory.Unmanaged.Allocate(sizeof(JobHandle) * kMaxReadJobHandles * kMaxTypes, 16, Allocator.Persistent);
            UnsafeUtility.MemClear(m_ReadJobFences, sizeof(JobHandle) * kMaxReadJobHandles * kMaxTypes);

            m_DependencyHandles = (DependencyHandle *)Memory.Unmanaged.Allocate(sizeof(DependencyHandle) * kMaxTypes, 16, Allocator.Persistent);
            UnsafeUtility.MemClear(m_DependencyHandles, sizeof(DependencyHandle) * kMaxTypes);

            m_JobDependencyCombineBufferCount = 4 * 1024;
            m_JobDependencyCombineBuffer      = (JobHandle *)Memory.Unmanaged.Allocate(sizeof(DependencyHandle) * m_JobDependencyCombineBufferCount, 16, Allocator.Persistent);

            m_DependencyHandlesCount            = 0;
            _IsInTransaction                    = false;
            IsInForEachDisallowStructuralChange = 0;
            m_ExclusiveTransactionDependency    = default;

#if ENABLE_UNITY_COLLECTIONS_CHECKS
            Safety.OnCreate();
#endif
            m_Marker = new ProfilerMarker("CompleteAllJobs");
        }
        //---------------------------------------------------------------------------------------------------
        // TEST WORST CASE SCENARIO OF DUPLICATE MARKERS CREATED CONCURRENTLY ALL IN ONE BUCKET
        //---------------------------------------------------------------------------------------------------
        private IntPtr[] CreateMarkersThreadedDuplicates()
        {
            ManualResetEvent mre = new ManualResetEvent(false);

            IntPtr[] markers = new IntPtr[256];
            Thread[] threads = new Thread[16];
            for (int i = 0; i < threads.Length; i++)
            {
                threads[i] = new Thread((object p) =>
                {
                    int section = (int)p;
                    mre.WaitOne();
                    for (int j = 0; j < threads.Length; j++)
                    {
                        int index             = section * threads.Length + j;
                        ProfilerMarker marker = new ProfilerMarker($"Test {j}");
                        markers[index]        = marker.Handle;
                    }
                });
                threads[i].Start(i);
            }

            Thread.Sleep(100);
            mre.Set();

            for (int i = 0; i < threads.Length; i++)
            {
                threads[i].Join();
            }

            return(markers);
        }
Exemplo n.º 5
0
 protected override void OnCreate()
 {
     _eachEntity    = new ProfilerMarker("StyleSystem.EachEntity");
     _matchMarker   = new ProfilerMarker("StyleSystem.FindMatches");
     _applyMatching = new ProfilerMarker("StyleSystem.ApplyMatching");
     base.OnCreate();
 }
Exemplo n.º 6
0
 protected override void OnCreate()
 {
     m_beginBarrier = World.GetOrCreateSystem <BeginSimulationEntityCommandBufferSystem>();
     m_NetworkReceiveSystemGroup = World.GetOrCreateSystem <NetworkReceiveSystemGroup>();
     m_NetworkTimeSystem         = World.GetOrCreateSystem <NetworkTimeSystem>();
     m_fixedUpdateMarker         = new ProfilerMarker("ClientFixedUpdate");
 }
Exemplo n.º 7
0
        protected override unsafe void OnUpdate()
        {
            var ecbSource      = World.GetOrCreateSystem <DotsNavSystemGroup>().EcbSource;
            var buffer         = ecbSource.CreateCommandBuffer().AsParallelWriter();
            var removeQueue    = _toRemoveQueue;
            var toRemoveWriter = removeQueue.AsParallelWriter();

            var loadMarker     = new ProfilerMarker("Loading");
            var updatingMarker = new ProfilerMarker("Updating");

            var vertexBuffer = _vertexBuffer;
            var amounts      = _amounts;
            var entities     = _entities;

            // Queue insert obstacles without LocalToWorld
            Entities
            .WithBurst()
            .WithNone <ObstacleSystemStateComponent>()
            .WithNone <Translation, Rotation, Scale>().WithNone <NonUniformScale, LocalToWorld>()
            .ForEach((Entity entity, int entityInQueryIndex, ObstacleComponent data, VertexBlobComponent blob) =>
            {
                ref var vertices = ref blob.BlobRef.Value.Vertices;
                vertexBuffer.AddRange(vertices.GetUnsafePtr(), vertices.Length);
                amounts.Add(vertices.Length);
                entities.Add(entity);
                buffer.AddComponent(entityInQueryIndex, entity, new ObstacleSystemStateComponent());
            })
        public unsafe void TestProfilerSessionEmitsMarkerInfoBeforeMarker()
        {
            SpoofInitListenInternal();
            Connection.ConnectDirect(spoofIp, spoofPort);
            Baselib_Timer_WaitForAtLeast(200);
            SpoofAcceptInternal();

            ProfilerTestFixture.ReceiveConnectMessage();

#if !NET_DOTS
            HashSet <uint> markerDefined = new HashSet <uint>();
#else
            Dictionary <uint, bool> markerDefined = new Dictionary <uint, bool>();
#endif

            for (int i = 0; i < 8; i++)
            {
                for (ulong j = 0; j < 8; j++)
                {
                    ProfilerMarker marker  = new ProfilerMarker($"{Baselib_Timer_GetHighPrecisionTimerTicks() + j} test");
                    ProfilerMarker marker2 = new ProfilerMarker($"{Baselib_Timer_GetHighPrecisionTimerTicks() + j + 1} test2");

                    marker.Begin();
                    marker2.Begin();
                    marker2.End();
                    marker.End();
                }

                ProfilerProtocolSession.SendNewMarkersAndThreads();
                SendAndValidate(markerDefined);
            }

            SpoofExitInternal();
        }
Exemplo n.º 9
0
 protected override void OnCreate()
 {
     base.OnCreate();
     m_ServerTick        = 1;
     m_fixedUpdateMarker = new ProfilerMarker("ServerFixedUpdate");
     m_currentTime       = Time.ElapsedTime;
 }
Exemplo n.º 10
0
        public void Initialize()
        {
            if (m_Initialized)
            {
                return;
            }

            if (m_Object == null)
            {
                Debug.LogError("A pool cannot have a null object as template for pool object", this);
                return;
            }

            var profileMarker = new ProfilerMarker("Pool.Initialize");

            profileMarker.Begin(this);

            m_Available      = new Stack <Node>(m_DefaultSize);
            m_InUse          = new Dictionary <GameObject, Node>(m_DefaultSize);
            m_OriginalObject = m_Object; //Lock in original object so it's not affected by serialization change
            m_PoolRoot       = PoolManager.CreatePoolRoot(name);
            m_Capacity       = 0;

            EnsureCapacity(m_DefaultSize);
            m_Initialized = true;

            profileMarker.End();
        }
Exemplo n.º 11
0
 protected override void OnCreate()
 {
     base.OnCreate();
     AddSystemToUpdateList(World.GetOrCreateSystem <NetworkReceiveSystemGroup>());
     m_ServerTick        = 1;
     m_fixedUpdateMarker = new ProfilerMarker("ServerFixedUpdate");
 }
 static void Internal_CallUpdateFunctions()
 {
     if (update != null)
     {
         if (Profiler.enabled && !ProfilerDriver.deepProfiling)
         {
             var currentUpdateHash = update.GetHashCode();
             if (currentUpdateHash != m_UpdateHash)
             {
                 m_UpdateInvocationList = update.GetInvocationList();
                 m_UpdateHash           = currentUpdateHash;
             }
             foreach (var cb in m_UpdateInvocationList)
             {
                 var marker = new ProfilerMarker(cb.Method.Name);
                 marker.Begin();
                 cb.DynamicInvoke(null);
                 marker.End();
             }
         }
         else
         {
             update.Invoke();
         }
     }
 }
 static TextureBlitter()
 {
     TextureBlitter.s_CommitSampler = new ProfilerMarker("UIR.TextureBlitter.Commit");
     TextureBlitter.k_TextureIds = new int[8];
     for (int i = 0; i < 8; i++)
     {
         TextureBlitter.k_TextureIds[i] = Shader.PropertyToID("_MainTex" + i.ToString());
     }
 }
        public void BurstedTestProfilerTimeGoesForward()
        {
            ProfilerMarker marker  = new ProfilerMarker("test");
            ProfilerMarker marker2 = new ProfilerMarker("test2");
            ProfilerMarker marker3 = new ProfilerMarker("test3");
            ProfilerMarker marker4 = new ProfilerMarker("test4");

            BurstedTestProfilerTimeGoesForwardInternal(ref marker, ref marker2, ref marker3, ref marker4);
        }
        public unsafe void TestProfilerTimeGoesForward()
        {
            ProfilerMarker marker  = new ProfilerMarker("test");
            ProfilerMarker marker2 = new ProfilerMarker("test2");
            ProfilerMarker marker3 = new ProfilerMarker("test3");
            ProfilerMarker marker4 = new ProfilerMarker("test4");

            Assert.DoesNotThrow(() => TestProfilerTimeGoesForwardInternal(ref marker, ref marker2, ref marker3, ref marker4));
        }
Exemplo n.º 16
0
 public static ProfilerMarker.AutoScope Get(string name)
 {
     if (!markerCache.TryGetValue(name, out var marker))
     {
         marker            = new ProfilerMarker(name);
         markerCache[name] = marker;
     }
     return(marker.Auto());
 }
        public ColliderAllocationJob(IEnumerable <ICollider> colliderList, PlaneCollider playfieldCollider, PlaneCollider glassCollider) : this()
        {
            var perfMarker = new ProfilerMarker("ColliderAllocationJob.ctr");

            perfMarker.Begin();

            _circleColliders        = new NativeList <CircleCollider>(Allocator.TempJob);
            _flipperColliders       = new NativeList <FlipperCollider>(Allocator.TempJob);
            _gateColliders          = new NativeList <GateCollider>(Allocator.TempJob);
            _line3DColliders        = new NativeList <Line3DCollider>(Allocator.TempJob);
            _lineSlingshotColliders = new NativeList <LineSlingshotCollider>(Allocator.TempJob);
            _lineColliders          = new NativeList <LineCollider>(Allocator.TempJob);
            _lineZColliders         = new NativeList <LineZCollider>(Allocator.TempJob);
            _plungerColliders       = new NativeList <PlungerCollider>(Allocator.TempJob);
            _pointColliders         = new NativeList <PointCollider>(Allocator.TempJob);
            _spinnerColliders       = new NativeList <SpinnerCollider>(Allocator.TempJob);
            _triangleColliders      = new NativeList <TriangleCollider>(Allocator.TempJob);
            _planeColliders         = new NativeArray <PlaneCollider>(2, Allocator.TempJob)
            {
                [0] = playfieldCollider,
                [1] = glassCollider
            };

            BlobAsset = new NativeArray <BlobAssetReference <ColliderBlob> >(1, Allocator.TempJob);

            // separate created colliders per type
            foreach (var collider in colliderList)
            {
                switch (collider)
                {
                case CircleCollider circleCollider: _circleColliders.Add(circleCollider); break;

                case FlipperCollider flipperCollider: _flipperColliders.Add(flipperCollider); break;

                case GateCollider gateCollider: _gateColliders.Add(gateCollider); break;

                case LineCollider lineCollider: _lineColliders.Add(lineCollider); break;

                case Line3DCollider line3DCollider: _line3DColliders.Add(line3DCollider); break;

                case LineSlingshotCollider lineSlingshotCollider: _lineSlingshotColliders.Add(lineSlingshotCollider); break;

                case LineZCollider lineZCollider: _lineZColliders.Add(lineZCollider); break;

                case PlungerCollider plungerCollider: _plungerColliders.Add(plungerCollider); break;

                case PointCollider pointCollider: _pointColliders.Add(pointCollider); break;

                case SpinnerCollider spinnerCollider: _spinnerColliders.Add(spinnerCollider); break;

                case TriangleCollider triangleCollider: _triangleColliders.Add(triangleCollider); break;
                }
            }

            perfMarker.End();
        }
        public unsafe void TestRecreateMarkersMultithreadedGetCachedOnce()
        {
            var markers = CreateMarkersThreaded();

            for (int i = 0; i < markers.Length; i++)
            {
                ProfilerMarker marker = new ProfilerMarker($"Test {i}");
                Assert.IsTrue(marker.Handle == markers[i]);
            }
        }
Exemplo n.º 19
0
        protected override void OnUpdate()
        {
            var commandBuffer = _barrier.CreateCommandBuffer().ToConcurrent();

            Entities
            .WithName("AddBlockBuffersToChunks")
            .WithAll <GenerateChunk>()
            .WithNone <ChunkBlockType>()
            .ForEach((int entityInQueryIndex, Entity e) =>
            {
                commandBuffer.AddBuffer <ChunkBlockType>(entityInQueryIndex, e);
            }).ScheduleParallel();

            var blockIDs = GetBlockIDs();

            ProfilerMarker marker = new ProfilerMarker("InitChunkBlocks");

            Entities
            .WithName("InitializeChunkBlocks")
            .WithAll <GenerateChunk>()
            .ForEach((int entityInQueryIndex, Entity e, ref DynamicBuffer <ChunkBlockType> blocksBuffer,
                      in ChunkWorldHeight chunkWorldHeight, in RegionHeightMap heightMapBlob, in RegionIndex regionIndex) =>
            {
                blocksBuffer.ResizeUninitialized(Constants.ChunkVolume);

                var blocks = blocksBuffer.AsNativeArray();

                ref var heightMap = ref heightMapBlob.Array;

                for (int i = 0; i < blocks.Length; ++i)
                {
                    int3 xyz = GridUtil.Grid3D.IndexToPos(i);
                    int x    = xyz.x;
                    int y    = xyz.y;
                    int z    = xyz.z;

                    int xzIndex = GridUtil.Grid2D.PosToIndex(x, z);

                    int maxHeight = heightMap[xzIndex];
                    int height    = y + chunkWorldHeight;

                    if (height <= maxHeight)
                    {
                        blocks[i] = SelectBlock(height, maxHeight, ref blockIDs);
                    }
                    else
                    {
                        blocks[i] = default;
                    }
                }

                commandBuffer.RemoveComponent <GenerateChunk>(entityInQueryIndex, e);
                commandBuffer.AddComponent <GenerateMesh>(entityInQueryIndex, e);
            }).ScheduleParallel();
Exemplo n.º 20
0
        /// <summary>
        /// Constructor.
        /// </summary>
        public ImmediateModeElement()
        {
            generateVisualContent += OnGenerateVisualContent;
            var type = GetType();

            if (!s_Markers.TryGetValue(type, out m_ImmediateRepaintMarker))
            {
                m_ImmediateRepaintMarker = new ProfilerMarker($"{typeName}.{nameof(ImmediateRepaint)}");
                s_Markers[type]          = m_ImmediateRepaintMarker;
            }
        }
Exemplo n.º 21
0
        static void Init()
        {
            markerMain = new ProfilerMarker("Main Scheduler");

            scheduler     = new UnityTaskScheduler("Background");
            mainScheduler = new UnityTaskScheduler("Main");

            mainThreadTasks = new ConcurrentQueue <Task>();
            newTasks        = new ConcurrentQueue <ISubJob>();

            FrameCount = 0;
        }
        public unsafe void TestDisableFromPlayerConnectionDoesntSend()
        {
            ProfilerProtocolThread.Stream.buffer->m_BufferList->RecycleStreamAndFreeExtra();

            PlayerConnectionProfiler.Shutdown();

            ProfilerMarker marker = new ProfilerMarker("Test marker");

            marker.Begin();
            marker.End();

            Assert.Zero(ProfilerProtocolThread.Stream.buffer->m_BufferList->TotalBytes);
        }
        public unsafe void TestRecreateDuplicateMarkersMultithreadedGetCachedOnce()
        {
            var markers = CreateMarkersThreadedDuplicates();

            for (int i = 0; i < markers.Length; i += 16)
            {
                for (int j = 0; j < 16; j++)
                {
                    ProfilerMarker marker = new ProfilerMarker($"Test {j}");
                    Assert.IsTrue(marker.Handle == markers[i + j]);
                }
            }
        }
Exemplo n.º 24
0
 public Profile(string name)
 {
     _name = name;
     if (Markers.TryGetValue(_name, out var marker))
     {
         marker.Begin();
     }
     else
     {
         marker = new ProfilerMarker(_name);
         Markers.Add(_name, marker);
         marker.Begin();
     }
 }
Exemplo n.º 25
0
 static void Internal_CallUpdateFunctions()
 {
     if (update != null)
     {
         var invocationList = update.GetInvocationList();
         foreach (var cb in invocationList)
         {
             var marker = new ProfilerMarker(cb.Method.Name);
             marker.Begin();
             cb.DynamicInvoke();
             marker.End();
         }
     }
 }
        public static void BurstedProfilerMethods(ref ProfilerMarker marker)
        {
            EnsureBurstedOrThrow();

            // These API calls actually prove out a LOT of internal API burst-ability
            marker.Begin();
            marker.End();

            using (marker.Auto())
            {
            }

            ProfilerProtocolThread.SendNewFrame();
        }
        public unsafe void TestRecreateMarkerJustGetsCached()
        {
            IntPtr[] markers = new IntPtr[256];
            for (int i = 0; i < markers.Length; i++)
            {
                ProfilerMarker marker = new ProfilerMarker($"Test {i}");
                markers[i] = marker.Handle;
            }

            for (int i = 0; i < markers.Length; i++)
            {
                ProfilerMarker marker = new ProfilerMarker($"Test {i}");
                Assert.IsTrue(marker.Handle == markers[i]);
            }
        }
Exemplo n.º 28
0
 void CreateMarkers()
 {
     if (!string.IsNullOrEmpty(m_PanelName))
     {
         m_MarkerUpdate     = new ProfilerMarker($"Panel.Update.{m_PanelName}");
         m_MarkerLayout     = new ProfilerMarker($"Panel.Layout.{m_PanelName}");
         m_MarkerBindings   = new ProfilerMarker($"Panel.Bindings.{m_PanelName}");
         m_MarkerAnimations = new ProfilerMarker($"Panel.Animations.{m_PanelName}");
     }
     else
     {
         m_MarkerUpdate     = new ProfilerMarker("Panel.Update");
         m_MarkerLayout     = new ProfilerMarker("Panel.Layout");
         m_MarkerBindings   = new ProfilerMarker("Panel.Bindings");
         m_MarkerAnimations = new ProfilerMarker("Panel.Animations");
     }
 }
        public unsafe void TestUnityEngineProfiler()
        {
            ProfilerProtocolThread.Stream.buffer->m_BufferList->RecycleStreamAndFreeExtra();

            // for compatibility
            UnityEngine.Profiling.Profiler.BeginSample("SomeMethod.Test");
            UnityEngine.Profiling.Profiler.EndSample();
            var profileMemA = ProfilerProtocolThread.Stream.buffer->m_BufferList->ToByteArray(0, ProfilerProtocolThread.Stream.buffer->m_BufferList->TotalBytes);

            ProfilerProtocolThread.Stream.buffer->m_BufferList->RecycleStreamAndFreeExtra();

            ProfilerMarker marker = new ProfilerMarker("SomeMethod.Test");

            marker.Begin();
            marker.End();
            var profileMemB = ProfilerProtocolThread.Stream.buffer->m_BufferList->ToByteArray(0, ProfilerProtocolThread.Stream.buffer->m_BufferList->TotalBytes);

            ProfilerProtocolThread.Stream.buffer->m_BufferList->RecycleStreamAndFreeExtra();

            const int k_BlockIndexCurr_1 = 28;
            const int k_Time_1           = 56;
            const int k_BlockIndexNext_1 = 64;
            const int k_BlockIndexCurr_2 = 100;
            const int k_Time_2           = 128;
            const int k_BlockIndexNext_2 = 136;

            Assert.NotZero(profileMemA.Length);
            Assert.NotZero(profileMemB.Length);
            Assert.AreEqual(profileMemA.Length, profileMemB.Length);
            for (int i = 0; i < profileMemA.Length; i++)
            {
                if (i != k_BlockIndexCurr_1 && i != k_BlockIndexNext_1 && i != k_BlockIndexCurr_2 && i != k_BlockIndexNext_2 &&
                    !(i >= k_Time_1 && i < k_Time_1 + 8) && !(i >= k_Time_2 && i < k_Time_2 + 8))
                {
                    Assert.AreEqual(profileMemA[i], profileMemB[i]);
                }
            }
            Assert.True(profileMemA[k_BlockIndexNext_1] == profileMemA[k_BlockIndexCurr_1] + 1);
            Assert.True(profileMemA[k_BlockIndexCurr_2] == profileMemA[k_BlockIndexNext_1]);
            Assert.True(profileMemA[k_BlockIndexNext_2] == profileMemA[k_BlockIndexCurr_2] + 1);
            Assert.True(profileMemB[k_BlockIndexCurr_1] == profileMemA[k_BlockIndexCurr_1] + 2);
            Assert.True(profileMemB[k_BlockIndexNext_1] == profileMemA[k_BlockIndexNext_1] + 2);
            Assert.True(profileMemB[k_BlockIndexCurr_2] == profileMemA[k_BlockIndexCurr_2] + 2);
            Assert.True(profileMemB[k_BlockIndexNext_2] == profileMemA[k_BlockIndexNext_2] + 2);
        }
        public unsafe void TestRandomlyCreateAndGetMarkersMultithreaded()
        {
            ManualResetEvent mre = new ManualResetEvent(false);
            const int        k_NumTotalMarkers  = 65536;
            const int        k_NumUniqueMarkers = 1024;

            string[] markerName = new string[k_NumUniqueMarkers];

            System.Random rand = new System.Random();

            for (int i = 0; i < k_NumUniqueMarkers; i++)
            {
                for (int j = 0; j < rand.Next(1, 20); j++)
                {
                    markerName[i] += rand.Next(10).ToString();
                }
            }

            Thread[] threads = new Thread[16];
            for (int i = 0; i < threads.Length; i++)
            {
                threads[i] = new Thread((object p) =>
                {
                    System.Random innerRand = (System.Random)p;
                    int len = k_NumTotalMarkers / threads.Length;
                    mre.WaitOne();
                    for (int j = 0; j < len; j++)
                    {
                        ProfilerMarker marker = new ProfilerMarker(markerName[innerRand.Next(k_NumUniqueMarkers)]);
                        Assert.IsTrue(((Development.Profiling.Profiler.MarkerBucketNode *)marker.m_Ptr)->markerId < k_NumUniqueMarkers);
                    }
                });
                System.Random localRand = new System.Random(rand.Next());
                threads[i].Start(localRand);
            }

            Thread.Sleep(100);
            mre.Set();

            for (int i = 0; i < threads.Length; i++)
            {
                threads[i].Join();
            }
        }