@@ -693,6 +693,8 @@ sys::TimePoint<> UnitMonitor::getModTimeForOutOfDateCheck(StringRef filePath) {
693
693
// IndexDatastoreImpl
694
694
// ===----------------------------------------------------------------------===//
695
695
696
+ static const unsigned MAX_STORE_EVENTS_TO_PROCESS_PER_WORK_UNIT = 10 ;
697
+
696
698
namespace {
697
699
// / A thread-safe deque object for UnitEventInfo objects.
698
700
class UnitEventInfoDeque {
@@ -705,13 +707,17 @@ class UnitEventInfoDeque {
705
707
EventsDequeue.insert (EventsDequeue.end (), evts.begin (), evts.end ());
706
708
}
707
709
708
- Optional <UnitEventInfo> popFront () {
710
+ std::vector <UnitEventInfo> popFront (unsigned N ) {
709
711
sys::ScopedLock L (StateMtx);
710
- if (EventsDequeue.empty ())
711
- return None;
712
- UnitEventInfo evt = EventsDequeue.front ();
713
- EventsDequeue.pop_front ();
714
- return evt;
712
+ std::vector<UnitEventInfo> evts;
713
+ for (unsigned i = 0 ; i < N; ++i) {
714
+ if (EventsDequeue.empty ())
715
+ break ;
716
+ UnitEventInfo evt = EventsDequeue.front ();
717
+ EventsDequeue.pop_front ();
718
+ evts.push_back (std::move (evt));
719
+ }
720
+ return evts;
715
721
}
716
722
};
717
723
}
@@ -723,15 +729,14 @@ static void processUnitEventsIncrementally(std::shared_ptr<UnitEventInfoDeque> e
723
729
std::weak_ptr<StoreUnitRepo> weakUnitRepo,
724
730
std::shared_ptr<IndexSystemDelegate> delegate,
725
731
dispatch_queue_t queue) {
726
- Optional <UnitEventInfo> evtOpt = evts->popFront ();
727
- if (!evtOpt. hasValue ())
732
+ std::vector <UnitEventInfo> poppedEvts = evts->popFront (MAX_STORE_EVENTS_TO_PROCESS_PER_WORK_UNIT );
733
+ if (poppedEvts. empty ())
728
734
return ;
729
735
auto UnitRepo = weakUnitRepo.lock ();
730
736
if (!UnitRepo)
731
737
return ;
732
738
733
- UnitEventInfo evt = evtOpt.getValue ();
734
- UnitRepo->onFilesChange ({evt}, [&](unsigned NumCompleted){
739
+ UnitRepo->onFilesChange (poppedEvts, [&](unsigned NumCompleted){
735
740
delegate->processingCompleted (NumCompleted);
736
741
}, [&](){
737
742
// FIXME: the database should recover.
0 commit comments