6666import java .util .concurrent .LinkedBlockingDeque ;
6767import java .util .concurrent .atomic .AtomicBoolean ;
6868import java .util .concurrent .atomic .AtomicReference ;
69- import java .util .concurrent .locks .ReentrantLock ;
7069import java .util .function .Supplier ;
7170
7271import static com .falsepattern .falsetweaks .modules .occlusion .OcclusionRenderer .*;
@@ -105,19 +104,12 @@ public void prepare(List<WorldRenderer> worldRenderersToUpdateList, int updateLi
105104 worldRenderersToUpdateListInternal .flip ();
106105 back .clear ();
107106 val size = front .size ();
108- while (!finishedQueueLock .tryLock ()) {
109- Thread .yield ();
110- }
111- try {
112- for (int i = 0 ; i < size ; i ++) {
113- val wr = front .get (i );
114- val task = ((IRendererUpdateResultHolder ) wr ).ft$getRendererUpdateTask ();
115- if (!task .inFinishedQueue ) {
116- back .add (wr );
117- }
107+ for (int i = 0 ; i < size ; i ++) {
108+ val wr = front .get (i );
109+ val task = ((IRendererUpdateResultHolder ) wr ).ft$getRendererUpdateTask ();
110+ if (!task .inFinishedQueue ) {
111+ back .add (wr );
118112 }
119- } finally {
120- finishedQueueLock .unlock ();
121113 }
122114 front .clear ();
123115 back .addAll (worldRenderersToUpdateList );
@@ -129,25 +121,18 @@ public void prepare(List<WorldRenderer> worldRenderersToUpdateList, int updateLi
129121 public boolean hasNext () {
130122 WorldRenderer wr ;
131123
132- while (!finishedQueueLock .tryLock ()) {
133- Thread .yield ();
134- }
135- try {
136- while ((wr = finishedTasks .poll ()) != null ) {
137- UpdateTask task = ((IRendererUpdateResultHolder ) wr ).ft$getRendererUpdateTask ();
138- task .inFinishedQueue = false ;
139- if (task .cancelled || (!wr .needsUpdate && !((WorldRendererOcclusion ) wr ).ft$needsSort ())) {
140- if (AGGRESSIVE_NEODYMIUM_THREADING ) {
141- NeodymiumCompat .safeDiscardTask (task );
142- }
143- task .clear ();
144- } else {
145- nextRenderer = wr ;
146- return true ;
124+ while ((wr = finishedTasks .poll ()) != null ) {
125+ UpdateTask task = ((IRendererUpdateResultHolder ) wr ).ft$getRendererUpdateTask ();
126+ task .inFinishedQueue = false ;
127+ if (task .cancelled || (!wr .needsUpdate && !((WorldRendererOcclusion ) wr ).ft$needsSort ())) {
128+ if (AGGRESSIVE_NEODYMIUM_THREADING ) {
129+ NeodymiumCompat .safeDiscardTask (task );
147130 }
131+ task .clear ();
132+ } else {
133+ nextRenderer = wr ;
134+ return true ;
148135 }
149- } finally {
150- finishedQueueLock .unlock ();
151136 }
152137 return false ;
153138 }
@@ -397,24 +382,17 @@ private void updateWorkQueue(List<WorldRenderer> toUpdateList, int updateLimit)
397382 }
398383
399384 private void removeCancelledResults () {
400- while (!finishedQueueLock .tryLock ()) {
401- Thread .yield ();
402- }
403- try {
404- for (Iterator <WorldRenderer > it = finishedTasks .iterator (); it .hasNext (); ) {
405- WorldRenderer wr = it .next ();
406- UpdateTask task = ((IRendererUpdateResultHolder ) wr ).ft$getRendererUpdateTask ();
407- if (task .cancelled ) {
408- // Discard results and allow re-schedule on worker thread.
409- if (AGGRESSIVE_NEODYMIUM_THREADING ) {
410- NeodymiumCompat .safeDiscardTask (task );
411- }
412- task .clear ();
413- it .remove ();
385+ for (Iterator <WorldRenderer > it = finishedTasks .iterator (); it .hasNext (); ) {
386+ WorldRenderer wr = it .next ();
387+ UpdateTask task = ((IRendererUpdateResultHolder ) wr ).ft$getRendererUpdateTask ();
388+ if (task .cancelled ) {
389+ // Discard results and allow re-schedule on worker thread.
390+ if (AGGRESSIVE_NEODYMIUM_THREADING ) {
391+ NeodymiumCompat .safeDiscardTask (task );
414392 }
393+ task .clear ();
394+ it .remove ();
415395 }
416- } finally {
417- finishedQueueLock .unlock ();
418396 }
419397 }
420398
@@ -752,22 +730,13 @@ private void runTask(WorldRenderer wr, Profiler profiler) {
752730 task .clear ();
753731 }
754732 ((ICapturableTessellator ) threadTessellator .get ()).discard ();
755- while (!finishedQueueLock .tryLock ()) {
756- Thread .yield ();
757- }
758- try {
759- finishedTasks .add (wr );
760- task .inFinishedQueue = true ;
761- } finally {
762- finishedQueueLock .unlock ();
763- }
733+ finishedTasks .add (wr );
734+ task .inFinishedQueue = true ;
764735 } finally {
765736 profiler .endSection ();
766737 }
767738 }
768739
769- private final ReentrantLock finishedQueueLock = new ReentrantLock ();
770-
771740 private class WorkerThread extends FastThreadLocal .TurboThread {
772741 private final AtomicBoolean myRun ;
773742 private final CircularTaskQueue taskQueue ;
0 commit comments