Пример #1
0
 public T GetPropertyValue <T>(string p)
 {
     return(type.GetPropertyValue <T>(p, this.target));
 }
Пример #2
0
        private IEnumerator Execute()
        {
            currentProgress = 0.0f;
            var waitForConnect = WaitForRemoteConnect(10.0);

            while (waitForConnect.MoveNext())
            {
                yield return(null);
            }
            yield return(null);

            yield return(null);

            var r               = this.reflectionCache;
            var frameEvents     = frameDebuggeUtil.CallMethod <System.Array>("GetFrameEvents", null, null);
            var breakReasons    = frameDebuggeUtil.CallMethod <string[]>("GetBatchBreakCauseStrings", null, null);
            var frameEventDatas = r.GetTypeObject("UnityEditorInternal.FrameDebuggerEventData");
            var evtData         = frameDebuggeUtil.CreateInstance();
            int count           = frameDebuggeUtil.GetPropertyValue <int>("count", null);


            this.CreateFrameDebuggerEventList(frameEvents);
            this.frameDebuggerEventDataList = new List <FrameDebuggerEventData>(count);


            for (int i = 0; i <= count; ++i)
            {
                yield return(null);

                this.frameDebuggerWindowObj.CallMethod <object>("ChangeFrameEventLimit", new object[] { i });
                this.frameDebuggerWindowObj.CallMethod <object>("RepaintOnLimitChange", null);
                int targetFrameIdx = i - 1;
                if (targetFrameIdx < 0 || targetFrameIdx >= frameEvents.Length)
                {
                    continue;
                }

                // getTargetFrameInfo
                var eventDataCoroutine = this.TryGetFrameEvnetData(targetFrameIdx, 2.0);
                while (eventDataCoroutine.MoveNext())
                {
                    yield return(null);
                }
                var frameData = currentFrameEventData;
                if (frameData == null)
                {
                    UnityEngine.Debug.LogWarning("failed capture " + targetFrameIdx);
                    continue;
                }

                FrameDebuggerEventData frameInfo = new FrameDebuggerEventData();
                frameData.CopyFieldsToObjectByVarName <FrameDebuggerEventData>(ref frameInfo);
                frameInfo.batchBreakCauseStr = breakReasons[frameInfo.batchBreakCause];
                this.CreateShaderPropInfos(frameInfo);
                frameDebuggerEventDataList.Add(frameInfo);

                bool isRemoteEnalbed = frameDebuggeUtil.CallMethod <bool>("IsRemoteEnabled", null, null);
                if (!isRemoteEnalbed)
                {
                    SetRenderTextureLastChange(frameInfo);
                    // save shader texture
                    ExecuteShaderTextureSave(frameInfo);
                    // capture screen shot
                    ExecuteSaveScreenShot(frameInfo, (i == count));
                }
            }
            yield return(null);
        }