X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FSMESH%2FSMESH_Mesh.cxx;h=bcddd46d52d707b398cf7b48fa5eaee7da38a1de;hb=e7dbe802e073d49506b516a06e6fced7a6e7f880;hp=d630792175db9a40c38d1601cbd30248dd95772d;hpb=e0f019ccf9e53e6751aa85445acf2cf2831a8c24;p=modules%2Fsmesh.git diff --git a/src/SMESH/SMESH_Mesh.cxx b/src/SMESH/SMESH_Mesh.cxx index d63079217..bcddd46d5 100644 --- a/src/SMESH/SMESH_Mesh.cxx +++ b/src/SMESH/SMESH_Mesh.cxx @@ -58,6 +58,7 @@ #include #include #include +#include #include #include #include @@ -1469,46 +1470,51 @@ double SMESH_Mesh::GetComputeProgress() const double totalCost = 1e-100, computedCost = 0; const SMESH_subMesh* curSM = _gen->GetCurrentSubMesh(); + // get progress of a current algo + TColStd_MapOfInteger currentSubIds; + if ( curSM ) + if ( SMESH_Algo* algo = curSM->GetAlgo() ) + { + int algoNotDoneCost = 0, algoDoneCost = 0; + const std::vector& smToCompute = algo->SubMeshesToCompute(); + for ( size_t i = 0; i < smToCompute.size(); ++i ) + { + if ( smToCompute[i]->IsEmpty() ) + algoNotDoneCost += smToCompute[i]->GetComputeCost(); + else + algoDoneCost += smToCompute[i]->GetComputeCost(); + currentSubIds.Add( smToCompute[i]->GetId() ); + } + double rate = algo->GetProgress(); + if ( !( 0. < rate && rate < 1.001 )) + { + rate = algo->GetProgressByTic(); + } + // cout << "rate: "<getDependsOnIterator(/*includeSelf=*/true); while ( smIt->more() ) { - SMESH_subMesh* sm = smIt->next(); - if ( sm->GetComputeState() != SMESH_subMesh::NOT_READY ) + const SMESH_subMesh* sm = smIt->next(); + const int smCost = sm->GetComputeCost(); + totalCost += smCost; + if ( !currentSubIds.Contains( sm->GetId() ) ) { - const int smCost = sm->GetComputeCost(); - totalCost += smCost; - if ( sm != curSM && - ( !sm->IsEmpty() || - sm->GetComputeState() == SMESH_subMesh::FAILED_TO_COMPUTE )) - { + if (( !sm->IsEmpty() ) || + ( sm->GetComputeState() == SMESH_subMesh::FAILED_TO_COMPUTE && + !sm->DependsOn( curSM ) )) computedCost += smCost; - } } } } - // get progress of a current algo - if ( curSM ) - if ( SMESH_Algo* algo = curSM->GetAlgo() ) - { - double rate = algo->GetProgress(); - if ( 0. < rate && rate < 1.001 ) - { - //cout << " rate: " << rate << " cost " << algo->GetComputeCost() << endl; - computedCost += rate * algo->GetComputeCost(); - } - else if ( curSM->IsEmpty() ) - { - computedCost += algo->GetProgressByTic() * algo->GetComputeCost(); - } - else - { - computedCost += 0.99 * algo->GetComputeCost(); - } - } - //cout << "Total: " << totalCost << " progress: " << computedCost / totalCost << endl; + // cout << "Total: " << totalCost + // << " computed: " << computedCost << " progress: " << computedCost / totalCost + // << " nbElems: " << GetMeshDS()->GetMeshInfo().NbElements() << endl; return computedCost / totalCost; }