diff --git a/spine-unity/Assets/Spine/Runtime/spine-unity/Threading/SkeletonUpdateSystem.cs b/spine-unity/Assets/Spine/Runtime/spine-unity/Threading/SkeletonUpdateSystem.cs
index 1aa3debe0..ef8fe9e66 100644
--- a/spine-unity/Assets/Spine/Runtime/spine-unity/Threading/SkeletonUpdateSystem.cs
+++ b/spine-unity/Assets/Spine/Runtime/spine-unity/Threading/SkeletonUpdateSystem.cs
@@ -155,7 +155,7 @@ namespace Spine.Unity {
volatile protected int numExceptionsSet = 0;
protected int usedThreadCount = -1;
- public void DeferredLogException(Exception exc, UnityEngine.Object context, int threadIndex) {
+ public void DeferredLogException (Exception exc, UnityEngine.Object context, int threadIndex) {
exceptions[threadIndex] = exc;
exceptionObjects[threadIndex] = context;
numExceptionsSet++;
@@ -287,7 +287,12 @@ namespace Spine.Unity {
genericSkeletonTasks[t] = new WorkerPoolTask();
}
}
-
+#if ENABLE_THREAD_PROFILING
+ if (profilerSamplerUpdate == null) {
+ profilerSamplerUpdate = new CustomSampler[numThreads];
+ }
+#endif
+
for (int t = 0; t < updateDone.Count; ++t) {
updateDone[t].Reset();
}
@@ -388,7 +393,7 @@ namespace Spine.Unity {
};
UpdateSkeletonsAsyncSplit(range, t);
-
+
start = end;
if (start >= skeletonEnd) {
while (++t < numAsyncThreads) {
@@ -422,7 +427,7 @@ namespace Spine.Unity {
// The explicit memory barrier below is added to ensure a memory barrier is in place on the many
// Unity target platforms.
Thread.MemoryBarrier();
-
+
// process main thread callback part
anyWorkLeft = UpdateSkeletonsMainThreadSplit(skeletons, endIndexThreaded, Time.deltaTime, Time.frameCount);
isFirstIteration = false;
@@ -472,7 +477,12 @@ namespace Spine.Unity {
genericSkeletonTasks[t] = new WorkerPoolTask();
}
}
-
+#if ENABLE_THREAD_PROFILING
+ if (profilerSamplerLateUpdate == null) {
+ profilerSamplerLateUpdate = new CustomSampler[numThreads];
+ }
+#endif
+
for (int t = 0; t < lateUpdateDone.Count; ++t) {
lateUpdateDone[t].Reset();
}
@@ -481,7 +491,7 @@ namespace Spine.Unity {
lateUpdateDone.Add(new ResetEvent(false));
}
}
-
+
int rangePerThread = Mathf.CeilToInt((float)skeletonRenderers.Count / (float)numThreads);
int skeletonEnd = skeletonRenderers.Count;
#if DONT_WAIT_FOR_ALL_LATEUPDATE_TASKS
@@ -638,8 +648,8 @@ namespace Spine.Unity {
}
#if ENABLE_THREAD_PROFILING
- CustomSampler[] profilerSamplerUpdate = new CustomSampler[16];
- CustomSampler[] profilerSamplerLateUpdate = new CustomSampler[16];
+ CustomSampler[] profilerSamplerUpdate = null;
+ CustomSampler[] profilerSamplerLateUpdate = null;
#endif
/// Perform Update at all SkeletonRenderers asynchronously.
@@ -689,7 +699,7 @@ namespace Spine.Unity {
/// Perform Update at all SkeletonRenderers asynchronously and split off at
/// main-thread callbacks.
void UpdateSkeletonsAsyncSplit (SkeletonUpdateRange range, int threadIndex) {
-
+
#if ENABLE_THREAD_PROFILING
if (profilerSamplerUpdate[threadIndex] == null) {
profilerSamplerUpdate[threadIndex] = CustomSampler.Create("Spine Update " + threadIndex);
@@ -763,7 +773,7 @@ namespace Spine.Unity {
void UpdateSkeletonsSynchronous (List skeletons, SkeletonUpdateRange range) {
int start = range.rangeStart;
int end = range.rangeEndExclusive;
-
+
for (int r = start; r < end; ++r) {
skeletons[r].UpdateInternal(range.deltaTime, range.frameCount, calledFromOnlyMainThread: true);
}