VirtualBox

Changeset 89756 in vbox for trunk/src/VBox/Devices/Audio


Ignore:
Timestamp:
Jun 16, 2021 11:22:00 PM (4 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
145207
Message:

DevIchAc97: More statistics. bugref:9890

File:
1 edited

Legend:

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

    r89754 r89756  
    401401    /** Number of bytes involved in unresolved flow errors. */
    402402    STAMCOUNTER             StatDmaFlowErrorBytes;
     403    STAMPROFILE             StatStart;
     404    STAMPROFILE             StatReset;
     405    STAMPROFILE             StatStop;
     406    STAMCOUNTER             StatWriteLviRecover;
     407    STAMCOUNTER             StatWriteCr;
    403408} AC97STREAMSTATE;
    404409AssertCompileSizeAlignment(AC97STREAMSTATE, 8);
     
    445450    /** The timer for pumping data thru the attached LUN drivers. */
    446451    TMTIMERHANDLE           hTimer;
     452    STAMCOUNTER             StatWriteLvi;
     453    STAMCOUNTER             StatWriteSr1;
     454    STAMCOUNTER             StatWriteSr2;
     455    STAMCOUNTER             StatWriteBdBar;
    447456} AC97STREAM;
    448457AssertCompileSizeAlignment(AC97STREAM, 8);
     
    26482657                    case AC97_NABM_OFF_LVI:
    26492658                        DEVAC97_LOCK_RETURN(pDevIns, pThis, VINF_IOM_R3_IOPORT_WRITE);
     2659
    26502660                        if (   !(pRegs->sr & AC97_SR_DCH)
    26512661                            || !(pRegs->cr & AC97_CR_RPBM))
    26522662                        {
    26532663                            pRegs->lvi = u32 % AC97_MAX_BDLE;
     2664                            STAM_REL_COUNTER_INC(&pStream->StatWriteLvi);
    26542665                            DEVAC97_UNLOCK(pDevIns, pThis);
    26552666                            Log3Func(("[SD%RU8] LVI <- %#x\n", pStream->u8SD, u32));
     
    26752686                            /** @todo Stop the DMA timer when we get into the AC97_SR_CELV situation to
    26762687                             *        avoid potential race here. */
     2688                            STAM_REL_COUNTER_INC(&pStreamCC->State.StatWriteLviRecover);
    26772689                            DEVAC97_UNLOCK(pDevIns, pThis);
    26782690
     
    26962708#ifdef IN_RING3
    26972709                        DEVAC97_LOCK(pDevIns, pThis);
     2710                        STAM_REL_COUNTER_INC(&pStreamCC->State.StatWriteCr);
    26982711
    26992712                        uint32_t const fCrChanged = pRegs->cr ^ u32;
     
    27052718                        if (u32 & AC97_CR_RR)
    27062719                        {
     2720                            STAM_REL_PROFILE_START_NS(&pStreamCC->State.StatReset, r);
    27072721                            LogFunc(("[SD%RU8] Reset\n", pStream->u8SD));
    27082722
     
    27192733
    27202734                            DEVAC97_UNLOCK(pDevIns, pThis);
     2735                            STAM_REL_PROFILE_STOP_NS(&pStreamCC->State.StatReset, r);
    27212736                            break;
    27222737                        }
     
    27342749                        else if (!(pRegs->cr & AC97_CR_RPBM))
    27352750                        {
     2751                            STAM_REL_PROFILE_START_NS(&pStreamCC->State.StatStop, p);
    27362752                            LogFunc(("[SD%RU8] Pause busmaster (disable stream) SR=%#x -> %#x\n",
    27372753                                     pStream->u8SD, pRegs->sr, pRegs->sr | AC97_SR_DCH));
     
    27402756
    27412757                            DEVAC97_UNLOCK(pDevIns, pThis);
     2758                            STAM_REL_PROFILE_STOP_NS(&pStreamCC->State.StatStop, p);
    27422759                        }
    27432760                        /*
     
    27462763                        else
    27472764                        {
     2765                            STAM_REL_PROFILE_START_NS(&pStreamCC->State.StatStart, r);
    27482766                            LogFunc(("[SD%RU8] Run busmaster (enable stream) SR=%#x -> %#x\n",
    27492767                                     pStream->u8SD, pRegs->sr, pRegs->sr & ~AC97_SR_DCH));
     
    27732791                            int rc2 = PDMDevHlpTimerSetRelative(pDevIns, pStream->hTimer, cTicksToDeadline, NULL /*pu64Now*/);
    27742792                            AssertRC(rc2);
     2793
     2794                            STAM_REL_PROFILE_STOP_NS(&pStreamCC->State.StatStart, r);
    27752795                        }
    27762796#else /* !IN_RING3 */
     
    27862806                        DEVAC97_LOCK_RETURN(pDevIns, pThis, VINF_IOM_R3_IOPORT_WRITE);
    27872807                        ichac97StreamWriteSR(pDevIns, pThis, pStream, u32);
     2808                        STAM_REL_COUNTER_INC(&pStream->StatWriteSr1);
    27882809                        DEVAC97_UNLOCK(pDevIns, pThis);
    27892810                        break;
     
    28022823                        DEVAC97_LOCK_RETURN(pDevIns, pThis, VINF_IOM_R3_IOPORT_WRITE);
    28032824                        ichac97StreamWriteSR(pDevIns, pThis, pStream, u32);
     2825                        STAM_REL_COUNTER_INC(&pStream->StatWriteSr2);
    28042826                        DEVAC97_UNLOCK(pDevIns, pThis);
    28052827                        break;
     
    28192841                        pRegs->bdbar = u32 & ~(uint32_t)3;
    28202842                        Log3Func(("[SD%RU8] BDBAR <- %#x (bdbar %#x)\n", AC97_PORT2IDX(offPort), u32, pRegs->bdbar));
     2843                        STAM_REL_COUNTER_INC(&pStream->StatWriteBdBar);
    28212844                        DEVAC97_UNLOCK(pDevIns, pThis);
    28222845                        break;
     
    44824505    for (unsigned idxStream = 0; idxStream < RT_ELEMENTS(pThis->aStreams); idxStream++)
    44834506    {
     4507        PDMDevHlpSTAMRegisterF(pDevIns, &pThisCC->aStreams[idxStream].State.cbTransferChunk, STAMTYPE_U32, STAMVISIBILITY_USED, STAMUNIT_BYTES,
     4508                               "Bytes to transfer in the current DMA period.",  "Stream%u/cbTransferChunk", idxStream);
     4509        PDMDevHlpSTAMRegisterF(pDevIns, &pThis->aStreams[idxStream].Regs.cr, STAMTYPE_X8, STAMVISIBILITY_ALWAYS, STAMUNIT_NONE,
     4510                               "Control register (CR), bit 0 is the run bit.",  "Stream%u/reg-CR", idxStream);
     4511        PDMDevHlpSTAMRegisterF(pDevIns, &pThis->aStreams[idxStream].Regs.sr, STAMTYPE_X16, STAMVISIBILITY_ALWAYS, STAMUNIT_NONE,
     4512                               "Status register (SR).",                         "Stream%u/reg-SR", idxStream);
     4513        PDMDevHlpSTAMRegisterF(pDevIns, &pThisCC->aStreams[idxStream].State.Cfg.Props.uHz, STAMTYPE_U32, STAMVISIBILITY_USED, STAMUNIT_BYTES,
     4514                               "The stream frequency.",                         "Stream%u/Hz", idxStream);
     4515        PDMDevHlpSTAMRegisterF(pDevIns, &pThisCC->aStreams[idxStream].State.Cfg.Props.cbFrame, STAMTYPE_U8, STAMVISIBILITY_USED, STAMUNIT_BYTES,
     4516                               "The frame size.",                               "Stream%u/FrameSize", idxStream);
    44844517        PDMDevHlpSTAMRegisterF(pDevIns, &pThisCC->aStreams[idxStream].State.offRead, STAMTYPE_U64, STAMVISIBILITY_USED, STAMUNIT_BYTES,
    4485                                "Virtual internal buffer read position.",    "Stream%u/offRead", idxStream);
     4518                               "Virtual internal buffer read position.",        "Stream%u/offRead", idxStream);
    44864519        PDMDevHlpSTAMRegisterF(pDevIns, &pThisCC->aStreams[idxStream].State.offWrite, STAMTYPE_U64, STAMVISIBILITY_USED, STAMUNIT_BYTES,
    4487                                "Virtual internal buffer write position.",   "Stream%u/offWrite", idxStream);
     4520                               "Virtual internal buffer write position.",       "Stream%u/offWrite", idxStream);
    44884521        PDMDevHlpSTAMRegisterF(pDevIns, &pThisCC->aStreams[idxStream].State.StatDmaBufSize, STAMTYPE_U32, STAMVISIBILITY_USED, STAMUNIT_BYTES,
    4489                                "Size of the internal DMA buffer.",  "Stream%u/DMABufSize", idxStream);
     4522                               "Size of the internal DMA buffer.",              "Stream%u/DMABufSize", idxStream);
    44904523        PDMDevHlpSTAMRegisterF(pDevIns, &pThisCC->aStreams[idxStream].State.StatDmaBufUsed, STAMTYPE_U32, STAMVISIBILITY_USED, STAMUNIT_BYTES,
    4491                                "Number of bytes used in the internal DMA buffer.",  "Stream%u/DMABufUsed", idxStream);
     4524                               "Number of bytes used in the internal DMA buffer.", "Stream%u/DMABufUsed", idxStream);
    44924525        PDMDevHlpSTAMRegisterF(pDevIns, &pThisCC->aStreams[idxStream].State.StatDmaFlowProblems, STAMTYPE_COUNTER, STAMVISIBILITY_USED, STAMUNIT_OCCURENCES,
    4493                                "Number of internal DMA buffer problems.",   "Stream%u/DMABufferProblems", idxStream);
     4526                               "Number of internal DMA buffer problems.",       "Stream%u/DMABufferProblems", idxStream);
    44944527        if (ichac97R3GetDirFromSD(idxStream) == PDMAUDIODIR_OUT)
    44954528            PDMDevHlpSTAMRegisterF(pDevIns, &pThisCC->aStreams[idxStream].State.StatDmaFlowErrors, STAMTYPE_COUNTER, STAMVISIBILITY_USED, STAMUNIT_OCCURENCES,
     
    45024535                                   "Number of bytes of silence added to cope with underruns.", "Stream%u/DMABufferSilence", idxStream);
    45034536        }
     4537
     4538        PDMDevHlpSTAMRegisterF(pDevIns, &pThisCC->aStreams[idxStream].State.StatStart, STAMTYPE_PROFILE, STAMVISIBILITY_USED, STAMUNIT_NS_PER_CALL,
     4539                               "Starting the stream.",  "Stream%u/Start", idxStream);
     4540        PDMDevHlpSTAMRegisterF(pDevIns, &pThisCC->aStreams[idxStream].State.StatStop, STAMTYPE_PROFILE, STAMVISIBILITY_USED, STAMUNIT_NS_PER_CALL,
     4541                               "Stopping the stream.",  "Stream%u/Stop", idxStream);
     4542        PDMDevHlpSTAMRegisterF(pDevIns, &pThisCC->aStreams[idxStream].State.StatReset, STAMTYPE_PROFILE, STAMVISIBILITY_USED, STAMUNIT_NS_PER_CALL,
     4543                               "Resetting the stream.",  "Stream%u/Reset", idxStream);
     4544        PDMDevHlpSTAMRegisterF(pDevIns, &pThisCC->aStreams[idxStream].State.StatWriteCr, STAMTYPE_COUNTER, STAMVISIBILITY_USED, STAMUNIT_OCCURENCES,
     4545                               "CR register writes.",                           "Stream%u/WriteCr", idxStream);
     4546        PDMDevHlpSTAMRegisterF(pDevIns, &pThisCC->aStreams[idxStream].State.StatWriteLviRecover, STAMTYPE_COUNTER, STAMVISIBILITY_USED, STAMUNIT_OCCURENCES,
     4547                               "LVI register writes recovering from underflow.", "Stream%u/WriteLviRecover", idxStream);
     4548        PDMDevHlpSTAMRegisterF(pDevIns, &pThis->aStreams[idxStream].StatWriteLvi, STAMTYPE_COUNTER, STAMVISIBILITY_USED, STAMUNIT_OCCURENCES,
     4549                               "LVI register writes (non-recoving).",           "Stream%u/WriteLvi", idxStream);
     4550        PDMDevHlpSTAMRegisterF(pDevIns, &pThis->aStreams[idxStream].StatWriteSr1, STAMTYPE_COUNTER, STAMVISIBILITY_USED, STAMUNIT_OCCURENCES,
     4551                               "SR register 1-byte writes.",                    "Stream%u/WriteSr-1byte", idxStream);
     4552        PDMDevHlpSTAMRegisterF(pDevIns, &pThis->aStreams[idxStream].StatWriteSr2, STAMTYPE_COUNTER, STAMVISIBILITY_USED, STAMUNIT_OCCURENCES,
     4553                               "SR register 2-byte writes.",                    "Stream%u/WriteSr-2byte", idxStream);
     4554        PDMDevHlpSTAMRegisterF(pDevIns, &pThis->aStreams[idxStream].StatWriteBdBar, STAMTYPE_COUNTER, STAMVISIBILITY_USED, STAMUNIT_OCCURENCES,
     4555                               "BDBAR register writes.",                        "Stream%u/WriteBdBar", idxStream);
    45044556    }
    45054557
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