Index: src/libchcore/TTaskManager.cpp =================================================================== diff -u -N -r548382442cbf7bed7f744b279ce3f66b54992724 -ra5f396da5ed5ffb3fcd9fdf22afb5a7fd07e1ab8 --- src/libchcore/TTaskManager.cpp (.../TTaskManager.cpp) (revision 548382442cbf7bed7f744b279ce3f66b54992724) +++ src/libchcore/TTaskManager.cpp (.../TTaskManager.cpp) (revision a5f396da5ed5ffb3fcd9fdf22afb5a7fd07e1ab8) @@ -418,41 +418,28 @@ m_pathTasksDir = pathDir; } -void TTaskManager::GetStatsSnapshot(TTaskManagerStatsSnapshot& rSnapshot) const +void TTaskManager::GetStatsSnapshot(TTaskManagerStatsSnapshotPtr& spSnapshot) const { - boost::shared_lock lock(m_lock); + if(!spSnapshot) + THROW_CORE_EXCEPTION(eErr_InvalidArgument); - TTaskStatsSnapshot tTaskStats; + spSnapshot->Clear(); - size_t stProcessedCount = 0; - size_t stTotalCount = 0; - unsigned long long ullProcessedSize = 0; - unsigned long long ullTotalSize = 0; - size_t stRunningTasks = 0; + boost::shared_lock lock(m_lock); + size_t stRunningTasks = 0; BOOST_FOREACH(const TTaskPtr& spTask, m_vTasks) { - spTask->GetTaskStats(tTaskStats); - ETaskCurrentState eState = spTask->GetTaskState(); + TTaskStatsSnapshotPtr spStats(new TTaskStatsSnapshot); + spTask->GetStatsSnapshot(spStats); - stProcessedCount += tTaskStats.GetCurrentSubTaskStats().GetProcessedCount(); - stTotalCount += tTaskStats.GetCurrentSubTaskStats().GetTotalCount(); - ullProcessedSize += tTaskStats.GetCurrentSubTaskStats().GetProcessedSize(); - ullTotalSize += tTaskStats.GetCurrentSubTaskStats().GetTotalSize(); - - if(tTaskStats.IsTaskRunning() && eState == eTaskState_Processing) + if(spStats->IsTaskRunning() && spStats->GetTaskState()) ++stRunningTasks; + + spSnapshot->AddTaskStats(spStats); } - rSnapshot.SetProcessedCount(stProcessedCount); - rSnapshot.SetTotalCount(stTotalCount); - rSnapshot.SetProcessedSize(ullProcessedSize); - rSnapshot.SetTotalSize(ullTotalSize); - rSnapshot.SetRunningTasks(stRunningTasks); - if(ullTotalSize) - rSnapshot.SetGlobalProgressInPercent(boost::numeric_cast(ullProcessedSize) / boost::numeric_cast(ullTotalSize) * 100.0); - else - rSnapshot.SetGlobalProgressInPercent(0.0); + spSnapshot->SetRunningTasks(stRunningTasks); } size_t TTaskManager::GetCountOfRunningTasks() const @@ -465,9 +452,7 @@ BOOST_FOREACH(const TTaskPtr& spTask, m_vTasks) { - ETaskCurrentState eState = spTask->GetTaskState(); - spTask->GetTaskStats(tTaskStats); - if(tTaskStats.IsTaskRunning() && eState == eTaskState_Processing) + if(spTask->IsRunning() && spTask->GetTaskState() == eTaskState_Processing) ++stRunningTasks; }