Pārlūkot izejas kodu

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

Use buffer to speed up copying/transcribing when renaming dependencies
Rémi Verschelde 2 gadi atpakaļ
vecāks
revīzija
c8b6c44c3c
1 mainītis faili ar 17 papildinājumiem un 6 dzēšanām
  1. 17 6
      scene/resources/resource_format_text.cpp

+ 17 - 6
scene/resources/resource_format_text.cpp

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