Files
speckle-unity/Assets/Extra/PerformanceTestSender.cs
Jedd Morgan 1b2eeed3eb 2.18 Update
2024-02-22 18:31:09 +00:00

85 lines
2.5 KiB
C#

using System.Threading;
using System.Threading.Tasks;
using Speckle.ConnectorUnity.Components;
using Speckle.Core.Api;
using Speckle.Core.Credentials;
using Speckle.Core.Models;
using Speckle.Core.Transports;
using UnityEngine;
namespace Extra
{
/// <summary>
/// Script used to generate streams for performance benchmarking in other hostApps.
/// Will send several several commits with a varying number of copies on a GameObject (with children)
/// </summary>
[ExecuteAlways]
[RequireComponent(typeof(SpeckleSender))]
public sealed class PerformanceTestSender : MonoBehaviour
{
[Range(0, 100)]
public int numberOfIterations = 10;
public Vector3 translation = Vector3.forward * 100;
public GameObject objectToSend;
private SpeckleSender sender;
private void Awake()
{
sender = GetComponent<SpeckleSender>();
}
public async Task SendIterations()
{
GameObject go = new GameObject();
for (int i = 0; i < numberOfIterations; i++)
{
Instantiate(objectToSend, translation * i, Quaternion.identity, go.transform);
Base b = sender.Converter.RecursivelyConvertToSpeckle(go, _ => true);
await Send(b, $"{i}");
}
Debug.Log("Done!");
}
private async Task<string> Send(Base data, string branchName)
{
Client client = sender.Account.Client!;
Stream stream = sender.Stream.Selected;
Account selectedAccount = sender.Account.Selected!;
using ServerTransport transport = new(selectedAccount, stream!.id);
string branchId = await client.BranchCreate(
new BranchCreateInput() { streamId = stream.id, name = branchName }
);
return await SpeckleSender.SendDataAsync(
remoteTransport: transport,
data,
client,
branchId,
true
);
}
}
#if UNITY_EDITOR
[UnityEditor.CustomEditor(typeof(PerformanceTestSender))]
public sealed class PerformanceTestSenderEditor : UnityEditor.Editor
{
public override async void OnInspectorGUI()
{
DrawDefaultInspector();
if (GUILayout.Button("Create and send"))
{
await ((PerformanceTestSender)target).SendIterations();
}
}
}
#endif
}