Merge pull request #69890 from Rindbee/use-buffer-to-speed-up

Use buffer to speed up copying/transcribing when renaming dependencies
This commit is contained in:
Rémi Verschelde 2022-12-13 14:12:58 +01:00
commit c8b6c44c3c
No known key found for this signature in database
GPG key ID: C3336907360768E1

View file

@ -982,15 +982,26 @@ Error ResourceLoaderText::rename_dependencies(Ref<FileAccess> 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;