test
This commit is contained in:
@@ -0,0 +1,131 @@
|
||||
using UnityEngine;
|
||||
|
||||
namespace UnityEditor.Performance.ProfileAnalyzer
|
||||
{
|
||||
internal class Histogram
|
||||
{
|
||||
Draw2D m_2D;
|
||||
Color m_ColorBarBackground;
|
||||
DisplayUnits m_Units;
|
||||
|
||||
public void SetUnits(Units units)
|
||||
{
|
||||
m_Units = new DisplayUnits(units);
|
||||
}
|
||||
|
||||
public Histogram(Draw2D draw2D, Units units)
|
||||
{
|
||||
m_2D = draw2D;
|
||||
SetUnits(units);
|
||||
m_ColorBarBackground = new Color(0.5f, 0.5f, 0.5f);
|
||||
}
|
||||
|
||||
public Histogram(Draw2D draw2D, Units units, Color barBackground)
|
||||
{
|
||||
m_2D = draw2D;
|
||||
SetUnits(units);
|
||||
m_ColorBarBackground = barBackground;
|
||||
}
|
||||
|
||||
public void DrawStart(float width)
|
||||
{
|
||||
EditorGUILayout.BeginHorizontal(GUILayout.Width(width + 10));
|
||||
|
||||
EditorGUILayout.BeginVertical();
|
||||
}
|
||||
|
||||
public void DrawEnd(float width, float min, float max, float spacing)
|
||||
{
|
||||
EditorGUILayout.BeginHorizontal();
|
||||
float halfWidth = width / 2;
|
||||
GUIStyle leftAlignStyle = new GUIStyle(GUI.skin.label);
|
||||
leftAlignStyle.contentOffset = new Vector2(-5, 0);
|
||||
leftAlignStyle.alignment = TextAnchor.MiddleLeft;
|
||||
GUIStyle rightAlignStyle = new GUIStyle(GUI.skin.label);
|
||||
rightAlignStyle.contentOffset = new Vector2(-5, 0);
|
||||
rightAlignStyle.alignment = TextAnchor.MiddleRight;
|
||||
EditorGUILayout.LabelField(m_Units.ToString(min, false, 5, true), leftAlignStyle, GUILayout.Width(halfWidth));
|
||||
EditorGUILayout.LabelField(m_Units.ToString(max, false, 5, true), rightAlignStyle, GUILayout.Width(halfWidth));
|
||||
EditorGUILayout.EndHorizontal();
|
||||
|
||||
EditorGUILayout.EndVertical();
|
||||
|
||||
EditorGUILayout.EndHorizontal();
|
||||
}
|
||||
|
||||
public void DrawBackground(float width, float height, int bucketCount, float min, float max, float spacing)
|
||||
{
|
||||
//bucketCount = (range == 0f) ? 1 : bucketCount;
|
||||
|
||||
float x = (spacing / 2);
|
||||
float y = 0;
|
||||
float w = ((width + spacing) / bucketCount) - spacing;
|
||||
float h = height;
|
||||
|
||||
for (int i = 0; i < bucketCount; i++)
|
||||
{
|
||||
m_2D.DrawFilledBox(x, y, w, h, m_ColorBarBackground);
|
||||
x += w;
|
||||
x += spacing;
|
||||
}
|
||||
}
|
||||
|
||||
public void DrawData(float width, float height, int[] buckets, int totalFrameCount, float min, float max, Color barColor, float spacing)
|
||||
{
|
||||
float range = max - min;
|
||||
|
||||
//int bucketCount = (range == 0f) ? 1 : buckets.Length;
|
||||
int bucketCount = buckets.Length;
|
||||
|
||||
float x = (spacing / 2);
|
||||
float y = 0;
|
||||
float w = ((width + spacing) / bucketCount) - spacing;
|
||||
float h = height;
|
||||
|
||||
float bucketWidth = (range / bucketCount);
|
||||
Rect rect = GUILayoutUtility.GetLastRect();
|
||||
for (int bucketAt = 0; bucketAt < bucketCount; bucketAt++)
|
||||
{
|
||||
var count = buckets[bucketAt];
|
||||
|
||||
float barHeight = (h * count) / totalFrameCount;
|
||||
if (count > 0) // Make sure we always slow a small bar if non zero
|
||||
barHeight = Mathf.Max(1.0f, barHeight);
|
||||
m_2D.DrawFilledBox(x, y, w, barHeight, barColor);
|
||||
|
||||
float bucketStart = min + (bucketAt * bucketWidth);
|
||||
float bucketEnd = bucketStart + bucketWidth;
|
||||
|
||||
var tooltip = string.Format("{0}-{1}\n{2} {3}\n\nBar width: {4}",
|
||||
m_Units.ToTooltipString(bucketStart, false),
|
||||
m_Units.ToTooltipString(bucketEnd, true),
|
||||
count,
|
||||
count == 1 ? "frame" : "frames",
|
||||
m_Units.ToTooltipString(bucketWidth, true)
|
||||
);
|
||||
|
||||
var content = new GUIContent("", tooltip);
|
||||
GUI.Label(new Rect(rect.x + x, rect.y + y, w, h), content);
|
||||
|
||||
x += w;
|
||||
x += spacing;
|
||||
}
|
||||
}
|
||||
|
||||
public void Draw(float width, float height, int[] buckets, int totalFrameCount, float min, float max, Color barColor)
|
||||
{
|
||||
DrawStart(width);
|
||||
|
||||
float spacing = 2;
|
||||
|
||||
if (m_2D.DrawStart(width, height, Draw2D.Origin.BottomLeft))
|
||||
{
|
||||
DrawBackground(width, height, buckets.Length, min, max, spacing);
|
||||
DrawData(width, height, buckets, totalFrameCount, min, max, barColor, spacing);
|
||||
m_2D.DrawEnd();
|
||||
}
|
||||
|
||||
DrawEnd(width, min, max, spacing);
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user