diff --git a/plugin/src/software/aws/toolkits/eclipse/amazonq/broker/EventBroker.java b/plugin/src/software/aws/toolkits/eclipse/amazonq/broker/EventBroker.java index 7271355d..fa874f07 100644 --- a/plugin/src/software/aws/toolkits/eclipse/amazonq/broker/EventBroker.java +++ b/plugin/src/software/aws/toolkits/eclipse/amazonq/broker/EventBroker.java @@ -3,6 +3,8 @@ package software.aws.toolkits.eclipse.amazonq.broker; +import java.util.ArrayList; +import java.util.List; import java.util.Map; import java.util.UUID; import java.util.concurrent.ArrayBlockingQueue; @@ -63,6 +65,7 @@ public static final class OrderedThreadPoolExecutor { private final BlockingQueue scheduledJobsQueue; private final ThreadPoolExecutor executor; private final int eventQueueCapacity; + private static final int BATCH_PROCESSING_QUEUE_SIZE = 250; OrderedThreadPoolExecutor(final int coreThreadCount, final int maxThreadCount, final int jobQueueCapacity, final int eventQueueCapacity, final int keepAliveTime, final TimeUnit keepAliveTimeUnit) { @@ -116,15 +119,20 @@ private void processQueuedEvents(final String interestId, final Class return; } + List batchedEvents = new ArrayList<>(BATCH_PROCESSING_QUEUE_SIZE); + while (!eventQueue.isEmpty()) { - R newEvent = eventQueue.poll(); - if (newEvent != null) { + eventQueue.drainTo(batchedEvents); + + for (R newEvent : batchedEvents) { try { eventCallback.callWith(newEvent); } catch (Exception e) { e.printStackTrace(); } } + + batchedEvents.clear(); } } finally { jobStatus.set(false);