-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathProfilerLogger.cs
More file actions
116 lines (97 loc) · 3.48 KB
/
Copy pathProfilerLogger.cs
File metadata and controls
116 lines (97 loc) · 3.48 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
using UnityEngine;
using System.Collections;
using System.IO;
using System.Collections.Generic;
using System.Threading;
#if UNITY_EDITOR
using UnityEditor;
namespace X
{
public class ProfilerLoggerWindow : EditorWindow
{
[MenuItem("XStudio/Tools/Profiler To Log")]
public static void LoadProfileData()
{
EditorWindow.GetWindow<ProfilerLoggerWindow>(false, "Profiler logger", true).Show();
}
string LogProfilerDir = null;
string CurLogProfilerDir = null;
string[] CurFiles = null;
int CurSelectFileIndex = -1;
int LastSelectFileIndex = -1;
string[] GetFiles()
{
if (CurFiles == null || CurLogProfilerDir != LogProfilerDir)
{
CurLogProfilerDir = LogProfilerDir;
var path = Path.GetFullPath(CurLogProfilerDir);
var files = Directory.GetFiles(path, "*.txt");
CurFiles = new string[files.Length];
var length = path.Length;
if (!PathEx.EndWithDirectorySeparatorChar(path))
length++;
for (var i = 0; i < files.Length; ++i)
{
CurFiles[i] = files[i].Substring(length);
}
System.Array.Sort<string>(CurFiles, (s1, s2) => {return s1.CompareTo(s2);});
if (CurFiles.Length == 0)
CurFiles = null;
}
return CurFiles;
}
void OnGUI()
{
GUILayout.BeginHorizontal();
GUILayout.Label(LogProfilerDir);
if (GUILayout.Button("Change dir"))
{
LogProfilerDir = EditorUtility.OpenFolderPanel("Load Profile Data", "", "");
CurLogProfilerDir = null;
}
GUILayout.EndHorizontal();
if (string.IsNullOrEmpty(LogProfilerDir) || !Directory.Exists(LogProfilerDir))
return;
var files = GetFiles();
if (files == null)
return;
for (var i = 0; i < files.Length; ++i)
{
var toggle = EditorGUILayout.Toggle(i.ToString(), CurSelectFileIndex == i);
if (toggle)
CurSelectFileIndex = i;
}
if (LastSelectFileIndex != CurSelectFileIndex)
{
LastSelectFileIndex = CurSelectFileIndex;
var path = Path.Combine(CurLogProfilerDir, files[LastSelectFileIndex]);
Debug.Log(path);
Profiler.AddFramesFromFile(path);
}
}
}
}
#endif
namespace X
{
public class ProfilerLogger : MonoBehaviour
{
void Start ()
{
Profiler.enableBinaryLog = true;
Profiler.enabled = true;
}
void OnDestroy()
{
Profiler.enabled = false;
}
void LateUpdate()
{
if (Time.frameCount % 256 == 1)
{
var file = string.Format("ProfilerLog_{0}_{1}.txt", System.DateTime.Now.ToString("yyyy_MM_dd_HH_mm_ss"), Application.loadedLevelName);
Profiler.logFile = Path.Combine(Application.persistentDataPath, file);
}
}
}
}