@@ -117,6 +117,8 struct VariableController::VariableControllerPrivate { | |||
|
117 | 117 | void updateVariableRequest(QUuid varRequestId); |
|
118 | 118 | void cancelVariableRequest(QUuid varRequestId); |
|
119 | 119 | |
|
120 | SqpRange getLastRequestedRange(QUuid varId); | |
|
121 | ||
|
120 | 122 | QMutex m_WorkingMutex; |
|
121 | 123 | /// Variable model. The VariableController has the ownership |
|
122 | 124 | VariableModel *m_VariableModel; |
@@ -570,59 +572,70 void VariableController::VariableControllerPrivate::processRequest(std::shared_p | |||
|
570 | 572 | const SqpRange &rangeRequested, |
|
571 | 573 | QUuid varRequestId) |
|
572 | 574 | { |
|
573 | ||
|
574 | // TODO: protect at | |
|
575 | 575 | auto varRequest = VariableRequest{}; |
|
576 | auto varId = m_VariableToIdentifierMap.at(var); | |
|
577 | 576 | |
|
578 | auto varStrategyRangesRequested | |
|
579 | = m_VariableCacheStrategy->computeRange(var->range(), rangeRequested); | |
|
577 | auto it = m_VariableToIdentifierMap.find(var); | |
|
578 | if (it != m_VariableToIdentifierMap.cend()) { | |
|
580 | 579 | |
|
581 | auto notInCacheRangeList = QVector<SqpRange>{varStrategyRangesRequested.second}; | |
|
582 | auto inCacheRangeList = QVector<SqpRange>{}; | |
|
583 | if (m_VarIdToVarRequestIdQueueMap.find(varId) == m_VarIdToVarRequestIdQueueMap.cend()) { | |
|
584 | notInCacheRangeList = var->provideNotInCacheRangeList(varStrategyRangesRequested.second); | |
|
585 | inCacheRangeList = var->provideInCacheRangeList(varStrategyRangesRequested.second); | |
|
586 | } | |
|
580 | auto varId = it->second; | |
|
587 | 581 | |
|
588 | if (!notInCacheRangeList.empty()) { | |
|
589 | varRequest.m_RangeRequested = varStrategyRangesRequested.first; | |
|
590 | varRequest.m_CacheRangeRequested = varStrategyRangesRequested.second; | |
|
582 | auto oldRange = getLastRequestedRange(varId); | |
|
591 | 583 | |
|
592 | // store VarRequest | |
|
593 | storeVariableRequest(varId, varRequestId, varRequest); | |
|
584 | // check for update oldRange to the last request range. | |
|
585 | if (oldRange == INVALID_RANGE) { | |
|
586 | oldRange = var->range(); | |
|
587 | } | |
|
588 | ||
|
589 | auto varStrategyRangesRequested | |
|
590 | = m_VariableCacheStrategy->computeRange(oldRange, rangeRequested); | |
|
594 | 591 | |
|
595 | auto varProvider = m_VariableToProviderMap.at(var); | |
|
596 | if (varProvider != nullptr) { | |
|
597 | auto varRequestIdCanceled = m_VariableAcquisitionWorker->pushVariableRequest( | |
|
598 | varRequestId, varId, varStrategyRangesRequested.first, | |
|
599 |
varStrategyRangesRequested.second |
|
|
600 | DataProviderParameters{std::move(notInCacheRangeList), var->metadata()}, | |
|
601 | varProvider); | |
|
592 | auto notInCacheRangeList = QVector<SqpRange>{varStrategyRangesRequested.second}; | |
|
593 | auto inCacheRangeList = QVector<SqpRange>{}; | |
|
594 | if (m_VarIdToVarRequestIdQueueMap.find(varId) == m_VarIdToVarRequestIdQueueMap.cend()) { | |
|
595 | notInCacheRangeList | |
|
596 | = var->provideNotInCacheRangeList(varStrategyRangesRequested.second); | |
|
597 | inCacheRangeList = var->provideInCacheRangeList(varStrategyRangesRequested.second); | |
|
598 | } | |
|
599 | ||
|
600 | if (!notInCacheRangeList.empty()) { | |
|
601 | varRequest.m_RangeRequested = varStrategyRangesRequested.first; | |
|
602 | varRequest.m_CacheRangeRequested = varStrategyRangesRequested.second; | |
|
603 | ||
|
604 | // store VarRequest | |
|
605 | storeVariableRequest(varId, varRequestId, varRequest); | |
|
606 | ||
|
607 | auto varProvider = m_VariableToProviderMap.at(var); | |
|
608 | if (varProvider != nullptr) { | |
|
609 | auto varRequestIdCanceled = m_VariableAcquisitionWorker->pushVariableRequest( | |
|
610 | varRequestId, varId, varStrategyRangesRequested.first, | |
|
611 | varStrategyRangesRequested.second, | |
|
612 | DataProviderParameters{std::move(notInCacheRangeList), var->metadata()}, | |
|
613 | varProvider); | |
|
614 | ||
|
615 | if (!varRequestIdCanceled.isNull()) { | |
|
616 | qCDebug(LOG_VariableAcquisitionWorker()) << tr("vsarRequestIdCanceled: ") | |
|
617 | << varRequestIdCanceled; | |
|
618 | cancelVariableRequest(varRequestIdCanceled); | |
|
619 | } | |
|
620 | } | |
|
621 | else { | |
|
622 | qCCritical(LOG_VariableController()) | |
|
623 | << "Impossible to provide data with a null provider"; | |
|
624 | } | |
|
602 | 625 | |
|
603 |
if (! |
|
|
604 | qCDebug(LOG_VariableAcquisitionWorker()) << tr("vsarRequestIdCanceled: ") | |
|
605 | << varRequestIdCanceled; | |
|
606 | cancelVariableRequest(varRequestIdCanceled); | |
|
626 | if (!inCacheRangeList.empty()) { | |
|
627 | emit q->updateVarDisplaying(var, inCacheRangeList.first()); | |
|
607 | 628 | } |
|
608 | 629 | } |
|
609 | 630 | else { |
|
610 | qCCritical(LOG_VariableController()) | |
|
611 | << "Impossible to provide data with a null provider"; | |
|
612 | } | |
|
613 | ||
|
614 | if (!inCacheRangeList.empty()) { | |
|
615 | emit q->updateVarDisplaying(var, inCacheRangeList.first()); | |
|
631 | varRequest.m_RangeRequested = varStrategyRangesRequested.first; | |
|
632 | varRequest.m_CacheRangeRequested = varStrategyRangesRequested.second; | |
|
633 | // store VarRequest | |
|
634 | storeVariableRequest(varId, varRequestId, varRequest); | |
|
635 | acceptVariableRequest( | |
|
636 | varId, var->dataSeries()->subDataSeries(varStrategyRangesRequested.second)); | |
|
616 | 637 | } |
|
617 | 638 | } |
|
618 | else { | |
|
619 | varRequest.m_RangeRequested = varStrategyRangesRequested.first; | |
|
620 | varRequest.m_CacheRangeRequested = varStrategyRangesRequested.second; | |
|
621 | // store VarRequest | |
|
622 | storeVariableRequest(varId, varRequestId, varRequest); | |
|
623 | acceptVariableRequest(varId, | |
|
624 | var->dataSeries()->subDataSeries(varStrategyRangesRequested.second)); | |
|
625 | } | |
|
626 | 639 | } |
|
627 | 640 | |
|
628 | 641 | std::shared_ptr<Variable> |
@@ -838,3 +851,40 void VariableController::VariableControllerPrivate::cancelVariableRequest(QUuid | |||
|
838 | 851 | } |
|
839 | 852 | } |
|
840 | 853 | } |
|
854 | ||
|
855 | SqpRange VariableController::VariableControllerPrivate::getLastRequestedRange(QUuid varId) | |
|
856 | { | |
|
857 | auto lastRangeRequested = SqpRange{INVALID_RANGE}; | |
|
858 | auto varIdToVarRequestIdQueueMapIt = m_VarIdToVarRequestIdQueueMap.find(varId); | |
|
859 | if (varIdToVarRequestIdQueueMapIt != m_VarIdToVarRequestIdQueueMap.cend()) { | |
|
860 | auto &varRequestIdQueue = varIdToVarRequestIdQueueMapIt->second; | |
|
861 | auto varRequestId = varRequestIdQueue.back(); | |
|
862 | auto varRequestIdToVarIdVarRequestMapIt | |
|
863 | = m_VarRequestIdToVarIdVarRequestMap.find(varRequestId); | |
|
864 | if (varRequestIdToVarIdVarRequestMapIt != m_VarRequestIdToVarIdVarRequestMap.cend()) { | |
|
865 | auto &varIdToVarRequestMap = varRequestIdToVarIdVarRequestMapIt->second; | |
|
866 | auto varIdToVarRequestMapIt = varIdToVarRequestMap.find(varId); | |
|
867 | if (varIdToVarRequestMapIt != varIdToVarRequestMap.cend()) { | |
|
868 | auto &varRequest = varIdToVarRequestMapIt->second; | |
|
869 | lastRangeRequested = varRequest.m_RangeRequested; | |
|
870 | } | |
|
871 | else { | |
|
872 | qCDebug(LOG_VariableController()) | |
|
873 | << tr("Impossible to getLastRequestedRange of a unknown variable id attached " | |
|
874 | "to a variableRequestId") | |
|
875 | << varRequestId << varId; | |
|
876 | } | |
|
877 | } | |
|
878 | else { | |
|
879 | qCCritical(LOG_VariableController()) | |
|
880 | << tr("Impossible to getLastRequestedRange of a unknown variableRequestId") | |
|
881 | << varRequestId; | |
|
882 | } | |
|
883 | } | |
|
884 | else { | |
|
885 | qDebug(LOG_VariableController()) | |
|
886 | << tr("Impossible to getLastRequestedRange of a unknown variable id") << varId; | |
|
887 | } | |
|
888 | ||
|
889 | return lastRangeRequested; | |
|
890 | } |
General Comments 0
You need to be logged in to leave comments.
Login now