MCPcopy Create free account
hub / github.com/VCVRack/Rack / stepBlock

Method stepBlock

src/engine/Engine.cpp:552–600  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

550
551
552void Engine::stepBlock(int frames) {
553 // Start timer before locking
554 double startTime = system::getTime();
555
556 std::lock_guard<std::mutex> stepLock(internal->blockMutex);
557 SharedLock<SharedMutex> lock(internal->mutex);
558 // Configure thread
559 system::resetFpuFlags();
560
561 internal->blockFrame = internal->frame;
562 internal->blockTime = system::getTime();
563 internal->blockFrames = frames;
564
565 // Update expander pointers
566 for (Module* module : internal->modules) {
567 Engine_updateExpander_NoLock(this, module, 0);
568 Engine_updateExpander_NoLock(this, module, 1);
569 }
570
571 // Launch workers
572 Engine_relaunchWorkers(this, settings::threadCount);
573
574 // Step individual frames
575 for (int i = 0; i < frames; i++) {
576 Engine_stepFrame(this);
577 }
578
579 yieldWorkers();
580
581 internal->block++;
582
583 // Stop timer
584 double endTime = system::getTime();
585 double meter = (endTime - startTime) / (frames * internal->sampleTime);
586 internal->meterTotal += meter;
587 internal->meterMax = std::fmax(internal->meterMax, meter);
588 internal->meterCount++;
589
590 // Update meter values
591 const double meterUpdateDuration = 1.0;
592 if (startTime - internal->meterLastTime >= meterUpdateDuration) {
593 internal->meterLastAverage = internal->meterTotal / internal->meterCount;
594 internal->meterLastMax = internal->meterMax;
595 internal->meterLastTime = startTime;
596 internal->meterCount = 0;
597 internal->meterTotal = 0.0;
598 internal->meterMax = 0.0;
599 }
600}
601
602
603void Engine::setMasterModule(Module* module) {

Callers 2

processBufferMethod · 0.80
Engine_fallbackRunFunction · 0.80

Calls 6

getTimeFunction · 0.85
resetFpuFlagsFunction · 0.85
Engine_relaunchWorkersFunction · 0.85
Engine_stepFrameFunction · 0.85
fmaxFunction · 0.85

Tested by

no test coverage detected