From bc4b5abea81d63d6b682a9e2f2b16ba4d9acdfaf Mon Sep 17 00:00:00 2001 From: Rindbee Date: Sun, 11 Dec 2022 09:43:18 +0800 Subject: Use buffer to speed up copying/transcribing when renaming dependencies If the scene is more complex, you may need to copy/transcribe a large amount of data, so use buffer to speed up this process. --- scene/resources/resource_format_text.cpp | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) (limited to 'scene/resources/resource_format_text.cpp') diff --git a/scene/resources/resource_format_text.cpp b/scene/resources/resource_format_text.cpp index e871ca007c..092f672cba 100644 --- a/scene/resources/resource_format_text.cpp +++ b/scene/resources/resource_format_text.cpp @@ -982,15 +982,26 @@ Error ResourceLoaderText::rename_dependencies(Ref p_f, const String f->seek(tag_end); - uint8_t c = f->get_8(); - if (c == '\n' && !f->eof_reached()) { - // Skip first newline character since we added one - c = f->get_8(); + const uint32_t buffer_size = 2048; + uint8_t *buffer = (uint8_t *)alloca(buffer_size); + uint32_t num_read; + + num_read = f->get_buffer(buffer, buffer_size); + ERR_FAIL_COND_V_MSG(num_read == UINT32_MAX, ERR_CANT_CREATE, "Failed to allocate memory for buffer."); + ERR_FAIL_COND_V(num_read == 0, ERR_FILE_CORRUPT); + + if (*buffer == '\n') { + // Skip first newline character since we added one. + if (num_read > 1) { + fw->store_buffer(buffer + 1, num_read - 1); + } + } else { + fw->store_buffer(buffer, num_read); } while (!f->eof_reached()) { - fw->store_8(c); - c = f->get_8(); + num_read = f->get_buffer(buffer, buffer_size); + fw->store_buffer(buffer, num_read); } bool all_ok = fw->get_error() == OK; -- cgit v1.2.3