Changeset 33167 in vbox for trunk/src/VBox/HostDrivers/Support/testcase/tstSupSem.cpp
- Timestamp:
- Oct 15, 2010 6:16:59 PM (15 years ago)
- svn:sync-xref-src-repo-rev:
- 66703
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/HostDrivers/Support/testcase/tstSupSem.cpp
r33033 r33167 70 70 int main(int argc, char **argv) 71 71 { 72 bool fSys = true; 73 bool fGip = false; 74 #if defined(RT_OS_WINDOWS) || defined(RT_OS_OS2) 75 fGip = true; 76 #endif 77 72 78 /* 73 79 * Init. … … 283 289 #endif /* !OS2 && !WINDOWS */ 284 290 285 if (RTTestErrorCount(hTest) == 0)286 291 { 287 RTTestSub(hTest, "SRE Timeout Accuracy");288 RTTESTI_CHECK_RC(SUPSemEventCreate(pSession, &hEvent), VINF_SUCCESS);289 290 292 static unsigned const s_acMsIntervals[] = { 0, 1, 2, 3, 4, 8, 10, 16, 32 }; 291 for (unsigned i = 0; i < RT_ELEMENTS(s_acMsIntervals); i++) 292 { 293 uint64_t cMs = s_acMsIntervals[i]; 294 uint64_t cNsMinSys = UINT64_MAX; 295 uint64_t cNsMin = UINT64_MAX; 296 uint64_t cNsTotalSys= 0; 297 uint64_t cNsTotal = 0; 298 for (unsigned j = 0; j < 10; j++) 293 if (RTTestErrorCount(hTest) == 0) 294 { 295 RTTestSub(hTest, "SRE Timeout Accuracy (ms)"); 296 RTTESTI_CHECK_RC(SUPSemEventCreate(pSession, &hEvent), VINF_SUCCESS); 297 298 for (unsigned i = 0; i < RT_ELEMENTS(s_acMsIntervals); i++) 299 299 { 300 uint64_t u64StartSys = RTTimeSystemNanoTS(); 301 uint64_t u64Start = RTTimeNanoTS(); 302 int rcX = SUPSemEventWaitNoResume(pSession, hEvent, cMs); 303 if (rc == VERR_TIMEOUT) 304 RTTestFailed(hTest, "%Rrc j=%u cMs=%u", rcX, j, cMs); 305 uint64_t cNsElapsedSys = RTTimeSystemNanoTS() - u64StartSys; 306 uint64_t cNsElapsed = RTTimeNanoTS() - u64Start; 307 if (cNsElapsedSys < cNsMinSys) 308 cNsMinSys = cNsElapsedSys; 309 if (cNsElapsed < cNsMin) 310 cNsMin = cNsElapsed; 311 cNsTotalSys += cNsElapsedSys; 312 cNsTotal += cNsElapsed; 300 uint64_t cMs = s_acMsIntervals[i]; 301 uint64_t cNsMinSys = UINT64_MAX; 302 uint64_t cNsMin = UINT64_MAX; 303 uint64_t cNsTotalSys= 0; 304 uint64_t cNsTotal = 0; 305 for (unsigned j = 0; j < 10; j++) 306 { 307 uint64_t u64StartSys = RTTimeSystemNanoTS(); 308 uint64_t u64Start = RTTimeNanoTS(); 309 int rcX = SUPSemEventWaitNoResume(pSession, hEvent, cMs); 310 if (rc == VERR_TIMEOUT) 311 RTTestFailed(hTest, "%Rrc j=%u cMs=%u", rcX, j, cMs); 312 uint64_t cNsElapsedSys = RTTimeSystemNanoTS() - u64StartSys; 313 uint64_t cNsElapsed = RTTimeNanoTS() - u64Start; 314 if (cNsElapsedSys < cNsMinSys) 315 cNsMinSys = cNsElapsedSys; 316 if (cNsElapsed < cNsMin) 317 cNsMin = cNsElapsed; 318 cNsTotalSys += cNsElapsedSys; 319 cNsTotal += cNsElapsed; 320 } 321 if (fSys) 322 { 323 RTTestValueF(hTest, cNsMinSys, RTTESTUNIT_NS, "%u ms min (clock=sys)", cMs); 324 RTTestValueF(hTest, cNsTotalSys / 10, RTTESTUNIT_NS, "%u ms avg (clock=sys)", cMs); 325 } 326 if (fGip) 327 { 328 RTTestValueF(hTest, cNsMin, RTTESTUNIT_NS, "%u ms min (clock=gip)", cMs); 329 RTTestValueF(hTest, cNsTotal / 10, RTTESTUNIT_NS, "%u ms avg (clock=gip)", cMs); 330 } 313 331 } 314 RTTestValueF(hTest, cNsMinSys, RTTESTUNIT_NS, "%u ms min (clock=sys)", cMs); 315 RTTestValueF(hTest, cNsTotalSys / 10, RTTESTUNIT_NS, "%u ms avg - (clock=sys)", cMs); 316 RTTestValueF(hTest, cNsMin, RTTESTUNIT_NS, "%u ms min (clock=gip)", cMs); 317 RTTestValueF(hTest, cNsTotal / 10, RTTESTUNIT_NS, "%u ms avg - (clock=gip)", cMs); 332 333 RTTESTI_CHECK_RC(SUPSemEventClose(pSession, hEvent), VINF_OBJECT_DESTROYED); 318 334 } 319 335 320 RTTESTI_CHECK_RC(SUPSemEventClose(pSession, hEvent), VINF_OBJECT_DESTROYED); 336 if (RTTestErrorCount(hTest) == 0) 337 { 338 RTTestSub(hTest, "MRE Timeout Accuracy (ms)"); 339 RTTESTI_CHECK_RC(SUPSemEventMultiCreate(pSession, &hEvent), VINF_SUCCESS); 340 341 for (unsigned i = 0; i < RT_ELEMENTS(s_acMsIntervals); i++) 342 { 343 uint64_t cMs = s_acMsIntervals[i]; 344 uint64_t cNsMinSys = UINT64_MAX; 345 uint64_t cNsMin = UINT64_MAX; 346 uint64_t cNsTotalSys= 0; 347 uint64_t cNsTotal = 0; 348 for (unsigned j = 0; j < 10; j++) 349 { 350 uint64_t u64StartSys = RTTimeSystemNanoTS(); 351 uint64_t u64Start = RTTimeNanoTS(); 352 int rcX = SUPSemEventMultiWaitNoResume(pSession, hEvent, cMs); 353 if (rc == VERR_TIMEOUT) 354 RTTestFailed(hTest, "%Rrc j=%u cMs=%u", rcX, j, cMs); 355 uint64_t cNsElapsedSys = RTTimeSystemNanoTS() - u64StartSys; 356 uint64_t cNsElapsed = RTTimeNanoTS() - u64Start; 357 if (cNsElapsedSys < cNsMinSys) 358 cNsMinSys = cNsElapsedSys; 359 if (cNsElapsed < cNsMin) 360 cNsMin = cNsElapsed; 361 cNsTotalSys += cNsElapsedSys; 362 cNsTotal += cNsElapsed; 363 } 364 if (fSys) 365 { 366 RTTestValueF(hTest, cNsMinSys, RTTESTUNIT_NS, "%u ms min (clock=sys)", cMs); 367 RTTestValueF(hTest, cNsTotalSys / 10, RTTESTUNIT_NS, "%u ms avg (clock=sys)", cMs); 368 } 369 if (fGip) 370 { 371 RTTestValueF(hTest, cNsMin, RTTESTUNIT_NS, "%u ms min (clock=gip)", cMs); 372 RTTestValueF(hTest, cNsTotal / 10, RTTESTUNIT_NS, "%u ms avg (clock=gip)", cMs); 373 } 374 } 375 376 RTTESTI_CHECK_RC(SUPSemEventMultiClose(pSession, hEvent), VINF_OBJECT_DESTROYED); 377 } 321 378 } 322 379 323 if (RTTestErrorCount(hTest) == 0)324 380 { 325 RTTestSub(hTest, "MRE Timeout Accuracy");326 RTTESTI_CHECK_RC(SUPSemEventMultiCreate(pSession, &hEvent), VINF_SUCCESS);327 328 static unsigned const s_acMsIntervals[] = { 0, 1, 2, 3, 4, 8, 10, 16, 32};329 for (unsigned i = 0; i < RT_ELEMENTS(s_acMsIntervals); i++) 330 {331 uint64_t cMs = s_acMsIntervals[i];332 uint64_t cNsMinSys = UINT64_MAX;333 uint64_t cNsMin = UINT64_MAX;334 uint64_t cNsTotalSys= 0;335 uint64_t cNsTotal = 0; 336 for (unsigned j = 0; j < 10; j++)381 static uint32_t const s_acNsIntervals[] = 382 { 383 0, 1000, 5000, 15000, 30000, 50000, 100000, 250000, 500000, 750000, 900000, 1500000, 2200000 384 }; 385 386 if (RTTestErrorCount(hTest) == 0) 387 { 388 RTTestSub(hTest, "SUPSemEventWaitNsRelIntr Accuracy"); 389 RTTestValueF(hTest, SUPSemEventGetResolution(pSession), RTTESTUNIT_NS, "SRE resolution"); 390 RTTESTI_CHECK_RC(SUPSemEventCreate(pSession, &hEvent), VINF_SUCCESS); 391 392 for (unsigned i = 0; i < RT_ELEMENTS(s_acNsIntervals); i++) 337 393 { 338 uint64_t u64StartSys = RTTimeSystemNanoTS(); 339 uint64_t u64Start = RTTimeNanoTS(); 340 int rcX = SUPSemEventMultiWaitNoResume(pSession, hEvent, cMs); 341 if (rc == VERR_TIMEOUT) 342 RTTestFailed(hTest, "%Rrc j=%u cMs=%u", rcX, j, cMs); 343 uint64_t cNsElapsedSys = RTTimeSystemNanoTS() - u64StartSys; 344 uint64_t cNsElapsed = RTTimeNanoTS() - u64Start; 345 if (cNsElapsedSys < cNsMinSys) 346 cNsMinSys = cNsElapsedSys; 347 if (cNsElapsed < cNsMin) 348 cNsMin = cNsElapsed; 349 cNsTotalSys += cNsElapsedSys; 350 cNsTotal += cNsElapsed; 394 uint64_t cNs = s_acNsIntervals[i]; 395 uint64_t cNsMinSys = UINT64_MAX; 396 uint64_t cNsMin = UINT64_MAX; 397 uint64_t cNsTotalSys= 0; 398 uint64_t cNsTotal = 0; 399 for (unsigned j = 0; j < 10; j++) 400 { 401 uint64_t u64StartSys = RTTimeSystemNanoTS(); 402 uint64_t u64Start = RTTimeNanoTS(); 403 int rcX = SUPSemEventWaitNsRelIntr(pSession, hEvent, cNs); 404 if (rc == VERR_TIMEOUT) 405 RTTestFailed(hTest, "%Rrc j=%u cNs=%u", rcX, j, cNs); 406 uint64_t cNsElapsedSys = RTTimeSystemNanoTS() - u64StartSys; 407 uint64_t cNsElapsed = RTTimeNanoTS() - u64Start; 408 if (cNsElapsedSys < cNsMinSys) 409 cNsMinSys = cNsElapsedSys; 410 if (cNsElapsed < cNsMin) 411 cNsMin = cNsElapsed; 412 cNsTotalSys += cNsElapsedSys; 413 cNsTotal += cNsElapsed; 414 } 415 if (fSys) 416 { 417 RTTestValueF(hTest, cNsMinSys, RTTESTUNIT_NS, "%'u ns min (clock=sys)", cNs); 418 RTTestValueF(hTest, cNsTotalSys / 10, RTTESTUNIT_NS, "%'u ns avg (clock=sys)", cNs); 419 } 420 if (fGip) 421 { 422 RTTestValueF(hTest, cNsMin, RTTESTUNIT_NS, "%'u ns min (clock=gip)", cNs); 423 RTTestValueF(hTest, cNsTotal / 10, RTTESTUNIT_NS, "%'u ns avg (clock=gip)", cNs); 424 } 351 425 } 352 RTTestValueF(hTest, cNsMinSys, RTTESTUNIT_NS, "%u ms min (clock=sys)", cMs); 353 RTTestValueF(hTest, cNsTotalSys / 10, RTTESTUNIT_NS, "%u ms avg - (clock=sys)", cMs); 354 RTTestValueF(hTest, cNsMin, RTTESTUNIT_NS, "%u ms min (clock=gip)", cMs); 355 RTTestValueF(hTest, cNsTotal / 10, RTTESTUNIT_NS, "%u ms avg - (clock=gip)", cMs); 426 427 RTTESTI_CHECK_RC(SUPSemEventClose(pSession, hEvent), VINF_OBJECT_DESTROYED); 356 428 } 357 429 358 RTTESTI_CHECK_RC(SUPSemEventMultiClose(pSession, hEvent), VINF_OBJECT_DESTROYED); 430 if (RTTestErrorCount(hTest) == 0) 431 { 432 RTTestSub(hTest, "SUPSemEventMultiWaitNsRelIntr Accuracy"); 433 RTTestValueF(hTest, SUPSemEventMultiGetResolution(pSession), RTTESTUNIT_NS, "MRE resolution"); 434 RTTESTI_CHECK_RC(SUPSemEventMultiCreate(pSession, &hEvent), VINF_SUCCESS); 435 436 for (unsigned i = 0; i < RT_ELEMENTS(s_acNsIntervals); i++) 437 { 438 uint64_t cNs = s_acNsIntervals[i]; 439 uint64_t cNsMinSys = UINT64_MAX; 440 uint64_t cNsMin = UINT64_MAX; 441 uint64_t cNsTotalSys= 0; 442 uint64_t cNsTotal = 0; 443 for (unsigned j = 0; j < 10; j++) 444 { 445 uint64_t u64StartSys = RTTimeSystemNanoTS(); 446 uint64_t u64Start = RTTimeNanoTS(); 447 int rcX = SUPSemEventMultiWaitNsRelIntr(pSession, hEvent, cNs); 448 if (rc == VERR_TIMEOUT) 449 RTTestFailed(hTest, "%Rrc j=%u cNs=%u", rcX, j, cNs); 450 uint64_t cNsElapsedSys = RTTimeSystemNanoTS() - u64StartSys; 451 uint64_t cNsElapsed = RTTimeNanoTS() - u64Start; 452 if (cNsElapsedSys < cNsMinSys) 453 cNsMinSys = cNsElapsedSys; 454 if (cNsElapsed < cNsMin) 455 cNsMin = cNsElapsed; 456 cNsTotalSys += cNsElapsedSys; 457 cNsTotal += cNsElapsed; 458 } 459 if (fSys) 460 { 461 RTTestValueF(hTest, cNsMinSys, RTTESTUNIT_NS, "%'u ns min (clock=sys)", cNs); 462 RTTestValueF(hTest, cNsTotalSys / 10, RTTESTUNIT_NS, "%'u ns avg (clock=sys)", cNs); 463 } 464 if (fGip) 465 { 466 RTTestValueF(hTest, cNsMin, RTTESTUNIT_NS, "%'u ns min (clock=gip)", cNs); 467 RTTestValueF(hTest, cNsTotal / 10, RTTESTUNIT_NS, "%'u ns avg (clock=gip)", cNs); 468 } 469 } 470 471 RTTESTI_CHECK_RC(SUPSemEventMultiClose(pSession, hEvent), VINF_OBJECT_DESTROYED); 472 } 473 474 if (RTTestErrorCount(hTest) == 0) 475 { 476 RTTestSub(hTest, "SUPSemEventWaitNsAbsIntr Accuracy"); 477 RTTestValueF(hTest, SUPSemEventGetResolution(pSession), RTTESTUNIT_NS, "MRE resolution"); 478 RTTESTI_CHECK_RC(SUPSemEventCreate(pSession, &hEvent), VINF_SUCCESS); 479 480 for (unsigned i = 0; i < RT_ELEMENTS(s_acNsIntervals); i++) 481 { 482 uint64_t cNs = s_acNsIntervals[i]; 483 uint64_t cNsMinSys = UINT64_MAX; 484 uint64_t cNsMin = UINT64_MAX; 485 uint64_t cNsTotalSys= 0; 486 uint64_t cNsTotal = 0; 487 for (unsigned j = 0; j < 10; j++) 488 { 489 uint64_t u64StartSys = RTTimeSystemNanoTS(); 490 uint64_t u64Start = RTTimeNanoTS(); 491 uint64_t uAbsDeadline = (fGip ? u64Start : u64StartSys) + cNs; 492 int rcX = SUPSemEventWaitNsAbsIntr(pSession, hEvent, uAbsDeadline); 493 if (rc == VERR_TIMEOUT) 494 RTTestFailed(hTest, "%Rrc j=%u cNs=%u", rcX, j, cNs); 495 uint64_t cNsElapsedSys = RTTimeSystemNanoTS() - u64StartSys; 496 uint64_t cNsElapsed = RTTimeNanoTS() - u64Start; 497 if (cNsElapsedSys < cNsMinSys) 498 cNsMinSys = cNsElapsedSys; 499 if (cNsElapsed < cNsMin) 500 cNsMin = cNsElapsed; 501 cNsTotalSys += cNsElapsedSys; 502 cNsTotal += cNsElapsed; 503 } 504 if (fSys) 505 { 506 RTTestValueF(hTest, cNsMinSys, RTTESTUNIT_NS, "%'u ns min (clock=sys)", cNs); 507 RTTestValueF(hTest, cNsTotalSys / 10, RTTESTUNIT_NS, "%'u ns avg (clock=sys)", cNs); 508 } 509 if (fGip) 510 { 511 RTTestValueF(hTest, cNsMin, RTTESTUNIT_NS, "%'u ns min (clock=gip)", cNs); 512 RTTestValueF(hTest, cNsTotal / 10, RTTESTUNIT_NS, "%'u ns avg (clock=gip)", cNs); 513 } 514 } 515 516 RTTESTI_CHECK_RC(SUPSemEventClose(pSession, hEvent), VINF_OBJECT_DESTROYED); 517 } 518 519 520 if (RTTestErrorCount(hTest) == 0) 521 { 522 RTTestSub(hTest, "SUPSemEventMultiWaitNsAbsIntr Accuracy"); 523 RTTestValueF(hTest, SUPSemEventMultiGetResolution(pSession), RTTESTUNIT_NS, "MRE resolution"); 524 RTTESTI_CHECK_RC(SUPSemEventMultiCreate(pSession, &hEvent), VINF_SUCCESS); 525 526 for (unsigned i = 0; i < RT_ELEMENTS(s_acNsIntervals); i++) 527 { 528 uint64_t cNs = s_acNsIntervals[i]; 529 uint64_t cNsMinSys = UINT64_MAX; 530 uint64_t cNsMin = UINT64_MAX; 531 uint64_t cNsTotalSys= 0; 532 uint64_t cNsTotal = 0; 533 for (unsigned j = 0; j < 10; j++) 534 { 535 uint64_t u64StartSys = RTTimeSystemNanoTS(); 536 uint64_t u64Start = RTTimeNanoTS(); 537 uint64_t uAbsDeadline = (fGip ? u64Start : u64StartSys) + cNs; 538 int rcX = SUPSemEventMultiWaitNsAbsIntr(pSession, hEvent, uAbsDeadline); 539 if (rc == VERR_TIMEOUT) 540 RTTestFailed(hTest, "%Rrc j=%u cNs=%u", rcX, j, cNs); 541 uint64_t cNsElapsedSys = RTTimeSystemNanoTS() - u64StartSys; 542 uint64_t cNsElapsed = RTTimeNanoTS() - u64Start; 543 if (cNsElapsedSys < cNsMinSys) 544 cNsMinSys = cNsElapsedSys; 545 if (cNsElapsed < cNsMin) 546 cNsMin = cNsElapsed; 547 cNsTotalSys += cNsElapsedSys; 548 cNsTotal += cNsElapsed; 549 } 550 if (fSys) 551 { 552 RTTestValueF(hTest, cNsMinSys, RTTESTUNIT_NS, "%'u ns min (clock=sys)", cNs); 553 RTTestValueF(hTest, cNsTotalSys / 10, RTTESTUNIT_NS, "%'u ns avg (clock=sys)", cNs); 554 } 555 if (fGip) 556 { 557 RTTestValueF(hTest, cNsMin, RTTESTUNIT_NS, "%'u ns min (clock=gip)", cNs); 558 RTTestValueF(hTest, cNsTotal / 10, RTTESTUNIT_NS, "%'u ns avg (clock=gip)", cNs); 559 } 560 } 561 562 RTTESTI_CHECK_RC(SUPSemEventMultiClose(pSession, hEvent), VINF_OBJECT_DESTROYED); 563 } 564 359 565 } 360 566
Note:
See TracChangeset
for help on using the changeset viewer.