//+------------------------------------------------------------------------ // // Microsoft Windows // Copyright (C) Microsoft Corporation, 1993. // // File: bm_nest.cxx // // Contents: Nested Object Rpc Method Invocation tests // // Classes: CNestTest // // History: 1-July-93 t-martig Created // //-------------------------------------------------------------------------- #include #pragma hdrstop #include #include #include TCHAR *CNestTest::Name () { return TEXT("Nested"); } SCODE CNestTest::Setup (CTestInput *pInput) { CTestBase::Setup(pInput); // get iteration count m_ulIterations = pInput->GetIterations(Name()); // get CLSID of server SCODE sc = pInput->GetGUID(&m_ClsID, Name(), TEXT("Clsid_Local")); if (FAILED(sc)) { Log (TEXT("Setup - GetClassID failed."), sc); return sc; } // initialize timing arrays INIT_RESULTS(m_ulNest2Time); INIT_RESULTS(m_ulNest3Time); INIT_RESULTS(m_ulNest4Time); INIT_RESULTS(m_ulNest5Time); sc = InitCOM(); if (FAILED(sc)) { Log (TEXT("Setup - CoInitialize failed."), sc); return sc; } m_pILoop1=NULL; sc = CoCreateInstance(m_ClsID, NULL, CLSCTX_LOCAL_SERVER, IID_ILoop, (void **)&m_pILoop1); if (FAILED(sc)) { Log (TEXT("Setup - CoCreateInstance of first Server failed."), sc); return sc; } m_pILoop2=NULL; sc = CoCreateInstance(m_ClsID, NULL, CLSCTX_LOCAL_SERVER, IID_ILoop, (void **)&m_pILoop2); if (FAILED(sc)) { Log (TEXT("Setup - CoCreateInstance of second Server failed."), sc); return sc; } // pass the pointers to each other sc = m_pILoop1->Init(m_pILoop2); if (FAILED(sc)) { Log (TEXT("Setup - Initialization of first Server failed."), sc); return sc; } sc = m_pILoop2->Init(m_pILoop1); if (FAILED(sc)) { Log (TEXT("Setup - Initialization of second Server failed."), sc); return sc; } return S_OK; } SCODE CNestTest::Cleanup () { if (m_pILoop1) { m_pILoop1->Uninit(); m_pILoop1->Release(); } if (m_pILoop2) { m_pILoop2->Uninit(); m_pILoop2->Release(); } UninitCOM(); return S_OK; } SCODE CNestTest::Run () { CStopWatch sw; SCODE sc; // // nesting 2 levels. Note we pass in 3 not 2, since the server // subtracts 1 from the passed in value and then stops the nesting // if the count is zero. // // a value of 3 represents a single nested call. // for (ULONG iIter=0; iIterLoop(3); m_ulNest2Time[iIter] = sw.Read(); Log (TEXT("Loop (2)"), sc); } // // nesting 3 levels // for (iIter=0; iIterLoop(4); m_ulNest3Time[iIter] = sw.Read(); Log (TEXT("Loop (3)"), sc); } // // nesting 4 levels // for (iIter=0; iIterLoop(5); m_ulNest4Time[iIter] = sw.Read(); Log (TEXT("Loop (4)"), sc); } // // nesting 5 levels // for (iIter=0; iIterLoop(6); m_ulNest5Time[iIter] = sw.Read(); Log (TEXT("Loop (5)"), sc); } return S_OK; } SCODE CNestTest::Report (CTestOutput &output) { output.WriteSectionHeader (Name(), TEXT("Nested ORpc Calls"), *m_pInput); output.WriteString (TEXT("\n")); output.WriteResults (TEXT("Nesting 2 "), m_ulIterations, m_ulNest2Time); output.WriteResults (TEXT("Nesting 3 "), m_ulIterations, m_ulNest3Time); output.WriteResults (TEXT("Nesting 4 "), m_ulIterations, m_ulNest4Time); output.WriteResults (TEXT("Nesting 5 "), m_ulIterations, m_ulNest5Time); return S_OK; }