Files
HDRobotics/Assets/Oculus/VR/Scripts/OVRTelemetry/OVRTelemetryMarker.cs

128 lines
3.6 KiB
C#

/*
* Copyright (c) Meta Platforms, Inc. and affiliates.
* All rights reserved.
*
* Licensed under the Oculus SDK License Agreement (the "License");
* you may not use the Oculus SDK except in compliance with the License,
* which is provided at the time of installation or download, or which
* otherwise accompanies this software in either electronic or hard copy form.
*
* You may obtain a copy of the License at
*
* https://developer.oculus.com/licenses/oculussdk/
*
* Unless required by applicable law or agreed to in writing, the Oculus SDK
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
using System;
using UnityEngine;
using static OVRTelemetry;
internal struct OVRTelemetryMarker : IDisposable
{
internal struct OVRTelemetryMarkerState
{
public bool Sent { get; set; }
public OVRPlugin.Qpl.ResultType Result { get; set; }
public OVRTelemetryMarkerState(bool sent, OVRPlugin.Qpl.ResultType result)
{
Result = result;
Sent = sent;
}
}
private OVRTelemetryMarkerState State { get; set; }
public bool Sent => State.Sent;
public OVRPlugin.Qpl.ResultType Result => State.Result;
public int MarkerId { get; }
public int InstanceKey { get; }
private readonly TelemetryClient _client;
public OVRTelemetryMarker(
int markerId,
int instanceKey = OVRPlugin.Qpl.DefaultInstanceKey,
long timestampMs = OVRPlugin.Qpl.AutoSetTimestampMs)
: this(
OVRTelemetry.Client,
markerId,
instanceKey,
timestampMs)
{
}
internal OVRTelemetryMarker(
TelemetryClient client,
int markerId,
int instanceKey = OVRPlugin.Qpl.DefaultInstanceKey,
long timestampMs = OVRPlugin.Qpl.AutoSetTimestampMs)
{
MarkerId = markerId;
InstanceKey = instanceKey;
_client = client;
State = new OVRTelemetryMarkerState(false, OVRPlugin.Qpl.ResultType.Success);
_client.MarkerStart(markerId, instanceKey, timestampMs);
}
public OVRTelemetryMarker SetResult(OVRPlugin.Qpl.ResultType result)
{
State = new OVRTelemetryMarkerState(Sent, result);
return this;
}
public OVRTelemetryMarker AddAnnotation(string annotationKey, string annotationValue)
{
_client.MarkerAnnotation(MarkerId, annotationKey, annotationValue, InstanceKey);
return this;
}
public OVRTelemetryMarker AddAnnotationIfNotNullOrEmpty(string annotationKey, string annotationValue)
{
return string.IsNullOrEmpty(annotationValue) ? this : AddAnnotation(annotationKey, annotationValue);
}
public OVRTelemetryMarker Send()
{
AddAnnotation(OVRTelemetryConstants.OVRManager.AnnotationTypes.EngineVersion, Application.unityVersion);
State = new OVRTelemetryMarkerState(true, Result);
_client.MarkerEnd(MarkerId, Result, InstanceKey);
return this;
}
public OVRTelemetryMarker SendIf(bool condition)
{
if (condition)
{
return Send();
}
State = new OVRTelemetryMarkerState(true, Result);
return this;
}
public OVRTelemetryMarker AddPoint(OVRTelemetry.MarkerPoint point)
{
_client.MarkerPointCached(MarkerId, point.NameHandle, InstanceKey);
return this;
}
public void Dispose()
{
if (!Sent)
{
Send();
}
}
}