mirror of
https://github.com/winfsp/winfsp.git
synced 2025-04-22 08:23:05 -05:00
tst: fsbench: OptEmptyCacheDrive, OptOpenCount
This commit is contained in:
parent
69257949ac
commit
b0cfdc0396
@ -24,7 +24,9 @@
|
|||||||
#include <tlib/testsuite.h>
|
#include <tlib/testsuite.h>
|
||||||
|
|
||||||
static BOOLEAN OptEmptyCache = FALSE;
|
static BOOLEAN OptEmptyCache = FALSE;
|
||||||
|
static CHAR OptEmptyCacheDrive = 0;
|
||||||
static ULONG OptFileCount = 1000;
|
static ULONG OptFileCount = 1000;
|
||||||
|
static ULONG OptOpenCount = 10;
|
||||||
static ULONG OptListCount = 100;
|
static ULONG OptListCount = 100;
|
||||||
static ULONG OptRdwrFileSize = 4096 * 1024;
|
static ULONG OptRdwrFileSize = 4096 * 1024;
|
||||||
static ULONG OptRdwrCcCount = 100;
|
static ULONG OptRdwrCcCount = 100;
|
||||||
@ -32,43 +34,44 @@ static ULONG OptRdwrNcCount = 100;
|
|||||||
static ULONG OptMmapFileSize = 4096 * 1024;
|
static ULONG OptMmapFileSize = 4096 * 1024;
|
||||||
static ULONG OptMmapCount = 100;
|
static ULONG OptMmapCount = 100;
|
||||||
|
|
||||||
static void file_create_dotest(ULONG CreateDisposition)
|
static void file_create_dotest(ULONG CreateDisposition, ULONG OpenCount)
|
||||||
{
|
{
|
||||||
HANDLE Handle;
|
HANDLE Handle;
|
||||||
BOOL Success;
|
BOOL Success;
|
||||||
WCHAR FileName[MAX_PATH];
|
WCHAR FileName[MAX_PATH];
|
||||||
|
|
||||||
for (ULONG Index = 0; OptFileCount > Index; Index++)
|
for (ULONG OpenIndex = 0; OpenCount > OpenIndex; OpenIndex++)
|
||||||
{
|
for (ULONG Index = 0; OptFileCount > Index; Index++)
|
||||||
StringCbPrintfW(FileName, sizeof FileName, L"fsbench-file%lu", Index);
|
{
|
||||||
Handle = CreateFileW(FileName,
|
StringCbPrintfW(FileName, sizeof FileName, L"fsbench-file%lu", Index);
|
||||||
GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE,
|
Handle = CreateFileW(FileName,
|
||||||
0,
|
GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE,
|
||||||
CreateDisposition, FILE_ATTRIBUTE_NORMAL,
|
0,
|
||||||
0);
|
CreateDisposition, FILE_ATTRIBUTE_NORMAL,
|
||||||
ASSERT(INVALID_HANDLE_VALUE != Handle);
|
0);
|
||||||
Success = CloseHandle(Handle);
|
ASSERT(INVALID_HANDLE_VALUE != Handle);
|
||||||
ASSERT(Success);
|
Success = CloseHandle(Handle);
|
||||||
}
|
ASSERT(Success);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
static void file_create_test(void)
|
static void file_create_test(void)
|
||||||
{
|
{
|
||||||
file_create_dotest(CREATE_NEW);
|
file_create_dotest(CREATE_NEW, 1);
|
||||||
}
|
}
|
||||||
static void file_open_test(void)
|
static void file_open_test(void)
|
||||||
{
|
{
|
||||||
file_create_dotest(OPEN_EXISTING);
|
file_create_dotest(OPEN_EXISTING, OptOpenCount);
|
||||||
}
|
}
|
||||||
static void file_overwrite_test(void)
|
static void file_overwrite_test(void)
|
||||||
{
|
{
|
||||||
file_create_dotest(CREATE_ALWAYS);
|
file_create_dotest(CREATE_ALWAYS, 1);
|
||||||
}
|
}
|
||||||
static void file_attr_test(void)
|
static void file_attr_test(void)
|
||||||
{
|
{
|
||||||
WCHAR FileName[MAX_PATH];
|
WCHAR FileName[MAX_PATH];
|
||||||
DWORD FileAttributes;
|
DWORD FileAttributes;
|
||||||
|
|
||||||
for (ULONG ListIndex = 0; OptListCount > ListIndex; ListIndex++)
|
for (ULONG OpenIndex = 0; OptOpenCount > OpenIndex; OpenIndex++)
|
||||||
for (ULONG Index = 0; OptFileCount > Index; Index++)
|
for (ULONG Index = 0; OptFileCount > Index; Index++)
|
||||||
{
|
{
|
||||||
StringCbPrintfW(FileName, sizeof FileName, L"fsbench-file%lu", Index);
|
StringCbPrintfW(FileName, sizeof FileName, L"fsbench-file%lu", Index);
|
||||||
@ -418,6 +421,17 @@ static void EmptyCache(const char *name, void (*fn)(void), int v)
|
|||||||
ASSERT(0 == NtSetSystemInformation(80 /*SystemMemoryListInformation*/, &Command, sizeof Command));
|
ASSERT(0 == NtSetSystemInformation(80 /*SystemMemoryListInformation*/, &Command, sizeof Command));
|
||||||
Command = 4 /*MemoryPurgeStandbyList*/;
|
Command = 4 /*MemoryPurgeStandbyList*/;
|
||||||
ASSERT(0 == NtSetSystemInformation(80 /*SystemMemoryListInformation*/, &Command, sizeof Command));
|
ASSERT(0 == NtSetSystemInformation(80 /*SystemMemoryListInformation*/, &Command, sizeof Command));
|
||||||
|
|
||||||
|
/* optionally invalidate the volume cache; see https://stackoverflow.com/a/7701908/568557 */
|
||||||
|
if (OptEmptyCacheDrive)
|
||||||
|
{
|
||||||
|
WCHAR VolumeNameBuf[] = L"\\\\.\\X:";
|
||||||
|
HANDLE VolumeHandle;
|
||||||
|
VolumeNameBuf[4] = OptEmptyCacheDrive;
|
||||||
|
VolumeHandle = CreateFileW(VolumeNameBuf, FILE_READ_DATA, FILE_SHARE_READ, 0, OPEN_EXISTING, 0, 0);
|
||||||
|
if (INVALID_HANDLE_VALUE != VolumeHandle)
|
||||||
|
CloseHandle(VolumeHandle);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
if (-1 == v) /* teardown */
|
if (-1 == v) /* teardown */
|
||||||
@ -478,11 +492,22 @@ int main(int argc, char *argv[])
|
|||||||
OptEmptyCache = TRUE;
|
OptEmptyCache = TRUE;
|
||||||
rmarg(argv, argc, argi);
|
rmarg(argv, argc, argi);
|
||||||
}
|
}
|
||||||
|
else if (0 == strncmp("--empty-cache=", a, sizeof "--empty-cache=" - 1))
|
||||||
|
{
|
||||||
|
OptEmptyCache = TRUE;
|
||||||
|
OptEmptyCacheDrive = *(a + sizeof "--empty-cache=" - 1);
|
||||||
|
rmarg(argv, argc, argi);
|
||||||
|
}
|
||||||
else if (0 == strncmp("--files=", a, sizeof "--files=" - 1))
|
else if (0 == strncmp("--files=", a, sizeof "--files=" - 1))
|
||||||
{
|
{
|
||||||
OptFileCount = strtoul(a + sizeof "--files=" - 1, 0, 10);
|
OptFileCount = strtoul(a + sizeof "--files=" - 1, 0, 10);
|
||||||
rmarg(argv, argc, argi);
|
rmarg(argv, argc, argi);
|
||||||
}
|
}
|
||||||
|
else if (0 == strncmp("--open=", a, sizeof "--open=" - 1))
|
||||||
|
{
|
||||||
|
OptOpenCount = strtoul(a + sizeof "--open=" - 1, 0, 10);
|
||||||
|
rmarg(argv, argc, argi);
|
||||||
|
}
|
||||||
else if (0 == strncmp("--list=", a, sizeof "--list=" - 1))
|
else if (0 == strncmp("--list=", a, sizeof "--list=" - 1))
|
||||||
{
|
{
|
||||||
OptListCount = strtoul(a + sizeof "--list=" - 1, 0, 10);
|
OptListCount = strtoul(a + sizeof "--list=" - 1, 0, 10);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user