MCPcopy Create free account
hub / github.com/OpenGene/fastp / processorTask

Method processorTask

src/peprocessor.cpp:1021–1073  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1019}
1020
1021void PairEndProcessor::processorTask(ThreadConfig* config)
1022{
1023 SingleProducerSingleConsumerList<ReadPack*>* inputLeft = config->getLeftInput();
1024 SingleProducerSingleConsumerList<ReadPack*>* inputRight = config->getRightInput();
1025 while(true) {
1026 if(config->canBeStopped()){
1027 break;
1028 }
1029 while(inputLeft->canBeConsumed() && inputRight->canBeConsumed()) {
1030 ReadPack* dataLeft = inputLeft->consume();
1031 ReadPack* dataRight = inputRight->consume();
1032 processPairEnd(dataLeft, dataRight, config);
1033 }
1034 if(inputLeft->isProducerFinished() && !inputLeft->canBeConsumed()) {
1035 break;
1036 } else if(inputRight->isProducerFinished() && !inputRight->canBeConsumed()) {
1037 break;
1038 } else {
1039 std::unique_lock<std::mutex> lk(mBackpressureMtx);
1040 mBackpressureCV.wait_for(lk, std::chrono::milliseconds(1));
1041 }
1042 }
1043 inputLeft->setConsumerFinished();
1044 inputRight->setConsumerFinished();
1045
1046 int finishedCount = mFinishedThreads.fetch_add(1, std::memory_order_release) + 1;
1047 if(mOptions->verbose) {
1048 string msg = "thread " + to_string(config->getThreadId() + 1) + " data processing completed";
1049 loginfo(msg);
1050 }
1051
1052 if(finishedCount == mOptions->thread) {
1053 if(mLeftWriter)
1054 mLeftWriter->setInputCompleted();
1055 if(mRightWriter)
1056 mRightWriter->setInputCompleted();
1057 if(mUnpairedLeftWriter)
1058 mUnpairedLeftWriter->setInputCompleted();
1059 if(mUnpairedRightWriter)
1060 mUnpairedRightWriter->setInputCompleted();
1061 if(mMergedWriter)
1062 mMergedWriter->setInputCompleted();
1063 if(mFailedWriter)
1064 mFailedWriter->setInputCompleted();
1065 if(mOverlappedWriter)
1066 mOverlappedWriter->setInputCompleted();
1067 }
1068
1069 if(mOptions->verbose) {
1070 string msg = "thread " + to_string(config->getThreadId() + 1) + " finished";
1071 loginfo(msg);
1072 }
1073}
1074
1075void PairEndProcessor::writerTask(WriterThread* config)
1076{

Callers

nothing calls this directly

Calls 10

loginfoFunction · 0.85
getLeftInputMethod · 0.80
getRightInputMethod · 0.80
canBeStoppedMethod · 0.80
canBeConsumedMethod · 0.80
consumeMethod · 0.80
isProducerFinishedMethod · 0.80
setConsumerFinishedMethod · 0.80
getThreadIdMethod · 0.80
setInputCompletedMethod · 0.80

Tested by

no test coverage detected