From 577c2eb933dd08ba717db913d49f46ad1ccbd05d Mon Sep 17 00:00:00 2001 From: Mister Puma Date: Thu, 30 Jan 2025 19:48:43 -0800 Subject: [PATCH] Made more things use arenas. --- core/os/memory.cpp | 1 + core/os/memory.h | 81 +++++++++++----------- editor/plugins/camera_3d_editor_plugin.cpp | 2 +- modules/enet/enet_connection.cpp | 2 +- modules/enet/enet_connection.h | 3 +- scene/gui/tree.cpp | 1 - 6 files changed, 45 insertions(+), 45 deletions(-) diff --git a/core/os/memory.cpp b/core/os/memory.cpp index fedf5dc38b99..a5ce4c90aa19 100644 --- a/core/os/memory.cpp +++ b/core/os/memory.cpp @@ -56,6 +56,7 @@ Arena g_memory_arena_images(true); Arena g_memory_arena_collections(true); Arena g_memory_arena_physics(true); Arena g_memory_arena_controls(true); +Arena g_memory_arena_plugins(true); Arena g_memory_arena_fonts(true); Arena g_memory_arena_string(true); diff --git a/core/os/memory.h b/core/os/memory.h index fab051d8a697..162fe80d8b6a 100644 --- a/core/os/memory.h +++ b/core/os/memory.h @@ -274,27 +274,21 @@ constexpr bool is_type_control(const uint32_t type_sig) { hash_string("PopupMenu"), hash_string("Shortcut"), - - // FIXME: Move to own collection? + // FIXME: Move to own collection hash_string("FileAccessUnix"), hash_string("DirAccessUnix"), hash_string("InputEventKey"), hash_string("InputEventJoypadButton"), hash_string("InputEventJoypadMotion"), hash_string("InputEventMouseButton"), + }; + const size_t length = sizeof(_types) / sizeof(_types[0]); + return _is_in_types(_types, length, type_sig); +} - // FIXME: Move to own collection? - hash_string("EditorStringNames"), - hash_string("EditorSettings"), - hash_string("EditorCommandPalette"), - hash_string("EditorDebuggerNode"), - hash_string("EditorPluginCSG"), - hash_string("EditorNode3DGizmoPlugin"), - hash_string("EditorPlugin"), - - - // FIXME: Move to own collection? +constexpr bool is_type_plugin(const uint32_t type_sig) { + constexpr uint32_t _types[] = { hash_string("CPUParticles3DEditorPlugin"), hash_string("NavigationObstacle3DEditorPlugin"), hash_string("MultiMeshEditorPlugin"), @@ -362,15 +356,23 @@ constexpr bool is_type_control(const uint32_t type_sig) { hash_string("Polygon2DEditorPlugin"), hash_string("Skeleton2DEditorPlugin"), - // FIXME: Move to own collection? + // FIXME: Move to own collection + hash_string("EditorSettings"), + hash_string("EditorCommandPalette"), + hash_string("EditorDebuggerNode"), + hash_string("EditorPluginCSG"), + hash_string("EditorNode3DGizmoPlugin"), + hash_string("EditorPlugin"), + + // FIXME: Move to own collection hash_string("SoftBodyRenderingServerHandler"), - // FIXME: Move to own collection? + // FIXME: Move to own collection hash_string("PhysicsDirectBodyState3DExtension"), hash_string("PhysicsDirectSpaceState3DExtension"), hash_string("PhysicsServer3DExtension"), - // FIXME: Move to own collection? + // FIXME: Move to own collection hash_string("ServersDebugger"), hash_string("SceneDebugger"), hash_string("DebugAdapterServer"), @@ -397,6 +399,7 @@ constexpr bool is_type_string(const uint32_t type_sig) { hash_string("StringName"), hash_string("CoreStringNames"), hash_string("SceneStringNames"), + hash_string("EditorStringNames"), }; const size_t length = sizeof(_types) / sizeof(_types[0]); @@ -514,12 +517,13 @@ extern Arena g_memory_arena_images; extern Arena g_memory_arena_collections; extern Arena g_memory_arena_physics; extern Arena g_memory_arena_controls; +extern Arena g_memory_arena_plugins; extern Arena g_memory_arena_fonts; extern Arena g_memory_arena_string; template -std::string_view _get_type_raw_name() { +constexpr std::string_view _get_type_raw_name() { std::string_view func_name = __PRETTY_FUNCTION__; return func_name; } @@ -571,6 +575,7 @@ enum class ArenaType { physics, images, controls, + plugins, fonts, strings, }; @@ -591,6 +596,8 @@ constexpr ArenaType get_arena_type_for_sig() { return ArenaType::images; } else if constexpr (is_type_control(type_sig)) { return ArenaType::controls; + } else if constexpr (is_type_plugin(type_sig)) { + return ArenaType::plugins; } else if constexpr (is_type_font(type_sig)) { return ArenaType::fonts; } else if constexpr (is_type_string(type_sig)) { @@ -611,6 +618,7 @@ constexpr Arena& get_arena() { case ArenaType::physics: return g_memory_arena_physics; case ArenaType::images: return g_memory_arena_images; case ArenaType::controls: return g_memory_arena_controls; + case ArenaType::plugins: return g_memory_arena_plugins; case ArenaType::fonts: return g_memory_arena_fonts; case ArenaType::strings: return g_memory_arena_string; default: return init_arena; @@ -628,6 +636,7 @@ constexpr std::string_view get_arena_name() { case ArenaType::physics: return "physics"; case ArenaType::images: return "images"; case ArenaType::controls: return "controls"; + case ArenaType::plugins: return "plugins"; case ArenaType::fonts: return "fonts"; case ArenaType::strings: return "string"; default: return "invalid"; @@ -649,16 +658,6 @@ constexpr bool has_arena_for_type() { return arena_type != ArenaType::invalid; } -#define memnewOldWithArgs2(T, m_class, f, l) \ -({ \ - if constexpr (g_is_logging) { \ - std::cout << "???? memnewOldWithArgs2: " << f << " : " << l << std::endl; \ - std::cout << "???? memnewOldWithArgs2 name: " << _get_type_name() << std::endl; \ - std::cout.flush(); \ - }\ - _post_initialize(new ("") m_class); \ -}) - #define memnewOldWithArgs3(name, m_class) \ ({ \ if constexpr (g_is_logging) { \ @@ -756,11 +755,6 @@ constexpr T* memnewNoArgs() { template bool is_address_in_any_arena(uintptr_t address) { - if constexpr (g_is_logging) { - std::cout << "?!?!?!?! delete T: " << address << " " << _get_type_name() << std::endl; - std::cout.flush(); - } - Arena* arenas[] = { &g_memory_arena_resource, &g_memory_arena_ref_counted, @@ -769,6 +763,7 @@ bool is_address_in_any_arena(uintptr_t address) { &g_memory_arena_collections, &g_memory_arena_physics, &g_memory_arena_controls, + &g_memory_arena_plugins, &g_memory_arena_fonts, &g_memory_arena_string, }; @@ -781,16 +776,16 @@ bool is_address_in_any_arena(uintptr_t address) { uintptr_t start = reinterpret_cast(&arena->m_buffer); uintptr_t end = reinterpret_cast(start + size); bool is_in_arena = address >= start && address <= end; - if constexpr (g_is_logging) { - std::cout << "?!?!?!?! arena start: " << start << ", end: " << end << ", is_in_arena: " << is_in_arena << " m_is_valid: " << arena->m_is_valid << " size: " << size << std::endl; - std::cout.flush(); - } + //if constexpr (g_is_logging) { + // std::cout << "?!?!?!?! arena start: " << start << ", end: " << end << ", is_in_arena: " << is_in_arena << " m_is_valid: " << arena->m_is_valid << " size: " << size << std::endl; + // std::cout.flush(); + //} if (is_in_arena) { is_in_any_arena = true; - if constexpr (g_is_logging) { - std::cout << "?!?!?!?! is in Arena !!!!!!!!!!!!!!!!!!!!" << std::endl; - std::cout.flush(); - } + //if constexpr (g_is_logging) { + // std::cout << "?!?!?!?! is in Arena !!!!!!!!!!!!!!!!!!!!" << std::endl; + // std::cout.flush(); + //} } } @@ -837,6 +832,12 @@ void memdelete(T *p_class) { } else { uintptr_t address = reinterpret_cast(&p_class); bool is_in_any_arena = is_address_in_any_arena(address); + + if constexpr (g_is_logging) { + std::cout << "?!?!?!?! delete T: " << address << " " << _get_type_name() << std::endl; + std::cout.flush(); + } + if (!is_in_any_arena) { //Memory::free_static(p_class, false); // FIXME: turn this back on!!!!!!!!!!!!!!!!!! } diff --git a/editor/plugins/camera_3d_editor_plugin.cpp b/editor/plugins/camera_3d_editor_plugin.cpp index fe8add3e37c8..a26c80cea05c 100644 --- a/editor/plugins/camera_3d_editor_plugin.cpp +++ b/editor/plugins/camera_3d_editor_plugin.cpp @@ -99,7 +99,7 @@ void Camera3DEditorPlugin::make_visible(bool p_visible) { } Camera3DEditorPlugin::Camera3DEditorPlugin() { - /* camera_editor = memnewOldNoConstructor( CameraEditor ); + /* camera_editor = memnewNoConstructor(); EditorNode::get_singleton()->get_main_screen_control()->add_child(camera_editor); camera_editor->set_anchor(SIDE_LEFT,Control::ANCHOR_END); diff --git a/modules/enet/enet_connection.cpp b/modules/enet/enet_connection.cpp index 3d820e375a90..92c124ca9c8d 100644 --- a/modules/enet/enet_connection.cpp +++ b/modules/enet/enet_connection.cpp @@ -508,7 +508,7 @@ void ENetConnection::Compressor::setup(ENetHost *p_host, CompressionMode p_mode) case COMPRESS_FASTLZ: case COMPRESS_ZLIB: case COMPRESS_ZSTD: { - Compressor *compressor = memnewOldWithArgs2(Compressor, Compressor(p_mode), __FILE__, __LINE__); + Compressor *compressor = memnewWithArgs(p_mode); enet_host_compress(p_host, &(compressor->enet_compressor)); } break; } diff --git a/modules/enet/enet_connection.h b/modules/enet/enet_connection.h index 616402be2037..545afdf3a8cb 100644 --- a/modules/enet/enet_connection.h +++ b/modules/enet/enet_connection.h @@ -95,8 +95,6 @@ class ENetConnection : public RefCounted { Vector dst_mem; ENetCompressor enet_compressor; - Compressor(CompressionMode mode); - static size_t enet_compress(void *context, const ENetBuffer *inBuffers, size_t inBufferCount, size_t inLimit, enet_uint8 *outData, size_t outLimit); static size_t enet_decompress(void *context, const enet_uint8 *inData, size_t inLimit, enet_uint8 *outData, size_t outLimit); static void enet_compressor_destroy(void *context) { @@ -104,6 +102,7 @@ class ENetConnection : public RefCounted { } public: + Compressor(CompressionMode mode); static void setup(ENetHost *p_host, CompressionMode p_mode); }; diff --git a/scene/gui/tree.cpp b/scene/gui/tree.cpp index f89dfbb99117..da7a7cd16f39 100644 --- a/scene/gui/tree.cpp +++ b/scene/gui/tree.cpp @@ -4479,7 +4479,6 @@ TreeItem *Tree::create_item(TreeItem *p_parent, int p_index) { if (!root) { // No root exists, make the given item the new root. ti = memnewWithArgs(this); - //ti = memnewOldWithArgs2(TreeItem, TreeItem(this), __FILE__, __LINE__); ERR_FAIL_NULL_V(ti, nullptr); ti->cells.resize(columns.size()); ti->is_root = true;