summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRémi Verschelde <rverschelde@gmail.com>2024-08-16 23:45:10 +0200
committerRémi Verschelde <rverschelde@gmail.com>2024-08-16 23:45:10 +0200
commitdbf4be308cf3766946e27b31685e29e26554d1da (patch)
tree296f6a1c08db8a925d0febd339a7523e2e0cfbd2
parent28f14102d9da421341d6207677d83ca3cdc08f89 (diff)
parentf9876d3a8897fb70edb1cc20fed851c259889350 (diff)
downloadredot-engine-dbf4be308cf3766946e27b31685e29e26554d1da.tar.gz
Merge pull request #93583 from smix8/obstacle_monitor
Add navigation obstacles to performance monitor stats
-rw-r--r--doc/classes/NavigationServer3D.xml3
-rw-r--r--doc/classes/Performance.xml5
-rw-r--r--main/performance.cpp5
-rw-r--r--main/performance.h1
-rw-r--r--modules/navigation/3d/godot_navigation_server_3d.cpp6
-rw-r--r--modules/navigation/3d/godot_navigation_server_3d.h1
-rw-r--r--modules/navigation/nav_map.cpp2
-rw-r--r--modules/navigation/nav_map.h2
-rw-r--r--servers/navigation_server_3d.cpp1
-rw-r--r--servers/navigation_server_3d.h1
10 files changed, 26 insertions, 1 deletions
diff --git a/doc/classes/NavigationServer3D.xml b/doc/classes/NavigationServer3D.xml
index ff3e6fd8a6..42f6235f8b 100644
--- a/doc/classes/NavigationServer3D.xml
+++ b/doc/classes/NavigationServer3D.xml
@@ -1167,5 +1167,8 @@
<constant name="INFO_EDGE_FREE_COUNT" value="8" enum="ProcessInfo">
Constant to get the number of navigation mesh polygon edges that could not be merged but may be still connected by edge proximity or with links.
</constant>
+ <constant name="INFO_OBSTACLE_COUNT" value="9" enum="ProcessInfo">
+ Constant to get the number of active navigation obstacles.
+ </constant>
</constants>
</class>
diff --git a/doc/classes/Performance.xml b/doc/classes/Performance.xml
index 4d01fe1760..6bb71932dd 100644
--- a/doc/classes/Performance.xml
+++ b/doc/classes/Performance.xml
@@ -221,7 +221,10 @@
<constant name="NAVIGATION_EDGE_FREE_COUNT" value="32" enum="Monitor">
Number of navigation mesh polygon edges that could not be merged in the [NavigationServer3D]. The edges still may be connected by edge proximity or with links.
</constant>
- <constant name="MONITOR_MAX" value="33" enum="Monitor">
+ <constant name="NAVIGATION_OBSTACLE_COUNT" value="33" enum="Monitor">
+ Number of active navigation obstacles in the [NavigationServer3D].
+ </constant>
+ <constant name="MONITOR_MAX" value="34" enum="Monitor">
Represents the size of the [enum Monitor] enum.
</constant>
</constants>
diff --git a/main/performance.cpp b/main/performance.cpp
index 8eda697b16..0547b3bff0 100644
--- a/main/performance.cpp
+++ b/main/performance.cpp
@@ -91,6 +91,7 @@ void Performance::_bind_methods() {
BIND_ENUM_CONSTANT(NAVIGATION_EDGE_MERGE_COUNT);
BIND_ENUM_CONSTANT(NAVIGATION_EDGE_CONNECTION_COUNT);
BIND_ENUM_CONSTANT(NAVIGATION_EDGE_FREE_COUNT);
+ BIND_ENUM_CONSTANT(NAVIGATION_OBSTACLE_COUNT);
BIND_ENUM_CONSTANT(MONITOR_MAX);
}
@@ -141,6 +142,7 @@ String Performance::get_monitor_name(Monitor p_monitor) const {
PNAME("navigation/edges_merged"),
PNAME("navigation/edges_connected"),
PNAME("navigation/edges_free"),
+ PNAME("navigation/obstacles"),
};
@@ -225,6 +227,8 @@ double Performance::get_monitor(Monitor p_monitor) const {
return NavigationServer3D::get_singleton()->get_process_info(NavigationServer3D::INFO_EDGE_CONNECTION_COUNT);
case NAVIGATION_EDGE_FREE_COUNT:
return NavigationServer3D::get_singleton()->get_process_info(NavigationServer3D::INFO_EDGE_FREE_COUNT);
+ case NAVIGATION_OBSTACLE_COUNT:
+ return NavigationServer3D::get_singleton()->get_process_info(NavigationServer3D::INFO_OBSTACLE_COUNT);
default: {
}
@@ -272,6 +276,7 @@ Performance::MonitorType Performance::get_monitor_type(Monitor p_monitor) const
MONITOR_TYPE_QUANTITY,
MONITOR_TYPE_QUANTITY,
MONITOR_TYPE_QUANTITY,
+ MONITOR_TYPE_QUANTITY,
};
diff --git a/main/performance.h b/main/performance.h
index 34162b2da9..05d678fe55 100644
--- a/main/performance.h
+++ b/main/performance.h
@@ -100,6 +100,7 @@ public:
NAVIGATION_EDGE_MERGE_COUNT,
NAVIGATION_EDGE_CONNECTION_COUNT,
NAVIGATION_EDGE_FREE_COUNT,
+ NAVIGATION_OBSTACLE_COUNT,
MONITOR_MAX
};
diff --git a/modules/navigation/3d/godot_navigation_server_3d.cpp b/modules/navigation/3d/godot_navigation_server_3d.cpp
index 430d527844..fc96506795 100644
--- a/modules/navigation/3d/godot_navigation_server_3d.cpp
+++ b/modules/navigation/3d/godot_navigation_server_3d.cpp
@@ -1298,6 +1298,7 @@ void GodotNavigationServer3D::process(real_t p_delta_time) {
int _new_pm_edge_merge_count = 0;
int _new_pm_edge_connection_count = 0;
int _new_pm_edge_free_count = 0;
+ int _new_pm_obstacle_count = 0;
// In c++ we can't be sure that this is performed in the main thread
// even with mutable functions.
@@ -1315,6 +1316,7 @@ void GodotNavigationServer3D::process(real_t p_delta_time) {
_new_pm_edge_merge_count += active_maps[i]->get_pm_edge_merge_count();
_new_pm_edge_connection_count += active_maps[i]->get_pm_edge_connection_count();
_new_pm_edge_free_count += active_maps[i]->get_pm_edge_free_count();
+ _new_pm_obstacle_count += active_maps[i]->get_pm_obstacle_count();
// Emit a signal if a map changed.
const uint32_t new_map_iteration_id = active_maps[i]->get_iteration_id();
@@ -1332,6 +1334,7 @@ void GodotNavigationServer3D::process(real_t p_delta_time) {
pm_edge_merge_count = _new_pm_edge_merge_count;
pm_edge_connection_count = _new_pm_edge_connection_count;
pm_edge_free_count = _new_pm_edge_free_count;
+ pm_obstacle_count = _new_pm_obstacle_count;
}
void GodotNavigationServer3D::init() {
@@ -1566,6 +1569,9 @@ int GodotNavigationServer3D::get_process_info(ProcessInfo p_info) const {
case INFO_EDGE_FREE_COUNT: {
return pm_edge_free_count;
} break;
+ case INFO_OBSTACLE_COUNT: {
+ return pm_obstacle_count;
+ } break;
}
return 0;
diff --git a/modules/navigation/3d/godot_navigation_server_3d.h b/modules/navigation/3d/godot_navigation_server_3d.h
index 5ba7ed1088..12a1132f07 100644
--- a/modules/navigation/3d/godot_navigation_server_3d.h
+++ b/modules/navigation/3d/godot_navigation_server_3d.h
@@ -95,6 +95,7 @@ class GodotNavigationServer3D : public NavigationServer3D {
int pm_edge_merge_count = 0;
int pm_edge_connection_count = 0;
int pm_edge_free_count = 0;
+ int pm_obstacle_count = 0;
public:
GodotNavigationServer3D();
diff --git a/modules/navigation/nav_map.cpp b/modules/navigation/nav_map.cpp
index f917c988ea..9796fa350d 100644
--- a/modules/navigation/nav_map.cpp
+++ b/modules/navigation/nav_map.cpp
@@ -907,6 +907,7 @@ void NavMap::sync() {
int _new_pm_edge_merge_count = pm_edge_merge_count;
int _new_pm_edge_connection_count = pm_edge_connection_count;
int _new_pm_edge_free_count = pm_edge_free_count;
+ int _new_pm_obstacle_count = obstacles.size();
// Check if we need to update the links.
if (regenerate_polygons) {
@@ -1219,6 +1220,7 @@ void NavMap::sync() {
pm_edge_merge_count = _new_pm_edge_merge_count;
pm_edge_connection_count = _new_pm_edge_connection_count;
pm_edge_free_count = _new_pm_edge_free_count;
+ pm_obstacle_count = _new_pm_obstacle_count;
}
void NavMap::_update_rvo_obstacles_tree_2d() {
diff --git a/modules/navigation/nav_map.h b/modules/navigation/nav_map.h
index d6215ea57f..3dd6db21dd 100644
--- a/modules/navigation/nav_map.h
+++ b/modules/navigation/nav_map.h
@@ -123,6 +123,7 @@ class NavMap : public NavRid {
int pm_edge_merge_count = 0;
int pm_edge_connection_count = 0;
int pm_edge_free_count = 0;
+ int pm_obstacle_count = 0;
public:
NavMap();
@@ -216,6 +217,7 @@ public:
int get_pm_edge_merge_count() const { return pm_edge_merge_count; }
int get_pm_edge_connection_count() const { return pm_edge_connection_count; }
int get_pm_edge_free_count() const { return pm_edge_free_count; }
+ int get_pm_obstacle_count() const { return pm_obstacle_count; }
private:
void compute_single_step(uint32_t index, NavAgent **agent);
diff --git a/servers/navigation_server_3d.cpp b/servers/navigation_server_3d.cpp
index b21c6b60f0..398ff1e1f3 100644
--- a/servers/navigation_server_3d.cpp
+++ b/servers/navigation_server_3d.cpp
@@ -216,6 +216,7 @@ void NavigationServer3D::_bind_methods() {
BIND_ENUM_CONSTANT(INFO_EDGE_MERGE_COUNT);
BIND_ENUM_CONSTANT(INFO_EDGE_CONNECTION_COUNT);
BIND_ENUM_CONSTANT(INFO_EDGE_FREE_COUNT);
+ BIND_ENUM_CONSTANT(INFO_OBSTACLE_COUNT);
}
NavigationServer3D *NavigationServer3D::get_singleton() {
diff --git a/servers/navigation_server_3d.h b/servers/navigation_server_3d.h
index 17c0771732..cdacf8e7e4 100644
--- a/servers/navigation_server_3d.h
+++ b/servers/navigation_server_3d.h
@@ -369,6 +369,7 @@ public:
INFO_EDGE_MERGE_COUNT,
INFO_EDGE_CONNECTION_COUNT,
INFO_EDGE_FREE_COUNT,
+ INFO_OBSTACLE_COUNT,
};
virtual int get_process_info(ProcessInfo p_info) const = 0;