tstVBoxAPIPerf.cpp revision fd62318f05bd9625444feb8f4b0ae9ff90ed0766
5ca41ddc30d96ff1ccdb5c76d6d924adce77e635vboxsync * tstVBoxAPIPerf - Checks the performance of the COM / XPOM API.
5ca41ddc30d96ff1ccdb5c76d6d924adce77e635vboxsync * Copyright (C) 2006-2013 Oracle Corporation
5ca41ddc30d96ff1ccdb5c76d6d924adce77e635vboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
5ca41ddc30d96ff1ccdb5c76d6d924adce77e635vboxsync * available from http://www.virtualbox.org. This file is free software;
5ca41ddc30d96ff1ccdb5c76d6d924adce77e635vboxsync * you can redistribute it and/or modify it under the terms of the GNU
5ca41ddc30d96ff1ccdb5c76d6d924adce77e635vboxsync * General Public License (GPL) as published by the Free Software
5ca41ddc30d96ff1ccdb5c76d6d924adce77e635vboxsync * Foundation, in version 2 as it comes in the "COPYING" file of the
5ca41ddc30d96ff1ccdb5c76d6d924adce77e635vboxsync * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
5ca41ddc30d96ff1ccdb5c76d6d924adce77e635vboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
5ca41ddc30d96ff1ccdb5c76d6d924adce77e635vboxsync/*******************************************************************************
5ca41ddc30d96ff1ccdb5c76d6d924adce77e635vboxsync* Header Files *
5ca41ddc30d96ff1ccdb5c76d6d924adce77e635vboxsync*******************************************************************************/
5ca41ddc30d96ff1ccdb5c76d6d924adce77e635vboxsync/*******************************************************************************
5ca41ddc30d96ff1ccdb5c76d6d924adce77e635vboxsync* Global Variables *
5ca41ddc30d96ff1ccdb5c76d6d924adce77e635vboxsync*******************************************************************************/
5ca41ddc30d96ff1ccdb5c76d6d924adce77e635vboxsync/** Worker fro TST_COM_EXPR(). */
5ca41ddc30d96ff1ccdb5c76d6d924adce77e635vboxsyncstatic HRESULT tstComExpr(HRESULT hrc, const char *pszOperation, int iLine)
5ca41ddc30d96ff1ccdb5c76d6d924adce77e635vboxsync RTTestFailed(g_hTest, "%s failed on line %u with hrc=%Rhrc", pszOperation, iLine, hrc);
5ca41ddc30d96ff1ccdb5c76d6d924adce77e635vboxsync/** Macro that executes the given expression and report any failure.
5ca41ddc30d96ff1ccdb5c76d6d924adce77e635vboxsync * The expression must return a HRESULT. */
5ca41ddc30d96ff1ccdb5c76d6d924adce77e635vboxsync#define TST_COM_EXPR(expr) tstComExpr(expr, #expr, __LINE__)
5ca41ddc30d96ff1ccdb5c76d6d924adce77e635vboxsync RTTestSub(g_hTest, "IVirtualBox::Revision performance");
5ca41ddc30d96ff1ccdb5c76d6d924adce77e635vboxsync while (cLeft-- > 0)
5ca41ddc30d96ff1ccdb5c76d6d924adce77e635vboxsync tstComExpr(hrc, "IVirtualBox::Revision", __LINE__);
5ca41ddc30d96ff1ccdb5c76d6d924adce77e635vboxsync RTTestValue(g_hTest, "IVirtualBox::Revision average", uElapsed / cCalls, RTTESTUNIT_NS_PER_CALL);
5ca41ddc30d96ff1ccdb5c76d6d924adce77e635vboxsync RTTestSub(g_hTest, "IVirtualBox::Version performance");
5ca41ddc30d96ff1ccdb5c76d6d924adce77e635vboxsync while (cLeft-- > 0)
5ca41ddc30d96ff1ccdb5c76d6d924adce77e635vboxsync HRESULT hrc = pVBox->COMGETTER(Version)(bstrVersion.asOutParam());
5ca41ddc30d96ff1ccdb5c76d6d924adce77e635vboxsync RTTestValue(g_hTest, "IVirtualBox::Version average", uElapsed / cCalls, RTTESTUNIT_NS_PER_CALL);
5ca41ddc30d96ff1ccdb5c76d6d924adce77e635vboxsync RTTestSub(g_hTest, "IVirtualBox::Host performance");
5ca41ddc30d96ff1ccdb5c76d6d924adce77e635vboxsync /* The first call. */
5ca41ddc30d96ff1ccdb5c76d6d924adce77e635vboxsync RTTestValue(g_hTest, "IVirtualBox::Host first", uElapsed, RTTESTUNIT_NS);
5ca41ddc30d96ff1ccdb5c76d6d924adce77e635vboxsync /* Subsequent calls. */
5ca41ddc30d96ff1ccdb5c76d6d924adce77e635vboxsync while (cLeft-- > 0)
5ca41ddc30d96ff1ccdb5c76d6d924adce77e635vboxsync RTTestValue(g_hTest, "IVirtualBox::Host average", uElapsed / cCalls1, RTTESTUNIT_NS_PER_CALL);
5ca41ddc30d96ff1ccdb5c76d6d924adce77e635vboxsync /* Keep a reference around and see how that changes things.
5ca41ddc30d96ff1ccdb5c76d6d924adce77e635vboxsync Note! VBoxSVC is not creating and destroying Host(). */
5ca41ddc30d96ff1ccdb5c76d6d924adce77e635vboxsync while (cLeft-- > 0)
5ca41ddc30d96ff1ccdb5c76d6d924adce77e635vboxsync RTTestValue(g_hTest, "IVirtualBox::Host 2nd ref", uElapsed / cCalls2, RTTESTUNIT_NS_PER_CALL);
4091316efc2cdc2f295c9d3e00eaea04e889e67bvboxsync RTTestSub(g_hTest, "IHost::GetProcessorFeature performance");
4091316efc2cdc2f295c9d3e00eaea04e889e67bvboxsync while (cLeft-- > 0)
fd62318f05bd9625444feb8f4b0ae9ff90ed0766vboxsync hrc = pHost->GetProcessorFeature(ProcessorFeature_PAE, &fSupported);
4091316efc2cdc2f295c9d3e00eaea04e889e67bvboxsync tstComExpr(hrc, "IHost::GetProcessorFeature", __LINE__);
4091316efc2cdc2f295c9d3e00eaea04e889e67bvboxsync RTTestValue(g_hTest, "IHost::GetProcessorFeature average", uElapsed / cCalls, RTTESTUNIT_NS_PER_CALL);
5ca41ddc30d96ff1ccdb5c76d6d924adce77e635vboxsync * Initialization.
5ca41ddc30d96ff1ccdb5c76d6d924adce77e635vboxsync RTEXITCODE rcExit = RTTestInitAndCreate("tstVBoxAPIPerf", &g_hTest);
5ca41ddc30d96ff1ccdb5c76d6d924adce77e635vboxsync RTTestSub(g_hTest, "Initializing COM and singletons");
5ca41ddc30d96ff1ccdb5c76d6d924adce77e635vboxsync hrc = TST_COM_EXPR(ptrVBox.createLocalObject(CLSID_VirtualBox));
5ca41ddc30d96ff1ccdb5c76d6d924adce77e635vboxsync hrc = TST_COM_EXPR(ptrSession.createInprocObject(CLSID_Session));
5ca41ddc30d96ff1ccdb5c76d6d924adce77e635vboxsync * Call test functions.
5ca41ddc30d96ff1ccdb5c76d6d924adce77e635vboxsync /** @todo Find something that returns a 2nd instance of an interface and see
5ca41ddc30d96ff1ccdb5c76d6d924adce77e635vboxsync * how if wrapper stuff is reused in any way. */
5ca41ddc30d96ff1ccdb5c76d6d924adce77e635vboxsync RTTestIFailed("com::Initialize failed with hrc=%Rhrc", hrc);