private static void DrawGraphAttribute(KeyValuePair <string, VarTracerGraphItData> kv)
        {
            GUILayout.Label("Graph:" + kv.Key, NameLabel);
            int colorIndex = kv.Value.mData.Count;

            foreach (var varBodyName in GetAllVariableBodyFromChannel(kv.Key))
            {
                NameLabel.normal.textColor = Color.white;

                GUILayout.Label("LogicName:" + varBodyName, NameLabel);

                foreach (var entry in kv.Value.mData)
                {
                    var variable            = VarTracer.GetGraphItVariableByVariableName(entry.Key);
                    VarTracerDataInternal g = entry.Value;
                    if (variable.VarBodyName.Equals(varBodyName))
                    {
                        if (kv.Value.mData.Count >= 1)
                        {
                            NameLabel.normal.textColor = g.mColor;
                        }
                        GUILayout.Label("     [Variable]   " + entry.Key + ":" + g.mCurrentValue.ToString(VarTracerConst.NUM_FORMAT_2), NameLabel);
                    }
                }

                var varBody = VarTracer.Instance.groups[varBodyName];

                foreach (var eventName in varBody.EventInfos.Keys)
                {
                    colorIndex++;
                    NameLabel.normal.textColor = VarTracerUtils.GetColorByIndex(colorIndex);
                    GUILayout.BeginHorizontal();

                    Color saveColor = GUI.backgroundColor;
                    GUI.backgroundColor = NameLabel.normal.textColor;
                    GUILayout.Button("", EventButtonStyle, GUILayout.Width(10));
                    GUI.backgroundColor = saveColor;
                    var flag = EditorGUILayout.Toggle(varBody.EventInfos[eventName].IsCutFlag, GUILayout.Width(10));
                    if (flag != varBody.EventInfos[eventName].IsCutFlag)
                    {
                        varBody.EventInfos[eventName].IsCutFlag = flag;
                        if (flag)
                        {
                            varBody.EventInfos[eventName].TimeStamp = VarTracerUtils.GetTimeStamp();
                        }
                    }
                    GUILayout.Label("     <Event>    " + eventName, NameLabel);
                    GUILayout.EndHorizontal();
                }
            }

            if (kv.Value.mData.Count >= 1)
            {
                HoverText.normal.textColor = Color.white;
                GUILayout.Label("duration:" + (mWidth / kv.Value.XStep / VarTracerConst.FPS).ToString(VarTracerConst.NUM_FORMAT_3) + "(s)", HoverText, GUILayout.Width(140));
                kv.Value.XStep = GUILayout.HorizontalSlider(kv.Value.XStep, 0.1f, 15, GUILayout.Width(160));
            }
        }
        public VarTracerDataInternal(int subgraph_index)
        {
            mDataInfos    = new List <VarDataInfo>();
            mMin          = 0.0f;
            mMax          = 0.0f;
            mCurrentValue = 0.0f;

            mColor = VarTracerUtils.GetColorByIndex(subgraph_index);
        }
