mirror of
https://github.com/introlab/rtabmap_ros.git
synced 2026-10-11 03:59:53 +08:00
DbViewer: added more info about size of all tables in database
This commit is contained in:
@@ -107,11 +107,17 @@ public:
|
|||||||
bool isConnected() const;
|
bool isConnected() const;
|
||||||
long getMemoryUsed() const; // In bytes
|
long getMemoryUsed() const; // In bytes
|
||||||
std::string getDatabaseVersion() const;
|
std::string getDatabaseVersion() const;
|
||||||
|
long getNodesMemoryUsed() const;
|
||||||
|
long getLinksMemoryUsed() const;
|
||||||
long getImagesMemoryUsed() const;
|
long getImagesMemoryUsed() const;
|
||||||
long getDepthImagesMemoryUsed() const;
|
long getDepthImagesMemoryUsed() const;
|
||||||
|
long getCalibrationsMemoryUsed() const;
|
||||||
|
long getGridsMemoryUsed() const;
|
||||||
long getLaserScansMemoryUsed() const;
|
long getLaserScansMemoryUsed() const;
|
||||||
long getUserDataMemoryUsed() const;
|
long getUserDataMemoryUsed() const;
|
||||||
long getWordsMemoryUsed() const;
|
long getWordsMemoryUsed() const;
|
||||||
|
long getFeaturesMemoryUsed() const;
|
||||||
|
long getStatisticsMemoryUsed() const;
|
||||||
int getLastNodesSize() const; // working memory
|
int getLastNodesSize() const; // working memory
|
||||||
int getLastDictionarySize() const; // working memory
|
int getLastDictionarySize() const; // working memory
|
||||||
int getTotalNodesSize() const;
|
int getTotalNodesSize() const;
|
||||||
@@ -152,11 +158,17 @@ private:
|
|||||||
virtual bool isConnectedQuery() const = 0;
|
virtual bool isConnectedQuery() const = 0;
|
||||||
virtual long getMemoryUsedQuery() const = 0; // In bytes
|
virtual long getMemoryUsedQuery() const = 0; // In bytes
|
||||||
virtual bool getDatabaseVersionQuery(std::string & version) const = 0;
|
virtual bool getDatabaseVersionQuery(std::string & version) const = 0;
|
||||||
|
virtual long getNodesMemoryUsedQuery() const = 0;
|
||||||
|
virtual long getLinksMemoryUsedQuery() const = 0;
|
||||||
virtual long getImagesMemoryUsedQuery() const = 0;
|
virtual long getImagesMemoryUsedQuery() const = 0;
|
||||||
virtual long getDepthImagesMemoryUsedQuery() const = 0;
|
virtual long getDepthImagesMemoryUsedQuery() const = 0;
|
||||||
|
virtual long getCalibrationsMemoryUsedQuery() const = 0;
|
||||||
|
virtual long getGridsMemoryUsedQuery() const = 0;
|
||||||
virtual long getLaserScansMemoryUsedQuery() const = 0;
|
virtual long getLaserScansMemoryUsedQuery() const = 0;
|
||||||
virtual long getUserDataMemoryUsedQuery() const = 0;
|
virtual long getUserDataMemoryUsedQuery() const = 0;
|
||||||
virtual long getWordsMemoryUsedQuery() const = 0;
|
virtual long getWordsMemoryUsedQuery() const = 0;
|
||||||
|
virtual long getFeaturesMemoryUsedQuery() const = 0;
|
||||||
|
virtual long getStatisticsMemoryUsedQuery() const = 0;
|
||||||
virtual int getLastNodesSizeQuery() const = 0;
|
virtual int getLastNodesSizeQuery() const = 0;
|
||||||
virtual int getLastDictionarySizeQuery() const = 0;
|
virtual int getLastDictionarySizeQuery() const = 0;
|
||||||
virtual int getTotalNodesSizeQuery() const = 0;
|
virtual int getTotalNodesSizeQuery() const = 0;
|
||||||
|
|||||||
@@ -116,6 +116,22 @@ long DBDriver::getMemoryUsed() const
|
|||||||
return bytes;
|
return bytes;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
long DBDriver::getNodesMemoryUsed() const
|
||||||
|
{
|
||||||
|
long bytes;
|
||||||
|
_dbSafeAccessMutex.lock();
|
||||||
|
bytes = getNodesMemoryUsedQuery();
|
||||||
|
_dbSafeAccessMutex.unlock();
|
||||||
|
return bytes;
|
||||||
|
}
|
||||||
|
long DBDriver::getLinksMemoryUsed() const
|
||||||
|
{
|
||||||
|
long bytes;
|
||||||
|
_dbSafeAccessMutex.lock();
|
||||||
|
bytes = getLinksMemoryUsedQuery();
|
||||||
|
_dbSafeAccessMutex.unlock();
|
||||||
|
return bytes;
|
||||||
|
}
|
||||||
long DBDriver::getImagesMemoryUsed() const
|
long DBDriver::getImagesMemoryUsed() const
|
||||||
{
|
{
|
||||||
long bytes;
|
long bytes;
|
||||||
@@ -132,6 +148,22 @@ long DBDriver::getDepthImagesMemoryUsed() const
|
|||||||
_dbSafeAccessMutex.unlock();
|
_dbSafeAccessMutex.unlock();
|
||||||
return bytes;
|
return bytes;
|
||||||
}
|
}
|
||||||
|
long DBDriver::getCalibrationsMemoryUsed() const
|
||||||
|
{
|
||||||
|
long bytes;
|
||||||
|
_dbSafeAccessMutex.lock();
|
||||||
|
bytes = getCalibrationsMemoryUsedQuery();
|
||||||
|
_dbSafeAccessMutex.unlock();
|
||||||
|
return bytes;
|
||||||
|
}
|
||||||
|
long DBDriver::getGridsMemoryUsed() const
|
||||||
|
{
|
||||||
|
long bytes;
|
||||||
|
_dbSafeAccessMutex.lock();
|
||||||
|
bytes = getGridsMemoryUsedQuery();
|
||||||
|
_dbSafeAccessMutex.unlock();
|
||||||
|
return bytes;
|
||||||
|
}
|
||||||
long DBDriver::getLaserScansMemoryUsed() const
|
long DBDriver::getLaserScansMemoryUsed() const
|
||||||
{
|
{
|
||||||
long bytes;
|
long bytes;
|
||||||
@@ -156,6 +188,22 @@ long DBDriver::getWordsMemoryUsed() const
|
|||||||
_dbSafeAccessMutex.unlock();
|
_dbSafeAccessMutex.unlock();
|
||||||
return bytes;
|
return bytes;
|
||||||
}
|
}
|
||||||
|
long DBDriver::getFeaturesMemoryUsed() const
|
||||||
|
{
|
||||||
|
long bytes;
|
||||||
|
_dbSafeAccessMutex.lock();
|
||||||
|
bytes = getFeaturesMemoryUsedQuery();
|
||||||
|
_dbSafeAccessMutex.unlock();
|
||||||
|
return bytes;
|
||||||
|
}
|
||||||
|
long DBDriver::getStatisticsMemoryUsed() const
|
||||||
|
{
|
||||||
|
long bytes;
|
||||||
|
_dbSafeAccessMutex.lock();
|
||||||
|
bytes = getStatisticsMemoryUsedQuery();
|
||||||
|
_dbSafeAccessMutex.unlock();
|
||||||
|
return bytes;
|
||||||
|
}
|
||||||
int DBDriver::getLastNodesSize() const
|
int DBDriver::getLastNodesSize() const
|
||||||
{
|
{
|
||||||
int nodes;
|
int nodes;
|
||||||
|
|||||||
@@ -490,6 +490,90 @@ long DBDriverSqlite3::getMemoryUsedQuery() const
|
|||||||
//}
|
//}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
long DBDriverSqlite3::getNodesMemoryUsedQuery() const
|
||||||
|
{
|
||||||
|
UDEBUG("");
|
||||||
|
long size = 0L;
|
||||||
|
if(_ppDb)
|
||||||
|
{
|
||||||
|
std::string query;
|
||||||
|
if(uStrNumCmp(_version, "0.13.0") >= 0)
|
||||||
|
{
|
||||||
|
query = "SELECT sum(length(id) + length(map_id) + length(weight) + length(pose) + length(stamp) + ifnull(length(label),0) + length(ground_truth_pose) + ifnull(length(velocity),0) + length(time_enter)) from Node;";
|
||||||
|
}
|
||||||
|
else if(uStrNumCmp(_version, "0.11.1") >= 0)
|
||||||
|
{
|
||||||
|
query = "SELECT sum(length(id) + length(map_id) + length(weight) + length(pose) + length(stamp) + ifnull(length(label),0) + length(ground_truth_pose)+ length(time_enter)) from Node;";
|
||||||
|
}
|
||||||
|
else if(uStrNumCmp(_version, "0.8.5") >= 0)
|
||||||
|
{
|
||||||
|
query = "SELECT sum(length(id) + length(map_id) + length(weight) + length(pose) + length(stamp) + ifnull(length(label),0) + length(time_enter)) from Node;";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
query = "SELECT sum(length(id) + length(map_id) + length(weight) + length(pose)+ length(time_enter)) from Node;";
|
||||||
|
}
|
||||||
|
|
||||||
|
int rc = SQLITE_OK;
|
||||||
|
sqlite3_stmt * ppStmt = 0;
|
||||||
|
rc = sqlite3_prepare_v2(_ppDb, query.c_str(), -1, &ppStmt, 0);
|
||||||
|
UASSERT_MSG(rc == SQLITE_OK, uFormat("DB error (%s): %s", _version.c_str(), sqlite3_errmsg(_ppDb)).c_str());
|
||||||
|
rc = sqlite3_step(ppStmt);
|
||||||
|
if(rc == SQLITE_ROW)
|
||||||
|
{
|
||||||
|
size = sqlite3_column_int64(ppStmt, 0);
|
||||||
|
rc = sqlite3_step(ppStmt);
|
||||||
|
}
|
||||||
|
UASSERT_MSG(rc == SQLITE_DONE, uFormat("DB error (%s): %s", _version.c_str(), sqlite3_errmsg(_ppDb)).c_str());
|
||||||
|
rc = sqlite3_finalize(ppStmt);
|
||||||
|
UASSERT_MSG(rc == SQLITE_OK, uFormat("DB error (%s): %s", _version.c_str(), sqlite3_errmsg(_ppDb)).c_str());
|
||||||
|
}
|
||||||
|
return size;
|
||||||
|
}
|
||||||
|
long DBDriverSqlite3::getLinksMemoryUsedQuery() const
|
||||||
|
{
|
||||||
|
UDEBUG("");
|
||||||
|
long size = 0L;
|
||||||
|
if(_ppDb)
|
||||||
|
{
|
||||||
|
std::string query;
|
||||||
|
if(uStrNumCmp(_version, "0.13.0") >= 0)
|
||||||
|
{
|
||||||
|
query = "SELECT sum(length(type) + length(information_matrix) + length(transform) + ifnull(length(user_data),0) + length(from_id) + length(to_id)) from Link;";
|
||||||
|
}
|
||||||
|
else if(uStrNumCmp(_version, "0.10.10") >= 0)
|
||||||
|
{
|
||||||
|
query = "SELECT sum(length(type) + length(rot_variance) + length(trans_variance) + length(transform) + ifnull(length(user_data),0) + length(from_id) + length(to_id)) from Link;";
|
||||||
|
}
|
||||||
|
else if(uStrNumCmp(_version, "0.8.4") >= 0)
|
||||||
|
{
|
||||||
|
query = "SELECT sum(length(type) + length(rot_variance) + length(trans_variance) + length(transform) + length(from_id) + length(to_id)) from Link;";
|
||||||
|
}
|
||||||
|
else if(uStrNumCmp(_version, "0.7.4") >= 0)
|
||||||
|
{
|
||||||
|
query = "SELECT sum(length(type) + length(variance) + length(transform) + length(from_id) + length(to_id)) from Link;";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
query = "SELECT sum(length(type) + length(transform) + length(from_id) + length(to_id)) from Link;";
|
||||||
|
}
|
||||||
|
|
||||||
|
int rc = SQLITE_OK;
|
||||||
|
sqlite3_stmt * ppStmt = 0;
|
||||||
|
rc = sqlite3_prepare_v2(_ppDb, query.c_str(), -1, &ppStmt, 0);
|
||||||
|
UASSERT_MSG(rc == SQLITE_OK, uFormat("DB error (%s): %s", _version.c_str(), sqlite3_errmsg(_ppDb)).c_str());
|
||||||
|
rc = sqlite3_step(ppStmt);
|
||||||
|
if(rc == SQLITE_ROW)
|
||||||
|
{
|
||||||
|
size = sqlite3_column_int64(ppStmt, 0);
|
||||||
|
rc = sqlite3_step(ppStmt);
|
||||||
|
}
|
||||||
|
UASSERT_MSG(rc == SQLITE_DONE, uFormat("DB error (%s): %s", _version.c_str(), sqlite3_errmsg(_ppDb)).c_str());
|
||||||
|
rc = sqlite3_finalize(ppStmt);
|
||||||
|
UASSERT_MSG(rc == SQLITE_OK, uFormat("DB error (%s): %s", _version.c_str(), sqlite3_errmsg(_ppDb)).c_str());
|
||||||
|
}
|
||||||
|
return size;
|
||||||
|
}
|
||||||
long DBDriverSqlite3::getImagesMemoryUsedQuery() const
|
long DBDriverSqlite3::getImagesMemoryUsedQuery() const
|
||||||
{
|
{
|
||||||
UDEBUG("");
|
UDEBUG("");
|
||||||
@@ -499,11 +583,11 @@ long DBDriverSqlite3::getImagesMemoryUsedQuery() const
|
|||||||
std::string query;
|
std::string query;
|
||||||
if(uStrNumCmp(_version, "0.10.0") >= 0)
|
if(uStrNumCmp(_version, "0.10.0") >= 0)
|
||||||
{
|
{
|
||||||
query = "SELECT sum(length(image)) from Data;";
|
query = "SELECT sum(ifnull(length(image),0) + ifnull(length(time_enter),0)) from Data;";
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
query = "SELECT sum(length(data)) from Image;";
|
query = "SELECT sum(length(data) + ifnull(length(time_enter),0)) from Image;";
|
||||||
}
|
}
|
||||||
|
|
||||||
int rc = SQLITE_OK;
|
int rc = SQLITE_OK;
|
||||||
@@ -531,11 +615,81 @@ long DBDriverSqlite3::getDepthImagesMemoryUsedQuery() const
|
|||||||
std::string query;
|
std::string query;
|
||||||
if(uStrNumCmp(_version, "0.10.0") >= 0)
|
if(uStrNumCmp(_version, "0.10.0") >= 0)
|
||||||
{
|
{
|
||||||
query = "SELECT sum(length(depth)) from Data;";
|
query = "SELECT sum(ifnull(length(depth),0) + ifnull(length(time_enter),0)) from Data;";
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
query = "SELECT sum(length(data)) from Depth;";
|
query = "SELECT sum(length(data) + ifnull(length(time_enter),0)) from Depth;";
|
||||||
|
}
|
||||||
|
|
||||||
|
int rc = SQLITE_OK;
|
||||||
|
sqlite3_stmt * ppStmt = 0;
|
||||||
|
rc = sqlite3_prepare_v2(_ppDb, query.c_str(), -1, &ppStmt, 0);
|
||||||
|
UASSERT_MSG(rc == SQLITE_OK, uFormat("DB error (%s): %s", _version.c_str(), sqlite3_errmsg(_ppDb)).c_str());
|
||||||
|
rc = sqlite3_step(ppStmt);
|
||||||
|
if(rc == SQLITE_ROW)
|
||||||
|
{
|
||||||
|
size = sqlite3_column_int64(ppStmt, 0);
|
||||||
|
rc = sqlite3_step(ppStmt);
|
||||||
|
}
|
||||||
|
UASSERT_MSG(rc == SQLITE_DONE, uFormat("DB error (%s): %s", _version.c_str(), sqlite3_errmsg(_ppDb)).c_str());
|
||||||
|
rc = sqlite3_finalize(ppStmt);
|
||||||
|
UASSERT_MSG(rc == SQLITE_OK, uFormat("DB error (%s): %s", _version.c_str(), sqlite3_errmsg(_ppDb)).c_str());
|
||||||
|
}
|
||||||
|
return size;
|
||||||
|
}
|
||||||
|
long DBDriverSqlite3::getCalibrationsMemoryUsedQuery() const
|
||||||
|
{
|
||||||
|
UDEBUG("");
|
||||||
|
long size = 0L;
|
||||||
|
if(_ppDb)
|
||||||
|
{
|
||||||
|
std::string query;
|
||||||
|
|
||||||
|
if(uStrNumCmp(_version, "0.10.0") >= 0)
|
||||||
|
{
|
||||||
|
query = "SELECT sum(length(calibration)) from Data;";
|
||||||
|
}
|
||||||
|
else if(uStrNumCmp(_version, "0.7.0") >= 0)
|
||||||
|
{
|
||||||
|
query = "SELECT sum(length(fx) + length(fy) + length(cx) + length(cy) + length(local_transform)) from Depth;";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
query = "SELECT sum(length(constant) + length(local_transform)) from Depth;";
|
||||||
|
}
|
||||||
|
|
||||||
|
int rc = SQLITE_OK;
|
||||||
|
sqlite3_stmt * ppStmt = 0;
|
||||||
|
rc = sqlite3_prepare_v2(_ppDb, query.c_str(), -1, &ppStmt, 0);
|
||||||
|
UASSERT_MSG(rc == SQLITE_OK, uFormat("DB error (%s): %s", _version.c_str(), sqlite3_errmsg(_ppDb)).c_str());
|
||||||
|
rc = sqlite3_step(ppStmt);
|
||||||
|
if(rc == SQLITE_ROW)
|
||||||
|
{
|
||||||
|
size = sqlite3_column_int64(ppStmt, 0);
|
||||||
|
rc = sqlite3_step(ppStmt);
|
||||||
|
}
|
||||||
|
UASSERT_MSG(rc == SQLITE_DONE, uFormat("DB error (%s): %s", _version.c_str(), sqlite3_errmsg(_ppDb)).c_str());
|
||||||
|
rc = sqlite3_finalize(ppStmt);
|
||||||
|
UASSERT_MSG(rc == SQLITE_OK, uFormat("DB error (%s): %s", _version.c_str(), sqlite3_errmsg(_ppDb)).c_str());
|
||||||
|
}
|
||||||
|
return size;
|
||||||
|
}
|
||||||
|
long DBDriverSqlite3::getGridsMemoryUsedQuery() const
|
||||||
|
{
|
||||||
|
UDEBUG("");
|
||||||
|
long size = 0L;
|
||||||
|
if(_ppDb)
|
||||||
|
{
|
||||||
|
std::string query;
|
||||||
|
|
||||||
|
if(uStrNumCmp(_version, "0.11.10") >= 0)
|
||||||
|
{
|
||||||
|
query = "SELECT sum(ifnull(length(ground_cells),0) + ifnull(length(obstacle_cells),0) + length(cell_size) + length(view_point_x) + length(view_point_y) + length(view_point_z)) from Data;";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return size;
|
||||||
}
|
}
|
||||||
|
|
||||||
int rc = SQLITE_OK;
|
int rc = SQLITE_OK;
|
||||||
@@ -561,9 +715,22 @@ long DBDriverSqlite3::getLaserScansMemoryUsedQuery() const
|
|||||||
if(_ppDb)
|
if(_ppDb)
|
||||||
{
|
{
|
||||||
std::string query;
|
std::string query;
|
||||||
if(uStrNumCmp(_version, "0.10.0") >= 0)
|
|
||||||
|
if(uStrNumCmp(_version, "0.11.10") >= 0)
|
||||||
{
|
{
|
||||||
query = "SELECT sum(length(scan)) from Data;";
|
query = "SELECT sum(ifnull(length(scan_info),0) + ifnull(length(scan),0)) from Data;";
|
||||||
|
}
|
||||||
|
else if(uStrNumCmp(_version, "0.10.7") >= 0)
|
||||||
|
{
|
||||||
|
query = "SELECT sum(length(scan_max_pts) + length(scan_max_range) + ifnull(length(scan),0)) from Data;";
|
||||||
|
}
|
||||||
|
else if(uStrNumCmp(_version, "0.10.0") >= 0)
|
||||||
|
{
|
||||||
|
query = "SELECT sum(length(scan_max_pts) + ifnull(length(scan),0)) from Data;";
|
||||||
|
}
|
||||||
|
else if(uStrNumCmp(_version, "0.8.11") >= 0)
|
||||||
|
{
|
||||||
|
query = "SELECT sum(length(data2d) + length(data2d_max_pts)) from Depth;";
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -628,7 +795,83 @@ long DBDriverSqlite3::getWordsMemoryUsedQuery() const
|
|||||||
long size = 0L;
|
long size = 0L;
|
||||||
if(_ppDb)
|
if(_ppDb)
|
||||||
{
|
{
|
||||||
std::string query = "SELECT sum(length(descriptor)) from Word;";
|
std::string query = "SELECT sum(length(id) + length(descriptor_size) + length(descriptor) + length(time_enter)) from Word;";
|
||||||
|
|
||||||
|
int rc = SQLITE_OK;
|
||||||
|
sqlite3_stmt * ppStmt = 0;
|
||||||
|
rc = sqlite3_prepare_v2(_ppDb, query.c_str(), -1, &ppStmt, 0);
|
||||||
|
UASSERT_MSG(rc == SQLITE_OK, uFormat("DB error (%s): %s", _version.c_str(), sqlite3_errmsg(_ppDb)).c_str());
|
||||||
|
rc = sqlite3_step(ppStmt);
|
||||||
|
if(rc == SQLITE_ROW)
|
||||||
|
{
|
||||||
|
size = sqlite3_column_int64(ppStmt, 0);
|
||||||
|
rc = sqlite3_step(ppStmt);
|
||||||
|
}
|
||||||
|
UASSERT_MSG(rc == SQLITE_DONE, uFormat("DB error (%s): %s", _version.c_str(), sqlite3_errmsg(_ppDb)).c_str());
|
||||||
|
rc = sqlite3_finalize(ppStmt);
|
||||||
|
UASSERT_MSG(rc == SQLITE_OK, uFormat("DB error (%s): %s", _version.c_str(), sqlite3_errmsg(_ppDb)).c_str());
|
||||||
|
}
|
||||||
|
return size;
|
||||||
|
}
|
||||||
|
long DBDriverSqlite3::getFeaturesMemoryUsedQuery() const
|
||||||
|
{
|
||||||
|
UDEBUG("");
|
||||||
|
long size = 0L;
|
||||||
|
if(_ppDb)
|
||||||
|
{
|
||||||
|
std::string query;
|
||||||
|
if(uStrNumCmp(_version, "0.13.0") >= 0)
|
||||||
|
{
|
||||||
|
query = "SELECT sum(length(word_id) + length(pos_x) + length(pos_y) + length(size) + length(dir) + length(response) + length(octave) + length(depth_x) + length(depth_y) + length(depth_z) + length(descriptor_size) + length(descriptor)) "
|
||||||
|
"FROM Feature";
|
||||||
|
}
|
||||||
|
else if(uStrNumCmp(_version, "0.12.0") >= 0)
|
||||||
|
{
|
||||||
|
query = "SELECT sum(length(word_id) + length(pos_x) + length(pos_y) + length(size) + length(dir) + length(response) + length(octave) + length(depth_x) + length(depth_y) + length(depth_z) + length(descriptor_size) + length(descriptor)) "
|
||||||
|
"FROM Map_Node_Word";
|
||||||
|
}
|
||||||
|
else if(uStrNumCmp(_version, "0.11.2") >= 0)
|
||||||
|
{
|
||||||
|
query = "SELECT sum(length(word_id) + length(pos_x) + length(pos_y) + length(size) + length(dir) + length(response) + length(depth_x) + length(depth_y) + length(depth_z) + length(descriptor_size) + length(descriptor)) "
|
||||||
|
"FROM Map_Node_Word";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
query = "SELECT sum(length(word_id) + length(pos_x) + length(pos_y) + length(size) + length(dir) + length(response) + length(depth_x) + length(depth_y) + length(depth_z)) "
|
||||||
|
"FROM Map_Node_Word";
|
||||||
|
}
|
||||||
|
|
||||||
|
int rc = SQLITE_OK;
|
||||||
|
sqlite3_stmt * ppStmt = 0;
|
||||||
|
rc = sqlite3_prepare_v2(_ppDb, query.c_str(), -1, &ppStmt, 0);
|
||||||
|
UASSERT_MSG(rc == SQLITE_OK, uFormat("DB error (%s): %s", _version.c_str(), sqlite3_errmsg(_ppDb)).c_str());
|
||||||
|
rc = sqlite3_step(ppStmt);
|
||||||
|
if(rc == SQLITE_ROW)
|
||||||
|
{
|
||||||
|
size = sqlite3_column_int64(ppStmt, 0);
|
||||||
|
rc = sqlite3_step(ppStmt);
|
||||||
|
}
|
||||||
|
UASSERT_MSG(rc == SQLITE_DONE, uFormat("DB error (%s): %s", _version.c_str(), sqlite3_errmsg(_ppDb)).c_str());
|
||||||
|
rc = sqlite3_finalize(ppStmt);
|
||||||
|
UASSERT_MSG(rc == SQLITE_OK, uFormat("DB error (%s): %s", _version.c_str(), sqlite3_errmsg(_ppDb)).c_str());
|
||||||
|
}
|
||||||
|
return size;
|
||||||
|
}
|
||||||
|
long DBDriverSqlite3::getStatisticsMemoryUsedQuery() const
|
||||||
|
{
|
||||||
|
UDEBUG("");
|
||||||
|
long size = 0L;
|
||||||
|
if(_ppDb)
|
||||||
|
{
|
||||||
|
std::string query;
|
||||||
|
if(uStrNumCmp(_version, "0.11.11") >= 0)
|
||||||
|
{
|
||||||
|
query = "SELECT sum(length(id) + length(stamp) + length(data)) FROM Statistics";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return size;
|
||||||
|
}
|
||||||
|
|
||||||
int rc = SQLITE_OK;
|
int rc = SQLITE_OK;
|
||||||
sqlite3_stmt * ppStmt = 0;
|
sqlite3_stmt * ppStmt = 0;
|
||||||
|
|||||||
@@ -53,11 +53,17 @@ private:
|
|||||||
virtual bool isConnectedQuery() const;
|
virtual bool isConnectedQuery() const;
|
||||||
virtual long getMemoryUsedQuery() const; // In bytes
|
virtual long getMemoryUsedQuery() const; // In bytes
|
||||||
virtual bool getDatabaseVersionQuery(std::string & version) const;
|
virtual bool getDatabaseVersionQuery(std::string & version) const;
|
||||||
|
virtual long getNodesMemoryUsedQuery() const;
|
||||||
|
virtual long getLinksMemoryUsedQuery() const;
|
||||||
virtual long getImagesMemoryUsedQuery() const;
|
virtual long getImagesMemoryUsedQuery() const;
|
||||||
virtual long getDepthImagesMemoryUsedQuery() const;
|
virtual long getDepthImagesMemoryUsedQuery() const;
|
||||||
|
virtual long getCalibrationsMemoryUsedQuery() const;
|
||||||
|
virtual long getGridsMemoryUsedQuery() const;
|
||||||
virtual long getLaserScansMemoryUsedQuery() const;
|
virtual long getLaserScansMemoryUsedQuery() const;
|
||||||
virtual long getUserDataMemoryUsedQuery() const;
|
virtual long getUserDataMemoryUsedQuery() const;
|
||||||
virtual long getWordsMemoryUsedQuery() const;
|
virtual long getWordsMemoryUsedQuery() const;
|
||||||
|
virtual long getFeaturesMemoryUsedQuery() const;
|
||||||
|
virtual long getStatisticsMemoryUsedQuery() const;
|
||||||
virtual int getLastNodesSizeQuery() const;
|
virtual int getLastNodesSizeQuery() const;
|
||||||
virtual int getLastDictionarySizeQuery() const;
|
virtual int getLastDictionarySizeQuery() const;
|
||||||
virtual int getTotalNodesSizeQuery() const;
|
virtual int getTotalNodesSizeQuery() const;
|
||||||
|
|||||||
@@ -123,6 +123,11 @@ BEGIN
|
|||||||
UPDATE Node SET time_enter = DATETIME('NOW') WHERE rowid = new.rowid;
|
UPDATE Node SET time_enter = DATETIME('NOW') WHERE rowid = new.rowid;
|
||||||
END;
|
END;
|
||||||
|
|
||||||
|
CREATE TRIGGER insert_Data_timeEnter AFTER INSERT ON Data
|
||||||
|
BEGIN
|
||||||
|
UPDATE Node SET time_enter = DATETIME('NOW') WHERE rowid = new.rowid;
|
||||||
|
END;
|
||||||
|
|
||||||
CREATE TRIGGER insert_Word_timeEnter AFTER INSERT ON Word
|
CREATE TRIGGER insert_Word_timeEnter AFTER INSERT ON Word
|
||||||
BEGIN
|
BEGIN
|
||||||
UPDATE Word SET time_enter = DATETIME('NOW') WHERE rowid = new.rowid;
|
UPDATE Word SET time_enter = DATETIME('NOW') WHERE rowid = new.rowid;
|
||||||
|
|||||||
@@ -70,11 +70,12 @@ bool DataRecorder::init(const QString & path, bool recordInRAM)
|
|||||||
if(!memory_)
|
if(!memory_)
|
||||||
{
|
{
|
||||||
ParametersMap customParameters;
|
ParametersMap customParameters;
|
||||||
customParameters.insert(ParametersPair(Parameters::kMemRehearsalSimilarity(), "1.0")); // desactivate rehearsal
|
customParameters.insert(ParametersPair(Parameters::kMemRehearsalSimilarity(), "1.0")); // deactivate rehearsal
|
||||||
customParameters.insert(ParametersPair(Parameters::kKpMaxFeatures(), "-1")); // desactivate keypoints extraction
|
customParameters.insert(ParametersPair(Parameters::kKpMaxFeatures(), "-1")); // deactivate keypoints extraction
|
||||||
customParameters.insert(ParametersPair(Parameters::kMemBinDataKept(), "true")); // to keep images
|
customParameters.insert(ParametersPair(Parameters::kMemBinDataKept(), "true")); // to keep images
|
||||||
customParameters.insert(ParametersPair(Parameters::kMemMapLabelsAdded(), "false")); // don't create map labels
|
customParameters.insert(ParametersPair(Parameters::kMemMapLabelsAdded(), "false")); // don't create map labels
|
||||||
customParameters.insert(ParametersPair(Parameters::kMemBadSignaturesIgnored(), "true")); // make usre memory cleanup is done
|
customParameters.insert(ParametersPair(Parameters::kMemBadSignaturesIgnored(), "true")); // make sure memory cleanup is done
|
||||||
|
customParameters.insert(ParametersPair(Parameters::kMemIntermediateNodeDataKept(), "true"));
|
||||||
if(!recordInRAM)
|
if(!recordInRAM)
|
||||||
{
|
{
|
||||||
customParameters.insert(ParametersPair(Parameters::kDbSqlite3InMemory(), "false"));
|
customParameters.insert(ParametersPair(Parameters::kDbSqlite3InMemory(), "false"));
|
||||||
@@ -147,7 +148,7 @@ void DataRecorder::addData(const rtabmap::SensorData & data, const Transform & p
|
|||||||
{
|
{
|
||||||
memory_->emptyTrash();
|
memory_->emptyTrash();
|
||||||
}
|
}
|
||||||
UDEBUG("Time to process a message = %f s", time.ticks());
|
UDEBUG("Time to process a message = %f s, totalSizeKB_=%d", time.ticks(), totalSizeKB_);
|
||||||
}
|
}
|
||||||
memoryMutex_.unlock();
|
memoryMutex_.unlock();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1054,13 +1054,14 @@ void DatabaseViewer::exportDatabase()
|
|||||||
progressDialog->setAttribute(Qt::WA_DeleteOnClose);
|
progressDialog->setAttribute(Qt::WA_DeleteOnClose);
|
||||||
progressDialog->setMaximumSteps(ids.size());
|
progressDialog->setMaximumSteps(ids.size());
|
||||||
progressDialog->show();
|
progressDialog->show();
|
||||||
|
progressDialog->setCancelButtonVisible(true);
|
||||||
UINFO("Decompress: rgb=%d depth=%d scan=%d userData=%d",
|
UINFO("Decompress: rgb=%d depth=%d scan=%d userData=%d",
|
||||||
dialog.isRgbExported()?1:0,
|
dialog.isRgbExported()?1:0,
|
||||||
dialog.isDepthExported()?1:0,
|
dialog.isDepthExported()?1:0,
|
||||||
dialog.isDepth2dExported()?1:0,
|
dialog.isDepth2dExported()?1:0,
|
||||||
dialog.isUserDataExported()?1:0);
|
dialog.isUserDataExported()?1:0);
|
||||||
|
|
||||||
for(int i=0; i<ids.size(); ++i)
|
for(int i=0; i<ids.size() && !progressDialog->isCanceled(); ++i)
|
||||||
{
|
{
|
||||||
int id = ids.at(i);
|
int id = ids.at(i);
|
||||||
|
|
||||||
@@ -1311,6 +1312,7 @@ void DatabaseViewer::updateIds()
|
|||||||
dbDriver_->getAllNodeIds(idsWithoutBad, false, true);
|
dbDriver_->getAllNodeIds(idsWithoutBad, false, true);
|
||||||
int badcountInLTM = 0;
|
int badcountInLTM = 0;
|
||||||
int badCountInGraph = 0;
|
int badCountInGraph = 0;
|
||||||
|
bool hasReducedGraph = false;
|
||||||
for(int i=0; i<ids_.size(); ++i)
|
for(int i=0; i<ids_.size(); ++i)
|
||||||
{
|
{
|
||||||
idToIndex_.insert(ids_[i], i);
|
idToIndex_.insert(ids_[i], i);
|
||||||
@@ -1350,6 +1352,11 @@ void DatabaseViewer::updateIds()
|
|||||||
bool addPose = false;
|
bool addPose = false;
|
||||||
for(std::multimap<int, Link>::iterator jter=links.find(ids_[i]); jter!=links.end() && jter->first == ids_[i]; ++jter)
|
for(std::multimap<int, Link>::iterator jter=links.find(ids_[i]); jter!=links.end() && jter->first == ids_[i]; ++jter)
|
||||||
{
|
{
|
||||||
|
if(jter->second.type() == Link::kNeighborMerged)
|
||||||
|
{
|
||||||
|
hasReducedGraph = true;
|
||||||
|
}
|
||||||
|
|
||||||
std::multimap<int, Link>::iterator invertedLinkIter = graph::findLink(links, jter->second.to(), jter->second.from(), false);
|
std::multimap<int, Link>::iterator invertedLinkIter = graph::findLink(links, jter->second.to(), jter->second.from(), false);
|
||||||
if( jter->second.isValid() && // null transform means a rehearsed location
|
if( jter->second.isValid() && // null transform means a rehearsed location
|
||||||
ids.find(jter->second.from()) != ids.end() &&
|
ids.find(jter->second.from()) != ids.end() &&
|
||||||
@@ -1411,19 +1418,59 @@ void DatabaseViewer::updateIds()
|
|||||||
ui_->textEdit_info->clear();
|
ui_->textEdit_info->clear();
|
||||||
ui_->textEdit_info->append(tr("Version:\t\t%1").arg(dbDriver_->getDatabaseVersion().c_str()));
|
ui_->textEdit_info->append(tr("Version:\t\t%1").arg(dbDriver_->getDatabaseVersion().c_str()));
|
||||||
ui_->textEdit_info->append(tr("Sessions:\t\t%1").arg(sessions));
|
ui_->textEdit_info->append(tr("Sessions:\t\t%1").arg(sessions));
|
||||||
ui_->textEdit_info->append(tr("Total odometry length:\t%1 m").arg(totalOdom));
|
if(hasReducedGraph)
|
||||||
|
{
|
||||||
|
ui_->textEdit_info->append(tr("Total odometry length:\t%1 m (approx. as graph has been reduced)").arg(totalOdom));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ui_->textEdit_info->append(tr("Total odometry length:\t%1 m").arg(totalOdom));
|
||||||
|
}
|
||||||
ui_->textEdit_info->append(tr("Total time:\t\t%1").arg(QDateTime::fromMSecsSinceEpoch(totalTime*1000).toUTC().toString("hh:mm:ss.zzz")));
|
ui_->textEdit_info->append(tr("Total time:\t\t%1").arg(QDateTime::fromMSecsSinceEpoch(totalTime*1000).toUTC().toString("hh:mm:ss.zzz")));
|
||||||
ui_->textEdit_info->append(tr("LTM:\t\t%1 nodes and %2 words").arg(ids.size()).arg(dbDriver_->getTotalDictionarySize()));
|
ui_->textEdit_info->append(tr("LTM:\t\t%1 nodes and %2 words").arg(ids.size()).arg(dbDriver_->getTotalDictionarySize()));
|
||||||
ui_->textEdit_info->append(tr("WM:\t\t%1 nodes and %2 words").arg(dbDriver_->getLastNodesSize()).arg(dbDriver_->getLastDictionarySize()));
|
ui_->textEdit_info->append(tr("WM:\t\t%1 nodes and %2 words").arg(dbDriver_->getLastNodesSize()).arg(dbDriver_->getLastDictionarySize()));
|
||||||
ui_->textEdit_info->append(tr("Global graph:\t%1 poses and %2 links").arg(poses_.size()).arg(links_.size()));
|
ui_->textEdit_info->append(tr("Global graph:\t%1 poses and %2 links").arg(poses_.size()).arg(links_.size()));
|
||||||
ui_->textEdit_info->append(tr("Ground truth:\t%1 poses").arg(groundTruthPoses_.size()));
|
ui_->textEdit_info->append(tr("Ground truth:\t%1 poses").arg(groundTruthPoses_.size()));
|
||||||
ui_->textEdit_info->append("");
|
ui_->textEdit_info->append("");
|
||||||
ui_->textEdit_info->append(tr("Database size:\t%1 MB").arg(dbDriver_->getMemoryUsed()/1000000));
|
long total = 0;
|
||||||
ui_->textEdit_info->append(tr("Images size:\t%1 MB").arg(dbDriver_->getImagesMemoryUsed()/1000000));
|
long dbSize = UFile::length(dbDriver_->getUrl());
|
||||||
ui_->textEdit_info->append(tr("Depths size:\t%1 MB").arg(dbDriver_->getDepthImagesMemoryUsed()/1000000));
|
long mem = dbSize;
|
||||||
ui_->textEdit_info->append(tr("Scans size:\t\t%1 MB").arg(dbDriver_->getLaserScansMemoryUsed()/1000000));
|
ui_->textEdit_info->append(tr("Database size:\t%1 %2").arg(mem>1000000?mem/1000000:mem>1000?mem/1000:mem).arg(mem>1000000?"MB":mem>1000?"KB":"Bytes"));
|
||||||
ui_->textEdit_info->append(tr("User data size:\t%1 bytes").arg(dbDriver_->getUserDataMemoryUsed()));
|
mem = dbDriver_->getNodesMemoryUsed();
|
||||||
ui_->textEdit_info->append(tr("Dictionary size:\t%1 bytes").arg(dbDriver_->getWordsMemoryUsed()));
|
total+=mem;
|
||||||
|
ui_->textEdit_info->append(tr("Nodes size:\t\t%1 %2\t%3%").arg(mem>1000000?mem/1000000:mem>1000?mem/1000:mem).arg(mem>1000000?"MB":mem>1000?"KB":"Bytes").arg(dbSize>0?QString::number(double(mem)/double(dbSize)*100.0, 'f', 2 ):"0"));
|
||||||
|
mem = dbDriver_->getLinksMemoryUsed();
|
||||||
|
total+=mem;
|
||||||
|
ui_->textEdit_info->append(tr("Links size:\t\t%1 %2\t%3%").arg(mem>1000000?mem/1000000:mem>1000?mem/1000:mem).arg(mem>1000000?"MB":mem>1000?"KB":"Bytes").arg(dbSize>0?QString::number(double(mem)/double(dbSize)*100.0, 'f', 2 ):"0"));
|
||||||
|
mem = dbDriver_->getImagesMemoryUsed();
|
||||||
|
total+=mem;
|
||||||
|
ui_->textEdit_info->append(tr("RGB Images size:\t%1 %2\t%3%").arg(mem>1000000?mem/1000000:mem>1000?mem/1000:mem).arg(mem>1000000?"MB":mem>1000?"KB":"Bytes").arg(dbSize>0?QString::number(double(mem)/double(dbSize)*100.0, 'f', 2 ):"0"));
|
||||||
|
mem = dbDriver_->getDepthImagesMemoryUsed();
|
||||||
|
total+=mem;
|
||||||
|
ui_->textEdit_info->append(tr("Depth Images size:\t%1 %2\t%3%").arg(mem>1000000?mem/1000000:mem>1000?mem/1000:mem).arg(mem>1000000?"MB":mem>1000?"KB":"Bytes").arg(dbSize>0?QString::number(double(mem)/double(dbSize)*100.0, 'f', 2 ):"0"));
|
||||||
|
mem = dbDriver_->getCalibrationsMemoryUsed();
|
||||||
|
total+=mem;
|
||||||
|
ui_->textEdit_info->append(tr("Calibrations size:\t%1 %2\t%3%").arg(mem>1000000?mem/1000000:mem>1000?mem/1000:mem).arg(mem>1000000?"MB":mem>1000?"KB":"Bytes").arg(dbSize>0?QString::number(double(mem)/double(dbSize)*100.0, 'f', 2 ):"0"));
|
||||||
|
mem = dbDriver_->getGridsMemoryUsed();
|
||||||
|
total+=mem;
|
||||||
|
ui_->textEdit_info->append(tr("Grids size:\t\t%1 %2\t%3%").arg(mem>1000000?mem/1000000:mem>1000?mem/1000:mem).arg(mem>1000000?"MB":mem>1000?"KB":"Bytes").arg(dbSize>0?QString::number(double(mem)/double(dbSize)*100.0, 'f', 2 ):"0"));
|
||||||
|
mem = dbDriver_->getLaserScansMemoryUsed();
|
||||||
|
total+=mem;
|
||||||
|
ui_->textEdit_info->append(tr("Scans size:\t\t%1 %2\t%3%").arg(mem>1000000?mem/1000000:mem>1000?mem/1000:mem).arg(mem>1000000?"MB":mem>1000?"KB":"Bytes").arg(dbSize>0?QString::number(double(mem)/double(dbSize)*100.0, 'f', 2 ):"0"));
|
||||||
|
mem = dbDriver_->getUserDataMemoryUsed();
|
||||||
|
total+=mem;
|
||||||
|
ui_->textEdit_info->append(tr("User data size:\t%1 %2\t%3%").arg(mem>1000000?mem/1000000:mem>1000?mem/1000:mem).arg(mem>1000000?"MB":mem>1000?"KB":"Bytes").arg(dbSize>0?QString::number(double(mem)/double(dbSize)*100.0, 'f', 2 ):"0"));
|
||||||
|
mem = dbDriver_->getWordsMemoryUsed();
|
||||||
|
total+=mem;
|
||||||
|
ui_->textEdit_info->append(tr("Dictionary size:\t%1 %2\t%3%").arg(mem>1000000?mem/1000000:mem>1000?mem/1000:mem).arg(mem>1000000?"MB":mem>1000?"KB":"Bytes").arg(dbSize>0?QString::number(double(mem)/double(dbSize)*100.0, 'f', 2 ):"0"));
|
||||||
|
mem = dbDriver_->getFeaturesMemoryUsed();
|
||||||
|
total+=mem;
|
||||||
|
ui_->textEdit_info->append(tr("Features size:\t%1 %2\t%3%").arg(mem>1000000?mem/1000000:mem>1000?mem/1000:mem).arg(mem>1000000?"MB":mem>1000?"KB":"Bytes").arg(dbSize>0?QString::number(double(mem)/double(dbSize)*100.0, 'f', 2 ):"0"));
|
||||||
|
mem = dbDriver_->getStatisticsMemoryUsed();
|
||||||
|
total+=mem;
|
||||||
|
ui_->textEdit_info->append(tr("Statistics size:\t%1 %2\t%3%").arg(mem>1000000?mem/1000000:mem>1000?mem/1000:mem).arg(mem>1000000?"MB":mem>1000?"KB":"Bytes").arg(dbSize>0?QString::number(double(mem)/double(dbSize)*100.0, 'f', 2 ):"0"));
|
||||||
|
mem = dbSize - total;
|
||||||
|
ui_->textEdit_info->append(tr("Other (indexing):\t%1 %2\t%3%").arg(mem>1000000?mem/1000000:mem>1000?mem/1000:mem).arg(mem>1000000?"MB":mem>1000?"KB":"Bytes").arg(dbSize>0?QString::number(double(mem)/double(dbSize)*100.0, 'f', 2 ):"0"));
|
||||||
ui_->textEdit_info->append("");
|
ui_->textEdit_info->append("");
|
||||||
ui_->textEdit_info->append(tr("%1 bad signatures in LTM").arg(badcountInLTM));
|
ui_->textEdit_info->append(tr("%1 bad signatures in LTM").arg(badcountInLTM));
|
||||||
ui_->textEdit_info->append(tr("%1 bad signatures in the global graph").arg(badCountInGraph));
|
ui_->textEdit_info->append(tr("%1 bad signatures in the global graph").arg(badCountInGraph));
|
||||||
|
|||||||
Reference in New Issue
Block a user