using System.IO;
|
|
using UnityEngine;
|
|
using UnityEditor;
|
|
using UnityEditor.MemoryProfiler;
|
|
|
|
public static class PackedMemorySnapshotUtility
|
|
{
|
|
public static void SaveToFile(PackedMemorySnapshot snapshot)
|
|
{
|
|
var filePath = EditorUtility.SaveFilePanel("Save Snapshot", null, "MemorySnapshot", "memsnap2");
|
|
if(string.IsNullOrEmpty(filePath))
|
|
return;
|
|
|
|
SaveToFile(filePath, snapshot);
|
|
}
|
|
|
|
static void SaveToFile(string filePath, PackedMemorySnapshot snapshot)
|
|
{
|
|
// Saving snapshots using JsonUtility, instead of BinaryFormatter, is significantly faster.
|
|
// I cancelled saving a memory snapshot that is saving using BinaryFormatter after 24 hours.
|
|
// Saving the same memory snapshot using JsonUtility.ToJson took 20 seconds only.
|
|
|
|
UnityEngine.Profiling.Profiler.BeginSample("PackedMemorySnapshotUtility.SaveToFile");
|
|
|
|
var json = JsonUtility.ToJson(snapshot);
|
|
File.WriteAllText(filePath, json);
|
|
|
|
UnityEngine.Profiling.Profiler.EndSample();
|
|
}
|
|
|
|
public static PackedMemorySnapshot LoadFromFile()
|
|
{
|
|
var filePath = EditorUtility.OpenFilePanelWithFilters("Load Snapshot", null, new[] { "Snapshots", "memsnap2,memsnap" });
|
|
if(string.IsNullOrEmpty(filePath))
|
|
return null;
|
|
|
|
return LoadFromFile(filePath);
|
|
}
|
|
|
|
static PackedMemorySnapshot LoadFromFile(string filePath)
|
|
{
|
|
PackedMemorySnapshot result = null;
|
|
string fileExtension = Path.GetExtension(filePath);
|
|
|
|
if(string.Equals(fileExtension, ".memsnap2", System.StringComparison.OrdinalIgnoreCase))
|
|
{
|
|
UnityEngine.Profiling.Profiler.BeginSample("PackedMemorySnapshotUtility.LoadFromFile(json)");
|
|
|
|
var json = File.ReadAllText(filePath);
|
|
result = JsonUtility.FromJson<PackedMemorySnapshot>(json);
|
|
|
|
UnityEngine.Profiling.Profiler.EndSample();
|
|
}
|
|
else if(string.Equals(fileExtension, ".memsnap", System.StringComparison.OrdinalIgnoreCase))
|
|
{
|
|
UnityEngine.Profiling.Profiler.BeginSample("PackedMemorySnapshotUtility.LoadFromFile(binary)");
|
|
|
|
var binaryFormatter = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
|
|
using(Stream stream = File.Open(filePath, FileMode.Open))
|
|
{
|
|
result = binaryFormatter.Deserialize(stream) as PackedMemorySnapshot;
|
|
}
|
|
|
|
UnityEngine.Profiling.Profiler.EndSample();
|
|
}
|
|
else
|
|
{
|
|
Debug.LogErrorFormat("MemoryProfiler: Unrecognized memory snapshot format '{0}'.", filePath);
|
|
}
|
|
|
|
return result;
|
|
}
|
|
}
|
|
|