VirtualBox

Changeset 913 in vbox for trunk/src/VBox/HostDrivers


Ignore:
Timestamp:
Feb 14, 2007 8:22:15 PM (18 years ago)
Author:
vboxsync
Message:

Made it work on darwin and implemented the profiling.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/HostDrivers/Support/testcase/tstInt.cpp

    r406 r913  
    6161{
    6262    int rcRet = 0;
     63    int i;
    6364    int rc;
    6465    int cIterations = argc > 1 ? RTStrToUInt32(argv[1]) : 32;
     
    7071     */
    7172    RTR3Init();
    72     VM vm;
    73     memset(&vm, 0, sizeof(vm));
    74     rc = SUPInit(&vm.pSession);
     73    PSUPDRVSESSION pSession;
     74    rc = SUPInit(&pSession);
    7575    rcRet += rc != 0;
    7676    RTPrintf("tstInt: SUPInit -> rc=%Vrc\n", rc);
     
    8282        char    szFile[RTPATH_MAX];
    8383        rc = SUPLoadVMM(ExeDirFile(szFile, argv[0], "VMMR0.r0"));
    84         rcRet += rc != 0;
    8584        if (!rc)
    8685        {
    8786            /*
    88              * Call VMM code with invalid function.
     87             * Create a fake 'VM'.
    8988             */
    90             for (int i = cIterations; i > 0; i--)
     89            PVMR0 pVMR0;
     90            RTHCPHYS HCPhysVM;
     91            PVM pVM = (PVM)SUPContAlloc2(sizeof(*pVM), (void **)&pVMR0, &HCPhysVM);
     92            if (pVM)
    9193            {
    92                 rc = SUPCallVMMR0(&vm, VMMR0_DO_NOP, NULL);
    93                 if (rc != VINF_SUCCESS)
     94                pVM->pVMGC = 0;
     95                pVM->pVMHC = pVM;
     96                pVM->HCPhysVM = HCPhysVM;
     97                pVM->pSession = pSession;
     98
     99#ifdef VBOX_WITHOUT_IDT_PATCHING
     100                rc = SUPSetVMForFastIOCtl(pVMR0);
     101#endif
     102                if (!rc)
    94103                {
    95                     RTPrintf("tstInt: SUPCallVMMR0 -> rc=%Vrc i=%d Expected VINF_SUCCESS!\n", rc, i);
     104
     105                    /*
     106                     * Call VMM code with invalid function.
     107                     */
     108                    for (i = cIterations; i > 0; i--)
     109                    {
     110                        rc = SUPCallVMMR0((PVM)pVMR0, VMMR0_DO_NOP, NULL);
     111                        if (rc != VINF_SUCCESS)
     112                        {
     113                            RTPrintf("tstInt: SUPCallVMMR0 -> rc=%Vrc i=%d Expected VINF_SUCCESS!\n", rc, i);
     114                            rcRet++;
     115                            break;
     116                        }
     117                    }
     118                    RTPrintf("tstInt: Performed SUPCallVMMR0 %d times (rc=%Vrc)\n", cIterations, rc);
     119
     120                    /*
     121                     * Profile it.
     122                     */
     123                    if (!rc)
     124                    {
     125                        RTTimeNanoTS();
     126                        uint64_t StartTS = RTTimeNanoTS();
     127                        uint64_t StartTick = ASMReadTSC();
     128                        uint64_t MinTicks = UINT64_MAX;
     129                        for (i = 0; i < 1000000; i++)
     130                        {
     131                            uint64_t OneStartTick = ASMReadTSC();
     132                            rc = SUPCallVMMR0((PVM)pVMR0, VMMR0_DO_NOP, NULL);
     133                            uint64_t Ticks = ASMReadTSC() - OneStartTick;
     134                            if (Ticks < MinTicks)
     135                                MinTicks = Ticks;
     136
     137                            if (RT_UNLIKELY(rc != VINF_SUCCESS))
     138                            {
     139                                RTPrintf("tstInt: SUPCallVMMR0 -> rc=%Vrc i=%d Expected VINF_SUCCESS!\n", rc, i);
     140                                rcRet++;
     141                                break;
     142                            }
     143                        }
     144                        uint64_t Ticks = ASMReadTSC() - StartTick;
     145                        uint64_t NanoSecs = RTTimeNanoTS() - StartTS;
     146
     147                        RTPrintf("tstInt: %d iterations in %llu ns / %llu ticks. %llu ns / %#llu ticks per iteration. Min %llu ticks.\n",
     148                                 i, NanoSecs, Ticks, NanoSecs / i, Ticks / i, MinTicks);
     149                    }
     150                }
     151                else
     152                {
     153                    RTPrintf("tstInt: SUPSetVMForFastIOCtl failed: %Vrc\n", rc);
    96154                    rcRet++;
    97                     break;
    98155                }
    99156            }
    100             RTPrintf("tstInt: Performed SUPCallVMMR0 %d times (rc=%Vrc)\n", cIterations, rc);
    101 
    102             /** @todo profile it! */
     157            else
     158            {
     159                RTPrintf("tstInt: SUPContAlloc2(%#zx,,) failed\n", sizeof(*pVM));
     160                rcRet++;
     161            }
    103162
    104163            /*
     
    106165             */
    107166            rc = SUPUnloadVMM();
    108             rcRet += rc != 0;
    109167            if (rc)
     168            {
    110169                RTPrintf("tstInt: SUPUnloadVMM failed with rc=%Vrc\n", rc);
     170                rcRet++;
     171            }
    111172        }
    112173        else
     174        {
    113175            RTPrintf("tstInt: SUPLoadVMM failed with rc=%Vrc\n", rc);
     176            rcRet++;
     177        }
    114178
    115179        /*
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