Changeset 62327 in vbox
- Timestamp:
- Jul 19, 2016 2:55:37 PM (8 years ago)
- Location:
- trunk/src/VBox/Devices/Audio
- Files:
-
- 2 edited
-
DrvAudio.cpp (modified) (18 diffs)
-
DrvAudio.h (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Devices/Audio/DrvAudio.cpp
r62323 r62327 281 281 AssertPtr(pGstStream); 282 282 283 LogFlowFunc(("Status host=0x%x, guest=0x%x\n", pHstStream->fStatus, pGstStream->fStatus)); 284 283 285 int rc = VINF_SUCCESS; 284 286 … … 383 385 if (!(pHstStream->fStatus & PDMAUDIOSTRMSTS_FLAG_ENABLED)) 384 386 { 387 LogRel2(("Audio: Enabling stream '%s'\n", pHstStream->szName)); 385 388 rc = pThis->pHostDrvAudio->pfnStreamControl(pThis->pHostDrvAudio, pHstStream, PDMAUDIOSTREAMCMD_ENABLE); 386 389 if (RT_SUCCESS(rc)) 390 { 387 391 pHstStream->fStatus |= PDMAUDIOSTRMSTS_FLAG_ENABLED; 392 } 393 else 394 LogRel2(("Audio: Disabling stream '%s' failed with %Rrc\n", pHstStream->szName, rc)); 388 395 } 389 396 break; … … 394 401 if (pHstStream->fStatus & PDMAUDIOSTRMSTS_FLAG_ENABLED) 395 402 { 403 LogRel2(("Audio: Disabling stream '%s'\n", pHstStream->szName)); 396 404 rc = pThis->pHostDrvAudio->pfnStreamControl(pThis->pHostDrvAudio, pHstStream, PDMAUDIOSTREAMCMD_DISABLE); 397 405 if (RT_SUCCESS(rc)) … … 401 409 AudioMixBufReset(&pHstStream->MixBuf); 402 410 } 411 else 412 LogRel2(("Audio: Disabling stream '%s' failed with %Rrc\n", pHstStream->szName, rc)); 403 413 } 404 414 break; … … 413 423 if (!(pHstStream->fStatus & PDMAUDIOSTRMSTS_FLAG_PAUSED)) 414 424 { 425 LogRel2(("Audio: Pausing stream '%s'\n", pHstStream->szName)); 415 426 rc = pThis->pHostDrvAudio->pfnStreamControl(pThis->pHostDrvAudio, pHstStream, PDMAUDIOSTREAMCMD_PAUSE); 416 427 if (RT_SUCCESS(rc)) 428 { 417 429 pHstStream->fStatus |= PDMAUDIOSTRMSTS_FLAG_PAUSED; 430 } 431 else 432 LogRel2(("Audio: Pausing stream '%s' failed with %Rrc\n", pHstStream->szName, rc)); 418 433 } 419 434 break; … … 428 443 if (pHstStream->fStatus & PDMAUDIOSTRMSTS_FLAG_PAUSED) 429 444 { 445 LogRel2(("Audio: Resuming stream '%s'\n", pHstStream->szName)); 430 446 rc = pThis->pHostDrvAudio->pfnStreamControl(pThis->pHostDrvAudio, pHstStream, PDMAUDIOSTREAMCMD_RESUME); 431 447 if (RT_SUCCESS(rc)) 448 { 432 449 pHstStream->fStatus &= ~PDMAUDIOSTRMSTS_FLAG_PAUSED; 450 } 451 else 452 LogRel2(("Audio: Resuming stream '%s' failed with %Rrc\n", pHstStream->szName, rc)); 433 453 } 434 454 break; … … 436 456 437 457 default: 458 { 438 459 AssertMsgFailed(("Command %RU32 not implemented\n", enmStreamCmd)); 439 460 rc = VERR_NOT_IMPLEMENTED; 440 461 break; 462 } 441 463 } 442 464 } … … 484 506 if (cSamples) 485 507 { 486 rc2 = AudioMixBufInit(&pHstStream->MixBuf, pHstStream->szName, &pHstStream->Props, cSamples * 4); 508 cSamples = cSamples * 4; 509 510 LogFlowFunc(("[%s] cSamples=%RU32\n", pHstStream->szName, cSamples)); 511 512 rc2 = AudioMixBufInit(&pHstStream->MixBuf, pHstStream->szName, &pHstStream->Props, cSamples); 487 513 AssertRC(rc2); 488 514 } … … 503 529 if (cSamples) 504 530 { 505 rc2 = AudioMixBufInit(&pGstStream->MixBuf, pGstStream->szName, &pGstStream->Props, cSamples * 2); 531 cSamples = cSamples * 2; 532 533 LogFlowFunc(("[%s] cSamples=%RU32\n", pGstStream->szName, cSamples)); 534 535 rc2 = AudioMixBufInit(&pGstStream->MixBuf, pGstStream->szName, &pGstStream->Props, cSamples); 506 536 AssertRC(rc2); 507 537 } 538 539 #ifdef VBOX_WITH_STATISTICS 540 char szStatName[255]; 541 #endif 508 542 509 543 if (cSamples) … … 514 548 rc2 = AudioMixBufLinkTo(&pHstStream->MixBuf, &pGstStream->MixBuf); 515 549 AssertRC(rc2); 550 551 #ifdef VBOX_WITH_STATISTICS 552 RTStrPrintf(szStatName, sizeof(szStatName), "Guest/%s/BytesElapsed", pGstStream->szName); 553 PDMDrvHlpSTAMRegCounterEx(pThis->pDrvIns, &pGstStream->In.StatBytesElapsed, 554 szStatName, STAMUNIT_BYTES, "Elapsed bytes read."); 555 556 RTStrPrintf(szStatName, sizeof(szStatName), "Guest/%s/BytesRead", pGstStream->szName); 557 PDMDrvHlpSTAMRegCounterEx(pThis->pDrvIns, &pGstStream->In.StatBytesTotalRead, 558 szStatName, STAMUNIT_BYTES, "Total bytes read."); 559 560 RTStrPrintf(szStatName, sizeof(szStatName), "Host/%s/SamplesCaptured", pHstStream->szName); 561 PDMDrvHlpSTAMRegCounterEx(pThis->pDrvIns, &pHstStream->In.StatSamplesCaptured, 562 szStatName, STAMUNIT_COUNT, "Total samples captured."); 563 #endif 516 564 } 517 565 else … … 520 568 rc2 = AudioMixBufLinkTo(&pGstStream->MixBuf, &pHstStream->MixBuf); 521 569 AssertRC(rc2); 570 571 #ifdef VBOX_WITH_STATISTICS 572 RTStrPrintf(szStatName, sizeof(szStatName), "Guest/%s/BytesElapsed", pGstStream->szName); 573 PDMDrvHlpSTAMRegCounterEx(pThis->pDrvIns, &pGstStream->Out.StatBytesElapsed, 574 szStatName, STAMUNIT_BYTES, "Elapsed bytes written."); 575 576 RTStrPrintf(szStatName, sizeof(szStatName), "Guest/%s/BytesRead", pGstStream->szName); 577 PDMDrvHlpSTAMRegCounterEx(pThis->pDrvIns, &pGstStream->Out.StatBytesTotalWritten, 578 szStatName, STAMUNIT_BYTES, "Total bytes written."); 579 580 RTStrPrintf(szStatName, sizeof(szStatName), "Host/%s/SamplesPlayed", pHstStream->szName); 581 PDMDrvHlpSTAMRegCounterEx(pThis->pDrvIns, &pHstStream->Out.StatSamplesPlayed, 582 szStatName, STAMUNIT_COUNT, "Total samples played."); 583 #endif 522 584 } 523 585 } … … 671 733 } 672 734 735 #ifdef VBOX_WITH_STATISTICS 736 STAM_COUNTER_ADD(&pThis->Stats.TotalBytesWritten, AUDIOMIXBUF_S2B(&pGstStream->MixBuf, cWritten)); 737 STAM_COUNTER_ADD(&pGstStream->Out.StatBytesTotalWritten, AUDIOMIXBUF_S2B(&pGstStream->MixBuf, cWritten)); 738 #endif 673 739 cbWritten = AUDIOMIXBUF_S2B(&pGstStream->MixBuf, cWritten); 674 740 … … 913 979 AssertRC(rc2); 914 980 } 981 else 982 { 983 #ifdef VBOX_WITH_STATISTICS 984 STAM_COUNTER_ADD(&pThis->Stats.TotalSamplesPlayed, cSamplesPlayed); 985 STAM_COUNTER_ADD(&pHstStream->Out.StatSamplesPlayed, cSamplesPlayed); 986 #endif 987 } 915 988 } 916 989 … … 1010 1083 int rc2 = drvAudioStreamControlInternalBackend(pThis, pHstStream, PDMAUDIOSTREAMCMD_DISABLE); 1011 1084 AssertRC(rc2); 1085 } 1086 else 1087 { 1088 #ifdef VBOX_WITH_STATISTICS 1089 STAM_COUNTER_ADD(&pHstStream->In.StatSamplesCaptured, cSamplesCaptured); 1090 #endif 1012 1091 } 1013 1092 } … … 1318 1397 if (cRead) 1319 1398 { 1399 #ifdef VBOX_WITH_STATISTICS 1400 STAM_COUNTER_ADD(&pThis->Stats.TotalBytesRead, AUDIOMIXBUF_S2B(&pGstStream->MixBuf, cRead)); 1401 STAM_COUNTER_ADD(&pGstStream->In.StatBytesTotalRead, AUDIOMIXBUF_S2B(&pGstStream->MixBuf, cRead)); 1402 #endif 1320 1403 AudioMixBufFinish(&pGstStream->MixBuf, cRead); 1321 1404 … … 1500 1583 } 1501 1584 1585 #ifdef VBOX_WITH_STATISTICS 1586 STAM_COUNTER_ADD(&pThis->Stats.TotalStreamsCreated, 1); 1587 #endif 1502 1588 /* Always return the guest-side part to the device emulation. */ 1503 1589 *ppStream = pGstStrm; … … 1807 1893 pStream->fStatus &= ~PDMAUDIOSTRMSTS_FLAG_INITIALIZED; 1808 1894 } 1895 1896 if (pStream->enmDir == PDMAUDIODIR_IN) 1897 { 1898 #ifdef VBOX_WITH_STATISTICS 1899 PDMDrvHlpSTAMDeregister(pThis->pDrvIns, &pStream->In.StatBytesElapsed); 1900 PDMDrvHlpSTAMDeregister(pThis->pDrvIns, &pStream->In.StatBytesTotalRead); 1901 #endif 1902 } 1903 else if (pStream->enmDir == PDMAUDIODIR_OUT) 1904 { 1905 #ifdef VBOX_WITH_STATISTICS 1906 PDMDrvHlpSTAMDeregister(pThis->pDrvIns, &pStream->Out.StatBytesElapsed); 1907 PDMDrvHlpSTAMDeregister(pThis->pDrvIns, &pStream->Out.StatBytesTotalWritten); 1908 #endif 1909 } 1809 1910 } 1810 1911 else if (pStream->enmCtx == PDMAUDIOSTREAMCTX_HOST) 1811 1912 { 1812 1913 rc = drvAudioStreamDestroyInternalBackend(pThis, pStream); 1914 1915 if (pStream->enmDir == PDMAUDIODIR_IN) 1916 { 1917 #ifdef VBOX_WITH_STATISTICS 1918 PDMDrvHlpSTAMDeregister(pThis->pDrvIns, &pStream->In.StatSamplesCaptured); 1919 #endif 1920 } 1921 else if (pStream->enmDir == PDMAUDIODIR_OUT) 1922 { 1923 #ifdef VBOX_WITH_STATISTICS 1924 PDMDrvHlpSTAMDeregister(pThis->pDrvIns, &pStream->Out.StatSamplesPlayed); 1925 #endif 1926 } 1813 1927 } 1814 1928 else … … 1951 2065 pThis->fTerminate = false; 1952 2066 pThis->pDrvIns = pDrvIns; 2067 2068 #ifdef VBOX_WITH_STATISTICS 2069 PDMDrvHlpSTAMRegCounterEx(pDrvIns, &pThis->Stats.TotalStreamsActive, "TotalStreamsActive", 2070 STAMUNIT_COUNT, "Active input streams."); 2071 PDMDrvHlpSTAMRegCounterEx(pDrvIns, &pThis->Stats.TotalStreamsCreated, "TotalStreamsCreated", 2072 STAMUNIT_COUNT, "Total created input streams."); 2073 PDMDrvHlpSTAMRegCounterEx(pDrvIns, &pThis->Stats.TotalSamplesPlayed, "TotalSamplesPlayed", 2074 STAMUNIT_COUNT, "Total samples played."); 2075 PDMDrvHlpSTAMRegCounterEx(pDrvIns, &pThis->Stats.TotalSamplesCaptured, "TotalSamplesCaptured", 2076 STAMUNIT_COUNT, "Total samples captured."); 2077 PDMDrvHlpSTAMRegCounterEx(pDrvIns, &pThis->Stats.TotalBytesRead, "TotalBytesRead", 2078 STAMUNIT_BYTES, "Total bytes read."); 2079 PDMDrvHlpSTAMRegCounterEx(pDrvIns, &pThis->Stats.TotalBytesWritten, "TotalBytesWritten", 2080 STAMUNIT_BYTES, "Total bytes written."); 2081 #endif 1953 2082 } 1954 2083 -
trunk/src/VBox/Devices/Audio/DrvAudio.h
r61386 r62327 71 71 } audio_option; 72 72 73 #ifdef VBOX_WITH_STATISTICS 74 /** 75 * Structure for keeping stream statistics for the 76 * statistic manager (STAM). 77 */ 78 typedef struct DRVAUDIOSTATS 79 { 80 STAMCOUNTER TotalStreamsActive; 81 STAMCOUNTER TotalStreamsCreated; 82 STAMCOUNTER TotalSamplesPlayed; 83 STAMCOUNTER TotalSamplesCaptured; 84 STAMCOUNTER TotalBytesRead; 85 STAMCOUNTER TotalBytesWritten; 86 } DRVAUDIOSTATS, *PDRVAUDIOSTATS; 87 #endif 88 73 89 /** 74 90 * Audio driver instance data. … … 107 123 RTLISTANCHOR lstCBOut; 108 124 #endif 125 #ifdef VBOX_WITH_STATISTICS 126 /** Statistics for the statistics manager (STAM). */ 127 DRVAUDIOSTATS Stats; 128 #endif 109 129 } DRVAUDIO, *PDRVAUDIO; 110 130
Note:
See TracChangeset
for help on using the changeset viewer.

