void StressTest::Start(TestFileProvider* fileProvider, int cycles) { GetSystemTime(&stressStartTime); this->fileProvider = fileProvider; this->cycles = cycles; if (pageRanges.size() == 0) pageRanges.Append(PageRange()); if (fileRanges.size() == 0) fileRanges.Append(PageRange()); TickTimer(); }
// parses a list of page ranges such as 1,3-5,7- (i..e all but pages 2 and 6) // into an interable list (returns nullptr on parsing errors) // caller must delete the result bool ParsePageRanges(const WCHAR* ranges, Vec<PageRange>& result) { if (!ranges) return false; WStrVec rangeList; rangeList.Split(ranges, L",", true); rangeList.SortNatural(); for (size_t i = 0; i < rangeList.size(); i++) { int start, end; if (str::Parse(rangeList.at(i), L"%d-%d%$", &start, &end) && 0 < start && start <= end) result.Append(PageRange(start, end)); else if (str::Parse(rangeList.at(i), L"%d-%$", &start) && 0 < start) result.Append(PageRange(start, INT_MAX)); else if (str::Parse(rangeList.at(i), L"%d%$", &start) && 0 < start) result.Append(PageRange(start, start)); else return false; } return result.size() > 0; }
void StressTest::Start(const TCHAR *path, const TCHAR *filter, const TCHAR *ranges, int cycles) { srand((unsigned int)time(NULL)); GetSystemTime(&stressStartTime); // forbid entering sleep mode during tests SetThreadExecutionState(ES_CONTINUOUS | ES_SYSTEM_REQUIRED | ES_DISPLAY_REQUIRED); basePath.Set(str::Dup(path)); fileFilter.Set(filter && !str::Eq(filter, _T("*")) ? str::Dup(filter) : NULL); if (file::Exists(basePath)) { filesToOpen.Append(str::Dup(basePath)); ParsePageRanges(ranges, pageRanges); } else if (dir::Exists(basePath)) { OpenDir(basePath); ParsePageRanges(ranges, fileRanges); } else { // Note: dev only, don't translate ScopedMem<TCHAR> s(str::Format(_T("Path '%s' doesn't exist"), path)); ShowNotification(win, s, false /* autoDismiss */, true, NG_STRESS_TEST_SUMMARY); Finished(false); return; } this->cycles = cycles; if (pageRanges.Count() == 0) pageRanges.Append(PageRange()); if (fileRanges.Count() == 0) fileRanges.Append(PageRange()); if (GoToNextFile()) TickTimer(); else Finished(true); }