using System;
using System.Text;
using UnityEngine;

[ExecuteInEditMode]
public class SystemInfoHUD : MonoBehaviour
{
	public void Start()
	{
		base.useGUILayout = false;
	}

	public void OnGUI()
	{
		if (!this.show || (!Application.isPlaying && !this.showInEditor))
		{
			return;
		}
		int num = GC.CollectionCount(0);
		if (this.lastCollectNum != (float)num)
		{
			this.lastCollectNum = (float)num;
			this.delta = Time.realtimeSinceStartup - this.lastCollect;
			this.lastCollect = Time.realtimeSinceStartup;
			this.lastDeltaTime = Time.deltaTime;
			this.collectAlloc = this.allocMem;
		}
		this.allocMem = (int)GC.GetTotalMemory(false);
		this.peakAlloc = ((this.allocMem <= this.peakAlloc) ? this.peakAlloc : this.allocMem);
		if (Time.realtimeSinceStartup - this.lastAllocSet > 0.3f)
		{
			int num2 = this.allocMem - this.lastAllocMemory;
			this.lastAllocMemory = this.allocMem;
			this.lastAllocSet = Time.realtimeSinceStartup;
			if (num2 >= 0)
			{
				this.allocRate = num2;
			}
		}
		StringBuilder stringBuilder = new StringBuilder();
		stringBuilder.Append("Currently allocated\t");
		stringBuilder.Append(((float)this.allocMem / 1000000f).ToString("0"));
		stringBuilder.Append("mb\n");
		stringBuilder.Append("Peak allocated\t");
		stringBuilder.Append(((float)this.peakAlloc / 1000000f).ToString("0"));
		stringBuilder.Append("mb (last collect ");
		stringBuilder.Append(((float)this.collectAlloc / 1000000f).ToString("0"));
		stringBuilder.Append(" mb)\n");
		stringBuilder.Append("Allocation rate\t");
		stringBuilder.Append(((float)this.allocRate / 1000000f).ToString("0.0"));
		stringBuilder.Append("mb\n");
		stringBuilder.Append("Collection frequency\t");
		stringBuilder.Append(this.delta.ToString("0.00"));
		stringBuilder.Append("s\n");
		stringBuilder.Append("Last collect delta\t");
		stringBuilder.Append(this.lastDeltaTime.ToString("0.000"));
		stringBuilder.Append("s (");
		stringBuilder.Append((1f / this.lastDeltaTime).ToString("0.0"));
		stringBuilder.Append(" fps)");
		if (this.showFPS)
		{
			stringBuilder.Append("\n" + (1f / Time.deltaTime).ToString("0.0") + " fps");
		}
		stringBuilder.Append(string.Concat(new object[]
		{
			"\ntest x",
			SystemInfoHUD.vecTest.x,
			" y",
			SystemInfoHUD.vecTest.y,
			" z",
			SystemInfoHUD.vecTest.z
		}));
		for (int i = 0; i < GameMain.Instance.CharacterMgr.GetMaidCount(); i++)
		{
			Maid maid = GameMain.Instance.CharacterMgr.GetMaid(i);
			if (!(maid == null) && !(maid.body0 == null) && maid.body0.isLoadedBody)
			{
				stringBuilder.Append(string.Concat(new object[]
				{
					"\nMaid[",
					i,
					"] ",
					maid.body0.AudioMan.FileName
				}));
			}
		}
		GUI.Box(new Rect(5f, 5f, 310f, (float)(80 + ((!this.showFPS) ? 0 : 16) + 16)), string.Empty);
		GUI.Label(new Rect(10f, 5f, 1000f, 200f), stringBuilder.ToString());
	}

	public bool show = true;

	public bool showFPS;

	public bool showInEditor;

	public static Vector3 vecTest;

	private float lastCollect;

	private float lastCollectNum;

	private float delta;

	private float lastDeltaTime;

	private int allocRate;

	private int lastAllocMemory;

	private float lastAllocSet = -9999f;

	private int allocMem;

	private int collectAlloc;

	private int peakAlloc;
}
