windows-nt/Source/XPSP1/NT/com/ole32/cs/csdrt/csdrtprf.cxx
2020-09-26 16:20:57 +08:00

422 lines
9.6 KiB
C++

// csdrtprf.cxx
#include "csdrt.hxx"
extern BOOL fVerbose;
extern BOOL fMultiStore;
extern IClassAccess *pIClassAccess;
extern IClassAdmin *pIClassAdmin;
extern IClassAdmin *pIClassAdmin2;
extern WCHAR szClassStorePath [_MAX_PATH+1];
extern WCHAR szContainer [_MAX_PATH+1];
extern WCHAR szContainer2 [_MAX_PATH+1];
extern WCHAR szNewContainer [_MAX_PATH+1];
extern UINT cLoops;
extern UINT cCase;
extern GUID TestClsid1, TestClsid2, TestClsid3, TestClsid4, TestClsid5;
extern Sname TestFileExt1, TestFileExt4, TestMimeType2;
extern Sname TestOtherProgID2, TestProgId1, TestProgId3;
HRESULT AddRandomPackage(PACKAGEDETAIL &packagedetail, int i);
void InitTempNames();
/*
RunATest()
{
PACKAGEINFO PackageInfo;
HRESULT hr, hr2;
switch(cCase)
{
//FileExt1
case 1:
hr = LookupByFileext (TestFileExt1, &PackageInfo);
if (SUCCEEDED(hr))
{
// Check expected values
//
AssertPackage1By1(&PackageInfo);
}
break;
//Clsid1
case 2:
hr2 = LookupByClsid (TestClsid1, &PackageInfo);
if (SUCCEEDED(hr2))
{
// Check expected values
//
AssertPackage1By1(&PackageInfo);
}
else
hr = hr2;
break;
//ProgId1
case 3:
hr2 = LookupByProgid (TestProgId1, &PackageInfo);
if (SUCCEEDED(hr2))
{
//
// Check expected values
//
AssertPackage1By1(&PackageInfo);
}
else
hr = hr2;
break;
// MimeType2
case 4:
hr2 = LookupByMimeType (TestMimeType2, &PackageInfo);
if (SUCCEEDED(hr2))
{
//
// Check expected values
//
AssertPackage1By2(&PackageInfo);
}
else
hr = hr2;
break;
//Clsid2
case 5:
hr2 = LookupByClsid (TestClsid2, &PackageInfo);
if (SUCCEEDED(hr2))
{
//
// Check expected values
//
AssertPackage1By2(&PackageInfo);
}
else
hr = hr2;
break;
//ProgId3
case 6:
hr2 = LookupByProgid (TestProgId3, &PackageInfo);
if (SUCCEEDED(hr2))
{
//
// Check expected values
//
AssertPackage2(&PackageInfo);
}
else
hr = hr2;
break;
//TestOtherProgID2
case 7:
hr2 = LookupByProgid (TestOtherProgID2, &PackageInfo);
if (SUCCEEDED(hr2))
{
//
// Check expected values
//
AssertPackage1By1(&PackageInfo);
}
else
hr = hr2;
break;
//FileExt4
case 8:
hr = LookupByFileext (TestFileExt4, &PackageInfo);
if (SUCCEEDED(hr))
{
// Check expected values
//
AssertPackage4(&PackageInfo);
}
break;
// Clsid4
// Should get two packages now !!
case 9:
hr2 = LookupByClsid (TestClsid4, &PackageInfo);
if (SUCCEEDED(hr2))
{
//
// Check expected values
//
AssertPackage4(&PackageInfo);
}
else
hr = hr2;
break;
// Tlbid1
case 10:
hr2 = LookupByTlbid (TestClsid1, &PackageInfo);
if (SUCCEEDED(hr2))
{
//
// Check expected values
//
AssertPackage4(&PackageInfo);
}
else
hr = hr2;
break;
// Tlbid2
case 11:
hr2 = LookupByTlbid (TestClsid2, &PackageInfo);
if (SUCCEEDED(hr2))
{
//
// Check expected values
//
//AssertPackage5(&PackageInfo);
}
else
hr = hr2;
break;
// Clsid5
case 12:
hr2 = LookupByClsid (TestClsid5, &PackageInfo);
if (SUCCEEDED(hr2))
{
//
// Check expected values
//
AssertPackage6(&PackageInfo);
}
else
hr = hr2;
break;
default:
printf("Not yet implemented\n");
break;
}
return hr;
}
void RunPerfTests()
{
DWORD time1, time2, time3, time4;
hr = GetClassAdmin (szContainer, &pIClassAdmin);
if (FAILED(hr))
return;
hr = DoAdminTest(&cCount, &cPkgCount);
if (FAILED(hr))
return;
// Populating class store.
if (!cLoop)
return;
VerbosePrint("Started timing\n");
// take the time time1.
time1 = GetTickCount();
hr = GetClassAccess ();
if (FAILED(hr))
return;
// Get the interface pointers, depending on the test.
RunATest();
// take the time time2.
time2 = GetTickCount();
for (i = 0; i < (cLoops-1); i++)
{
RunATest();
}
// take the time time3
time3 = GetTickCount();
// Release the interface pointers.
// take the time time4
time4 = GetTickCount();
printf("Time1\tTime2\tTime3\tTime4\n");
printf("-----\t-----\t-----\t-----\n\n");
printf("%d\t%d\t%d\t%d\n", time1, time2, time3 time4);
// print the times.
// Parameter based cleanup.
}
*/
HRESULT AddRandomUnassignedPackages(int i)
{
PACKAGEDETAIL PackageDetail;
memset(&PackageDetail, 0, sizeof(PACKAGEDETAIL));
PackageDetail.pInstallInfo = (INSTALLINFO *) CoTaskMemAlloc (sizeof(INSTALLINFO));
memset (PackageDetail.pInstallInfo, 0, sizeof(INSTALLINFO));
PackageDetail.pPlatformInfo = (PLATFORMINFO *) CoTaskMemAlloc (sizeof(PLATFORMINFO));
memset (PackageDetail.pPlatformInfo, 0, sizeof(PLATFORMINFO));
PackageDetail.pActInfo = (ACTIVATIONINFO *) CoTaskMemAlloc (sizeof(ACTIVATIONINFO));
memset (PackageDetail.pActInfo, 0, sizeof(ACTIVATIONINFO));
PackageDetail.pInstallInfo->dwActFlags =
ACTFLG_Published + // Published
ACTFLG_UserInstall + // Visible
ACTFLG_OnDemandInstall; // AutoInstall
return AddRandomPackage(PackageDetail, i);
}
HRESULT AddRandomAssignedPackages(int i)
{
PACKAGEDETAIL PackageDetail;
memset(&PackageDetail, 0, sizeof(PACKAGEDETAIL));
PackageDetail.pInstallInfo = (INSTALLINFO *) CoTaskMemAlloc (sizeof(INSTALLINFO));
memset (PackageDetail.pInstallInfo, 0, sizeof(INSTALLINFO));
PackageDetail.pPlatformInfo = (PLATFORMINFO *) CoTaskMemAlloc (sizeof(PLATFORMINFO));
memset (PackageDetail.pPlatformInfo, 0, sizeof(PLATFORMINFO));
PackageDetail.pActInfo = (ACTIVATIONINFO *) CoTaskMemAlloc (sizeof(ACTIVATIONINFO));
memset (PackageDetail.pActInfo, 0, sizeof(ACTIVATIONINFO));
PackageDetail.pInstallInfo->dwActFlags =
ACTFLG_Assigned + // Assigned
ACTFLG_UserInstall + // Visible
ACTFLG_OnDemandInstall; // AutoInstall
return AddRandomPackage(PackageDetail, i);
}
HRESULT DoLogonPerfTest(BOOL fInitialize)
{
UINT i = 0, j = 0;
PACKAGEDISPINFO PackageInfo[30];
IEnumPackage *pIEnumPackage = NULL;
HRESULT hr = S_OK;
DWORD cgot = 0;
DWORD tc1, tc2, tc3, tc4, tc5, tc6, tc;
if (fInitialize)
{
InitTempNames();
// add 500 random packages
for (i = 0; i < 500; i++)
{
hr = AddRandomUnassignedPackages(i);
if (FAILED(hr))
return hr;
}
VerbosePrint("Added 500 unassigned apps\n");
// add 5 known packages that are assigned.
for (i = 0; i < 5; i++)
{
hr = AddRandomAssignedPackages(i+500);
if (FAILED(hr))
return hr;
}
VerbosePrint("Added 5 Assigned Apps\n");
pIClassAdmin->Release();
}
// Lookup for assigned packages using
// CoEnumAppInfo
tc = GetTickCount();
cLoops = 1;
for (i = 0; i < (int)cLoops; i++)
{
tc1 = GetTickCount();
hr = CsEnumApps(
NULL,
NULL,
NULL,
APPINFO_ASSIGNED | APPINFO_MSI,
&pIEnumPackage
);
tc2 = GetTickCount();
printf("CsEnumApps: Time=%d MilliSec\n", tc2 - tc1);
if (FAILED(hr)) {
printf("CsEnumApps returned hr = 0x%x\n", hr);
return hr;
}
/*
for (j = 0; j < 5; j++)
{
tc3 = GetTickCount();
hr = pIEnumPackage->Next(1, PackageInfo, &cgot);
if (hr != S_OK) {
printf("Next %d returned hr = 0x%x\n", j+1, hr);
return hr;
}
tc4 = GetTickCount();
printf("Next %d\n", tc4 - tc3);
}
*/
hr = pIEnumPackage->Next(20, PackageInfo, &cgot);
tc5 = GetTickCount();
// printf("Last Next %d\n", tc5 - tc4);
printf("Browsing: Time = %d MilliSec, # of assigned apps = %d\n",
tc5 - tc2, cgot);
if (fVerbose)
for (j = 0; j < cgot; j++)
{
PrintPackageInfo(&PackageInfo[j]);
}
printf("Next(%d) returned hr = 0x%x\n", 20, hr);
// if (i%10 == 0)
// VerbosePrint(".");
// if (i % 100 == 0)
// VerbosePrint("\n");
pIEnumPackage->Release();
tc6 = GetTickCount();
printf("Release %d\n", tc6 - tc5);
}
printf ("End of Class Store Stress for %d passes (%d MilliSec Per Loop).\n",
cLoops,
(GetTickCount() - tc)/cLoops);
return S_OK;
// measure the time taken.
}