From 60cbac6a6df3dd9b77ef4c006ace264ce4a61473 Mon Sep 17 00:00:00 2001 From: jules Date: Tue, 2 Apr 2019 14:31:23 +0100 Subject: [PATCH] Improved CPU efficiency of MessageManager::runDispatchLoopUntil() on OSX --- .../native/juce_mac_MessageManager.mm | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/modules/juce_events/native/juce_mac_MessageManager.mm b/modules/juce_events/native/juce_mac_MessageManager.mm index ddc09cf5d1..36359d908a 100644 --- a/modules/juce_events/native/juce_mac_MessageManager.mm +++ b/modules/juce_events/native/juce_mac_MessageManager.mm @@ -389,18 +389,19 @@ bool MessageManager::runDispatchLoopUntil (int millisecondsToRunFor) { JUCE_AUTORELEASEPOOL { - CFRunLoopRunInMode (kCFRunLoopDefaultMode, 0.001, true); + auto msRemaining = endTime - Time::currentTimeMillis(); - NSEvent* e = [NSApp nextEventMatchingMask: NSEventMaskAny - untilDate: [NSDate dateWithTimeIntervalSinceNow: 0.001] - inMode: NSDefaultRunLoopMode - dequeue: YES]; + if (msRemaining <= 0) + break; - if (e != nil && (isEventBlockedByModalComps == nullptr || ! (*isEventBlockedByModalComps) (e))) - [NSApp sendEvent: e]; + CFRunLoopRunInMode (kCFRunLoopDefaultMode, jmin (1.0, msRemaining * 0.001), true); - if (Time::currentTimeMillis() >= endTime) - break; + if (NSEvent* e = [NSApp nextEventMatchingMask: NSEventMaskAny + untilDate: [NSDate dateWithTimeIntervalSinceNow: 0.001] + inMode: NSDefaultRunLoopMode + dequeue: YES]) + if (isEventBlockedByModalComps == nullptr || ! (*isEventBlockedByModalComps) (e)) + [NSApp sendEvent: e]; } }