changed write file to accept 1MiB blocks to improve file write speed on windows

This commit is contained in:
Nikita Smith
2024-10-16 22:27:46 -07:00
parent 79390f4a95
commit 2b407b5861
+13 -11
View File
@@ -366,27 +366,29 @@ os_file_write(OS_Handle file, Rng1U64 rng, void *data)
HANDLE win_handle = (HANDLE)file.u64[0]; HANDLE win_handle = (HANDLE)file.u64[0];
U64 src_off = 0; U64 src_off = 0;
U64 dst_off = rng.min; U64 dst_off = rng.min;
U64 bytes_to_write_total = rng.max-rng.min; U64 total_write_size = dim_1u64(rng);
U64 total_bytes_written = 0; for(;;)
for(;src_off < bytes_to_write_total;)
{ {
void *bytes_src = (void *)((U8 *)data + src_off); void *bytes_src = (U8 *)data + src_off;
U64 bytes_to_write_64 = (bytes_to_write_total-src_off); U64 bytes_left = total_write_size - src_off;
U32 bytes_to_write_32 = u32_from_u64_saturate(bytes_to_write_64); DWORD write_size = Min(MB(1), bytes_left);
U32 bytes_written = 0; DWORD bytes_written = 0;
OVERLAPPED overlapped = {0}; OVERLAPPED overlapped = {0};
overlapped.Offset = (dst_off&0x00000000ffffffffull); overlapped.Offset = (dst_off&0x00000000ffffffffull);
overlapped.OffsetHigh = (dst_off&0xffffffff00000000ull) >> 32; overlapped.OffsetHigh = (dst_off&0xffffffff00000000ull) >> 32;
BOOL success = WriteFile(win_handle, bytes_src, bytes_to_write_32, (DWORD *)&bytes_written, &overlapped); BOOL success = WriteFile(win_handle, bytes_src, write_size, &bytes_written, &overlapped);
if(success == 0) if(success == 0)
{ {
break; break;
} }
src_off += bytes_written; src_off += bytes_written;
dst_off += bytes_written; dst_off += bytes_written;
total_bytes_written += bytes_written; if(bytes_left == 0)
{
break;
}
} }
return total_bytes_written; return src_off;
} }
internal B32 internal B32