You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
190 lines
3.9 KiB
190 lines
3.9 KiB
//+------------------------------------------------------------------------
|
|
//
|
|
// 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 <headers.cxx>
|
|
#pragma hdrstop
|
|
|
|
#include <bm_nest.hxx>
|
|
#include <oletest.hxx>
|
|
#include <tracelog.hxx>
|
|
|
|
|
|
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; iIter<m_ulIterations; iIter++)
|
|
{
|
|
sw.Reset();
|
|
sc = m_pILoop1->Loop(3);
|
|
m_ulNest2Time[iIter] = sw.Read();
|
|
Log (TEXT("Loop (2)"), sc);
|
|
}
|
|
|
|
//
|
|
// nesting 3 levels
|
|
//
|
|
|
|
for (iIter=0; iIter<m_ulIterations; iIter++)
|
|
{
|
|
sw.Reset();
|
|
sc= m_pILoop1->Loop(4);
|
|
m_ulNest3Time[iIter] = sw.Read();
|
|
Log (TEXT("Loop (3)"), sc);
|
|
}
|
|
|
|
//
|
|
// nesting 4 levels
|
|
//
|
|
|
|
for (iIter=0; iIter<m_ulIterations; iIter++)
|
|
{
|
|
sw.Reset();
|
|
sc = m_pILoop1->Loop(5);
|
|
m_ulNest4Time[iIter] = sw.Read();
|
|
Log (TEXT("Loop (4)"), sc);
|
|
}
|
|
|
|
//
|
|
// nesting 5 levels
|
|
//
|
|
|
|
for (iIter=0; iIter<m_ulIterations; iIter++)
|
|
{
|
|
sw.Reset();
|
|
sc = m_pILoop1->Loop(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;
|
|
}
|
|
|
|
|