Exemple #3
0
    public static void ResoloveJsonMsg(VarTracerJsonType resolved)
    {
        int variableCount = resolved.variableName.Length;

        if (variableCount != resolved.variableValue.Length)
        {
            Debug.LogErrorFormat("Parameter Resolove Json Error ,variableCount = {0}", variableCount);
        }
        int eventCount = resolved.eventName.Length;

        if (eventCount != resolved.eventDuration.Length || eventCount != resolved.eventDesc.Length)
        {
            Debug.LogErrorFormat("Parameter Resolove Json Error ,eventCount = {0}", eventCount);
        }

        long timeStamp = resolved.timeStamp;

        if (VarTracerNet.Instance.StartTimeStamp == 0)
        {
            VarTracerNet.Instance.StartTimeStamp = VarTracerUtils.GetTimeStamp();
            VarTracerNet.Instance.NetDeltaTime   = VarTracerNet.Instance.StartTimeStamp - timeStamp;
        }
        timeStamp += VarTracerNet.Instance.NetDeltaTime;

        bool hasLogicalName = !string.IsNullOrEmpty(resolved.logicName);

        for (int i = 0; i < variableCount; i++)
        {
            if (hasLogicalName)
            {
                DefineVariable(resolved.variableName[i], resolved.logicName);
            }
            UpdateVariable(timeStamp, resolved.variableName[i], resolved.variableValue[i]);
        }

        for (int i = 0; i < eventCount; i++)
        {
            if (hasLogicalName)
            {
                DefineEvent(resolved.eventName[i], resolved.logicName);
            }
            if (resolved.eventDuration[i] != -1)
            {
                SendEvent(timeStamp, resolved.eventName[i], resolved.eventDuration[i], resolved.eventDesc[i]);
            }
        }

        if (resolved.runingState == (int)VarTracerConst.RunningState.RunningState_Start)
        {
            StartVarTracer();
        }
        else if (resolved.runingState == (int)VarTracerConst.RunningState.RunningState_Pause)
        {
            StopVarTracer();
        }
    }
        public bool Handle_VarTracerInfo(eNetCmd cmd, UsCmd c)
        {
            int groupCount = c.ReadInt32();

            //NetUtil.Log("read group count: {0}.", groupCount);

            for (int i = 0; i < groupCount; i++)
            {
                var groupName = c.ReadString();
                //NetUtil.Log("read group Name: {0}.", groupName);
                var variableCount = c.ReadInt32();
                //NetUtil.Log("read var count : {0}.", variableCount);
                for (int j = 0; j < variableCount; j++)
                {
                    var variableName = c.ReadString();
                    //NetUtil.Log("read variableName: {0}.", variableName);
                    var sessionCount = c.ReadInt32();
                    //NetUtil.Log("read sessionCount: {0}.", sessionCount);
                    for (int k = 0; k < sessionCount; k++)
                    {
                        long stamp = c.ReadLong();
                        if (VarTracerNet.Instance.StartTimeStamp == 0)
                        {
                            VarTracerNet.Instance.StartTimeStamp = VarTracerUtils.GetTimeStamp();
                            VarTracerNet.Instance.NetDeltaTime   = VarTracerNet.Instance.StartTimeStamp - stamp;
                        }
                        stamp += VarTracerNet.Instance.NetDeltaTime;

                        //NetUtil.Log("read stamp: {0}.", stamp);
                        float value = c.ReadFloat();
                        //NetUtil.Log("read value: {0}.", value);
                        VarTracerHandler.UpdateVariable(groupName, variableName, stamp, value);
                    }
                }

                var eventCount = c.ReadInt32();
                for (int j = 0; j < eventCount; j++)
                {
                    var eventName    = c.ReadString();
                    var sessionCount = c.ReadInt32();
                    for (int k = 0; k < sessionCount; k++)
                    {
                        long  stamp    = c.ReadLong();
                        float duration = c.ReadFloat();
                        VarTracerHandler.SendEvent(groupName, stamp, eventName, duration);
                    }
                }
            }

            return(true);
        }
Exemple #5
0
    public void SendEvent(string groupName, string eventName, float duration)
    {
        var group = GetGroupByName(groupName);

        if (group == null)
        {
            return;
        }
        var eventParm = GetEventParmByName(group, eventName);

        if (eventParm == null)
        {
            return;
        }
        eventParm._stamp    = VarTracerUtils.GetTimeStamp();
        eventParm._duration = duration;
    }
Exemple #6
0
 public void SendJsonMsg(VarTracerJsonType vtjt)
 {
     if (vtjt.timeStamp == 0)
     {
         vtjt.timeStamp = VarTracerUtils.GetTimeStamp();
     }
     lock (_locker)
     {
         if (isMainMsgList)
         {
             sendMsgList.Add(vtjt);
         }
         else
         {
             sendMsgTempList.Add(vtjt);
         }
     }
 }
