Merge pull request #65031 from akien-mga/os-drop-obsolete-resource-debugging
This commit is contained in:
commit
c7e4c802ff
7 changed files with 0 additions and 243 deletions
|
@ -437,114 +437,6 @@ bool OS::is_stdout_verbose() const {
|
|||
return ::OS::get_singleton()->is_stdout_verbose();
|
||||
}
|
||||
|
||||
struct OSCoreBindImg {
|
||||
String path;
|
||||
Size2 size;
|
||||
int fmt = 0;
|
||||
ObjectID id;
|
||||
int vram = 0;
|
||||
bool operator<(const OSCoreBindImg &p_img) const { return vram == p_img.vram ? id < p_img.id : vram > p_img.vram; }
|
||||
};
|
||||
|
||||
void OS::print_all_textures_by_size() {
|
||||
List<OSCoreBindImg> imgs;
|
||||
uint64_t total = 0;
|
||||
{
|
||||
List<Ref<Resource>> rsrc;
|
||||
ResourceCache::get_cached_resources(&rsrc);
|
||||
|
||||
for (Ref<Resource> &res : rsrc) {
|
||||
if (!res->is_class("Texture")) {
|
||||
continue;
|
||||
}
|
||||
|
||||
Size2 size = res->call("get_size");
|
||||
int fmt = res->call("get_format");
|
||||
|
||||
OSCoreBindImg img;
|
||||
img.size = size;
|
||||
img.fmt = fmt;
|
||||
img.path = res->get_path();
|
||||
img.vram = Image::get_image_data_size(img.size.width, img.size.height, Image::Format(img.fmt));
|
||||
img.id = res->get_instance_id();
|
||||
total += img.vram;
|
||||
imgs.push_back(img);
|
||||
}
|
||||
}
|
||||
|
||||
imgs.sort();
|
||||
|
||||
if (imgs.size() == 0) {
|
||||
print_line("No textures seem used in this project.");
|
||||
} else {
|
||||
print_line("Textures currently in use, sorted by VRAM usage:\n"
|
||||
"Path - VRAM usage (Dimensions)");
|
||||
}
|
||||
|
||||
for (const OSCoreBindImg &img : imgs) {
|
||||
print_line(vformat("%s - %s %s",
|
||||
img.path,
|
||||
String::humanize_size(img.vram),
|
||||
img.size));
|
||||
}
|
||||
|
||||
print_line(vformat("Total VRAM usage: %s.", String::humanize_size(total)));
|
||||
}
|
||||
|
||||
void OS::print_resources_by_type(const Vector<String> &p_types) {
|
||||
ERR_FAIL_COND_MSG(p_types.size() == 0,
|
||||
"At least one type should be provided to print resources by type.");
|
||||
|
||||
print_line(vformat("Resources currently in use for the following types: %s", p_types));
|
||||
|
||||
RBMap<String, int> type_count;
|
||||
List<Ref<Resource>> resources;
|
||||
ResourceCache::get_cached_resources(&resources);
|
||||
|
||||
for (const Ref<Resource> &r : resources) {
|
||||
bool found = false;
|
||||
|
||||
for (int i = 0; i < p_types.size(); i++) {
|
||||
if (r->is_class(p_types[i])) {
|
||||
found = true;
|
||||
}
|
||||
}
|
||||
if (!found) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!type_count.has(r->get_class())) {
|
||||
type_count[r->get_class()] = 0;
|
||||
}
|
||||
|
||||
type_count[r->get_class()]++;
|
||||
|
||||
print_line(vformat("%s: %s", r->get_class(), r->get_path()));
|
||||
|
||||
List<StringName> metas;
|
||||
r->get_meta_list(&metas);
|
||||
for (const StringName &meta : metas) {
|
||||
print_line(vformat(" %s: %s", meta, r->get_meta(meta)));
|
||||
}
|
||||
}
|
||||
|
||||
for (const KeyValue<String, int> &E : type_count) {
|
||||
print_line(vformat("%s count: %d", E.key, E.value));
|
||||
}
|
||||
}
|
||||
|
||||
void OS::print_all_resources(const String &p_to_file) {
|
||||
::OS::get_singleton()->print_all_resources(p_to_file);
|
||||
}
|
||||
|
||||
void OS::print_resources_in_use(bool p_short) {
|
||||
::OS::get_singleton()->print_resources_in_use(p_short);
|
||||
}
|
||||
|
||||
void OS::dump_resources_to_file(const String &p_file) {
|
||||
::OS::get_singleton()->dump_resources_to_file(p_file.utf8().get_data());
|
||||
}
|
||||
|
||||
Error OS::move_to_trash(const String &p_path) const {
|
||||
return ::OS::get_singleton()->move_to_trash(p_path);
|
||||
}
|
||||
|
@ -663,10 +555,6 @@ void OS::_bind_methods() {
|
|||
|
||||
ClassDB::bind_method(D_METHOD("is_debug_build"), &OS::is_debug_build);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("dump_resources_to_file", "file"), &OS::dump_resources_to_file);
|
||||
ClassDB::bind_method(D_METHOD("print_resources_in_use", "short"), &OS::print_resources_in_use, DEFVAL(false));
|
||||
ClassDB::bind_method(D_METHOD("print_all_resources", "tofile"), &OS::print_all_resources, DEFVAL(""));
|
||||
|
||||
ClassDB::bind_method(D_METHOD("get_static_memory_usage"), &OS::get_static_memory_usage);
|
||||
ClassDB::bind_method(D_METHOD("get_static_memory_peak_usage"), &OS::get_static_memory_peak_usage);
|
||||
|
||||
|
@ -678,9 +566,6 @@ void OS::_bind_methods() {
|
|||
ClassDB::bind_method(D_METHOD("get_cache_dir"), &OS::get_cache_dir);
|
||||
ClassDB::bind_method(D_METHOD("get_unique_id"), &OS::get_unique_id);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("print_all_textures_by_size"), &OS::print_all_textures_by_size);
|
||||
ClassDB::bind_method(D_METHOD("print_resources_by_type", "types"), &OS::print_resources_by_type);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("get_keycode_string", "code"), &OS::get_keycode_string);
|
||||
ClassDB::bind_method(D_METHOD("is_keycode_unicode", "code"), &OS::is_keycode_unicode);
|
||||
ClassDB::bind_method(D_METHOD("find_keycode_from_string", "string"), &OS::find_keycode_from_string);
|
||||
|
|
|
@ -201,13 +201,6 @@ public:
|
|||
|
||||
String get_model_name() const;
|
||||
|
||||
void dump_resources_to_file(const String &p_file);
|
||||
|
||||
void print_resources_in_use(bool p_short = false);
|
||||
void print_all_resources(const String &p_to_file);
|
||||
void print_all_textures_by_size();
|
||||
void print_resources_by_type(const Vector<String> &p_types);
|
||||
|
||||
bool is_debug_build() const;
|
||||
|
||||
String get_unique_id() const;
|
||||
|
|
|
@ -543,43 +543,3 @@ int ResourceCache::get_cached_resource_count() {
|
|||
|
||||
return rc;
|
||||
}
|
||||
|
||||
void ResourceCache::dump(const char *p_file, bool p_short) {
|
||||
#ifdef DEBUG_ENABLED
|
||||
lock.lock();
|
||||
|
||||
HashMap<String, int> type_count;
|
||||
|
||||
Ref<FileAccess> f;
|
||||
if (p_file) {
|
||||
f = FileAccess::open(String::utf8(p_file), FileAccess::WRITE);
|
||||
ERR_FAIL_COND_MSG(f.is_null(), "Cannot create file at path '" + String::utf8(p_file) + "'.");
|
||||
}
|
||||
|
||||
for (KeyValue<String, Resource *> &E : resources) {
|
||||
Resource *r = E.value;
|
||||
|
||||
if (!type_count.has(r->get_class())) {
|
||||
type_count[r->get_class()] = 0;
|
||||
}
|
||||
|
||||
type_count[r->get_class()]++;
|
||||
|
||||
if (!p_short) {
|
||||
if (f.is_valid()) {
|
||||
f->store_line(r->get_class() + ": " + r->get_path());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (const KeyValue<String, int> &E : type_count) {
|
||||
if (f.is_valid()) {
|
||||
f->store_line(E.key + " count: " + itos(E.value));
|
||||
}
|
||||
}
|
||||
|
||||
lock.unlock();
|
||||
#else
|
||||
WARN_PRINT("ResourceCache::dump only with in debug builds.");
|
||||
#endif
|
||||
}
|
||||
|
|
|
@ -167,7 +167,6 @@ public:
|
|||
static void reload_externals();
|
||||
static bool has(const String &p_path);
|
||||
static Ref<Resource> get_ref(const String &p_path);
|
||||
static void dump(const char *p_file = nullptr, bool p_short = false);
|
||||
static void get_cached_resources(List<Ref<Resource>> *p_resources);
|
||||
static int get_cached_resource_count();
|
||||
};
|
||||
|
|
|
@ -186,46 +186,6 @@ void OS::set_stderr_enabled(bool p_enabled) {
|
|||
_stderr_enabled = p_enabled;
|
||||
}
|
||||
|
||||
static Ref<FileAccess> _OSPRF;
|
||||
|
||||
static void _OS_printres(Object *p_obj) {
|
||||
Resource *res = Object::cast_to<Resource>(p_obj);
|
||||
if (!res) {
|
||||
return;
|
||||
}
|
||||
|
||||
String str = vformat("%s - %s - %s", res->to_string(), res->get_name(), res->get_path());
|
||||
if (_OSPRF.is_valid()) {
|
||||
_OSPRF->store_line(str);
|
||||
} else {
|
||||
print_line(str);
|
||||
}
|
||||
}
|
||||
|
||||
void OS::print_all_resources(String p_to_file) {
|
||||
ERR_FAIL_COND(!p_to_file.is_empty() && _OSPRF.is_valid());
|
||||
if (!p_to_file.is_empty()) {
|
||||
Error err;
|
||||
_OSPRF = FileAccess::open(p_to_file, FileAccess::WRITE, &err);
|
||||
if (err != OK) {
|
||||
_OSPRF.unref();
|
||||
ERR_FAIL_MSG("Can't print all resources to file: " + String(p_to_file) + ".");
|
||||
}
|
||||
}
|
||||
|
||||
ObjectDB::debug_objects(_OS_printres);
|
||||
|
||||
_OSPRF.unref();
|
||||
}
|
||||
|
||||
void OS::print_resources_in_use(bool p_short) {
|
||||
ResourceCache::dump(nullptr, p_short);
|
||||
}
|
||||
|
||||
void OS::dump_resources_to_file(const char *p_file) {
|
||||
ResourceCache::dump(p_file);
|
||||
}
|
||||
|
||||
int OS::get_exit_code() const {
|
||||
return _exit_code;
|
||||
}
|
||||
|
|
|
@ -246,10 +246,6 @@ public:
|
|||
virtual bool is_disable_crash_handler() const { return false; }
|
||||
virtual void initialize_debugging() {}
|
||||
|
||||
virtual void dump_resources_to_file(const char *p_file);
|
||||
virtual void print_resources_in_use(bool p_short = false);
|
||||
virtual void print_all_resources(String p_to_file = "");
|
||||
|
||||
virtual uint64_t get_static_memory_usage() const;
|
||||
virtual uint64_t get_static_memory_peak_usage() const;
|
||||
virtual uint64_t get_free_static_memory() const;
|
||||
|
|
|
@ -88,15 +88,6 @@
|
|||
[b]Note:[/b] When [method delay_usec] is called on the main thread, it will freeze the project and will prevent it from redrawing and registering input until the delay has passed. When using [method delay_usec] as part of an [EditorPlugin] or [EditorScript], it will freeze the editor but won't freeze the project if it is currently running (since the project is an independent child process).
|
||||
</description>
|
||||
</method>
|
||||
<method name="dump_resources_to_file">
|
||||
<return type="void" />
|
||||
<param index="0" name="file" type="String" />
|
||||
<description>
|
||||
Dumps all used resources to file (only works in debug).
|
||||
Entry format per line: "Resource Type : Resource Location".
|
||||
At the end of the file is a statistic of all used Resource Types.
|
||||
</description>
|
||||
</method>
|
||||
<method name="execute">
|
||||
<return type="int" />
|
||||
<param index="0" name="path" type="String" />
|
||||
|
@ -526,33 +517,6 @@
|
|||
[b]Note:[/b] This method is implemented on Linux, macOS and Windows.
|
||||
</description>
|
||||
</method>
|
||||
<method name="print_all_resources">
|
||||
<return type="void" />
|
||||
<param index="0" name="tofile" type="String" default="""" />
|
||||
<description>
|
||||
Shows all resources in the game. Optionally, the list can be written to a file by specifying a file path in [param tofile].
|
||||
</description>
|
||||
</method>
|
||||
<method name="print_all_textures_by_size">
|
||||
<return type="void" />
|
||||
<description>
|
||||
Shows the list of loaded textures sorted by size in memory.
|
||||
</description>
|
||||
</method>
|
||||
<method name="print_resources_by_type">
|
||||
<return type="void" />
|
||||
<param index="0" name="types" type="PackedStringArray" />
|
||||
<description>
|
||||
Shows the number of resources loaded by the game of the given types.
|
||||
</description>
|
||||
</method>
|
||||
<method name="print_resources_in_use">
|
||||
<return type="void" />
|
||||
<param index="0" name="short" type="bool" default="false" />
|
||||
<description>
|
||||
Shows all resources currently used by the game.
|
||||
</description>
|
||||
</method>
|
||||
<method name="request_permission">
|
||||
<return type="bool" />
|
||||
<param index="0" name="name" type="String" />
|
||||
|
|
Loading…
Add table
Reference in a new issue