1*b1cdbd2cSJim Jagielski /**************************************************************
2*b1cdbd2cSJim Jagielski *
3*b1cdbd2cSJim Jagielski * Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski * or more contributor license agreements. See the NOTICE file
5*b1cdbd2cSJim Jagielski * distributed with this work for additional information
6*b1cdbd2cSJim Jagielski * regarding copyright ownership. The ASF licenses this file
7*b1cdbd2cSJim Jagielski * to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski * "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski * with the License. You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski *
11*b1cdbd2cSJim Jagielski * http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski *
13*b1cdbd2cSJim Jagielski * Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski * software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski * KIND, either express or implied. See the License for the
17*b1cdbd2cSJim Jagielski * specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski * under the License.
19*b1cdbd2cSJim Jagielski *
20*b1cdbd2cSJim Jagielski *************************************************************/
21*b1cdbd2cSJim Jagielski
22*b1cdbd2cSJim Jagielski
23*b1cdbd2cSJim Jagielski
24*b1cdbd2cSJim Jagielski // MARKER(update_precomp.py): autogen include statement, do not remove
25*b1cdbd2cSJim Jagielski #include "precompiled_testtools.hxx"
26*b1cdbd2cSJim Jagielski
27*b1cdbd2cSJim Jagielski #include <stdio.h>
28*b1cdbd2cSJim Jagielski #include <math.h>
29*b1cdbd2cSJim Jagielski #include <string>
30*b1cdbd2cSJim Jagielski #include <hash_map>
31*b1cdbd2cSJim Jagielski #include <map>
32*b1cdbd2cSJim Jagielski
33*b1cdbd2cSJim Jagielski #include <osl/diagnose.h>
34*b1cdbd2cSJim Jagielski #include <osl/mutex.hxx>
35*b1cdbd2cSJim Jagielski #include <osl/module.h>
36*b1cdbd2cSJim Jagielski #include <osl/process.h>
37*b1cdbd2cSJim Jagielski #include <osl/thread.h>
38*b1cdbd2cSJim Jagielski #include <osl/conditn.hxx>
39*b1cdbd2cSJim Jagielski #include <osl/time.h>
40*b1cdbd2cSJim Jagielski
41*b1cdbd2cSJim Jagielski #ifdef SAL_W32
42*b1cdbd2cSJim Jagielski #include <windows.h>
43*b1cdbd2cSJim Jagielski #else
44*b1cdbd2cSJim Jagielski #include <sys/times.h>
45*b1cdbd2cSJim Jagielski #include <unistd.h>
46*b1cdbd2cSJim Jagielski #endif
47*b1cdbd2cSJim Jagielski
48*b1cdbd2cSJim Jagielski #include <rtl/string.hxx>
49*b1cdbd2cSJim Jagielski #include <rtl/strbuf.hxx>
50*b1cdbd2cSJim Jagielski #include <rtl/ustrbuf.hxx>
51*b1cdbd2cSJim Jagielski
52*b1cdbd2cSJim Jagielski #include <uno/environment.hxx>
53*b1cdbd2cSJim Jagielski #include <uno/mapping.hxx>
54*b1cdbd2cSJim Jagielski
55*b1cdbd2cSJim Jagielski #include <cppuhelper/factory.hxx>
56*b1cdbd2cSJim Jagielski #include <cppuhelper/implbase2.hxx>
57*b1cdbd2cSJim Jagielski
58*b1cdbd2cSJim Jagielski #include <com/sun/star/lang/XServiceInfo.hpp>
59*b1cdbd2cSJim Jagielski #include <com/sun/star/lang/XComponent.hpp>
60*b1cdbd2cSJim Jagielski #include <com/sun/star/lang/XMain.hpp>
61*b1cdbd2cSJim Jagielski #include <com/sun/star/lang/XInitialization.hpp>
62*b1cdbd2cSJim Jagielski #include <com/sun/star/loader/XImplementationLoader.hpp>
63*b1cdbd2cSJim Jagielski #include <com/sun/star/registry/XRegistryKey.hpp>
64*b1cdbd2cSJim Jagielski #include <com/sun/star/bridge/XUnoUrlResolver.hpp>
65*b1cdbd2cSJim Jagielski #include <com/sun/star/container/XSet.hpp>
66*b1cdbd2cSJim Jagielski #include <com/sun/star/test/performance/XPerformanceTest.hpp>
67*b1cdbd2cSJim Jagielski
68*b1cdbd2cSJim Jagielski #define NLOOP 200000000
69*b1cdbd2cSJim Jagielski
70*b1cdbd2cSJim Jagielski using namespace rtl;
71*b1cdbd2cSJim Jagielski using namespace osl;
72*b1cdbd2cSJim Jagielski using namespace cppu;
73*b1cdbd2cSJim Jagielski using namespace com::sun::star::uno;
74*b1cdbd2cSJim Jagielski using namespace com::sun::star::lang;
75*b1cdbd2cSJim Jagielski using namespace com::sun::star::loader;
76*b1cdbd2cSJim Jagielski using namespace com::sun::star::registry;
77*b1cdbd2cSJim Jagielski using namespace com::sun::star::bridge;
78*b1cdbd2cSJim Jagielski using namespace com::sun::star::container;
79*b1cdbd2cSJim Jagielski using namespace com::sun::star::test::performance;
80*b1cdbd2cSJim Jagielski
81*b1cdbd2cSJim Jagielski #define SERVICENAME "com.sun.star.test.performance.PerformanceTest"
82*b1cdbd2cSJim Jagielski #define IMPLNAME "com.sun.star.comp.performance.PerformanceTest"
83*b1cdbd2cSJim Jagielski
84*b1cdbd2cSJim Jagielski namespace benchmark_test
85*b1cdbd2cSJim Jagielski {
86*b1cdbd2cSJim Jagielski
getSystemTicks()87*b1cdbd2cSJim Jagielski static inline sal_uInt32 getSystemTicks()
88*b1cdbd2cSJim Jagielski {
89*b1cdbd2cSJim Jagielski #ifdef SAL_W32
90*b1cdbd2cSJim Jagielski return (sal_uInt32)GetTickCount();
91*b1cdbd2cSJim Jagielski #else // only UNX supported for now
92*b1cdbd2cSJim Jagielski static sal_uInt32 nImplTicksPerSecond = 0;
93*b1cdbd2cSJim Jagielski static double dImplTicksPerSecond;
94*b1cdbd2cSJim Jagielski static double dImplTicksULONGMAX;
95*b1cdbd2cSJim Jagielski
96*b1cdbd2cSJim Jagielski struct tms aTms;
97*b1cdbd2cSJim Jagielski sal_uInt32 nTicks = (sal_uInt32)times( &aTms );
98*b1cdbd2cSJim Jagielski
99*b1cdbd2cSJim Jagielski if ( !nImplTicksPerSecond )
100*b1cdbd2cSJim Jagielski {
101*b1cdbd2cSJim Jagielski nImplTicksPerSecond = sysconf(_SC_CLK_TCK);
102*b1cdbd2cSJim Jagielski dImplTicksPerSecond = nImplTicksPerSecond;
103*b1cdbd2cSJim Jagielski dImplTicksULONGMAX = (double)(sal_uInt32)ULONG_MAX;
104*b1cdbd2cSJim Jagielski }
105*b1cdbd2cSJim Jagielski
106*b1cdbd2cSJim Jagielski double fTicks = nTicks;
107*b1cdbd2cSJim Jagielski fTicks *= 1000;
108*b1cdbd2cSJim Jagielski fTicks /= dImplTicksPerSecond;
109*b1cdbd2cSJim Jagielski fTicks = fmod (fTicks, dImplTicksULONGMAX);
110*b1cdbd2cSJim Jagielski
111*b1cdbd2cSJim Jagielski return (sal_uInt32)fTicks;
112*b1cdbd2cSJim Jagielski #endif
113*b1cdbd2cSJim Jagielski }
114*b1cdbd2cSJim Jagielski
115*b1cdbd2cSJim Jagielski //--------------------------------------------------------------------------------------------------
out(const sal_Char * pText,FILE * stream=stderr,sal_Int32 nStart=-1,sal_Char cFillchar=' ')116*b1cdbd2cSJim Jagielski static void out( const sal_Char * pText, FILE * stream = stderr,
117*b1cdbd2cSJim Jagielski sal_Int32 nStart = -1, sal_Char cFillchar = ' ' )
118*b1cdbd2cSJim Jagielski {
119*b1cdbd2cSJim Jagielski static sal_Int32 s_nPos = 0;
120*b1cdbd2cSJim Jagielski
121*b1cdbd2cSJim Jagielski sal_Char ar[2] = { cFillchar, 0 };
122*b1cdbd2cSJim Jagielski while (s_nPos < nStart)
123*b1cdbd2cSJim Jagielski {
124*b1cdbd2cSJim Jagielski ::fprintf( stream, ar );
125*b1cdbd2cSJim Jagielski ++s_nPos;
126*b1cdbd2cSJim Jagielski }
127*b1cdbd2cSJim Jagielski
128*b1cdbd2cSJim Jagielski ::fprintf( stream, pText );
129*b1cdbd2cSJim Jagielski
130*b1cdbd2cSJim Jagielski for ( const sal_Char * p = pText; *p; ++p )
131*b1cdbd2cSJim Jagielski {
132*b1cdbd2cSJim Jagielski if (*p == '\n')
133*b1cdbd2cSJim Jagielski s_nPos = 0;
134*b1cdbd2cSJim Jagielski else
135*b1cdbd2cSJim Jagielski ++s_nPos;
136*b1cdbd2cSJim Jagielski }
137*b1cdbd2cSJim Jagielski }
138*b1cdbd2cSJim Jagielski //--------------------------------------------------------------------------------------------------
out(const OUString & rText,FILE * stream=stderr,sal_Int32 nStart=-1,sal_Char cFillchar=' ')139*b1cdbd2cSJim Jagielski static inline void out( const OUString & rText, FILE * stream = stderr,
140*b1cdbd2cSJim Jagielski sal_Int32 nStart = -1, sal_Char cFillchar = ' ' )
141*b1cdbd2cSJim Jagielski {
142*b1cdbd2cSJim Jagielski OString aText( OUStringToOString( rText, RTL_TEXTENCODING_ASCII_US ) );
143*b1cdbd2cSJim Jagielski out( aText.getStr(), stream, nStart, cFillchar );
144*b1cdbd2cSJim Jagielski }
145*b1cdbd2cSJim Jagielski //--------------------------------------------------------------------------------------------------
out(double fVal,FILE * stream=stderr,sal_Int32 nStart=-1,sal_Char cFillchar=' ')146*b1cdbd2cSJim Jagielski static inline void out( double fVal, FILE * stream = stderr,
147*b1cdbd2cSJim Jagielski sal_Int32 nStart = -1, sal_Char cFillchar = ' ' )
148*b1cdbd2cSJim Jagielski {
149*b1cdbd2cSJim Jagielski sal_Char ar[128];
150*b1cdbd2cSJim Jagielski ::snprintf( ar, sizeof(ar), (fVal < 0.000001 ? "%g" : "%f"), fVal );
151*b1cdbd2cSJim Jagielski out( ar, stream, nStart, cFillchar );
152*b1cdbd2cSJim Jagielski }
153*b1cdbd2cSJim Jagielski //--------------------------------------------------------------------------------------------------
out(sal_Int64 nVal,FILE * stream=stderr,sal_Int32 nStart=-1,sal_Char cFillchar=' ')154*b1cdbd2cSJim Jagielski static inline void out( sal_Int64 nVal, FILE * stream = stderr,
155*b1cdbd2cSJim Jagielski sal_Int32 nStart = -1, sal_Char cFillchar = ' ' )
156*b1cdbd2cSJim Jagielski {
157*b1cdbd2cSJim Jagielski sal_Char ar[128];
158*b1cdbd2cSJim Jagielski ::snprintf( ar, sizeof(ar), "%ld", nVal );
159*b1cdbd2cSJim Jagielski out( ar, stream, nStart, cFillchar );
160*b1cdbd2cSJim Jagielski }
161*b1cdbd2cSJim Jagielski
162*b1cdbd2cSJim Jagielski //==================================================================================================
loadLibComponentFactory(const OUString & rLibName,const OUString & rImplName,const Reference<XMultiServiceFactory> & xSF,const Reference<XRegistryKey> & xKey)163*b1cdbd2cSJim Jagielski Reference< XSingleServiceFactory > loadLibComponentFactory(
164*b1cdbd2cSJim Jagielski const OUString & rLibName, const OUString & rImplName,
165*b1cdbd2cSJim Jagielski const Reference< XMultiServiceFactory > & xSF, const Reference< XRegistryKey > & xKey )
166*b1cdbd2cSJim Jagielski {
167*b1cdbd2cSJim Jagielski Reference< XSingleServiceFactory > xRet;
168*b1cdbd2cSJim Jagielski
169*b1cdbd2cSJim Jagielski OUStringBuffer aLibNameBuf( 32 );
170*b1cdbd2cSJim Jagielski #ifdef SAL_UNX
171*b1cdbd2cSJim Jagielski aLibNameBuf.appendAscii( RTL_CONSTASCII_STRINGPARAM("lib") );
172*b1cdbd2cSJim Jagielski aLibNameBuf.append( rLibName );
173*b1cdbd2cSJim Jagielski aLibNameBuf.appendAscii( RTL_CONSTASCII_STRINGPARAM(".so") );
174*b1cdbd2cSJim Jagielski #else
175*b1cdbd2cSJim Jagielski aLibNameBuf.append( rLibName );
176*b1cdbd2cSJim Jagielski aLibNameBuf.appendAscii( RTL_CONSTASCII_STRINGPARAM(".dll") );
177*b1cdbd2cSJim Jagielski #endif
178*b1cdbd2cSJim Jagielski OUString aLibName( aLibNameBuf.makeStringAndClear() );
179*b1cdbd2cSJim Jagielski oslModule lib = osl_loadModule( aLibName.pData, SAL_LOADMODULE_LAZY | SAL_LOADMODULE_GLOBAL );
180*b1cdbd2cSJim Jagielski
181*b1cdbd2cSJim Jagielski if (lib)
182*b1cdbd2cSJim Jagielski {
183*b1cdbd2cSJim Jagielski void * pSym;
184*b1cdbd2cSJim Jagielski
185*b1cdbd2cSJim Jagielski // ========================= LATEST VERSION =========================
186*b1cdbd2cSJim Jagielski OUString aGetEnvName( RTL_CONSTASCII_USTRINGPARAM(COMPONENT_GETENV) );
187*b1cdbd2cSJim Jagielski if (pSym = osl_getSymbol( lib, aGetEnvName.pData ))
188*b1cdbd2cSJim Jagielski {
189*b1cdbd2cSJim Jagielski uno_Environment * pCurrentEnv = 0;
190*b1cdbd2cSJim Jagielski uno_Environment * pEnv = 0;
191*b1cdbd2cSJim Jagielski const sal_Char * pEnvTypeName = 0;
192*b1cdbd2cSJim Jagielski (*((component_getImplementationEnvironmentFunc)pSym))( &pEnvTypeName, &pEnv );
193*b1cdbd2cSJim Jagielski
194*b1cdbd2cSJim Jagielski sal_Bool bNeedsMapping =
195*b1cdbd2cSJim Jagielski (pEnv || 0 != rtl_str_compare( pEnvTypeName, CPPU_CURRENT_LANGUAGE_BINDING_NAME ));
196*b1cdbd2cSJim Jagielski
197*b1cdbd2cSJim Jagielski OUString aEnvTypeName( OUString::createFromAscii( pEnvTypeName ) );
198*b1cdbd2cSJim Jagielski
199*b1cdbd2cSJim Jagielski if (bNeedsMapping)
200*b1cdbd2cSJim Jagielski {
201*b1cdbd2cSJim Jagielski if (! pEnv)
202*b1cdbd2cSJim Jagielski uno_getEnvironment( &pEnv, aEnvTypeName.pData, 0 );
203*b1cdbd2cSJim Jagielski if (pEnv)
204*b1cdbd2cSJim Jagielski {
205*b1cdbd2cSJim Jagielski OUString aCppEnvTypeName( RTL_CONSTASCII_USTRINGPARAM(CPPU_CURRENT_LANGUAGE_BINDING_NAME) );
206*b1cdbd2cSJim Jagielski uno_getEnvironment( &pCurrentEnv, aCppEnvTypeName.pData, 0 );
207*b1cdbd2cSJim Jagielski if (pCurrentEnv)
208*b1cdbd2cSJim Jagielski bNeedsMapping = (pEnv != pCurrentEnv);
209*b1cdbd2cSJim Jagielski }
210*b1cdbd2cSJim Jagielski }
211*b1cdbd2cSJim Jagielski
212*b1cdbd2cSJim Jagielski OUString aGetFactoryName( RTL_CONSTASCII_USTRINGPARAM(COMPONENT_GETFACTORY) );
213*b1cdbd2cSJim Jagielski if (pSym = osl_getSymbol( lib, aGetFactoryName.pData ))
214*b1cdbd2cSJim Jagielski {
215*b1cdbd2cSJim Jagielski OString aImplName( OUStringToOString( rImplName, RTL_TEXTENCODING_ASCII_US ) );
216*b1cdbd2cSJim Jagielski
217*b1cdbd2cSJim Jagielski if (bNeedsMapping)
218*b1cdbd2cSJim Jagielski {
219*b1cdbd2cSJim Jagielski if (pEnv && pCurrentEnv)
220*b1cdbd2cSJim Jagielski {
221*b1cdbd2cSJim Jagielski Mapping aCurrent2Env( pCurrentEnv, pEnv );
222*b1cdbd2cSJim Jagielski Mapping aEnv2Current( pEnv, pCurrentEnv );
223*b1cdbd2cSJim Jagielski
224*b1cdbd2cSJim Jagielski if (aCurrent2Env.is() && aEnv2Current.is())
225*b1cdbd2cSJim Jagielski {
226*b1cdbd2cSJim Jagielski void * pSMgr = aCurrent2Env.mapInterface(
227*b1cdbd2cSJim Jagielski xSF.get(), ::getCppuType( (const Reference< XMultiServiceFactory > *)0 ) );
228*b1cdbd2cSJim Jagielski void * pKey = aCurrent2Env.mapInterface(
229*b1cdbd2cSJim Jagielski xKey.get(), ::getCppuType( (const Reference< XRegistryKey > *)0 ) );
230*b1cdbd2cSJim Jagielski
231*b1cdbd2cSJim Jagielski void * pSSF = (*((component_getFactoryFunc)pSym))(
232*b1cdbd2cSJim Jagielski aImplName.getStr(), pSMgr, pKey );
233*b1cdbd2cSJim Jagielski
234*b1cdbd2cSJim Jagielski if (pKey)
235*b1cdbd2cSJim Jagielski (*pEnv->pExtEnv->releaseInterface)( pEnv->pExtEnv, pKey );
236*b1cdbd2cSJim Jagielski if (pSMgr)
237*b1cdbd2cSJim Jagielski (*pEnv->pExtEnv->releaseInterface)( pEnv->pExtEnv, pSMgr );
238*b1cdbd2cSJim Jagielski
239*b1cdbd2cSJim Jagielski if (pSSF)
240*b1cdbd2cSJim Jagielski {
241*b1cdbd2cSJim Jagielski aEnv2Current.mapInterface(
242*b1cdbd2cSJim Jagielski reinterpret_cast< void ** >( &xRet ),
243*b1cdbd2cSJim Jagielski pSSF, ::getCppuType( (const Reference< XSingleServiceFactory > *)0 ) );
244*b1cdbd2cSJim Jagielski (*pEnv->pExtEnv->releaseInterface)( pEnv->pExtEnv, pSSF );
245*b1cdbd2cSJim Jagielski }
246*b1cdbd2cSJim Jagielski }
247*b1cdbd2cSJim Jagielski }
248*b1cdbd2cSJim Jagielski }
249*b1cdbd2cSJim Jagielski else
250*b1cdbd2cSJim Jagielski {
251*b1cdbd2cSJim Jagielski XSingleServiceFactory * pRet = (XSingleServiceFactory *)
252*b1cdbd2cSJim Jagielski (*((component_getFactoryFunc)pSym))(
253*b1cdbd2cSJim Jagielski aImplName.getStr(), xSF.get(), xKey.get() );
254*b1cdbd2cSJim Jagielski if (pRet)
255*b1cdbd2cSJim Jagielski {
256*b1cdbd2cSJim Jagielski xRet = pRet;
257*b1cdbd2cSJim Jagielski pRet->release();
258*b1cdbd2cSJim Jagielski }
259*b1cdbd2cSJim Jagielski }
260*b1cdbd2cSJim Jagielski }
261*b1cdbd2cSJim Jagielski
262*b1cdbd2cSJim Jagielski if (pEnv)
263*b1cdbd2cSJim Jagielski (*pEnv->release)( pEnv );
264*b1cdbd2cSJim Jagielski if (pCurrentEnv)
265*b1cdbd2cSJim Jagielski (*pCurrentEnv->release)( pCurrentEnv );
266*b1cdbd2cSJim Jagielski }
267*b1cdbd2cSJim Jagielski
268*b1cdbd2cSJim Jagielski // ========================= PREVIOUS VERSION =========================
269*b1cdbd2cSJim Jagielski else
270*b1cdbd2cSJim Jagielski {
271*b1cdbd2cSJim Jagielski OUString aGetFactoryName( RTL_CONSTASCII_USTRINGPARAM(CREATE_COMPONENT_FACTORY_FUNCTION) );
272*b1cdbd2cSJim Jagielski if (pSym = osl_getSymbol( lib, aGetFactoryName.pData ))
273*b1cdbd2cSJim Jagielski {
274*b1cdbd2cSJim Jagielski OUString aCppEnvTypeName( RTL_CONSTASCII_USTRINGPARAM(CPPU_CURRENT_LANGUAGE_BINDING_NAME) );
275*b1cdbd2cSJim Jagielski OUString aUnoEnvTypeName( RTL_CONSTASCII_USTRINGPARAM(UNO_LB_UNO) );
276*b1cdbd2cSJim Jagielski Mapping aUno2Cpp( aUnoEnvTypeName, aCppEnvTypeName );
277*b1cdbd2cSJim Jagielski Mapping aCpp2Uno( aCppEnvTypeName, aUnoEnvTypeName );
278*b1cdbd2cSJim Jagielski OSL_ENSURE( aUno2Cpp.is() && aCpp2Uno.is(), "### cannot get uno mappings!" );
279*b1cdbd2cSJim Jagielski
280*b1cdbd2cSJim Jagielski if (aUno2Cpp.is() && aCpp2Uno.is())
281*b1cdbd2cSJim Jagielski {
282*b1cdbd2cSJim Jagielski uno_Interface * pUComponentFactory = 0;
283*b1cdbd2cSJim Jagielski
284*b1cdbd2cSJim Jagielski uno_Interface * pUSFactory = (uno_Interface *)aCpp2Uno.mapInterface(
285*b1cdbd2cSJim Jagielski xSF.get(), ::getCppuType( (const Reference< XMultiServiceFactory > *)0 ) );
286*b1cdbd2cSJim Jagielski uno_Interface * pUKey = (uno_Interface *)aCpp2Uno.mapInterface(
287*b1cdbd2cSJim Jagielski xKey.get(), ::getCppuType( (const Reference< XRegistryKey > *)0 ) );
288*b1cdbd2cSJim Jagielski
289*b1cdbd2cSJim Jagielski pUComponentFactory = (*((CreateComponentFactoryFunc)pSym))(
290*b1cdbd2cSJim Jagielski rImplName.getStr(), pUSFactory, pUKey );
291*b1cdbd2cSJim Jagielski
292*b1cdbd2cSJim Jagielski if (pUKey)
293*b1cdbd2cSJim Jagielski (*pUKey->release)( pUKey );
294*b1cdbd2cSJim Jagielski if (pUSFactory)
295*b1cdbd2cSJim Jagielski (*pUSFactory->release)( pUSFactory );
296*b1cdbd2cSJim Jagielski
297*b1cdbd2cSJim Jagielski if (pUComponentFactory)
298*b1cdbd2cSJim Jagielski {
299*b1cdbd2cSJim Jagielski XSingleServiceFactory * pXFactory =
300*b1cdbd2cSJim Jagielski (XSingleServiceFactory *)aUno2Cpp.mapInterface(
301*b1cdbd2cSJim Jagielski pUComponentFactory, ::getCppuType( (const Reference< XSingleServiceFactory > *)0 ) );
302*b1cdbd2cSJim Jagielski (*pUComponentFactory->release)( pUComponentFactory );
303*b1cdbd2cSJim Jagielski
304*b1cdbd2cSJim Jagielski if (pXFactory)
305*b1cdbd2cSJim Jagielski {
306*b1cdbd2cSJim Jagielski xRet = pXFactory;
307*b1cdbd2cSJim Jagielski pXFactory->release();
308*b1cdbd2cSJim Jagielski }
309*b1cdbd2cSJim Jagielski }
310*b1cdbd2cSJim Jagielski }
311*b1cdbd2cSJim Jagielski }
312*b1cdbd2cSJim Jagielski }
313*b1cdbd2cSJim Jagielski
314*b1cdbd2cSJim Jagielski if (! xRet.is())
315*b1cdbd2cSJim Jagielski osl_unloadModule( lib );
316*b1cdbd2cSJim Jagielski }
317*b1cdbd2cSJim Jagielski
318*b1cdbd2cSJim Jagielski return xRet;
319*b1cdbd2cSJim Jagielski }
320*b1cdbd2cSJim Jagielski //--------------------------------------------------------------------------------------------------
321*b1cdbd2cSJim Jagielski template< class T >
createInstance(Reference<T> & rxOut,const Reference<XMultiServiceFactory> & xMgr,const OUString & rServiceName)322*b1cdbd2cSJim Jagielski static void createInstance( Reference< T > & rxOut,
323*b1cdbd2cSJim Jagielski const Reference< XMultiServiceFactory > & xMgr,
324*b1cdbd2cSJim Jagielski const OUString & rServiceName )
325*b1cdbd2cSJim Jagielski throw (RuntimeException)
326*b1cdbd2cSJim Jagielski {
327*b1cdbd2cSJim Jagielski Reference< XInterface > x( xMgr->createInstance( rServiceName ), UNO_QUERY );
328*b1cdbd2cSJim Jagielski
329*b1cdbd2cSJim Jagielski if (! x.is())
330*b1cdbd2cSJim Jagielski {
331*b1cdbd2cSJim Jagielski static sal_Bool s_bSet = sal_False;
332*b1cdbd2cSJim Jagielski if (! s_bSet)
333*b1cdbd2cSJim Jagielski {
334*b1cdbd2cSJim Jagielski MutexGuard aGuard( Mutex::getGlobalMutex() );
335*b1cdbd2cSJim Jagielski if (! s_bSet)
336*b1cdbd2cSJim Jagielski {
337*b1cdbd2cSJim Jagielski Reference< XSet > xSet( xMgr, UNO_QUERY );
338*b1cdbd2cSJim Jagielski if (xSet.is())
339*b1cdbd2cSJim Jagielski {
340*b1cdbd2cSJim Jagielski // acceptor
341*b1cdbd2cSJim Jagielski xSet->insert( makeAny( loadLibComponentFactory(
342*b1cdbd2cSJim Jagielski OUString( RTL_CONSTASCII_USTRINGPARAM("acceptor") ),
343*b1cdbd2cSJim Jagielski OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.comp.stoc.Acceptor") ),
344*b1cdbd2cSJim Jagielski xMgr, Reference< XRegistryKey >() ) ) );
345*b1cdbd2cSJim Jagielski // connector
346*b1cdbd2cSJim Jagielski xSet->insert( makeAny( loadLibComponentFactory(
347*b1cdbd2cSJim Jagielski OUString( RTL_CONSTASCII_USTRINGPARAM("connectr") ),
348*b1cdbd2cSJim Jagielski OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.comp.stoc.Connector") ),
349*b1cdbd2cSJim Jagielski xMgr, Reference< XRegistryKey >() ) ) );
350*b1cdbd2cSJim Jagielski // iiop bridge
351*b1cdbd2cSJim Jagielski xSet->insert( makeAny( loadLibComponentFactory(
352*b1cdbd2cSJim Jagielski OUString( RTL_CONSTASCII_USTRINGPARAM("remotebridge") ),
353*b1cdbd2cSJim Jagielski OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.bridge.Bridge.various") ),
354*b1cdbd2cSJim Jagielski xMgr, Reference< XRegistryKey >() ) ) );
355*b1cdbd2cSJim Jagielski // bridge factory
356*b1cdbd2cSJim Jagielski xSet->insert( makeAny( loadLibComponentFactory(
357*b1cdbd2cSJim Jagielski OUString( RTL_CONSTASCII_USTRINGPARAM("brdgfctr") ),
358*b1cdbd2cSJim Jagielski OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.comp.stoc.BridgeFactory") ),
359*b1cdbd2cSJim Jagielski xMgr, Reference< XRegistryKey >() ) ) );
360*b1cdbd2cSJim Jagielski // uno url resolver
361*b1cdbd2cSJim Jagielski xSet->insert( makeAny( loadLibComponentFactory(
362*b1cdbd2cSJim Jagielski OUString( RTL_CONSTASCII_USTRINGPARAM("uuresolver") ),
363*b1cdbd2cSJim Jagielski OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.comp.bridge.UnoUrlResolver") ),
364*b1cdbd2cSJim Jagielski xMgr, Reference< XRegistryKey >() ) ) );
365*b1cdbd2cSJim Jagielski // java loader
366*b1cdbd2cSJim Jagielski // xSet->insert( makeAny( loadLibComponentFactory(
367*b1cdbd2cSJim Jagielski // OUString( RTL_CONSTASCII_USTRINGPARAM("javaloader") ),
368*b1cdbd2cSJim Jagielski // OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.comp.stoc.JavaComponentLoader") ),
369*b1cdbd2cSJim Jagielski // xMgr, Reference< XRegistryKey >() ) ) );
370*b1cdbd2cSJim Jagielski }
371*b1cdbd2cSJim Jagielski s_bSet = sal_True;
372*b1cdbd2cSJim Jagielski }
373*b1cdbd2cSJim Jagielski }
374*b1cdbd2cSJim Jagielski x = xMgr->createInstance( rServiceName );
375*b1cdbd2cSJim Jagielski }
376*b1cdbd2cSJim Jagielski
377*b1cdbd2cSJim Jagielski if (! x.is())
378*b1cdbd2cSJim Jagielski {
379*b1cdbd2cSJim Jagielski OUStringBuffer buf( 64 );
380*b1cdbd2cSJim Jagielski buf.appendAscii( RTL_CONSTASCII_STRINGPARAM("cannot get service instance \"") );
381*b1cdbd2cSJim Jagielski buf.append( rServiceName );
382*b1cdbd2cSJim Jagielski buf.appendAscii( RTL_CONSTASCII_STRINGPARAM("\"!") );
383*b1cdbd2cSJim Jagielski throw RuntimeException( buf.makeStringAndClear(), Reference< XInterface >() );
384*b1cdbd2cSJim Jagielski }
385*b1cdbd2cSJim Jagielski
386*b1cdbd2cSJim Jagielski rxOut = Reference< T >::query( x );
387*b1cdbd2cSJim Jagielski if (! rxOut.is())
388*b1cdbd2cSJim Jagielski {
389*b1cdbd2cSJim Jagielski OUStringBuffer buf( 64 );
390*b1cdbd2cSJim Jagielski buf.appendAscii( RTL_CONSTASCII_STRINGPARAM("service instance \"") );
391*b1cdbd2cSJim Jagielski buf.append( rServiceName );
392*b1cdbd2cSJim Jagielski buf.appendAscii( RTL_CONSTASCII_STRINGPARAM("\" does not support demanded interface \"") );
393*b1cdbd2cSJim Jagielski const Type & rType = ::getCppuType( (const Reference< T > *)0 );
394*b1cdbd2cSJim Jagielski buf.append( rType.getTypeName() );
395*b1cdbd2cSJim Jagielski buf.appendAscii( RTL_CONSTASCII_STRINGPARAM("\"!") );
396*b1cdbd2cSJim Jagielski throw RuntimeException( buf.makeStringAndClear(), Reference< XInterface >() );
397*b1cdbd2cSJim Jagielski }
398*b1cdbd2cSJim Jagielski }
399*b1cdbd2cSJim Jagielski
400*b1cdbd2cSJim Jagielski //--------------------------------------------------------------------------------------------------
getSupportedServiceNames()401*b1cdbd2cSJim Jagielski inline static Sequence< OUString > getSupportedServiceNames()
402*b1cdbd2cSJim Jagielski {
403*b1cdbd2cSJim Jagielski OUString aName( RTL_CONSTASCII_USTRINGPARAM(SERVICENAME) );
404*b1cdbd2cSJim Jagielski return Sequence< OUString >( &aName, 1 );
405*b1cdbd2cSJim Jagielski }
406*b1cdbd2cSJim Jagielski
407*b1cdbd2cSJim Jagielski //==================================================================================================
408*b1cdbd2cSJim Jagielski class TestImpl : public WeakImplHelper2< XServiceInfo, XMain >
409*b1cdbd2cSJim Jagielski {
410*b1cdbd2cSJim Jagielski Reference< XMultiServiceFactory > _xSMgr;
411*b1cdbd2cSJim Jagielski
412*b1cdbd2cSJim Jagielski Reference< XInterface > _xDirect;
413*b1cdbd2cSJim Jagielski Reference< XInterface > getDirect() throw (Exception);
414*b1cdbd2cSJim Jagielski Reference< XInterface > resolveObject( const OUString & rUnoUrl ) throw (Exception);
415*b1cdbd2cSJim Jagielski
416*b1cdbd2cSJim Jagielski public:
417*b1cdbd2cSJim Jagielski TestImpl( const Reference< XMultiServiceFactory > & xSMgr );
418*b1cdbd2cSJim Jagielski virtual ~TestImpl();
419*b1cdbd2cSJim Jagielski
420*b1cdbd2cSJim Jagielski // XServiceInfo
421*b1cdbd2cSJim Jagielski virtual OUString SAL_CALL getImplementationName() throw (RuntimeException);
422*b1cdbd2cSJim Jagielski virtual sal_Bool SAL_CALL supportsService( const OUString & rServiceName ) throw (RuntimeException);
423*b1cdbd2cSJim Jagielski virtual Sequence< OUString > SAL_CALL getSupportedServiceNames() throw (RuntimeException);
424*b1cdbd2cSJim Jagielski
425*b1cdbd2cSJim Jagielski // XMain
426*b1cdbd2cSJim Jagielski virtual sal_Int32 SAL_CALL run( const Sequence< OUString > & rArgs ) throw (RuntimeException);
427*b1cdbd2cSJim Jagielski };
428*b1cdbd2cSJim Jagielski
429*b1cdbd2cSJim Jagielski //##################################################################################################
430*b1cdbd2cSJim Jagielski
431*b1cdbd2cSJim Jagielski //__________________________________________________________________________________________________
TestImpl(const Reference<XMultiServiceFactory> & xSMgr)432*b1cdbd2cSJim Jagielski TestImpl::TestImpl( const Reference< XMultiServiceFactory > & xSMgr )
433*b1cdbd2cSJim Jagielski : _xSMgr( xSMgr )
434*b1cdbd2cSJim Jagielski {
435*b1cdbd2cSJim Jagielski }
436*b1cdbd2cSJim Jagielski //__________________________________________________________________________________________________
~TestImpl()437*b1cdbd2cSJim Jagielski TestImpl::~TestImpl()
438*b1cdbd2cSJim Jagielski {
439*b1cdbd2cSJim Jagielski }
440*b1cdbd2cSJim Jagielski
441*b1cdbd2cSJim Jagielski //==================================================================================================
TestImpl_create(const Reference<XMultiServiceFactory> & xSMgr)442*b1cdbd2cSJim Jagielski static Reference< XInterface > SAL_CALL TestImpl_create( const Reference< XMultiServiceFactory > & xSMgr )
443*b1cdbd2cSJim Jagielski {
444*b1cdbd2cSJim Jagielski return Reference< XInterface >( *new TestImpl( xSMgr ) );
445*b1cdbd2cSJim Jagielski }
446*b1cdbd2cSJim Jagielski
447*b1cdbd2cSJim Jagielski // XServiceInfo
448*b1cdbd2cSJim Jagielski //__________________________________________________________________________________________________
getImplementationName()449*b1cdbd2cSJim Jagielski OUString TestImpl::getImplementationName()
450*b1cdbd2cSJim Jagielski throw (RuntimeException)
451*b1cdbd2cSJim Jagielski {
452*b1cdbd2cSJim Jagielski return OUString( RTL_CONSTASCII_USTRINGPARAM(IMPLNAME) );
453*b1cdbd2cSJim Jagielski }
454*b1cdbd2cSJim Jagielski //__________________________________________________________________________________________________
supportsService(const OUString & rServiceName)455*b1cdbd2cSJim Jagielski sal_Bool TestImpl::supportsService( const OUString & rServiceName )
456*b1cdbd2cSJim Jagielski throw (RuntimeException)
457*b1cdbd2cSJim Jagielski {
458*b1cdbd2cSJim Jagielski const Sequence< OUString > & rSNL = getSupportedServiceNames();
459*b1cdbd2cSJim Jagielski const OUString * pArray = rSNL.getConstArray();
460*b1cdbd2cSJim Jagielski for ( sal_Int32 nPos = rSNL.getLength(); nPos--; )
461*b1cdbd2cSJim Jagielski {
462*b1cdbd2cSJim Jagielski if (pArray[nPos] == rServiceName)
463*b1cdbd2cSJim Jagielski return sal_True;
464*b1cdbd2cSJim Jagielski }
465*b1cdbd2cSJim Jagielski return sal_False;
466*b1cdbd2cSJim Jagielski }
467*b1cdbd2cSJim Jagielski //__________________________________________________________________________________________________
getSupportedServiceNames()468*b1cdbd2cSJim Jagielski Sequence< OUString > TestImpl::getSupportedServiceNames()
469*b1cdbd2cSJim Jagielski throw (RuntimeException)
470*b1cdbd2cSJim Jagielski {
471*b1cdbd2cSJim Jagielski return benchmark_test::getSupportedServiceNames();
472*b1cdbd2cSJim Jagielski }
473*b1cdbd2cSJim Jagielski
474*b1cdbd2cSJim Jagielski //__________________________________________________________________________________________________
getDirect()475*b1cdbd2cSJim Jagielski Reference< XInterface > TestImpl::getDirect()
476*b1cdbd2cSJim Jagielski throw (Exception)
477*b1cdbd2cSJim Jagielski {
478*b1cdbd2cSJim Jagielski if (! _xDirect.is())
479*b1cdbd2cSJim Jagielski {
480*b1cdbd2cSJim Jagielski MutexGuard aGuard( Mutex::getGlobalMutex() );
481*b1cdbd2cSJim Jagielski if (! _xDirect.is())
482*b1cdbd2cSJim Jagielski {
483*b1cdbd2cSJim Jagielski Reference< XSingleServiceFactory > xFac( loadLibComponentFactory(
484*b1cdbd2cSJim Jagielski OUString( RTL_CONSTASCII_USTRINGPARAM("perfobj") ),
485*b1cdbd2cSJim Jagielski OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.comp.performance.PerformanceTestObject") ),
486*b1cdbd2cSJim Jagielski _xSMgr, Reference< XRegistryKey >() ) );
487*b1cdbd2cSJim Jagielski if (! xFac.is())
488*b1cdbd2cSJim Jagielski throw RuntimeException( OUString( RTL_CONSTASCII_USTRINGPARAM("no test object available!") ), Reference< XInterface >() );
489*b1cdbd2cSJim Jagielski _xDirect = xFac->createInstance();
490*b1cdbd2cSJim Jagielski }
491*b1cdbd2cSJim Jagielski }
492*b1cdbd2cSJim Jagielski return _xDirect;
493*b1cdbd2cSJim Jagielski }
494*b1cdbd2cSJim Jagielski //--------------------------------------------------------------------------------------------------
resolveObject(const OUString & rUnoUrl)495*b1cdbd2cSJim Jagielski Reference< XInterface > TestImpl::resolveObject( const OUString & rUnoUrl )
496*b1cdbd2cSJim Jagielski throw (Exception)
497*b1cdbd2cSJim Jagielski {
498*b1cdbd2cSJim Jagielski Reference< XUnoUrlResolver > xResolver;
499*b1cdbd2cSJim Jagielski createInstance(
500*b1cdbd2cSJim Jagielski xResolver, _xSMgr,
501*b1cdbd2cSJim Jagielski OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.bridge.UnoUrlResolver") ) );
502*b1cdbd2cSJim Jagielski
503*b1cdbd2cSJim Jagielski Reference< XInterface > xResolvedObject( xResolver->resolve( rUnoUrl ) );
504*b1cdbd2cSJim Jagielski
505*b1cdbd2cSJim Jagielski if (! xResolvedObject.is())
506*b1cdbd2cSJim Jagielski {
507*b1cdbd2cSJim Jagielski OUStringBuffer buf( 32 );
508*b1cdbd2cSJim Jagielski buf.appendAscii( RTL_CONSTASCII_STRINGPARAM("cannot resolve object \"") );
509*b1cdbd2cSJim Jagielski buf.append( rUnoUrl );
510*b1cdbd2cSJim Jagielski buf.appendAscii( RTL_CONSTASCII_STRINGPARAM("\"!") );
511*b1cdbd2cSJim Jagielski throw RuntimeException( buf.makeStringAndClear(), Reference< XInterface >() );
512*b1cdbd2cSJim Jagielski }
513*b1cdbd2cSJim Jagielski
514*b1cdbd2cSJim Jagielski return xResolvedObject;
515*b1cdbd2cSJim Jagielski }
516*b1cdbd2cSJim Jagielski
517*b1cdbd2cSJim Jagielski //==================================================================================================
518*b1cdbd2cSJim Jagielski class TimeEntry
519*b1cdbd2cSJim Jagielski {
520*b1cdbd2cSJim Jagielski sal_Int64 nLoop;
521*b1cdbd2cSJim Jagielski sal_uInt32 nTicks;
522*b1cdbd2cSJim Jagielski
523*b1cdbd2cSJim Jagielski public:
TimeEntry()524*b1cdbd2cSJim Jagielski TimeEntry()
525*b1cdbd2cSJim Jagielski {}
TimeEntry(sal_Int64 nLoop_,sal_uInt32 nTicks_)526*b1cdbd2cSJim Jagielski TimeEntry( sal_Int64 nLoop_, sal_uInt32 nTicks_ )
527*b1cdbd2cSJim Jagielski : nLoop( nLoop_ )
528*b1cdbd2cSJim Jagielski , nTicks( nTicks_ )
529*b1cdbd2cSJim Jagielski {}
530*b1cdbd2cSJim Jagielski
secPerCall() const531*b1cdbd2cSJim Jagielski inline double secPerCall() const
532*b1cdbd2cSJim Jagielski { return (((double)nTicks) / (nLoop * 1000)); }
533*b1cdbd2cSJim Jagielski
534*b1cdbd2cSJim Jagielski double ratio( const TimeEntry & rEntry ) const;
535*b1cdbd2cSJim Jagielski };
536*b1cdbd2cSJim Jagielski //__________________________________________________________________________________________________
ratio(const TimeEntry & rEntry) const537*b1cdbd2cSJim Jagielski double TimeEntry::ratio( const TimeEntry & rEntry ) const
538*b1cdbd2cSJim Jagielski {
539*b1cdbd2cSJim Jagielski double f = rEntry.nTicks * nLoop;
540*b1cdbd2cSJim Jagielski if (f == 0.0)
541*b1cdbd2cSJim Jagielski {
542*b1cdbd2cSJim Jagielski return 0.0;
543*b1cdbd2cSJim Jagielski }
544*b1cdbd2cSJim Jagielski else
545*b1cdbd2cSJim Jagielski {
546*b1cdbd2cSJim Jagielski return (((double)(nTicks * rEntry.nLoop)) / f);
547*b1cdbd2cSJim Jagielski }
548*b1cdbd2cSJim Jagielski }
549*b1cdbd2cSJim Jagielski
550*b1cdbd2cSJim Jagielski //==================================================================================================
551*b1cdbd2cSJim Jagielski typedef std::map< std::string, TimeEntry > t_TimeEntryMap;
552*b1cdbd2cSJim Jagielski
553*b1cdbd2cSJim Jagielski //==================================================================================================
554*b1cdbd2cSJim Jagielski struct TimingSheet
555*b1cdbd2cSJim Jagielski {
556*b1cdbd2cSJim Jagielski t_TimeEntryMap _entries;
557*b1cdbd2cSJim Jagielski void insert( const sal_Char * pText, sal_Int64 nLoop, sal_uInt32 nTicks );
558*b1cdbd2cSJim Jagielski };
559*b1cdbd2cSJim Jagielski //__________________________________________________________________________________________________
insert(const sal_Char * pText,sal_Int64 nLoop,sal_uInt32 nTicks)560*b1cdbd2cSJim Jagielski void TimingSheet::insert( const sal_Char * pText, sal_Int64 nLoop, sal_uInt32 nTicks )
561*b1cdbd2cSJim Jagielski {
562*b1cdbd2cSJim Jagielski _entries[ pText ] = TimeEntry( nLoop, nTicks );
563*b1cdbd2cSJim Jagielski }
564*b1cdbd2cSJim Jagielski
565*b1cdbd2cSJim Jagielski //==================================================================================================
566*b1cdbd2cSJim Jagielski typedef std::hash_map< std::string, TimingSheet > t_TimingSheetMap;
567*b1cdbd2cSJim Jagielski
568*b1cdbd2cSJim Jagielski //--------------------------------------------------------------------------------------------------
benchmark(TimingSheet & rSheet,const Reference<XInterface> & xInstance,sal_Int64 nLoop)569*b1cdbd2cSJim Jagielski static void benchmark(
570*b1cdbd2cSJim Jagielski TimingSheet & rSheet, const Reference< XInterface > & xInstance, sal_Int64 nLoop )
571*b1cdbd2cSJim Jagielski throw (Exception)
572*b1cdbd2cSJim Jagielski {
573*b1cdbd2cSJim Jagielski Reference< XPerformanceTest > xBench( xInstance, UNO_QUERY );
574*b1cdbd2cSJim Jagielski if (! xBench.is())
575*b1cdbd2cSJim Jagielski throw RuntimeException( OUString( RTL_CONSTASCII_USTRINGPARAM("illegal test object!") ), Reference< XInterface >() );
576*b1cdbd2cSJim Jagielski
577*b1cdbd2cSJim Jagielski sal_Int64 i;
578*b1cdbd2cSJim Jagielski sal_uInt32 tStart, tEnd;
579*b1cdbd2cSJim Jagielski
580*b1cdbd2cSJim Jagielski const Type & rKnownType = ::getCppuType( (const Reference< XPerformanceTest > *)0 );
581*b1cdbd2cSJim Jagielski const Type & rUnKnownType = ::getCppuType( (const Reference< XSet > *)0 );
582*b1cdbd2cSJim Jagielski
583*b1cdbd2cSJim Jagielski ComplexTypes aDummyStruct;
584*b1cdbd2cSJim Jagielski
585*b1cdbd2cSJim Jagielski //------------------------------------
586*b1cdbd2cSJim Jagielski // oneway calls
587*b1cdbd2cSJim Jagielski i = nLoop;
588*b1cdbd2cSJim Jagielski tStart = getSystemTicks();
589*b1cdbd2cSJim Jagielski while (i--)
590*b1cdbd2cSJim Jagielski xBench->async();
591*b1cdbd2cSJim Jagielski sal_uInt32 tEndSend = getSystemTicks();
592*b1cdbd2cSJim Jagielski xBench->sync();
593*b1cdbd2cSJim Jagielski tEnd = getSystemTicks();
594*b1cdbd2cSJim Jagielski rSheet.insert( "1a: sending simple oneway calls (no params, no return)", nLoop, tEndSend - tStart );
595*b1cdbd2cSJim Jagielski rSheet.insert( "1b: simple oneway calls (no params, no return)", nLoop, tEnd - tStart );
596*b1cdbd2cSJim Jagielski // synchron calls
597*b1cdbd2cSJim Jagielski i = nLoop;
598*b1cdbd2cSJim Jagielski tStart = getSystemTicks();
599*b1cdbd2cSJim Jagielski while (i--)
600*b1cdbd2cSJim Jagielski xBench->sync();
601*b1cdbd2cSJim Jagielski xBench->sync();
602*b1cdbd2cSJim Jagielski tEnd = getSystemTicks();
603*b1cdbd2cSJim Jagielski rSheet.insert( "1c: simple synchron calls (no params no return)", nLoop+1, tEnd - tStart );
604*b1cdbd2cSJim Jagielski
605*b1cdbd2cSJim Jagielski // acquire
606*b1cdbd2cSJim Jagielski i = nLoop;
607*b1cdbd2cSJim Jagielski tStart = getSystemTicks();
608*b1cdbd2cSJim Jagielski while (i--)
609*b1cdbd2cSJim Jagielski xBench->acquire();
610*b1cdbd2cSJim Jagielski tEnd = getSystemTicks();
611*b1cdbd2cSJim Jagielski rSheet.insert( "2a: interface acquire() calls", nLoop, tEnd - tStart );
612*b1cdbd2cSJim Jagielski // release
613*b1cdbd2cSJim Jagielski i = nLoop;
614*b1cdbd2cSJim Jagielski tStart = getSystemTicks();
615*b1cdbd2cSJim Jagielski while (i--)
616*b1cdbd2cSJim Jagielski xBench->release();
617*b1cdbd2cSJim Jagielski tEnd = getSystemTicks();
618*b1cdbd2cSJim Jagielski rSheet.insert( "2b: interface release() calls", nLoop, tEnd - tStart );
619*b1cdbd2cSJim Jagielski
620*b1cdbd2cSJim Jagielski // queryInterface() for known type
621*b1cdbd2cSJim Jagielski i = nLoop;
622*b1cdbd2cSJim Jagielski tStart = getSystemTicks();
623*b1cdbd2cSJim Jagielski while (i--)
624*b1cdbd2cSJim Jagielski xBench->queryInterface( rKnownType );
625*b1cdbd2cSJim Jagielski tEnd = getSystemTicks();
626*b1cdbd2cSJim Jagielski rSheet.insert( "2c: interface query for implemented type", nLoop, tEnd - tStart );
627*b1cdbd2cSJim Jagielski // queryInterface() for unknown type
628*b1cdbd2cSJim Jagielski i = nLoop;
629*b1cdbd2cSJim Jagielski tStart = getSystemTicks();
630*b1cdbd2cSJim Jagielski while (i--)
631*b1cdbd2cSJim Jagielski xBench->queryInterface( rUnKnownType );
632*b1cdbd2cSJim Jagielski tEnd = getSystemTicks();
633*b1cdbd2cSJim Jagielski rSheet.insert( "2d: interface query for unknown type", nLoop, tEnd - tStart );
634*b1cdbd2cSJim Jagielski
635*b1cdbd2cSJim Jagielski // create and forget objects
636*b1cdbd2cSJim Jagielski Reference< XPerformanceTest > xBench2( xBench );
637*b1cdbd2cSJim Jagielski i = nLoop;
638*b1cdbd2cSJim Jagielski tStart = getSystemTicks();
639*b1cdbd2cSJim Jagielski while (i--)
640*b1cdbd2cSJim Jagielski xBench2 = xBench2->createObject();
641*b1cdbd2cSJim Jagielski tEnd = getSystemTicks();
642*b1cdbd2cSJim Jagielski rSheet.insert( "3a: create and release test objects", nLoop, tEnd - tStart );
643*b1cdbd2cSJim Jagielski
644*b1cdbd2cSJim Jagielski // hold new objects
645*b1cdbd2cSJim Jagielski Sequence< Reference< XInterface > > aSeq( nLoop / 100 );
646*b1cdbd2cSJim Jagielski Reference< XInterface > * pSeq = aSeq.getArray();
647*b1cdbd2cSJim Jagielski xBench2 = xBench;
648*b1cdbd2cSJim Jagielski i = aSeq.getLength();
649*b1cdbd2cSJim Jagielski tStart = getSystemTicks();
650*b1cdbd2cSJim Jagielski while (i--)
651*b1cdbd2cSJim Jagielski pSeq[i] = xBench2 = xBench2->createObject();
652*b1cdbd2cSJim Jagielski tEnd = getSystemTicks();
653*b1cdbd2cSJim Jagielski rSheet.insert( "3b: create and hold test objects", nLoop, tEnd - tStart );
654*b1cdbd2cSJim Jagielski
655*b1cdbd2cSJim Jagielski // structs
656*b1cdbd2cSJim Jagielski i = nLoop;
657*b1cdbd2cSJim Jagielski tStart = getSystemTicks();
658*b1cdbd2cSJim Jagielski while (i--)
659*b1cdbd2cSJim Jagielski xBench->complex_in( aDummyStruct );
660*b1cdbd2cSJim Jagielski tEnd = getSystemTicks();
661*b1cdbd2cSJim Jagielski rSheet.insert( "4a: complex_in() calls (in struct; return struct)", nLoop, tEnd - tStart );
662*b1cdbd2cSJim Jagielski i = nLoop;
663*b1cdbd2cSJim Jagielski tStart = getSystemTicks();
664*b1cdbd2cSJim Jagielski while (i--)
665*b1cdbd2cSJim Jagielski xBench->complex_inout( aDummyStruct );
666*b1cdbd2cSJim Jagielski tEnd = getSystemTicks();
667*b1cdbd2cSJim Jagielski rSheet.insert( "4b: complex_inout() calls (inout struct; return struct)", nLoop, tEnd - tStart );
668*b1cdbd2cSJim Jagielski
669*b1cdbd2cSJim Jagielski i = nLoop;
670*b1cdbd2cSJim Jagielski tStart = getSystemTicks();
671*b1cdbd2cSJim Jagielski while (i--)
672*b1cdbd2cSJim Jagielski xBench->complex_oneway( aDummyStruct );
673*b1cdbd2cSJim Jagielski tEnd = getSystemTicks();
674*b1cdbd2cSJim Jagielski rSheet.insert( "4c: complex_oneway() oneway calls (in struct)", nLoop, tEnd - tStart );
675*b1cdbd2cSJim Jagielski i = nLoop;
676*b1cdbd2cSJim Jagielski tStart = getSystemTicks();
677*b1cdbd2cSJim Jagielski while (i--)
678*b1cdbd2cSJim Jagielski xBench->complex_noreturn( aDummyStruct );
679*b1cdbd2cSJim Jagielski tEnd = getSystemTicks();
680*b1cdbd2cSJim Jagielski rSheet.insert( "4d: complex_noreturn() calls (in struct)", nLoop, tEnd - tStart );
681*b1cdbd2cSJim Jagielski
682*b1cdbd2cSJim Jagielski // attributes, get() methods
683*b1cdbd2cSJim Jagielski i = nLoop;
684*b1cdbd2cSJim Jagielski tStart = getSystemTicks();
685*b1cdbd2cSJim Jagielski while (i--)
686*b1cdbd2cSJim Jagielski xBench->getLong();
687*b1cdbd2cSJim Jagielski tEnd = getSystemTicks();
688*b1cdbd2cSJim Jagielski rSheet.insert( "5a: getLong() call", nLoop, tEnd - tStart );
689*b1cdbd2cSJim Jagielski i = nLoop;
690*b1cdbd2cSJim Jagielski tStart = getSystemTicks();
691*b1cdbd2cSJim Jagielski while (i--)
692*b1cdbd2cSJim Jagielski xBench->getLong_attr();
693*b1cdbd2cSJim Jagielski tEnd = getSystemTicks();
694*b1cdbd2cSJim Jagielski rSheet.insert( "5b: get long attribute", nLoop, tEnd - tStart );
695*b1cdbd2cSJim Jagielski
696*b1cdbd2cSJim Jagielski i = nLoop;
697*b1cdbd2cSJim Jagielski tStart = getSystemTicks();
698*b1cdbd2cSJim Jagielski while (i--)
699*b1cdbd2cSJim Jagielski xBench->setLong( 0 );
700*b1cdbd2cSJim Jagielski tEnd = getSystemTicks();
701*b1cdbd2cSJim Jagielski rSheet.insert( "5c: setLong() call", nLoop, tEnd - tStart );
702*b1cdbd2cSJim Jagielski i = nLoop;
703*b1cdbd2cSJim Jagielski tStart = getSystemTicks();
704*b1cdbd2cSJim Jagielski while (i--)
705*b1cdbd2cSJim Jagielski xBench->setLong_attr( 0 );
706*b1cdbd2cSJim Jagielski tEnd = getSystemTicks();
707*b1cdbd2cSJim Jagielski rSheet.insert( "5d: set long attribute", nLoop, tEnd - tStart );
708*b1cdbd2cSJim Jagielski
709*b1cdbd2cSJim Jagielski i = nLoop;
710*b1cdbd2cSJim Jagielski tStart = getSystemTicks();
711*b1cdbd2cSJim Jagielski while (i--)
712*b1cdbd2cSJim Jagielski xBench->getHyper();
713*b1cdbd2cSJim Jagielski tEnd = getSystemTicks();
714*b1cdbd2cSJim Jagielski rSheet.insert( "5e: getHyper() call", nLoop, tEnd - tStart );
715*b1cdbd2cSJim Jagielski i = nLoop;
716*b1cdbd2cSJim Jagielski tStart = getSystemTicks();
717*b1cdbd2cSJim Jagielski while (i--)
718*b1cdbd2cSJim Jagielski xBench->getHyper_attr();
719*b1cdbd2cSJim Jagielski tEnd = getSystemTicks();
720*b1cdbd2cSJim Jagielski rSheet.insert( "5f: get hyper attribute", nLoop, tEnd - tStart );
721*b1cdbd2cSJim Jagielski
722*b1cdbd2cSJim Jagielski i = nLoop;
723*b1cdbd2cSJim Jagielski tStart = getSystemTicks();
724*b1cdbd2cSJim Jagielski while (i--)
725*b1cdbd2cSJim Jagielski xBench->setHyper( 0 );
726*b1cdbd2cSJim Jagielski tEnd = getSystemTicks();
727*b1cdbd2cSJim Jagielski rSheet.insert( "5g: setHyper() call", nLoop, tEnd - tStart );
728*b1cdbd2cSJim Jagielski i = nLoop;
729*b1cdbd2cSJim Jagielski tStart = getSystemTicks();
730*b1cdbd2cSJim Jagielski while (i--)
731*b1cdbd2cSJim Jagielski xBench->setHyper_attr( 0 );
732*b1cdbd2cSJim Jagielski tEnd = getSystemTicks();
733*b1cdbd2cSJim Jagielski rSheet.insert( "5h: set hyper attribute", nLoop, tEnd - tStart );
734*b1cdbd2cSJim Jagielski
735*b1cdbd2cSJim Jagielski i = nLoop;
736*b1cdbd2cSJim Jagielski tStart = getSystemTicks();
737*b1cdbd2cSJim Jagielski while (i--)
738*b1cdbd2cSJim Jagielski xBench->getFloat();
739*b1cdbd2cSJim Jagielski tEnd = getSystemTicks();
740*b1cdbd2cSJim Jagielski rSheet.insert( "5i: getFloat() call", nLoop, tEnd - tStart );
741*b1cdbd2cSJim Jagielski i = nLoop;
742*b1cdbd2cSJim Jagielski tStart = getSystemTicks();
743*b1cdbd2cSJim Jagielski while (i--)
744*b1cdbd2cSJim Jagielski xBench->getFloat_attr();
745*b1cdbd2cSJim Jagielski tEnd = getSystemTicks();
746*b1cdbd2cSJim Jagielski rSheet.insert( "5j: get float attribute",nLoop, tEnd - tStart );
747*b1cdbd2cSJim Jagielski
748*b1cdbd2cSJim Jagielski i = nLoop;
749*b1cdbd2cSJim Jagielski tStart = getSystemTicks();
750*b1cdbd2cSJim Jagielski while (i--)
751*b1cdbd2cSJim Jagielski xBench->setFloat( 0.0 );
752*b1cdbd2cSJim Jagielski tEnd = getSystemTicks();
753*b1cdbd2cSJim Jagielski rSheet.insert( "5k: setFloat() call", nLoop, tEnd - tStart );
754*b1cdbd2cSJim Jagielski i = nLoop;
755*b1cdbd2cSJim Jagielski tStart = getSystemTicks();
756*b1cdbd2cSJim Jagielski while (i--)
757*b1cdbd2cSJim Jagielski xBench->setFloat_attr( 0.0 );
758*b1cdbd2cSJim Jagielski tEnd = getSystemTicks();
759*b1cdbd2cSJim Jagielski rSheet.insert( "5l: set float attribute", nLoop, tEnd - tStart );
760*b1cdbd2cSJim Jagielski
761*b1cdbd2cSJim Jagielski i = nLoop;
762*b1cdbd2cSJim Jagielski tStart = getSystemTicks();
763*b1cdbd2cSJim Jagielski while (i--)
764*b1cdbd2cSJim Jagielski xBench->getDouble();
765*b1cdbd2cSJim Jagielski tEnd = getSystemTicks();
766*b1cdbd2cSJim Jagielski rSheet.insert( "5m: getDouble() call", nLoop, tEnd - tStart );
767*b1cdbd2cSJim Jagielski i = nLoop;
768*b1cdbd2cSJim Jagielski tStart = getSystemTicks();
769*b1cdbd2cSJim Jagielski while (i--)
770*b1cdbd2cSJim Jagielski xBench->getDouble_attr();
771*b1cdbd2cSJim Jagielski tEnd = getSystemTicks();
772*b1cdbd2cSJim Jagielski rSheet.insert( "5n: get double attribute", nLoop, tEnd - tStart );
773*b1cdbd2cSJim Jagielski i = nLoop;
774*b1cdbd2cSJim Jagielski tStart = getSystemTicks();
775*b1cdbd2cSJim Jagielski while (i--)
776*b1cdbd2cSJim Jagielski xBench->setDouble( 0.0 );
777*b1cdbd2cSJim Jagielski tEnd = getSystemTicks();
778*b1cdbd2cSJim Jagielski rSheet.insert( "5o: setDouble() call", nLoop, tEnd - tStart );
779*b1cdbd2cSJim Jagielski i = nLoop;
780*b1cdbd2cSJim Jagielski tStart = getSystemTicks();
781*b1cdbd2cSJim Jagielski while (i--)
782*b1cdbd2cSJim Jagielski xBench->setDouble_attr( 0.0 );
783*b1cdbd2cSJim Jagielski tEnd = getSystemTicks();
784*b1cdbd2cSJim Jagielski rSheet.insert( "5p: set double attribute", nLoop, tEnd - tStart );
785*b1cdbd2cSJim Jagielski
786*b1cdbd2cSJim Jagielski i = nLoop;
787*b1cdbd2cSJim Jagielski tStart = getSystemTicks();
788*b1cdbd2cSJim Jagielski while (i--)
789*b1cdbd2cSJim Jagielski xBench->getString();
790*b1cdbd2cSJim Jagielski tEnd = getSystemTicks();
791*b1cdbd2cSJim Jagielski rSheet.insert( "6a: getString() call (empty)", nLoop, tEnd - tStart );
792*b1cdbd2cSJim Jagielski i = nLoop;
793*b1cdbd2cSJim Jagielski tStart = getSystemTicks();
794*b1cdbd2cSJim Jagielski while (i--)
795*b1cdbd2cSJim Jagielski xBench->getString_attr();
796*b1cdbd2cSJim Jagielski tEnd = getSystemTicks();
797*b1cdbd2cSJim Jagielski rSheet.insert( "6b: get empty string attribute", nLoop, tEnd - tStart );
798*b1cdbd2cSJim Jagielski
799*b1cdbd2cSJim Jagielski i = nLoop;
800*b1cdbd2cSJim Jagielski OUString aDummyString;
801*b1cdbd2cSJim Jagielski tStart = getSystemTicks();
802*b1cdbd2cSJim Jagielski while (i--)
803*b1cdbd2cSJim Jagielski xBench->setString( aDummyString );
804*b1cdbd2cSJim Jagielski tEnd = getSystemTicks();
805*b1cdbd2cSJim Jagielski rSheet.insert( "6c: setString() call (emtpy)", nLoop, tEnd - tStart );
806*b1cdbd2cSJim Jagielski i = nLoop;
807*b1cdbd2cSJim Jagielski tStart = getSystemTicks();
808*b1cdbd2cSJim Jagielski while (i--)
809*b1cdbd2cSJim Jagielski xBench->setString_attr( aDummyString );
810*b1cdbd2cSJim Jagielski tEnd = getSystemTicks();
811*b1cdbd2cSJim Jagielski rSheet.insert( "6d: set empty string attribute", nLoop, tEnd - tStart );
812*b1cdbd2cSJim Jagielski
813*b1cdbd2cSJim Jagielski i = nLoop;
814*b1cdbd2cSJim Jagielski tStart = getSystemTicks();
815*b1cdbd2cSJim Jagielski while (i--)
816*b1cdbd2cSJim Jagielski xBench->getInterface();
817*b1cdbd2cSJim Jagielski tEnd = getSystemTicks();
818*b1cdbd2cSJim Jagielski rSheet.insert( "7a: getInterface() call (null)", nLoop, tEnd - tStart );
819*b1cdbd2cSJim Jagielski i = nLoop;
820*b1cdbd2cSJim Jagielski tStart = getSystemTicks();
821*b1cdbd2cSJim Jagielski while (i--)
822*b1cdbd2cSJim Jagielski xBench->getInterface_attr();
823*b1cdbd2cSJim Jagielski tEnd = getSystemTicks();
824*b1cdbd2cSJim Jagielski rSheet.insert( "7b: get interface attribute", nLoop, tEnd - tStart );
825*b1cdbd2cSJim Jagielski
826*b1cdbd2cSJim Jagielski i = nLoop;
827*b1cdbd2cSJim Jagielski Reference< XInterface > aDummyInterface;
828*b1cdbd2cSJim Jagielski tStart = getSystemTicks();
829*b1cdbd2cSJim Jagielski while (i--)
830*b1cdbd2cSJim Jagielski xBench->setInterface( aDummyInterface );
831*b1cdbd2cSJim Jagielski tEnd = getSystemTicks();
832*b1cdbd2cSJim Jagielski rSheet.insert( "7c: setInterface() call (null)", nLoop, tEnd - tStart );
833*b1cdbd2cSJim Jagielski i = nLoop;
834*b1cdbd2cSJim Jagielski tStart = getSystemTicks();
835*b1cdbd2cSJim Jagielski while (i--)
836*b1cdbd2cSJim Jagielski xBench->setInterface_attr( Reference< XInterface >() );
837*b1cdbd2cSJim Jagielski tEnd = getSystemTicks();
838*b1cdbd2cSJim Jagielski rSheet.insert( "7d: set interface attribute", nLoop, tEnd - tStart );
839*b1cdbd2cSJim Jagielski
840*b1cdbd2cSJim Jagielski i = nLoop;
841*b1cdbd2cSJim Jagielski tStart = getSystemTicks();
842*b1cdbd2cSJim Jagielski while (i--)
843*b1cdbd2cSJim Jagielski xBench->getAny();
844*b1cdbd2cSJim Jagielski tEnd = getSystemTicks();
845*b1cdbd2cSJim Jagielski rSheet.insert( "8a: getAny() call (empty)", nLoop, tEnd - tStart );
846*b1cdbd2cSJim Jagielski i = nLoop;
847*b1cdbd2cSJim Jagielski tStart = getSystemTicks();
848*b1cdbd2cSJim Jagielski while (i--)
849*b1cdbd2cSJim Jagielski xBench->getAny_attr();
850*b1cdbd2cSJim Jagielski tEnd = getSystemTicks();
851*b1cdbd2cSJim Jagielski rSheet.insert( "8b: get empty any attribute", nLoop, tEnd - tStart );
852*b1cdbd2cSJim Jagielski
853*b1cdbd2cSJim Jagielski i = nLoop;
854*b1cdbd2cSJim Jagielski Any aDummyAny;
855*b1cdbd2cSJim Jagielski tStart = getSystemTicks();
856*b1cdbd2cSJim Jagielski while (i--)
857*b1cdbd2cSJim Jagielski xBench->setAny( aDummyAny );
858*b1cdbd2cSJim Jagielski tEnd = getSystemTicks();
859*b1cdbd2cSJim Jagielski rSheet.insert( "8c: setAny() call (empty)", nLoop, tEnd - tStart );
860*b1cdbd2cSJim Jagielski i = nLoop;
861*b1cdbd2cSJim Jagielski tStart = getSystemTicks();
862*b1cdbd2cSJim Jagielski while (i--)
863*b1cdbd2cSJim Jagielski xBench->setAny_attr( aDummyAny );
864*b1cdbd2cSJim Jagielski tEnd = getSystemTicks();
865*b1cdbd2cSJim Jagielski rSheet.insert( "8d: set empty any attribute", nLoop, tEnd - tStart );
866*b1cdbd2cSJim Jagielski
867*b1cdbd2cSJim Jagielski i = nLoop;
868*b1cdbd2cSJim Jagielski tStart = getSystemTicks();
869*b1cdbd2cSJim Jagielski while (i--)
870*b1cdbd2cSJim Jagielski xBench->getSequence();
871*b1cdbd2cSJim Jagielski tEnd = getSystemTicks();
872*b1cdbd2cSJim Jagielski rSheet.insert( "9a: getSequence() call (empty)", nLoop, tEnd - tStart );
873*b1cdbd2cSJim Jagielski i = nLoop;
874*b1cdbd2cSJim Jagielski tStart = getSystemTicks();
875*b1cdbd2cSJim Jagielski while (i--)
876*b1cdbd2cSJim Jagielski xBench->getSequence_attr();
877*b1cdbd2cSJim Jagielski tEnd = getSystemTicks();
878*b1cdbd2cSJim Jagielski rSheet.insert( "9b: get empty sequence attribute", nLoop, tEnd - tStart );
879*b1cdbd2cSJim Jagielski i = nLoop;
880*b1cdbd2cSJim Jagielski Sequence< Reference< XInterface > > aDummySeq;
881*b1cdbd2cSJim Jagielski tStart = getSystemTicks();
882*b1cdbd2cSJim Jagielski while (i--)
883*b1cdbd2cSJim Jagielski xBench->setSequence( aDummySeq );
884*b1cdbd2cSJim Jagielski tEnd = getSystemTicks();
885*b1cdbd2cSJim Jagielski rSheet.insert( "9c: setSequence() call (empty)", nLoop, tEnd - tStart );
886*b1cdbd2cSJim Jagielski i = nLoop;
887*b1cdbd2cSJim Jagielski tStart = getSystemTicks();
888*b1cdbd2cSJim Jagielski while (i--)
889*b1cdbd2cSJim Jagielski xBench->setSequence_attr( aDummySeq );
890*b1cdbd2cSJim Jagielski tEnd = getSystemTicks();
891*b1cdbd2cSJim Jagielski rSheet.insert( "9d: set empty sequence attribute", nLoop, tEnd - tStart );
892*b1cdbd2cSJim Jagielski
893*b1cdbd2cSJim Jagielski i = nLoop;
894*b1cdbd2cSJim Jagielski tStart = getSystemTicks();
895*b1cdbd2cSJim Jagielski while (i--)
896*b1cdbd2cSJim Jagielski xBench->getStruct();
897*b1cdbd2cSJim Jagielski tEnd = getSystemTicks();
898*b1cdbd2cSJim Jagielski rSheet.insert( "Aa: getStruct() call", nLoop, tEnd - tStart );
899*b1cdbd2cSJim Jagielski i = nLoop;
900*b1cdbd2cSJim Jagielski tStart = getSystemTicks();
901*b1cdbd2cSJim Jagielski while (i--)
902*b1cdbd2cSJim Jagielski xBench->getStruct_attr();
903*b1cdbd2cSJim Jagielski tEnd = getSystemTicks();
904*b1cdbd2cSJim Jagielski rSheet.insert( "Ab: get struct attribute", nLoop, tEnd - tStart );
905*b1cdbd2cSJim Jagielski
906*b1cdbd2cSJim Jagielski i = nLoop;
907*b1cdbd2cSJim Jagielski tStart = getSystemTicks();
908*b1cdbd2cSJim Jagielski while (i--)
909*b1cdbd2cSJim Jagielski xBench->setStruct( aDummyStruct );
910*b1cdbd2cSJim Jagielski tEnd = getSystemTicks();
911*b1cdbd2cSJim Jagielski rSheet.insert( "Ac: setStruct() call", nLoop, tEnd - tStart );
912*b1cdbd2cSJim Jagielski i = nLoop;
913*b1cdbd2cSJim Jagielski tStart = getSystemTicks();
914*b1cdbd2cSJim Jagielski while (i--)
915*b1cdbd2cSJim Jagielski xBench->setStruct_attr( aDummyStruct );
916*b1cdbd2cSJim Jagielski tEnd = getSystemTicks();
917*b1cdbd2cSJim Jagielski rSheet.insert( "Ad: set struct attribute", nLoop, tEnd - tStart );
918*b1cdbd2cSJim Jagielski
919*b1cdbd2cSJim Jagielski // load
920*b1cdbd2cSJim Jagielski // i = nLoop;
921*b1cdbd2cSJim Jagielski // tStart = getSystemTicks();
922*b1cdbd2cSJim Jagielski // while (i--)
923*b1cdbd2cSJim Jagielski // xBench->setSequence( aSeq );
924*b1cdbd2cSJim Jagielski // tEnd = getSystemTicks();
925*b1cdbd2cSJim Jagielski // rSheet.insert( "transfer of exisiting objects", nLoop, tEnd - tStart );
926*b1cdbd2cSJim Jagielski
927*b1cdbd2cSJim Jagielski // exceptions
928*b1cdbd2cSJim Jagielski i = nLoop;
929*b1cdbd2cSJim Jagielski tStart = getSystemTicks();
930*b1cdbd2cSJim Jagielski while (i--)
931*b1cdbd2cSJim Jagielski {
932*b1cdbd2cSJim Jagielski try
933*b1cdbd2cSJim Jagielski {
934*b1cdbd2cSJim Jagielski xBench->raiseRuntimeException();
935*b1cdbd2cSJim Jagielski }
936*b1cdbd2cSJim Jagielski catch (RuntimeException &)
937*b1cdbd2cSJim Jagielski {
938*b1cdbd2cSJim Jagielski }
939*b1cdbd2cSJim Jagielski }
940*b1cdbd2cSJim Jagielski tEnd = getSystemTicks();
941*b1cdbd2cSJim Jagielski rSheet.insert( "Ba: raising RuntimeException", nLoop, tEnd - tStart );
942*b1cdbd2cSJim Jagielski
943*b1cdbd2cSJim Jagielski //------------------------------------
944*b1cdbd2cSJim Jagielski }
945*b1cdbd2cSJim Jagielski
946*b1cdbd2cSJim Jagielski //--------------------------------------------------------------------------------------------------
extractParam(const Sequence<OUString> & rArgs,const OUString & rParam)947*b1cdbd2cSJim Jagielski static OUString extractParam( const Sequence< OUString > & rArgs, const OUString & rParam )
948*b1cdbd2cSJim Jagielski {
949*b1cdbd2cSJim Jagielski const OUString * pArgs = rArgs.getConstArray();
950*b1cdbd2cSJim Jagielski for ( sal_Int32 nPos = rArgs.getLength(); nPos--; )
951*b1cdbd2cSJim Jagielski {
952*b1cdbd2cSJim Jagielski if (pArgs[nPos].indexOf( rParam ) == 0 &&
953*b1cdbd2cSJim Jagielski pArgs[nPos].getLength() > (rParam.getLength()+1))
954*b1cdbd2cSJim Jagielski {
955*b1cdbd2cSJim Jagielski return pArgs[nPos].copy( rParam.getLength() +1 ); // XXX=bla
956*b1cdbd2cSJim Jagielski }
957*b1cdbd2cSJim Jagielski }
958*b1cdbd2cSJim Jagielski return OUString();
959*b1cdbd2cSJim Jagielski }
960*b1cdbd2cSJim Jagielski
961*b1cdbd2cSJim Jagielski const sal_Int32 nMagicNumberDirect = 34000;
962*b1cdbd2cSJim Jagielski
963*b1cdbd2cSJim Jagielski //XMain
964*b1cdbd2cSJim Jagielski //__________________________________________________________________________________________________
run(const Sequence<OUString> & rArgs)965*b1cdbd2cSJim Jagielski sal_Int32 TestImpl::run( const Sequence< OUString > & rArgs )
966*b1cdbd2cSJim Jagielski throw (RuntimeException)
967*b1cdbd2cSJim Jagielski {
968*b1cdbd2cSJim Jagielski // defaults
969*b1cdbd2cSJim Jagielski FILE * stream = stderr;
970*b1cdbd2cSJim Jagielski sal_Int64 nLoop = NLOOP;
971*b1cdbd2cSJim Jagielski OUString aArg( RTL_CONSTASCII_USTRINGPARAM("dms") );
972*b1cdbd2cSJim Jagielski
973*b1cdbd2cSJim Jagielski try
974*b1cdbd2cSJim Jagielski {
975*b1cdbd2cSJim Jagielski OUString aLoopStr( extractParam( rArgs, OUString( RTL_CONSTASCII_USTRINGPARAM("loop") ) ) );
976*b1cdbd2cSJim Jagielski if (aLoopStr.getLength())
977*b1cdbd2cSJim Jagielski {
978*b1cdbd2cSJim Jagielski sal_Int64 n = aLoopStr.toInt64();
979*b1cdbd2cSJim Jagielski if (n > 0)
980*b1cdbd2cSJim Jagielski nLoop = n;
981*b1cdbd2cSJim Jagielski }
982*b1cdbd2cSJim Jagielski
983*b1cdbd2cSJim Jagielski OUString aDurationStr( extractParam( rArgs , OUString( RTL_CONSTASCII_USTRINGPARAM("duration" ) ) ) );
984*b1cdbd2cSJim Jagielski if( aDurationStr.getLength() )
985*b1cdbd2cSJim Jagielski {
986*b1cdbd2cSJim Jagielski sal_Int64 n = aDurationStr.toInt64();
987*b1cdbd2cSJim Jagielski if( n >0 )
988*b1cdbd2cSJim Jagielski nLoop = nMagicNumberDirect * n;
989*b1cdbd2cSJim Jagielski }
990*b1cdbd2cSJim Jagielski
991*b1cdbd2cSJim Jagielski OUString aLogStr( extractParam( rArgs, OUString( RTL_CONSTASCII_USTRINGPARAM("log") ) ) );
992*b1cdbd2cSJim Jagielski if (aLogStr.getLength())
993*b1cdbd2cSJim Jagielski {
994*b1cdbd2cSJim Jagielski if (aLogStr.compareToAscii( "stderr" ) == 0)
995*b1cdbd2cSJim Jagielski {
996*b1cdbd2cSJim Jagielski stream = stderr;
997*b1cdbd2cSJim Jagielski }
998*b1cdbd2cSJim Jagielski else if (aLogStr.compareToAscii( "stdout" ) == 0)
999*b1cdbd2cSJim Jagielski {
1000*b1cdbd2cSJim Jagielski stream = stdout;
1001*b1cdbd2cSJim Jagielski }
1002*b1cdbd2cSJim Jagielski else
1003*b1cdbd2cSJim Jagielski {
1004*b1cdbd2cSJim Jagielski OString aFileName( OUStringToOString( aLogStr, RTL_TEXTENCODING_ASCII_US ) );
1005*b1cdbd2cSJim Jagielski stream = ::fopen( aFileName.getStr(), "w" );
1006*b1cdbd2cSJim Jagielski if (! stream)
1007*b1cdbd2cSJim Jagielski {
1008*b1cdbd2cSJim Jagielski OUStringBuffer buf( 32 );
1009*b1cdbd2cSJim Jagielski buf.appendAscii( RTL_CONSTASCII_STRINGPARAM("cannot open file for writing: \"") );
1010*b1cdbd2cSJim Jagielski buf.append( aLogStr );
1011*b1cdbd2cSJim Jagielski buf.appendAscii( RTL_CONSTASCII_STRINGPARAM("\"!") );
1012*b1cdbd2cSJim Jagielski throw RuntimeException( buf.makeStringAndClear(), Reference< XInterface >() );
1013*b1cdbd2cSJim Jagielski }
1014*b1cdbd2cSJim Jagielski }
1015*b1cdbd2cSJim Jagielski }
1016*b1cdbd2cSJim Jagielski
1017*b1cdbd2cSJim Jagielski OUString aArgStr( extractParam( rArgs, OUString( RTL_CONSTASCII_USTRINGPARAM("opt") ) ) );
1018*b1cdbd2cSJim Jagielski if (aArgStr.getLength())
1019*b1cdbd2cSJim Jagielski {
1020*b1cdbd2cSJim Jagielski aArg = aArgStr;
1021*b1cdbd2cSJim Jagielski }
1022*b1cdbd2cSJim Jagielski
1023*b1cdbd2cSJim Jagielski if (! rArgs.getLength())
1024*b1cdbd2cSJim Jagielski out( "\n> no options given, using defaults" );
1025*b1cdbd2cSJim Jagielski
1026*b1cdbd2cSJim Jagielski // params
1027*b1cdbd2cSJim Jagielski out( "\n> opt=" );
1028*b1cdbd2cSJim Jagielski out( aArg );
1029*b1cdbd2cSJim Jagielski out( " log=" );
1030*b1cdbd2cSJim Jagielski if (stream == stderr)
1031*b1cdbd2cSJim Jagielski out( "stderr" );
1032*b1cdbd2cSJim Jagielski else if (stream == stderr)
1033*b1cdbd2cSJim Jagielski out( "stdout loop=" );
1034*b1cdbd2cSJim Jagielski else
1035*b1cdbd2cSJim Jagielski out( aLogStr );
1036*b1cdbd2cSJim Jagielski out( " loop=" );
1037*b1cdbd2cSJim Jagielski out( nLoop );
1038*b1cdbd2cSJim Jagielski out( "\n" );
1039*b1cdbd2cSJim Jagielski t_TimingSheetMap aSheets;
1040*b1cdbd2cSJim Jagielski TimingSheet aDirect;
1041*b1cdbd2cSJim Jagielski
1042*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------------------
1043*b1cdbd2cSJim Jagielski
1044*b1cdbd2cSJim Jagielski if (aArg.indexOf( 'd' ) >= 0)
1045*b1cdbd2cSJim Jagielski {
1046*b1cdbd2cSJim Jagielski // in process direct test
1047*b1cdbd2cSJim Jagielski sal_uInt32 nStart = getSystemTicks();
1048*b1cdbd2cSJim Jagielski benchmark( aDirect, getDirect(), nLoop );
1049*b1cdbd2cSJim Jagielski sal_uInt32 nEnd = getSystemTicks();
1050*b1cdbd2cSJim Jagielski fprintf( stderr, "Duration (direct in process): %g s\n", (nEnd - nStart)/1000. );
1051*b1cdbd2cSJim Jagielski }
1052*b1cdbd2cSJim Jagielski
1053*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------------------
1054*b1cdbd2cSJim Jagielski
1055*b1cdbd2cSJim Jagielski if (aArg.indexOf( 'm' ) >= 0)
1056*b1cdbd2cSJim Jagielski {
1057*b1cdbd2cSJim Jagielski // in process uno dispatch
1058*b1cdbd2cSJim Jagielski Environment aCppEnv, aAnoCppEnv;
1059*b1cdbd2cSJim Jagielski OUString aCurrentLanguageBindingName( RTL_CONSTASCII_USTRINGPARAM(CPPU_CURRENT_LANGUAGE_BINDING_NAME) );
1060*b1cdbd2cSJim Jagielski uno_getEnvironment( reinterpret_cast< uno_Environment ** >( &aCppEnv ),
1061*b1cdbd2cSJim Jagielski aCurrentLanguageBindingName.pData, 0 );
1062*b1cdbd2cSJim Jagielski // anonymous
1063*b1cdbd2cSJim Jagielski uno_createEnvironment( reinterpret_cast< uno_Environment ** >( &aAnoCppEnv ),
1064*b1cdbd2cSJim Jagielski aCurrentLanguageBindingName.pData, 0 );
1065*b1cdbd2cSJim Jagielski
1066*b1cdbd2cSJim Jagielski // pseudo mapping uno<->uno: does nothing!
1067*b1cdbd2cSJim Jagielski Mapping aMapping( aCppEnv.get(), aAnoCppEnv.get(), OUString( RTL_CONSTASCII_USTRINGPARAM("pseudo") ) );
1068*b1cdbd2cSJim Jagielski if (! aMapping.is())
1069*b1cdbd2cSJim Jagielski throw RuntimeException( OUString( RTL_CONSTASCII_USTRINGPARAM("no pseudo mapping available!") ), Reference< XInterface >() );
1070*b1cdbd2cSJim Jagielski
1071*b1cdbd2cSJim Jagielski Reference< XInterface > xMapped;
1072*b1cdbd2cSJim Jagielski Reference< XInterface > xDirect( getDirect() );
1073*b1cdbd2cSJim Jagielski aMapping.mapInterface( reinterpret_cast< void ** >( &xMapped ), xDirect.get(),
1074*b1cdbd2cSJim Jagielski ::getCppuType( &xDirect ) );
1075*b1cdbd2cSJim Jagielski if (! xMapped.is())
1076*b1cdbd2cSJim Jagielski throw RuntimeException( OUString( RTL_CONSTASCII_USTRINGPARAM("mapping object failed!") ), Reference< XInterface >() );
1077*b1cdbd2cSJim Jagielski
1078*b1cdbd2cSJim Jagielski sal_uInt32 nStart = getSystemTicks();
1079*b1cdbd2cSJim Jagielski benchmark( aSheets[ "mapped in process" ], xMapped, nLoop / 100 );
1080*b1cdbd2cSJim Jagielski sal_uInt32 nEnd = getSystemTicks();
1081*b1cdbd2cSJim Jagielski fprintf( stderr, "Duration (mapped in process): %g s\n", (nStart - nEnd)/1000. );
1082*b1cdbd2cSJim Jagielski }
1083*b1cdbd2cSJim Jagielski
1084*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------------------
1085*b1cdbd2cSJim Jagielski
1086*b1cdbd2cSJim Jagielski if (aArg.indexOf( 's' ) >= 0)
1087*b1cdbd2cSJim Jagielski {
1088*b1cdbd2cSJim Jagielski // start server process
1089*b1cdbd2cSJim Jagielski oslSecurity hSecurity = osl_getCurrentSecurity();
1090*b1cdbd2cSJim Jagielski if (! hSecurity)
1091*b1cdbd2cSJim Jagielski throw RuntimeException( OUString( RTL_CONSTASCII_USTRINGPARAM("cannot get current security handle!") ), Reference< XInterface >() );
1092*b1cdbd2cSJim Jagielski
1093*b1cdbd2cSJim Jagielski OUString aArgs[] = {
1094*b1cdbd2cSJim Jagielski OUString( RTL_CONSTASCII_USTRINGPARAM("-c") ),
1095*b1cdbd2cSJim Jagielski OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.comp.performance.PerformanceTestObject") ),
1096*b1cdbd2cSJim Jagielski OUString( RTL_CONSTASCII_USTRINGPARAM("-l") ),
1097*b1cdbd2cSJim Jagielski #ifdef SAL_UNX
1098*b1cdbd2cSJim Jagielski OUString( RTL_CONSTASCII_USTRINGPARAM("libperfobj.so") ),
1099*b1cdbd2cSJim Jagielski #else
1100*b1cdbd2cSJim Jagielski OUString( RTL_CONSTASCII_USTRINGPARAM("perfobj.dll") ),
1101*b1cdbd2cSJim Jagielski #endif
1102*b1cdbd2cSJim Jagielski OUString( RTL_CONSTASCII_USTRINGPARAM("-r") ),
1103*b1cdbd2cSJim Jagielski OUString( RTL_CONSTASCII_USTRINGPARAM("applicat.rdb") ),
1104*b1cdbd2cSJim Jagielski OUString( RTL_CONSTASCII_USTRINGPARAM("-u") ),
1105*b1cdbd2cSJim Jagielski OUString( RTL_CONSTASCII_USTRINGPARAM("uno:socket,host=localhost,port=6000;iiop;TestRemoteObject") ),
1106*b1cdbd2cSJim Jagielski OUString( RTL_CONSTASCII_USTRINGPARAM("--singleaccept") )
1107*b1cdbd2cSJim Jagielski };
1108*b1cdbd2cSJim Jagielski rtl_uString * pArgs[] = {
1109*b1cdbd2cSJim Jagielski aArgs[0].pData,
1110*b1cdbd2cSJim Jagielski aArgs[1].pData,
1111*b1cdbd2cSJim Jagielski aArgs[2].pData,
1112*b1cdbd2cSJim Jagielski aArgs[3].pData,
1113*b1cdbd2cSJim Jagielski aArgs[4].pData,
1114*b1cdbd2cSJim Jagielski aArgs[5].pData,
1115*b1cdbd2cSJim Jagielski aArgs[6].pData,
1116*b1cdbd2cSJim Jagielski aArgs[7].pData,
1117*b1cdbd2cSJim Jagielski aArgs[8].pData,
1118*b1cdbd2cSJim Jagielski aArgs[9].pData,
1119*b1cdbd2cSJim Jagielski };
1120*b1cdbd2cSJim Jagielski
1121*b1cdbd2cSJim Jagielski out( "\n> executing: \"uno" );
1122*b1cdbd2cSJim Jagielski for ( sal_Int32 nPos = 0; nPos < (sizeof(aArgs) / sizeof(OUString)); ++nPos )
1123*b1cdbd2cSJim Jagielski {
1124*b1cdbd2cSJim Jagielski out( " " );
1125*b1cdbd2cSJim Jagielski out( aArgs[nPos] );
1126*b1cdbd2cSJim Jagielski }
1127*b1cdbd2cSJim Jagielski out( "\" ..." );
1128*b1cdbd2cSJim Jagielski
1129*b1cdbd2cSJim Jagielski oslProcess hProcess = 0;
1130*b1cdbd2cSJim Jagielski OUString aUnoExe( RTL_CONSTASCII_USTRINGPARAM("uno") );
1131*b1cdbd2cSJim Jagielski OUString aWorkingDir( RTL_CONSTASCII_USTRINGPARAM(".") );
1132*b1cdbd2cSJim Jagielski osl_executeProcess(
1133*b1cdbd2cSJim Jagielski aUnoExe.pData, pArgs, sizeof(aArgs) / sizeof(OUString),
1134*b1cdbd2cSJim Jagielski osl_Process_SEARCHPATH | osl_Process_DETACHED | osl_Process_NORMAL,
1135*b1cdbd2cSJim Jagielski hSecurity, aWorkingDir.pData, 0, 0, &hProcess );
1136*b1cdbd2cSJim Jagielski
1137*b1cdbd2cSJim Jagielski osl_freeSecurityHandle( hSecurity );
1138*b1cdbd2cSJim Jagielski if (! hProcess)
1139*b1cdbd2cSJim Jagielski throw RuntimeException( OUString( RTL_CONSTASCII_USTRINGPARAM("cannot start server process!") ), Reference< XInterface >() );
1140*b1cdbd2cSJim Jagielski osl_freeProcessHandle( hProcess );
1141*b1cdbd2cSJim Jagielski
1142*b1cdbd2cSJim Jagielski // wait three seconds
1143*b1cdbd2cSJim Jagielski TimeValue threeSeconds;
1144*b1cdbd2cSJim Jagielski threeSeconds.Seconds = 3;
1145*b1cdbd2cSJim Jagielski osl_waitThread( &threeSeconds );
1146*b1cdbd2cSJim Jagielski
1147*b1cdbd2cSJim Jagielski // connect and resolve outer process object
1148*b1cdbd2cSJim Jagielski Reference< XInterface > xResolvedObject( resolveObject( OUString(
1149*b1cdbd2cSJim Jagielski RTL_CONSTASCII_USTRINGPARAM("uno:socket,host=localhost,port=6000;iiop;TestRemoteObject") ) ) );
1150*b1cdbd2cSJim Jagielski
1151*b1cdbd2cSJim Jagielski benchmark( aSheets[ "remote same host" ], xResolvedObject, nLoop / 300 );
1152*b1cdbd2cSJim Jagielski }
1153*b1cdbd2cSJim Jagielski
1154*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------------------
1155*b1cdbd2cSJim Jagielski
1156*b1cdbd2cSJim Jagielski if (aArg.indexOf( 'r' ) >= 0)
1157*b1cdbd2cSJim Jagielski {
1158*b1cdbd2cSJim Jagielski // remote
1159*b1cdbd2cSJim Jagielski OUString aUnoUrl( extractParam( rArgs, OUString( RTL_CONSTASCII_USTRINGPARAM("url") ) ) );
1160*b1cdbd2cSJim Jagielski if (! aUnoUrl.getLength())
1161*b1cdbd2cSJim Jagielski throw RuntimeException( OUString( RTL_CONSTASCII_USTRINGPARAM("performance test r(emote) needs additional uno url!") ), Reference< XInterface >() );
1162*b1cdbd2cSJim Jagielski
1163*b1cdbd2cSJim Jagielski // connect and resolve outer process object
1164*b1cdbd2cSJim Jagielski Reference< XInterface > xResolvedObject( resolveObject( aUnoUrl ) );
1165*b1cdbd2cSJim Jagielski
1166*b1cdbd2cSJim Jagielski sal_Int32 t1 = getSystemTicks();
1167*b1cdbd2cSJim Jagielski OString o = OUStringToOString( aUnoUrl, RTL_TEXTENCODING_ASCII_US );
1168*b1cdbd2cSJim Jagielski benchmark( aSheets[ o.getStr() ], xResolvedObject, nLoop / 900 );
1169*b1cdbd2cSJim Jagielski sal_Int32 t2 = getSystemTicks();
1170*b1cdbd2cSJim Jagielski fprintf( stderr, "Duration (%s): %g s\n", o.getStr(),(t2 - t1)/1000. );
1171*b1cdbd2cSJim Jagielski }
1172*b1cdbd2cSJim Jagielski
1173*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------------------
1174*b1cdbd2cSJim Jagielski
1175*b1cdbd2cSJim Jagielski if (aArg.indexOf( 'j' ) >= 0)
1176*b1cdbd2cSJim Jagielski {
1177*b1cdbd2cSJim Jagielski // java
1178*b1cdbd2cSJim Jagielski benchmark( aSheets[ "java in process" ],
1179*b1cdbd2cSJim Jagielski _xSMgr->createInstance(OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.comp.benchmark.JavaTestObject"))),
1180*b1cdbd2cSJim Jagielski nLoop / 1000 );
1181*b1cdbd2cSJim Jagielski }
1182*b1cdbd2cSJim Jagielski
1183*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------------------
1184*b1cdbd2cSJim Jagielski // dump out tables
1185*b1cdbd2cSJim Jagielski
1186*b1cdbd2cSJim Jagielski out( "\nTimes( ratio to direct in process )", stream );
1187*b1cdbd2cSJim Jagielski #if OSL_DEBUG_LEVEL > 1
1188*b1cdbd2cSJim Jagielski out ("; compiled with OSL_DEBUG_LEVEL > 1", stream );
1189*b1cdbd2cSJim Jagielski #endif
1190*b1cdbd2cSJim Jagielski out( ":", stream );
1191*b1cdbd2cSJim Jagielski
1192*b1cdbd2cSJim Jagielski sal_Int32 nPos = 60;
1193*b1cdbd2cSJim Jagielski out( "[direct in process]", stream, nPos );
1194*b1cdbd2cSJim Jagielski t_TimingSheetMap::const_iterator iSheets( aSheets.begin() );
1195*b1cdbd2cSJim Jagielski for ( ; iSheets != aSheets.end(); ++iSheets )
1196*b1cdbd2cSJim Jagielski {
1197*b1cdbd2cSJim Jagielski nPos += 40;
1198*b1cdbd2cSJim Jagielski out( "[", stream, nPos );
1199*b1cdbd2cSJim Jagielski out( (*iSheets).first.c_str(), stream );
1200*b1cdbd2cSJim Jagielski out( "]", stream );
1201*b1cdbd2cSJim Jagielski }
1202*b1cdbd2cSJim Jagielski for ( t_TimeEntryMap::const_iterator iTopics( aDirect._entries.begin() );
1203*b1cdbd2cSJim Jagielski iTopics != aDirect._entries.end(); ++iTopics )
1204*b1cdbd2cSJim Jagielski {
1205*b1cdbd2cSJim Jagielski const std::string & rTopic = (*iTopics).first;
1206*b1cdbd2cSJim Jagielski
1207*b1cdbd2cSJim Jagielski out( "\n", stream );
1208*b1cdbd2cSJim Jagielski out( rTopic.c_str(), stream );
1209*b1cdbd2cSJim Jagielski
1210*b1cdbd2cSJim Jagielski out( ":", stream, 58, '.' );
1211*b1cdbd2cSJim Jagielski
1212*b1cdbd2cSJim Jagielski sal_Int32 nPos = 60;
1213*b1cdbd2cSJim Jagielski
1214*b1cdbd2cSJim Jagielski double secs = (*iTopics).second.secPerCall();
1215*b1cdbd2cSJim Jagielski if (secs > 0.0)
1216*b1cdbd2cSJim Jagielski {
1217*b1cdbd2cSJim Jagielski out( secs * 1000, stream, nPos );
1218*b1cdbd2cSJim Jagielski out( "ms", stream );
1219*b1cdbd2cSJim Jagielski }
1220*b1cdbd2cSJim Jagielski else
1221*b1cdbd2cSJim Jagielski {
1222*b1cdbd2cSJim Jagielski out( "NA", stream, nPos );
1223*b1cdbd2cSJim Jagielski }
1224*b1cdbd2cSJim Jagielski
1225*b1cdbd2cSJim Jagielski iSheets = aSheets.begin();
1226*b1cdbd2cSJim Jagielski for ( ; iSheets != aSheets.end(); ++iSheets )
1227*b1cdbd2cSJim Jagielski {
1228*b1cdbd2cSJim Jagielski const t_TimeEntryMap::const_iterator iFind( (*iSheets).second._entries.find( rTopic ) );
1229*b1cdbd2cSJim Jagielski OSL_ENSURE( iFind != (*iSheets).second._entries.end(), "####" );
1230*b1cdbd2cSJim Jagielski
1231*b1cdbd2cSJim Jagielski nPos += 40;
1232*b1cdbd2cSJim Jagielski
1233*b1cdbd2cSJim Jagielski double secs = (*iFind).second.secPerCall();
1234*b1cdbd2cSJim Jagielski if (secs != 0.0)
1235*b1cdbd2cSJim Jagielski {
1236*b1cdbd2cSJim Jagielski out( secs * 1000, stream, nPos );
1237*b1cdbd2cSJim Jagielski out( "ms", stream );
1238*b1cdbd2cSJim Jagielski
1239*b1cdbd2cSJim Jagielski out( " (", stream );
1240*b1cdbd2cSJim Jagielski double ratio = (*iFind).second.ratio( (*iTopics).second );
1241*b1cdbd2cSJim Jagielski if (ratio != 0.0)
1242*b1cdbd2cSJim Jagielski {
1243*b1cdbd2cSJim Jagielski out( ratio, stream );
1244*b1cdbd2cSJim Jagielski out( " x)", stream );
1245*b1cdbd2cSJim Jagielski }
1246*b1cdbd2cSJim Jagielski else
1247*b1cdbd2cSJim Jagielski {
1248*b1cdbd2cSJim Jagielski out( "NA)", stream );
1249*b1cdbd2cSJim Jagielski }
1250*b1cdbd2cSJim Jagielski }
1251*b1cdbd2cSJim Jagielski else
1252*b1cdbd2cSJim Jagielski {
1253*b1cdbd2cSJim Jagielski out( "NA", stream, nPos );
1254*b1cdbd2cSJim Jagielski }
1255*b1cdbd2cSJim Jagielski }
1256*b1cdbd2cSJim Jagielski }
1257*b1cdbd2cSJim Jagielski }
1258*b1cdbd2cSJim Jagielski catch (Exception & rExc)
1259*b1cdbd2cSJim Jagielski {
1260*b1cdbd2cSJim Jagielski if (stream != stderr && stream != stdout)
1261*b1cdbd2cSJim Jagielski ::fclose( stream );
1262*b1cdbd2cSJim Jagielski throw RuntimeException( rExc.Message, rExc.Context );
1263*b1cdbd2cSJim Jagielski }
1264*b1cdbd2cSJim Jagielski
1265*b1cdbd2cSJim Jagielski if (stream != stderr && stream != stdout)
1266*b1cdbd2cSJim Jagielski ::fclose( stream );
1267*b1cdbd2cSJim Jagielski
1268*b1cdbd2cSJim Jagielski out( "\n> done.\n" );
1269*b1cdbd2cSJim Jagielski return 0;
1270*b1cdbd2cSJim Jagielski }
1271*b1cdbd2cSJim Jagielski
1272*b1cdbd2cSJim Jagielski }
1273*b1cdbd2cSJim Jagielski
1274*b1cdbd2cSJim Jagielski
1275*b1cdbd2cSJim Jagielski //##################################################################################################
1276*b1cdbd2cSJim Jagielski //##################################################################################################
1277*b1cdbd2cSJim Jagielski //##################################################################################################
1278*b1cdbd2cSJim Jagielski
1279*b1cdbd2cSJim Jagielski
1280*b1cdbd2cSJim Jagielski extern "C"
1281*b1cdbd2cSJim Jagielski {
1282*b1cdbd2cSJim Jagielski //==================================================================================================
component_getImplementationEnvironment(const sal_Char ** ppEnvTypeName,uno_Environment ** ppEnv)1283*b1cdbd2cSJim Jagielski void SAL_CALL component_getImplementationEnvironment(
1284*b1cdbd2cSJim Jagielski const sal_Char ** ppEnvTypeName, uno_Environment ** ppEnv )
1285*b1cdbd2cSJim Jagielski {
1286*b1cdbd2cSJim Jagielski *ppEnvTypeName = CPPU_CURRENT_LANGUAGE_BINDING_NAME;
1287*b1cdbd2cSJim Jagielski }
1288*b1cdbd2cSJim Jagielski //==================================================================================================
component_writeInfo(void * pServiceManager,void * pRegistryKey)1289*b1cdbd2cSJim Jagielski sal_Bool SAL_CALL component_writeInfo(
1290*b1cdbd2cSJim Jagielski void * pServiceManager, void * pRegistryKey )
1291*b1cdbd2cSJim Jagielski {
1292*b1cdbd2cSJim Jagielski if (pRegistryKey)
1293*b1cdbd2cSJim Jagielski {
1294*b1cdbd2cSJim Jagielski try
1295*b1cdbd2cSJim Jagielski {
1296*b1cdbd2cSJim Jagielski Reference< XRegistryKey > xNewKey(
1297*b1cdbd2cSJim Jagielski reinterpret_cast< XRegistryKey * >( pRegistryKey )->createKey(
1298*b1cdbd2cSJim Jagielski OUString( RTL_CONSTASCII_USTRINGPARAM("/" IMPLNAME "/UNO/SERVICES") ) ) );
1299*b1cdbd2cSJim Jagielski xNewKey->createKey( OUString( RTL_CONSTASCII_USTRINGPARAM(SERVICENAME) ) );
1300*b1cdbd2cSJim Jagielski
1301*b1cdbd2cSJim Jagielski return sal_True;
1302*b1cdbd2cSJim Jagielski }
1303*b1cdbd2cSJim Jagielski catch (InvalidRegistryException &)
1304*b1cdbd2cSJim Jagielski {
1305*b1cdbd2cSJim Jagielski OSL_ENSURE( sal_False, "### InvalidRegistryException!" );
1306*b1cdbd2cSJim Jagielski }
1307*b1cdbd2cSJim Jagielski }
1308*b1cdbd2cSJim Jagielski return sal_False;
1309*b1cdbd2cSJim Jagielski }
1310*b1cdbd2cSJim Jagielski //==================================================================================================
component_getFactory(const sal_Char * pImplName,void * pServiceManager,void * pRegistryKey)1311*b1cdbd2cSJim Jagielski void * SAL_CALL component_getFactory(
1312*b1cdbd2cSJim Jagielski const sal_Char * pImplName, void * pServiceManager, void * pRegistryKey )
1313*b1cdbd2cSJim Jagielski {
1314*b1cdbd2cSJim Jagielski void * pRet = 0;
1315*b1cdbd2cSJim Jagielski
1316*b1cdbd2cSJim Jagielski if (pServiceManager && rtl_str_compare( pImplName, IMPLNAME ) == 0)
1317*b1cdbd2cSJim Jagielski {
1318*b1cdbd2cSJim Jagielski Reference< XSingleServiceFactory > xFactory( createSingleFactory(
1319*b1cdbd2cSJim Jagielski reinterpret_cast< XMultiServiceFactory * >( pServiceManager ),
1320*b1cdbd2cSJim Jagielski OUString( RTL_CONSTASCII_USTRINGPARAM(IMPLNAME) ),
1321*b1cdbd2cSJim Jagielski benchmark_test::TestImpl_create,
1322*b1cdbd2cSJim Jagielski benchmark_test::getSupportedServiceNames() ) );
1323*b1cdbd2cSJim Jagielski
1324*b1cdbd2cSJim Jagielski if (xFactory.is())
1325*b1cdbd2cSJim Jagielski {
1326*b1cdbd2cSJim Jagielski xFactory->acquire();
1327*b1cdbd2cSJim Jagielski pRet = xFactory.get();
1328*b1cdbd2cSJim Jagielski }
1329*b1cdbd2cSJim Jagielski }
1330*b1cdbd2cSJim Jagielski
1331*b1cdbd2cSJim Jagielski return pRet;
1332*b1cdbd2cSJim Jagielski }
1333*b1cdbd2cSJim Jagielski }
1334