예제 #1
0
    // --------------------------------------------------------------------

    public void StartTrace(string tag)
    {
        LastTrace = new ProfilerTrace()
        {
            Tag  = tag,
            Init = DateTime.Now.TimeOfDay.TotalMilliseconds
        };
        mUnfinishedTraces.Push(LastTrace);
    }
 public void SetData(ref ProfilerTrace trace, ref FunctionHeatMap heatMap)
 {
     m_Trace      = trace;
     m_HeatMap    = heatMap;
     m_Name       = new string[trace.Functions.Length];
     m_NumSamples = new string[trace.Functions.Length];
     m_Module     = new string[trace.Functions.Length];
     m_Addresses  = new string[trace.Functions.Length];
     Reload();
 }
예제 #3
0
 public void SetData(ref ProfilerTrace trace, NativeArray <FunctionSampleData> functionSamples)
 {
     m_Trace           = trace;
     m_FunctionSamples = functionSamples;
     m_Name            = new string[trace.Functions.Length];
     m_NumSamplesSelf  = new string[trace.Functions.Length];
     m_NumSamplesTotal = new string[trace.Functions.Length];
     m_Module          = new string[trace.Functions.Length];
     m_Addresses       = new string[trace.Functions.Length];
     Reload();
 }
예제 #4
0
    // --------------------------------------------------------------------

    public void EndTrace()
    {
        LastTrace.End = DateTime.Now.TimeOfDay.TotalMilliseconds;
        mTraces.Add(LastTrace);

        mUnfinishedTraces.Pop();
        if (mUnfinishedTraces.Count > 0)
        {
            LastTrace = mUnfinishedTraces.Peek();
        }
    }
        private void Deserialize <T>(MemoryStream stream, string channel)
        {
            var obj = Serializer.Deserialize <ChannelMessage <T> >(stream);

            if (obj != null)
            {
                var jss = new JavaScriptSerializer( );
                jss.MaxJsonLength  = int.MaxValue;
                jss.RecursionLimit = int.MaxValue;

                var jsonObject = jss.Deserialize <dynamic>(obj.Message.ToString( )) as IDictionary <string, object>;

                if (jsonObject != null)
                {
                    var root = new ProfilerTrace(jsonObject, "web.png");

                    _dispatcher.Invoke(() => ProfilerTraceModel.Add(root, Guid.Empty));

                    var child = jsonObject["Root"] as IDictionary <string, object>;

                    Parse(child, root.Id);
                }
            }
        }
예제 #6
0
        public void SetData(ref ProfilerTrace trace, TopDownTreeData treeData)
        {
            m_Trace    = trace;
            m_TreeData = treeData;
            int n = treeData.Frames.Length;

            if (m_Name?.Length == n)
            {
                System.Array.Clear(m_Name, 0, m_Name.Length);
                System.Array.Clear(m_TotalSamples, 0, m_TotalSamples.Length);
                System.Array.Clear(m_SelfSamples, 0, m_SelfSamples.Length);
                System.Array.Clear(m_Module, 0, m_Module.Length);
                System.Array.Clear(m_Addresses, 0, m_Addresses.Length);
            }
            else
            {
                m_Name         = new string[n];
                m_TotalSamples = new string[n];
                m_SelfSamples  = new string[n];
                m_Module       = new string[n];
                m_Addresses    = new string[n];
            }
            Reload();
        }
        private void Parse(IDictionary <string, object> obj, Guid parent)
        {
            var trace = new ProfilerTrace(obj);

            _dispatcher.Invoke(() => ProfilerTraceModel.Add(trace, parent));

            object children;

            if (obj.TryGetValue("Children", out children))
            {
                if (children != null)
                {
                    var childrenItems = children as object[];

                    foreach (var childItem in childrenItems)
                    {
                        var childDictionary = childItem as IDictionary <string, object>;

                        Parse(childDictionary, trace.Id);
                    }
                }
            }

            object customTimings;

            if (obj.TryGetValue("CustomTimings", out customTimings))
            {
                if (customTimings != null)
                {
                    var timingDictionary = customTimings as IDictionary <string, object>;

                    if (timingDictionary != null)
                    {
                        object sqlTimings;

                        if (timingDictionary.TryGetValue("sql", out sqlTimings))
                        {
                            if (sqlTimings != null)
                            {
                                var sqlArray = sqlTimings as object[];

                                if (sqlArray != null)
                                {
                                    foreach (var sqlObj in sqlArray)
                                    {
                                        var sql = sqlObj as IDictionary <string, object>;

                                        var sqlTrace = new SqlProfilerTrace(sql);

                                        _dispatcher.Invoke(() => ProfilerTraceModel.Add(sqlTrace, parent));
                                    }
                                }
                            }
                        }

                        object redisTimings;

                        if (timingDictionary.TryGetValue("redis", out redisTimings))
                        {
                            if (redisTimings != null)
                            {
                                var redisArray = redisTimings as object[];

                                if (redisArray != null)
                                {
                                    foreach (var redisObj in redisArray)
                                    {
                                        var redis = redisObj as IDictionary <string, object>;

                                        var sqlTrace = new RedisProfilerTrace(redis);

                                        _dispatcher.Invoke(() => ProfilerTraceModel.Add(sqlTrace, parent));
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
예제 #8
0
 public void ClearData()
 {
     m_FunctionSamples = default;
     m_Trace           = default;
 }
예제 #9
0
 public void ClearData()
 {
     m_Trace    = default;
     m_TreeData = default;
 }