Exemple #7
0
    public void SendVariable(string groupName, string variableName, float value)
    {
        var group = GetGroupByName(groupName);

        if (group == null)
        {
            return;
        }

        var varParm = GetVariableParmByName(group, variableName);

        if (varParm == null)
        {
            return;
        }
        varParm._stamp = VarTracerUtils.GetTimeStamp();
        varParm._value = value;
    }
    public static void DrawGraphs(Rect rect, EditorWindow window)
    {
        if (VarTracer.Instance)
        {
            bool isEditorPaused = EditorApplication.isPaused;

            CreateLineMaterial();

            mLineMaterial.SetPass(0);

            int graph_index = 0;

            //use this to get the starting y position for the GL rendering
            Rect find_y = EditorGUILayout.BeginVertical(GUIStyle.none);
            EditorGUILayout.EndVertical();

            int currentFrameIndex = VarTracerNet.Instance.GetCurrentFrameFromTimestamp(VarTracerUtils.GetTimeStamp());
            if (isEditorPaused)
                currentFrameIndex = VarTracerNet.Instance.GetCurrentFrameFromTimestamp(VarTracerUtils.StopTimeStamp);

            float scrolled_y_pos = y_offset - mGraphViewScrollPos.y;
            if (Event.current.type == EventType.Repaint)
            {
                GL.PushMatrix();
                float start_y = find_y.y;
                GL.Viewport(new Rect(0, 0, rect.width, rect.height - start_y));
                GL.LoadPixelMatrix(0, rect.width, rect.height - start_y, 0);

                //Draw grey BG
                GL.Begin(GL.QUADS);
                GL.Color(new Color(0.2f, 0.2f, 0.2f));

                foreach (KeyValuePair<string, VarTracerGraphItData> kv in VarTracer.Instance.Graphs)
                {
                    float height = kv.Value.GetHeight();

                    GL.Vertex3(x_offset, scrolled_y_pos, 0);
                    GL.Vertex3(x_offset + mWidth, scrolled_y_pos, 0);
                    GL.Vertex3(x_offset + mWidth, scrolled_y_pos + height, 0);
                    GL.Vertex3(x_offset, scrolled_y_pos + height, 0);

                    scrolled_y_pos += (height + y_gap);
                }
                GL.End();

                scrolled_y_pos = y_offset - mGraphViewScrollPos.y;
                //Draw Lines
                GL.Begin(GL.LINES);

                foreach (KeyValuePair<string, VarTracerGraphItData> kv in VarTracer.Instance.Graphs)
                {
                    graph_index++;

                    float height = kv.Value.GetHeight();
                    DrawGraphGridLines(scrolled_y_pos, mWidth, height, graph_index == mMouseOverGraphIndex);

                    foreach (KeyValuePair<string, VarTracerDataInternal> entry in kv.Value.mData)
                    {
                        VarTracerDataInternal g = entry.Value;

                        float y_min = kv.Value.GetMin(entry.Key);
                        float y_max = kv.Value.GetMax(entry.Key);
                        float y_range = Mathf.Max(y_max - y_min, 0.00001f);

                        //draw the 0 line
                        if (y_min != 0.0f)
                        {
                            GL.Color(Color.white);
                            float y = scrolled_y_pos + height * (1 - (0.0f - y_min) / y_range);
                            Plot(x_offset, y, x_offset + mWidth, y);
                        }

                        GL.Color(g.mColor);

                        float previous_value = 0, value = 0;
                        int dataInfoIndex = 0, frameIndex = 0;
                        for (int i = 0; i <= currentFrameIndex; i++)
                        {
                            int dataCount = g.mDataInfos.Count;
                            if (dataCount != 0)
                            {
                                int lastFrame = g.mDataInfos[dataCount - 1].FrameIndex;
                                float lastValue = g.mDataInfos[dataCount - 1].Value;
                                frameIndex = g.mDataInfos[dataInfoIndex].FrameIndex;

                                if (dataInfoIndex >= 1)
                                    value = g.mDataInfos[dataInfoIndex - 1].Value;

                                if (dataInfoIndex == 0 && i < frameIndex)
                                    value = 0;

                                if (i >= frameIndex)
                                {
                                    while (g.mDataInfos[dataInfoIndex].FrameIndex == frameIndex && dataInfoIndex < dataCount - 1)
                                    {
                                        dataInfoIndex++;
                                    }
                                }

                                if (i > lastFrame)
                                    value = lastValue;
                            }
                            else
                            {
                                value = 0;
                            }

                            if (i >= 1)
                            {
                                float x0 = x_offset + (i - 1) * kv.Value.XStep - kv.Value.ScrollPos.x;
                                if (x0 <= x_offset - kv.Value.XStep) continue;
                                if (x0 >= mWidth + x_offset) break;
                                float y0 = scrolled_y_pos + height * (1 - (previous_value - y_min) / y_range);

                                if (i == 1)
                                {
                                    x0 = x_offset;
                                    y0 = scrolled_y_pos + height;
                                }

                                float x1 = x_offset + i * kv.Value.XStep - kv.Value.ScrollPos.x;
                                float y1 = scrolled_y_pos + height * (1 - (value - y_min) / y_range);
    
                                if (m_isDrawLine)
                                    Plot(x0, y0, x1, y1);
                                else
                                    Plot(x0, y0, x0+1, y0+1);
                            }
                            previous_value = value;
                        }
                    }

                    scrolled_y_pos += (height + y_gap);
                }
                GL.End();

                scrolled_y_pos = y_offset - mGraphViewScrollPos.y;
                scrolled_y_pos = ShowEventLabel(scrolled_y_pos);
                GL.PopMatrix();

                GL.Viewport(new Rect(0, 0, rect.width, rect.height));
                GL.LoadPixelMatrix(0, rect.width, rect.height, 0);
            }

            mGraphViewScrollPos = EditorGUILayout.BeginScrollView(mGraphViewScrollPos, GUIStyle.none);

            graph_index = 0;
            mWidth = window.position.width - x_offset;
            foreach (KeyValuePair<string, VarTracerGraphItData> kv in VarTracer.Instance.Graphs)
            {
                graph_index++;

                float height = kv.Value.GetHeight();
                float width = currentFrameIndex * kv.Value.XStep;
                if (width < mWidth)
                {
                    width = mWidth - x_offset;
                }
                else
                {
                    if (!EditorApplication.isPaused)
                        kv.Value.ScrollPos = new Vector2(width - mWidth, kv.Value.ScrollPos.y);
                }

                GUIStyle s = new GUIStyle();
                s.fixedHeight = height + y_gap;
                s.stretchWidth = true;
                Rect r = EditorGUILayout.BeginVertical(s);

                //skip subgraph title if only one, and it's the same.
                NameLabel.normal.textColor = Color.white;

                r.height = height + 50;
                r.width = width;
                r.x = x_offset - 35;
                r.y = (height + y_gap) * (graph_index - 1) - 10;

                if (kv.Value.mData.Count > 0)
                {
                    GUILayout.BeginArea(r);
                    GUILayout.BeginVertical();

                    float GraphGap = kv.Value.m_maxValue - kv.Value.m_minValue;
                    float unitHeight = GraphGap / VarTracerConst.Graph_Grid_Row_Num;

                    for (int i = 0; i < VarTracerConst.Graph_Grid_Row_Num + 1; i++)
                    {
                        GUILayout.Space(6);
                        if (unitHeight == 0)
                            EditorGUILayout.LabelField("",NameLabel);
                        else
                            EditorGUILayout.LabelField((kv.Value.m_maxValue - i * unitHeight).ToString(VarTracerConst.NUM_FORMAT_1),NameLabel);
                    }

                    GUILayout.BeginHorizontal();
                    kv.Value.ScrollPos = GUILayout.BeginScrollView(kv.Value.ScrollPos, GUILayout.Width(mWidth), GUILayout.Height(0));
                    GUILayout.Label("", GUILayout.Width(width), GUILayout.Height(0));
                    GUILayout.EndScrollView();
                    GUILayout.EndHorizontal();
                    GUILayout.EndVertical();
                    GUILayout.EndArea();
                }

                DrawGraphAttribute(kv);

                ////Respond to mouse input!
                if (Event.current.type == EventType.MouseDrag && r.Contains(Event.current.mousePosition - Event.current.delta))
                {
                    if (Event.current.button == 0)
                    {
                        kv.Value.ScrollPos = new Vector2(kv.Value.ScrollPos.x + Event.current.delta.x, kv.Value.ScrollPos.y);
                    }
                    window.Repaint();
                }
                EditorGUILayout.EndVertical();
            }
            EditorGUILayout.EndScrollView();
        }
    }
 public static void StopVarTracer()
 {
     VarTracerUtils.StopTimeStamp = VarTracerUtils.GetTimeStamp();
     m_isStart = false;
     EditorApplication.isPaused = true;
 }
        private static float ShowEventLabel(float scrolled_y_pos)
        {
            foreach (KeyValuePair <string, VarTracerGraphItData> kv in VarTracer.Instance.Graphs)
            {
                float            height          = kv.Value.GetHeight();
                List <EventData> sortedEventList = new List <EventData>();
                int colorIndex = kv.Value.mData.Count;
                Dictionary <string, int> colorIndexDict = new Dictionary <string, int>();
                foreach (var varBodyName in GetAllVariableBodyFromChannel(kv.Key))
                {
                    var varBody = VarTracer.Instance.groups[varBodyName];
                    foreach (var eventName in varBody.EventInfos.Keys)
                    {
                        var eventInfo = varBody.EventInfos[eventName];
                        colorIndex++;
                        colorIndexDict.Add(eventName, colorIndex);
                        foreach (var data in eventInfo.EventDataList)
                        {
                            if (eventInfo.IsCutFlag && data.TimeStamp > eventInfo.TimeStamp)
                            {
                                eventInfo.TimeStamp = data.TimeStamp;
                                StopVarTracer();
                                break;
                            }
                            if (data.EventFrameIndex > 0)
                            {
                                float x = x_offset + data.EventFrameIndex * kv.Value.XStep - kv.Value.ScrollPos.x;
                                if (x <= x_offset - kv.Value.XStep)
                                {
                                    continue;
                                }
                                if (x >= mWidth + x_offset)
                                {
                                    break;
                                }

                                sortedEventList.Add(data);
                            }
                        }
                        sortedEventList.Sort((EventData e1, EventData e2) =>
                        {
                            return(e1.EventFrameIndex.CompareTo(e2.EventFrameIndex));
                        });

                        float startY       = scrolled_y_pos + height - VarTracerConst.EventStartHigh;
                        Rect  preEventRect = new Rect(0, startY, 0, VarTracerConst.EventButtonHeight);
                        for (int i = 0; i < sortedEventList.Count; i++)
                        {
                            var currentEvent = sortedEventList[i];
                            GL.Color(Color.gray);

                            int buttonWidth = 0;
                            if (currentEvent.Duration == 0)
                            {
                                buttonWidth = (int)(VarTracerConst.INSTANT_EVENT_BTN_DURATION * VarTracerConst.FPS * kv.Value.XStep);
                            }
                            else
                            {
                                buttonWidth = (int)(VarTracerConst.INSTANT_EVENT_BTN_DURATION * VarTracerConst.FPS * kv.Value.XStep);
                            }
                            //buttonWidth = (int)(currentEvent.Duration * VarTracerConst.FPS * kv.Value.XStep);

                            GUIStyle style = EventButtonStyle;
                            float    x     = x_offset + currentEvent.EventFrameIndex * kv.Value.XStep - kv.Value.ScrollPos.x;
                            Rect     tooltip_r;
                            if (IsEventBtnIntersect(x - buttonWidth / 2, preEventRect.x, buttonWidth, preEventRect.width))
                            {
                                if (preEventRect.y > height + int.Parse(kv.Key) * (height + y_gap))
                                {
                                    tooltip_r = new Rect(x - buttonWidth / 2, startY, buttonWidth, VarTracerConst.EventButtonHeight);
                                }
                                else
                                {
                                    tooltip_r = new Rect(x - buttonWidth / 2, preEventRect.y + VarTracerConst.EventButtonFixGap, buttonWidth, VarTracerConst.EventButtonHeight);
                                }
                            }
                            else
                            {
                                tooltip_r = new Rect(x - buttonWidth / 2, startY, buttonWidth, VarTracerConst.EventButtonHeight);
                            }
                            preEventRect = tooltip_r;
                            var saveColor = GUI.backgroundColor;
                            GUI.backgroundColor = VarTracerUtils.GetColorByIndex(colorIndexDict[currentEvent.EventName]);
                            GUI.Button(tooltip_r, currentEvent.EventName, style);

                            if (Event.current.type == EventType.Repaint && tooltip_r.Contains(Event.current.mousePosition + new Vector2(0, m_controlScreenHeight)))
                            {
                                GUI.backgroundColor = Color.white;
                                GUI.Label(new Rect(tooltip_r.x - 20, tooltip_r.y - 30, 110, 30), "name:" + currentEvent.EventName + "\n"
                                          + "duration:" + currentEvent.Duration + "\n", EditorStyles.textArea);
                            }
                            GUI.backgroundColor = saveColor;
                        }
                    }
                }
                scrolled_y_pos += (height + y_gap);
            }
            return(scrolled_y_pos);
        }
 public static void StopVarTracer()
 {
     VarTracerUtils.StopTimeStamp = VarTracerUtils.GetTimeStamp();
     m_isPaused = true;
 }