Browse Source

Improved CPU efficiency of MessageManager::runDispatchLoopUntil() on OSX

tags/2021-05-28
jules 6 years ago
parent
commit
60cbac6a6d
1 changed files with 10 additions and 9 deletions
  1. +10
    -9
      modules/juce_events/native/juce_mac_MessageManager.mm

+ 10
- 9
modules/juce_events/native/juce_mac_MessageManager.mm View File

@@ -389,18 +389,19 @@ bool MessageManager::runDispatchLoopUntil (int millisecondsToRunFor)
{ {
JUCE_AUTORELEASEPOOL 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];
} }
} }


Loading…
Cancel
Save