summaryrefslogtreecommitdiffstats
path: root/servers/rendering/rendering_context_driver.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'servers/rendering/rendering_context_driver.cpp')
-rw-r--r--servers/rendering/rendering_context_driver.cpp45
1 files changed, 45 insertions, 0 deletions
diff --git a/servers/rendering/rendering_context_driver.cpp b/servers/rendering/rendering_context_driver.cpp
index 23e091e00c..b623be4098 100644
--- a/servers/rendering/rendering_context_driver.cpp
+++ b/servers/rendering/rendering_context_driver.cpp
@@ -84,6 +84,51 @@ void RenderingContextDriver::window_destroy(DisplayServer::WindowID p_window) {
window_surface_map.erase(p_window);
}
+String RenderingContextDriver::get_driver_and_device_memory_report() const {
+ String report;
+
+ const uint32_t num_tracked_obj_types = static_cast<uint32_t>(get_tracked_object_type_count());
+
+ report += "=== Driver Memory Report ===";
+
+ report += "\nLaunch with --extra-gpu-memory-tracking and build with "
+ "DEBUG_ENABLED for this functionality to work.";
+ report += "\nDevice memory may be unavailable if the API does not support it"
+ "(e.g. VK_EXT_device_memory_report is unsupported).";
+ report += "\n";
+
+ report += "\nTotal Driver Memory:";
+ report += String::num_real(double(get_driver_total_memory()) / (1024.0 * 1024.0));
+ report += " MB";
+ report += "\nTotal Driver Num Allocations: ";
+ report += String::num_uint64(get_driver_allocation_count());
+
+ report += "\nTotal Device Memory:";
+ report += String::num_real(double(get_device_total_memory()) / (1024.0 * 1024.0));
+ report += " MB";
+ report += "\nTotal Device Num Allocations: ";
+ report += String::num_uint64(get_device_allocation_count());
+
+ report += "\n\nMemory use by object type (CSV format):";
+ report += "\n\nCategory; Driver memory in MB; Driver Allocation Count; "
+ "Device memory in MB; Device Allocation Count";
+
+ for (uint32_t i = 0u; i < num_tracked_obj_types; ++i) {
+ report += "\n";
+ report += get_tracked_object_name(i);
+ report += ";";
+ report += String::num_real(double(get_driver_memory_by_object_type(i)) / (1024.0 * 1024.0));
+ report += ";";
+ report += String::num_uint64(get_driver_allocs_by_object_type(i));
+ report += ";";
+ report += String::num_real(double(get_device_memory_by_object_type(i)) / (1024.0 * 1024.0));
+ report += ";";
+ report += String::num_uint64(get_device_allocs_by_object_type(i));
+ }
+
+ return report;
+}
+
const char *RenderingContextDriver::get_tracked_object_name(uint32_t p_type_index) const {
return "Tracking Unsupported by API";
}