Lines Matching defs:pTestFile

160 static void tstPDMACStressTestFileVerify(PPDMACTESTFILE pTestFile, PPDMACTESTFILETASK pTestTask)
169 unsigned iSeg = off / pTestFile->cbFileSegment;
170 PPDMACTESTFILESEG pSeg = &pTestFile->paSegs[iSeg];
198 static void tstPDMACStressTestFileFillBuffer(PPDMACTESTFILE pTestFile, PPDMACTESTFILETASK pTestTask)
209 unsigned iSeg = off / pTestFile->cbFileSegment;
210 PPDMACTESTFILESEG pSeg = &pTestFile->paSegs[iSeg];
225 static int tstPDMACStressTestFileWrite(PPDMACTESTFILE pTestFile, PPDMACTESTFILETASK pTestTask)
238 if (pTestFile->cbFileCurr < pTestFile->cbFileMax)
240 offMax = (pTestFile->cbFileMax - pTestFile->cbFileCurr) < pTestTask->DataSeg.cbSeg
241 ? pTestFile->cbFileMax - pTestTask->DataSeg.cbSeg
242 : pTestFile->cbFileCurr;
245 offMax = pTestFile->cbFileMax - pTestTask->DataSeg.cbSeg;
254 if (pTestFile->cbFileCurr == pTestFile->cbFileMax)
257 offMin = RT_MIN(pTestFile->cbFileCurr, offMax);
263 if ((uint64_t)pTestTask->off + pTestTask->DataSeg.cbSeg > pTestFile->cbFileCurr)
264 pTestFile->cbFileCurr = pTestTask->off + pTestTask->DataSeg.cbSeg;
266 AssertMsg(pTestFile->cbFileCurr <= pTestFile->cbFileMax,
268 pTestFile->cbFileCurr, pTestFile->cbFileMax));
276 tstPDMACStressTestFileFillBuffer(pTestFile, pTestTask);
279 rc = PDMR3AsyncCompletionEpWrite(pTestFile->hEndpoint, pTestTask->off,
288 static int tstPDMACStressTestFileRead(PPDMACTESTFILE pTestFile, PPDMACTESTFILETASK pTestTask)
296 pTestTask->DataSeg.cbSeg = RTRandU32Ex(1, RT_MIN(pTestFile->cbFileCurr, TASK_TRANSFER_SIZE_MAX));
298 AssertMsg(pTestFile->cbFileCurr >= pTestTask->DataSeg.cbSeg, ("Impossible\n"));
299 pTestTask->off = RTRandU64Ex(0, pTestFile->cbFileCurr - pTestTask->DataSeg.cbSeg);
307 rc = PDMR3AsyncCompletionEpRead(pTestFile->hEndpoint, pTestTask->off,
331 PPDMACTESTFILE pTestFile = (PPDMACTESTFILE)pThread->pvUser;
339 while (pTestFile->fRunning)
345 while ( (pTestFile->cTasksActiveCurr < pTestFile->cTasksActiveMax)
346 && (iTaskCurr < pTestFile->cTasksActiveMax))
348 PPDMACTESTFILETASK pTask = &pTestFile->paTasks[iTaskCurr];
355 ASMAtomicIncU32(&pTestFile->cTasksActiveCurr);
358 rc = tstPDMACStressTestFileWrite(pTestFile, pTask);
360 rc = tstPDMACStressTestFileRead(pTestFile, pTask);
363 tstPDMACStressTestFileTaskCompleted(pVM, pTask, pTestFile, rc);
375 iWriteChance = 100 - (int)(((float)100.0 / pTestFile->cbFileMax) * (float)pTestFile->cbFileCurr);
383 while (pTestFile->cTasksActiveCurr)
392 PPDMACTESTFILE pTestFile = (PPDMACTESTFILE)pvUser2;
402 tstPDMACStressTestFileVerify(pTestFile, pTestTask); /* Will assert if it fails */
407 AssertMsg(pTestFile->cTasksActiveCurr > 0, ("Trying to complete a non active task\n"));
408 ASMAtomicDecU32(&pTestFile->cTasksActiveCurr);
416 * @param pTestFile Pointer to the uninitialized test file structure.
419 static int tstPDMACStressTestFileOpen(PVM pVM, PPDMACTESTFILE pTestFile, unsigned iTestId)
424 pTestFile->cbFileMax = RTRandU64Ex(FILE_SIZE_MIN, FILE_SIZE_MAX) & ~(511UL);
425 pTestFile->cbFileCurr = 0;
426 pTestFile->cbFileSegment = RTRandU32Ex(SEGMENT_SIZE_MIN, RT_MIN(pTestFile->cbFileMax, SEGMENT_SIZE_MAX)) & ~((size_t)511);
428 Assert(pTestFile->cbFileMax >= pTestFile->cbFileSegment);
431 pTestFile->cSegments = pTestFile->cbFileMax / pTestFile->cbFileSegment;
432 pTestFile->cSegments += ((pTestFile->cbFileMax % pTestFile->cbFileSegment) > 0) ? 1 : 0;
434 pTestFile->paSegs = (PPDMACTESTFILESEG)RTMemAllocZ(pTestFile->cSegments * sizeof(PDMACTESTFILESEG));
435 if (pTestFile->paSegs)
438 for (unsigned i = 0; i < pTestFile->cSegments; i++)
440 PPDMACTESTFILESEG pSeg = &pTestFile->paSegs[i];
442 pSeg->off = (RTFOFF)i * pTestFile->cbFileSegment;
443 pSeg->cbSegment = pTestFile->cbFileSegment;
452 pTestFile->cTasksActiveMax = RTRandU32Ex(1, TASK_ACTIVE_MAX);
453 pTestFile->paTasks = (PPDMACTESTFILETASK)RTMemAllocZ(pTestFile->cTasksActiveMax * sizeof(PDMACTESTFILETASK));
454 if (pTestFile->paTasks)
460 rc = PDMR3AsyncCompletionTemplateCreateInternal(pVM, &pTestFile->pTemplate, tstPDMACStressTestFileTaskCompleted, pTestFile, szDesc);
474 rc = PDMR3AsyncCompletionEpCreateForFile(&pTestFile->hEndpoint, szFile, 0, pTestFile->pTemplate);
479 pTestFile->fRunning = true;
483 rc = PDMR3ThreadCreate(pVM, &pTestFile->hThread, pTestFile, tstPDMACTestFileThread,
487 rc = PDMR3ThreadResume(pTestFile->hThread);
491 szFile, pTestFile->cbFileMax, pTestFile->cbFileSegment, pTestFile->cSegments, pTestFile->cTasksActiveMax);
495 PDMR3AsyncCompletionEpClose(pTestFile->hEndpoint);
501 PDMR3AsyncCompletionTemplateDestroy(pTestFile->pTemplate);
504 RTMemFree(pTestFile->paTasks);
509 RTMemFree(pTestFile->paSegs);
523 * @param pTestFile Pointer to the test file.
525 static void tstPDMACStressTestFileClose(PPDMACTESTFILE pTestFile)
533 pTestFile->fRunning = false;
536 rc = PDMR3ThreadDestroy(pTestFile->hThread, &rcThread);
541 RTMemFree(pTestFile->paTasks);
542 RTMemFree(pTestFile->paSegs);
543 PDMR3AsyncCompletionEpClose(pTestFile->hEndpoint);
544 PDMR3AsyncCompletionTemplateDestroy(pTestFile->pTemplate);