コード例 #1
0
ファイル: ScriptEditor.cs プロジェクト: dogmahtagram/Finale
        private void AnimationSelectorChanged(object sender, EventArgs e)
        {
            mFrameSelector.Items.Clear();

            for (int frame = -1; frame <= ((Animation)mAnimationSelector.SelectedItem).NumFrames() - 1; frame++)
            {
                FrameSelection frameSelection = new FrameSelection();
                frameSelection.Frame = frame;
                mFrameSelector.Items.Add(frameSelection);
            }

            mScriptEditor.HideEditables();
        }
コード例 #2
0
        public static void WriteToFile(string filename, ProfilingFormat format, FrameSelection frameSelection = FrameSelection.Median)
        {
            if (!ProfilingEnabled)
            {
                throw new InvalidOperationException("Cannot write profile to file when profiling is not enabled.");
            }
            ProfilerFrame frame = default;

            if (collectedFrames.IsEmpty)
            {
                return;
            }

            bool needsDispose = false;

            switch (frameSelection)
            {
            case FrameSelection.Median:
                var ordered = collectedFrames.OrderBy(x => x.frameLength).ToArray();
                frame = ordered[(int)Math.Floor(ordered.Length / 2.0)];
                break;

            case FrameSelection.Longest:
                frame = collectedFrames.MaxBy(x => x.frameLength);
                break;

            case FrameSelection.Shortest:
                frame = collectedFrames.MinBy(x => x.frameLength);
                break;

            case FrameSelection.Latest:
                frame = collectedFrames.Back();
                break;

            case FrameSelection.Percentile95:
                ordered = collectedFrames.OrderBy(x => x.frameLength).ToArray();
                int index = ordered.Length - (int)(ordered.Length * 0.05f);
                if (index >= ordered.Length)
                {
                    index = ordered.Length - 1;
                }
                frame = ordered[index];
                break;

            case FrameSelection.All:
                frame             = new ProfilerFrame();
                frame.frameNumber = collectedFrames.Min(x => x.frameNumber);
                frame.frameLength = collectedFrames.Sum(x => x.frameLength);
                frame.markers     = PooledList <ProfilerMarker> .Create();

                double elapsedTime = 0;
                foreach (var collectedFrame in collectedFrames)
                {
                    if (collectedFrame.markers != null)
                    {
                        frame.markers.AddRange(collectedFrame.markers.Select(x =>
                                                                             new ProfilerMarker(x.markName, x.time + elapsedTime)));
                    }
                    elapsedTime += collectedFrame.frameLength;
                }
                frame.threadMethods = PooledList <(string, PooledList <ProfilerMethod>)> .Create();

                elapsedTime = 0;
                foreach (var collectedFrame in collectedFrames)
                {
                    foreach (var collectedFrameThreadMethod in collectedFrame.threadMethods)
                    {
                        var tuple = frame.threadMethods.SingleOrDefault(x => x.Item1 == collectedFrameThreadMethod.Item1);
                        PooledList <ProfilerMethod> outList = null;
                        if (tuple.Item1 == null)
                        {
                            outList = PooledList <ProfilerMethod> .Create();

                            frame.threadMethods.Add((collectedFrameThreadMethod.Item1, outList));
                        }
                        else
                        {
                            outList = tuple.Item2;
                        }
                        outList.AddRange(collectedFrameThreadMethod.Item2.Select(x => new ProfilerMethod(
                                                                                     x.methodName, x.depth, x.startTime + elapsedTime, x.endTime + elapsedTime, x.threadId)));
                    }
                    elapsedTime += collectedFrame.frameLength;
                }

                needsDispose = true;
                break;

            default:
                throw new ArgumentOutOfRangeException(nameof(frameSelection), frameSelection, null);
            }

            switch (format)
            {
            case ProfilingFormat.SpeedScope:
                SpeedScopeWriter.WriteToFile(frame, filename);
                break;

            case ProfilingFormat.ChromeTracing:
                ChromeTracingWriter.WriteToFile(frame, filename);
                break;

            default:
                throw new ArgumentOutOfRangeException(nameof(format), format, null);
            }

            if (needsDispose)
            {
                frame.Dispose();
            }
        }