static u8 GetRandomTrackNumber(u8 numFiles) { u8 storedNumFiles = eeprom_read(NUM_FILES_IDX); if (storedNumFiles == numFiles) { u8 nextFile = eeprom_read(LAST_PLAYED_IDX) + 1; if (nextFile == numFiles) { RandomizeFiles(numFiles); nextFile = 0; } eeprom_write(LAST_PLAYED_IDX, nextFile); return eeprom_read(RANDOM_FILES_START + nextFile); } else { RandomizeFiles(numFiles); eeprom_write(NUM_FILES_IDX, numFiles); eeprom_write(LAST_PLAYED_IDX, 0); return eeprom_read(RANDOM_FILES_START); } }
void StartStressTest(CommandLineInfo *i, WindowInfo *win) { gIsStressTesting = true; // TODO: for now stress testing only supports the non-ebook ui gGlobalPrefs->ebookUI.useFixedPageUI = true; gGlobalPrefs->chmUI.useFixedPageUI = true; // TODO: make stress test work with tabs? gGlobalPrefs->useTabs = false; // forbid entering sleep mode during tests SetThreadExecutionState(ES_CONTINUOUS | ES_SYSTEM_REQUIRED | ES_DISPLAY_REQUIRED); srand((unsigned int)time(nullptr)); // redirect stderr to NUL to disable (MuPDF) logging FILE *nul; freopen_s(&nul, "NUL", "w", stderr); int n = i->stressParallelCount; if (n > 1 || i->stressRandomizeFiles) { WindowInfo **windows = AllocArray<WindowInfo*>(n); windows[0] = win; for (int j=1; j<n; j++) { windows[j] = CreateAndShowWindowInfo(); if (!windows[j]) return; } WStrVec filesToTest; wprintf(L"Scanning for files in directory %s\n", i->stressTestPath.Get()); fflush(stdout); size_t filesCount = GetAllMatchingFiles(i->stressTestPath, i->stressTestFilter, filesToTest, true); if (0 == filesCount) { wprintf(L"Didn't find any files matching filter '%s'\n", i->stressTestFilter.Get()); return; } wprintf(L"Found %d files", (int)filesCount); fflush(stdout); if (i->stressRandomizeFiles) { // TODO: should probably allow over-writing the 100 limit RandomizeFiles(filesToTest, 100); filesCount = filesToTest.Count(); wprintf(L"\nAfter randomization: %d files", (int)filesCount); } wprintf(L"\n"); fflush(stdout); for (int j = 0; j < n; j++) { // dst will be deleted when the stress ends win = windows[j]; StressTest *dst = new StressTest(win, i->exitWhenDone); win->stressTest = dst; // divide filesToTest among each window FilesProvider *filesProvider = new FilesProvider(filesToTest, n, j); dst->Start(filesProvider, i->stressTestCycles); } free(windows); } else { // dst will be deleted when the stress ends StressTest *dst = new StressTest(win, i->exitWhenDone); win->stressTest = dst; dst->Start(i->stressTestPath, i->stressTestFilter, i->stressTestRanges, i->stressTestCycles); } }