VirtualBox

Changeset 62327 in vbox


Ignore:
Timestamp:
Jul 19, 2016 2:55:37 PM (8 years ago)
Author:
vboxsync
Message:

Audio/DrvAudio: Added some basic statistics for STAM.

Location:
trunk/src/VBox/Devices/Audio
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Devices/Audio/DrvAudio.cpp

    r62323 r62327  
    281281    AssertPtr(pGstStream);
    282282
     283    LogFlowFunc(("Status host=0x%x, guest=0x%x\n", pHstStream->fStatus, pGstStream->fStatus));
     284
    283285    int rc = VINF_SUCCESS;
    284286
     
    383385                if (!(pHstStream->fStatus & PDMAUDIOSTRMSTS_FLAG_ENABLED))
    384386                {
     387                    LogRel2(("Audio: Enabling stream '%s'\n", pHstStream->szName));
    385388                    rc = pThis->pHostDrvAudio->pfnStreamControl(pThis->pHostDrvAudio, pHstStream, PDMAUDIOSTREAMCMD_ENABLE);
    386389                    if (RT_SUCCESS(rc))
     390                    {
    387391                        pHstStream->fStatus |= PDMAUDIOSTRMSTS_FLAG_ENABLED;
     392                    }
     393                    else
     394                        LogRel2(("Audio: Disabling stream '%s' failed with %Rrc\n", pHstStream->szName, rc));
    388395                }
    389396                break;
     
    394401                if (pHstStream->fStatus & PDMAUDIOSTRMSTS_FLAG_ENABLED)
    395402                {
     403                    LogRel2(("Audio: Disabling stream '%s'\n", pHstStream->szName));
    396404                    rc = pThis->pHostDrvAudio->pfnStreamControl(pThis->pHostDrvAudio, pHstStream, PDMAUDIOSTREAMCMD_DISABLE);
    397405                    if (RT_SUCCESS(rc))
     
    401409                        AudioMixBufReset(&pHstStream->MixBuf);
    402410                    }
     411                    else
     412                        LogRel2(("Audio: Disabling stream '%s' failed with %Rrc\n", pHstStream->szName, rc));
    403413                }
    404414                break;
     
    413423                if (!(pHstStream->fStatus & PDMAUDIOSTRMSTS_FLAG_PAUSED))
    414424                {
     425                    LogRel2(("Audio: Pausing stream '%s'\n", pHstStream->szName));
    415426                    rc = pThis->pHostDrvAudio->pfnStreamControl(pThis->pHostDrvAudio, pHstStream, PDMAUDIOSTREAMCMD_PAUSE);
    416427                    if (RT_SUCCESS(rc))
     428                    {
    417429                        pHstStream->fStatus |= PDMAUDIOSTRMSTS_FLAG_PAUSED;
     430                    }
     431                    else
     432                        LogRel2(("Audio: Pausing stream '%s' failed with %Rrc\n", pHstStream->szName, rc));
    418433                }
    419434                break;
     
    428443                if (pHstStream->fStatus & PDMAUDIOSTRMSTS_FLAG_PAUSED)
    429444                {
     445                    LogRel2(("Audio: Resuming stream '%s'\n", pHstStream->szName));
    430446                    rc = pThis->pHostDrvAudio->pfnStreamControl(pThis->pHostDrvAudio, pHstStream, PDMAUDIOSTREAMCMD_RESUME);
    431447                    if (RT_SUCCESS(rc))
     448                    {
    432449                        pHstStream->fStatus &= ~PDMAUDIOSTRMSTS_FLAG_PAUSED;
     450                    }
     451                    else
     452                        LogRel2(("Audio: Resuming stream '%s' failed with %Rrc\n", pHstStream->szName, rc));
    433453                }
    434454                break;
     
    436456
    437457            default:
     458            {
    438459                AssertMsgFailed(("Command %RU32 not implemented\n", enmStreamCmd));
    439460                rc = VERR_NOT_IMPLEMENTED;
    440461                break;
     462            }
    441463        }
    442464    }
     
    484506    if (cSamples)
    485507    {
    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);
    487513        AssertRC(rc2);
    488514    }
     
    503529    if (cSamples)
    504530    {
    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);
    506536        AssertRC(rc2);
    507537    }
     538
     539#ifdef VBOX_WITH_STATISTICS
     540    char szStatName[255];
     541#endif
    508542
    509543    if (cSamples)
     
    514548            rc2 = AudioMixBufLinkTo(&pHstStream->MixBuf, &pGstStream->MixBuf);
    515549            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
    516564        }
    517565        else
     
    520568            rc2 = AudioMixBufLinkTo(&pGstStream->MixBuf, &pHstStream->MixBuf);
    521569            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
    522584        }
    523585    }
     
    671733        }
    672734
     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
    673739        cbWritten = AUDIOMIXBUF_S2B(&pGstStream->MixBuf, cWritten);
    674740
     
    913979                    AssertRC(rc2);
    914980                }
     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                }
    915988            }
    916989
     
    10101083                    int rc2 = drvAudioStreamControlInternalBackend(pThis, pHstStream, PDMAUDIOSTREAMCMD_DISABLE);
    10111084                    AssertRC(rc2);
     1085                }
     1086                else
     1087                {
     1088#ifdef VBOX_WITH_STATISTICS
     1089                    STAM_COUNTER_ADD(&pHstStream->In.StatSamplesCaptured, cSamplesCaptured);
     1090#endif
    10121091                }
    10131092            }
     
    13181397            if (cRead)
    13191398            {
     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
    13201403                AudioMixBufFinish(&pGstStream->MixBuf, cRead);
    13211404
     
    15001583        }
    15011584
     1585#ifdef VBOX_WITH_STATISTICS
     1586        STAM_COUNTER_ADD(&pThis->Stats.TotalStreamsCreated, 1);
     1587#endif
    15021588        /* Always return the guest-side part to the device emulation. */
    15031589        *ppStream = pGstStrm;
     
    18071893                pStream->fStatus &= ~PDMAUDIOSTRMSTS_FLAG_INITIALIZED;
    18081894        }
     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        }
    18091910    }
    18101911    else if (pStream->enmCtx == PDMAUDIOSTREAMCTX_HOST)
    18111912    {
    18121913        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        }
    18131927    }
    18141928    else
     
    19512065        pThis->fTerminate = false;
    19522066        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
    19532082    }
    19542083
  • trunk/src/VBox/Devices/Audio/DrvAudio.h

    r61386 r62327  
    7171} audio_option;
    7272
     73#ifdef VBOX_WITH_STATISTICS
     74/**
     75 * Structure for keeping stream statistics for the
     76 * statistic manager (STAM).
     77 */
     78typedef 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
    7389/**
    7490 * Audio driver instance data.
     
    107123    RTLISTANCHOR            lstCBOut;
    108124#endif
     125#ifdef VBOX_WITH_STATISTICS
     126    /** Statistics for the statistics manager (STAM). */
     127    DRVAUDIOSTATS           Stats;
     128#endif
    109129} DRVAUDIO, *PDRVAUDIO;
    110130
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette