Merge pull request #65031 from akien-mga/os-drop-obsolete-resource-debugging

This commit is contained in:
Rémi Verschelde 2022-08-29 15:04:17 +02:00 committed by GitHub
commit c7e4c802ff
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
7 changed files with 0 additions and 243 deletions

View file

@ -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);

View file

@ -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;

View file

@ -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
}

View file

@ -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();
};

View file

@ -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;
}

View file

@ -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;

View file

@ -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="&quot;&quot;" />
<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" />