Skip to content

Commit 2786285

Browse files
committed
add tests
1 parent 421658d commit 2786285

File tree

4 files changed

+187
-179
lines changed

4 files changed

+187
-179
lines changed

net.lecousin.core/src/main/java/net/lecousin/framework/concurrent/async/Async.java

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
import java.util.concurrent.TimeoutException;
99
import java.util.function.Function;
1010

11-
import net.lecousin.framework.application.LCCore;
1211
import net.lecousin.framework.concurrent.CancelException;
1312
import net.lecousin.framework.concurrent.threads.TaskExecutor;
1413
import net.lecousin.framework.concurrent.threads.Threading;
@@ -83,20 +82,19 @@ public final void unblock() {
8382
listeners = listenersInline;
8483
listenersInline = new ArrayList<>(2);
8584
}
86-
Logger log = LCCore.getApplication().getLoggerFactory().getLogger(Async.class);
85+
Logger log = Threading.getLogger();
8786
do {
8887
if (!log.debug())
8988
for (int i = 0; i < listeners.size(); ++i)
9089
try { listeners.get(i).run(); }
9190
catch (Exception t) { logListenerError(log, listeners.get(i), t); }
9291
else
9392
for (int i = 0; i < listeners.size(); ++i) {
93+
Runnable listener = listeners.get(i);
9494
long start = System.nanoTime();
95-
try { listeners.get(i).run(); }
96-
catch (Exception t) { logListenerError(log, listeners.get(i), t); }
97-
long time = System.nanoTime() - start;
98-
if (time > 1000000) // more than 1ms
99-
log.debug("Listener took " + (time / 1000000.0d) + "ms: " + listeners.get(i));
95+
try { listener.run(); }
96+
catch (Exception t) { logListenerError(log, listener, t); }
97+
Threading.debugListenerCall(listener, System.nanoTime() - start);
10098
}
10199
synchronized (this) {
102100
if (listenersInline.isEmpty()) {

net.lecousin.core/src/main/java/net/lecousin/framework/concurrent/async/AsyncSupplier.java

Lines changed: 17 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
import java.util.function.Consumer;
1010
import java.util.function.Function;
1111

12-
import net.lecousin.framework.application.LCCore;
1312
import net.lecousin.framework.concurrent.CancelException;
1413
import net.lecousin.framework.concurrent.Executable;
1514
import net.lecousin.framework.concurrent.threads.Task;
@@ -333,20 +332,19 @@ public final void unblockSuccess(T result) {
333332
listeners = listenersInline;
334333
listenersInline = new ArrayList<>(2);
335334
}
336-
Logger log = LCCore.getApplication().getLoggerFactory().getLogger(AsyncSupplier.class);
335+
Logger log = Threading.getLogger();
337336
do {
338337
if (!log.debug())
339338
for (int i = 0; i < listeners.size(); ++i)
340339
try { listeners.get(i).ready(result); }
341340
catch (Exception t) { logListenerError(log, listeners.get(i), t); }
342341
else
343342
for (int i = 0; i < listeners.size(); ++i) {
343+
Listener<T, TError> listener = listeners.get(i);
344344
long start = System.nanoTime();
345-
try { listeners.get(i).ready(result); }
346-
catch (Exception t) { logListenerError(log, listeners.get(i), t); }
347-
long time = System.nanoTime() - start;
348-
if (time > 1000000) // more than 1ms
349-
log.debug("Listener ready took " + (time / 1000000.0d) + "ms: " + listeners.get(i));
345+
try { listener.ready(result); }
346+
catch (Exception t) { logListenerError(log, listener, t); }
347+
Threading.debugListenerCall(listener, System.nanoTime() - start);
350348
}
351349
listeners = getNextListeners(listeners);
352350
} while (listeners != null);
@@ -379,7 +377,7 @@ public final void unblockError(TError error) {
379377
listeners = listenersInline;
380378
listenersInline = new ArrayList<>(2);
381379
}
382-
Logger log = LCCore.getApplication().getLoggerFactory().getLogger(AsyncSupplier.class);
380+
Logger log = Threading.getLogger();
383381
do {
384382
if (!log.debug())
385383
for (int i = 0; i < listeners.size(); ++i)
@@ -393,18 +391,17 @@ public final void unblockError(TError error) {
393391
}
394392
else
395393
for (int i = 0; i < listeners.size(); ++i) {
394+
Listener<T, TError> listener = listeners.get(i);
396395
long start = System.nanoTime();
397-
try { listeners.get(i).error(error); }
396+
try { listener.error(error); }
398397
catch (Exception t) {
399-
logListenerError(log, listeners.get(i), t);
400-
try { listeners.get(i).cancelled(new CancelException("Error in listener", t)); }
398+
logListenerError(log, listener, t);
399+
try { listener.cancelled(new CancelException("Error in listener", t)); }
401400
catch (Exception t2) { log.error(
402401
"Exception thrown while cancelling inline listener of AsyncSupplier after error: "
403-
+ listeners.get(i), t2); }
402+
+ listener, t2); }
404403
}
405-
long time = System.nanoTime() - start;
406-
if (time > 1000000) // more than 1ms
407-
log.debug("Listener error took " + (time / 1000000.0d) + "ms: " + listeners.get(i));
404+
Threading.debugListenerCall(listener, System.nanoTime() - start);
408405
}
409406
listeners = getNextListeners(listeners);
410407
} while (listeners != null);
@@ -429,20 +426,19 @@ public void unblockCancel(CancelException event) {
429426
listeners = listenersInline;
430427
listenersInline = new ArrayList<>(2);
431428
}
432-
Logger log = LCCore.getApplication().getLoggerFactory().getLogger(AsyncSupplier.class);
429+
Logger log = Threading.getLogger();
433430
do {
434431
if (!log.debug())
435432
for (int i = 0; i < listeners.size(); ++i)
436433
try { listeners.get(i).cancelled(event); }
437434
catch (Exception t) { logListenerError(log, listeners.get(i), t); }
438435
else
439436
for (int i = 0; i < listeners.size(); ++i) {
437+
Listener<T, TError> listener = listeners.get(i);
440438
long start = System.nanoTime();
441-
try { listeners.get(i).cancelled(event); }
442-
catch (Exception t) { logListenerError(log, listeners.get(i), t); }
443-
long time = System.nanoTime() - start;
444-
if (time > 1000000) // more than 1ms
445-
log.debug("Listener cancelled took " + (time / 1000000.0d) + "ms: " + listeners.get(i));
439+
try { listener.cancelled(event); }
440+
catch (Exception t) { logListenerError(log, listener, t); }
441+
Threading.debugListenerCall(listener, System.nanoTime() - start);
446442
}
447443
listeners = getNextListeners(listeners);
448444
} while (listeners != null);

net.lecousin.core/src/main/java/net/lecousin/framework/concurrent/threads/Threading.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ public static Logger getLogger() {
4040

4141
public static boolean traceBlockingTasks = System.getProperty("lc.traceBlockingTasks") != null;
4242
public static boolean traceTaskTime = System.getProperty("lc.traceTaskTime") != null;
43+
public static long debugListenersTakingMoreThanMilliseconds = 20;
4344

4445
/**
4546
* Initialize multi-threading.
@@ -302,4 +303,10 @@ public static String debug() {
302303
return s.toString();
303304
}
304305

306+
/** Signal a call to a listener and log it if it took a too long time. */
307+
public static void debugListenerCall(Object listener, long nanoseconds) {
308+
if (nanoseconds > debugListenersTakingMoreThanMilliseconds * 1000000)
309+
logger.debug("Listener took " + (nanoseconds / 1000000.0d) + "ms: " + listener);
310+
}
311+
305312
}

0 commit comments

Comments
 (0)