mirror of
https://github.com/introlab/rtabmap.git
synced 2026-09-03 01:50:24 +08:00
Added statitic Timing/RAM_estimation/. Updated VWDictionary::getMemoryUsed().
This commit is contained in:
@@ -173,6 +173,7 @@ class RTABMAP_EXP Statistics
|
|||||||
RTABMAP_STATS(Timing, Joining_trash, ms);
|
RTABMAP_STATS(Timing, Joining_trash, ms);
|
||||||
RTABMAP_STATS(Timing, Emptying_trash, ms);
|
RTABMAP_STATS(Timing, Emptying_trash, ms);
|
||||||
RTABMAP_STATS(Timing, Finalizing_statistics, ms);
|
RTABMAP_STATS(Timing, Finalizing_statistics, ms);
|
||||||
|
RTABMAP_STATS(Timing, RAM_estimation, ms);
|
||||||
|
|
||||||
RTABMAP_STATS(TimingMem, Pre_update, ms);
|
RTABMAP_STATS(TimingMem, Pre_update, ms);
|
||||||
RTABMAP_STATS(TimingMem, Signature_creation, ms);
|
RTABMAP_STATS(TimingMem, Signature_creation, ms);
|
||||||
|
|||||||
@@ -101,7 +101,7 @@ public:
|
|||||||
int getTotalActiveReferences() const {return _totalActiveReferences;}
|
int getTotalActiveReferences() const {return _totalActiveReferences;}
|
||||||
unsigned int getIndexedWordsCount() const;
|
unsigned int getIndexedWordsCount() const;
|
||||||
unsigned int getIndexMemoryUsed() const; // KB
|
unsigned int getIndexMemoryUsed() const; // KB
|
||||||
unsigned long getMemoryUsed(bool estimate = true) const; //Bytes
|
unsigned long getMemoryUsed() const; //Bytes
|
||||||
bool setNNStrategy(NNStrategy strategy); // Return true if the search tree has been re-initialized
|
bool setNNStrategy(NNStrategy strategy); // Return true if the search tree has been re-initialized
|
||||||
bool isIncremental() const {return _incrementalDictionary;}
|
bool isIncremental() const {return _incrementalDictionary;}
|
||||||
bool isIncrementalFlann() const {return _incrementalFlann;}
|
bool isIncrementalFlann() const {return _incrementalFlann;}
|
||||||
|
|||||||
@@ -3287,6 +3287,7 @@ bool Rtabmap::process(
|
|||||||
statistics_.addStatistic(Statistics::kMemoryFast_movement(), tooFastMovement?1.0f:0);
|
statistics_.addStatistic(Statistics::kMemoryFast_movement(), tooFastMovement?1.0f:0);
|
||||||
if(_publishRAMUsage)
|
if(_publishRAMUsage)
|
||||||
{
|
{
|
||||||
|
UTimer ramTimer;
|
||||||
statistics_.addStatistic(Statistics::kMemoryRAM_usage(), UProcessInfo::getMemoryUsage()/(1024*1024));
|
statistics_.addStatistic(Statistics::kMemoryRAM_usage(), UProcessInfo::getMemoryUsage()/(1024*1024));
|
||||||
long estimatedMemoryUsage = sizeof(Rtabmap);
|
long estimatedMemoryUsage = sizeof(Rtabmap);
|
||||||
estimatedMemoryUsage += _optimizedPoses.size() * (sizeof(int) + sizeof(Transform) + 12 * sizeof(float) + sizeof(std::_Rb_tree_node_base)) + sizeof(std::map<int, Transform>);
|
estimatedMemoryUsage += _optimizedPoses.size() * (sizeof(int) + sizeof(Transform) + 12 * sizeof(float) + sizeof(std::_Rb_tree_node_base)) + sizeof(std::map<int, Transform>);
|
||||||
@@ -3295,6 +3296,7 @@ bool Rtabmap::process(
|
|||||||
estimatedMemoryUsage += _bayesFilter->getMemoryUsed();
|
estimatedMemoryUsage += _bayesFilter->getMemoryUsed();
|
||||||
estimatedMemoryUsage += _parameters.size()*(sizeof(std::string)*2+sizeof(std::_Rb_tree_node_base)) + sizeof(ParametersMap);
|
estimatedMemoryUsage += _parameters.size()*(sizeof(std::string)*2+sizeof(std::_Rb_tree_node_base)) + sizeof(ParametersMap);
|
||||||
statistics_.addStatistic(Statistics::kMemoryRAM_estimated(), (float)(estimatedMemoryUsage/(1024*1024)));//MB
|
statistics_.addStatistic(Statistics::kMemoryRAM_estimated(), (float)(estimatedMemoryUsage/(1024*1024)));//MB
|
||||||
|
statistics_.addStatistic(Statistics::kTimingRAM_estimation(), ramTimer.ticks()*1000);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(_publishLikelihood || _publishPdf)
|
if(_publishLikelihood || _publishPdf)
|
||||||
|
|||||||
@@ -366,26 +366,22 @@ unsigned int VWDictionary::getIndexMemoryUsed() const
|
|||||||
return _flannIndex->memoryUsed();
|
return _flannIndex->memoryUsed();
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned long VWDictionary::getMemoryUsed(bool estimate) const
|
unsigned long VWDictionary::getMemoryUsed() const
|
||||||
{
|
{
|
||||||
long memoryUsage = sizeof(VWDictionary);
|
long memoryUsage = sizeof(VWDictionary);
|
||||||
memoryUsage += getIndexMemoryUsed();
|
memoryUsage += getIndexMemoryUsed();
|
||||||
memoryUsage += _dataTree.total()*_dataTree.elemSize();
|
memoryUsage += _dataTree.total()*_dataTree.elemSize();
|
||||||
if(estimate)
|
if(!_visualWords.empty())
|
||||||
{
|
{
|
||||||
if(!_visualWords.empty())
|
memoryUsage += _visualWords.size()*(sizeof(int) + _visualWords.rbegin()->second->getMemoryUsed() + sizeof(std::_Rb_tree_node_base)) + sizeof(std::map<int, VisualWord *>);
|
||||||
|
if(_dataTree.empty() &&
|
||||||
|
_visualWords.begin()->second->getDescriptor().type() == CV_8U &&
|
||||||
|
_strategy == kNNFlannKdTree)
|
||||||
{
|
{
|
||||||
memoryUsage += _visualWords.size()*(sizeof(int) + _visualWords.begin()->second->getMemoryUsed()+sizeof(std::_Rb_tree_node_base)) + sizeof(std::map<int, VisualWord *>);
|
// Binary descriptors were converted to float, and not included in _dataTree
|
||||||
|
memoryUsage += _visualWords.size() * _visualWords.begin()->second->getDescriptor().total() * sizeof(float) * (_byteToFloat?1:8);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
for(std::map<int, VisualWord *>::const_iterator iter=_visualWords.begin(); iter!=_visualWords.end(); ++iter)
|
|
||||||
{
|
|
||||||
memoryUsage += sizeof(int) + iter->second->getMemoryUsed();
|
|
||||||
}
|
|
||||||
memoryUsage += _visualWords.size()*(sizeof(std::_Rb_tree_node_base)) + sizeof(std::map<int, VisualWord *>);
|
|
||||||
}
|
|
||||||
if(!_unusedWords.empty())
|
if(!_unusedWords.empty())
|
||||||
{
|
{
|
||||||
// they are the same words than in _visualWords, so just add the pointer size
|
// they are the same words than in _visualWords, so just add the pointer size
|
||||||
|
|||||||
Reference in New Issue
Block a user