xref: /trunk/main/testtools/source/performance/ubobject.cxx (revision d48fe8487b35dbcb65150b3b6c4d21d39e83cf4c)
1*d48fe848SAndrew Rist /**************************************************************
2cdf0e10cSrcweir  *
3*d48fe848SAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
4*d48fe848SAndrew Rist  * or more contributor license agreements.  See the NOTICE file
5*d48fe848SAndrew Rist  * distributed with this work for additional information
6*d48fe848SAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
7*d48fe848SAndrew Rist  * to you under the Apache License, Version 2.0 (the
8*d48fe848SAndrew Rist  * "License"); you may not use this file except in compliance
9*d48fe848SAndrew Rist  * with the License.  You may obtain a copy of the License at
10cdf0e10cSrcweir  *
11*d48fe848SAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12cdf0e10cSrcweir  *
13*d48fe848SAndrew Rist  * Unless required by applicable law or agreed to in writing,
14*d48fe848SAndrew Rist  * software distributed under the License is distributed on an
15*d48fe848SAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*d48fe848SAndrew Rist  * KIND, either express or implied.  See the License for the
17*d48fe848SAndrew Rist  * specific language governing permissions and limitations
18*d48fe848SAndrew Rist  * under the License.
19cdf0e10cSrcweir  *
20*d48fe848SAndrew Rist  *************************************************************/
21*d48fe848SAndrew Rist 
22*d48fe848SAndrew Rist 
23cdf0e10cSrcweir 
24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
25cdf0e10cSrcweir #include "precompiled_testtools.hxx"
26cdf0e10cSrcweir 
27cdf0e10cSrcweir #include <osl/diagnose.h>
28cdf0e10cSrcweir #include <osl/interlck.h>
29cdf0e10cSrcweir 
30cdf0e10cSrcweir #include <cppuhelper/factory.hxx>
31cdf0e10cSrcweir 
32cdf0e10cSrcweir #include <com/sun/star/lang/XServiceInfo.hpp>
33cdf0e10cSrcweir #include <com/sun/star/lang/XComponent.hpp>
34cdf0e10cSrcweir #include <com/sun/star/registry/XRegistryKey.hpp>
35cdf0e10cSrcweir 
36cdf0e10cSrcweir #include <com/sun/star/test/performance/XPerformanceTest.hpp>
37cdf0e10cSrcweir 
38cdf0e10cSrcweir using namespace rtl;
39cdf0e10cSrcweir using namespace osl;
40cdf0e10cSrcweir using namespace cppu;
41cdf0e10cSrcweir using namespace com::sun::star::uno;
42cdf0e10cSrcweir using namespace com::sun::star::lang;
43cdf0e10cSrcweir using namespace com::sun::star::registry;
44cdf0e10cSrcweir using namespace com::sun::star::test::performance;
45cdf0e10cSrcweir 
46cdf0e10cSrcweir #define SERVICENAME     "com.sun.star.test.performance.PerformanceTestObject"
47cdf0e10cSrcweir #define IMPLNAME        "com.sun.star.comp.performance.PerformanceTestObject"
48cdf0e10cSrcweir 
49cdf0e10cSrcweir namespace benchmark_object
50cdf0e10cSrcweir {
51cdf0e10cSrcweir 
52cdf0e10cSrcweir //--------------------------------------------------------------------------------------------------
53cdf0e10cSrcweir inline static Sequence< OUString > getSupportedServiceNames()
54cdf0e10cSrcweir {
55cdf0e10cSrcweir     OUString aName( RTL_CONSTASCII_USTRINGPARAM(SERVICENAME) );
56cdf0e10cSrcweir     return Sequence< OUString >( &aName, 1 );
57cdf0e10cSrcweir }
58cdf0e10cSrcweir 
59cdf0e10cSrcweir //==================================================================================================
60cdf0e10cSrcweir class ServiceImpl
61cdf0e10cSrcweir     : public XServiceInfo
62cdf0e10cSrcweir     , public XPerformanceTest
63cdf0e10cSrcweir {
64cdf0e10cSrcweir     OUString _aDummyString;
65cdf0e10cSrcweir     Any _aDummyAny;
66cdf0e10cSrcweir     Sequence< Reference< XInterface > > _aDummySequence;
67cdf0e10cSrcweir     ComplexTypes _aDummyStruct;
68cdf0e10cSrcweir     RuntimeException _aDummyRE;
69cdf0e10cSrcweir 
70cdf0e10cSrcweir     sal_Int32 _nRef;
71cdf0e10cSrcweir 
72cdf0e10cSrcweir public:
73cdf0e10cSrcweir     ServiceImpl()
74cdf0e10cSrcweir         : _nRef( 0 )
75cdf0e10cSrcweir         {}
76cdf0e10cSrcweir     ServiceImpl( const Reference< XMultiServiceFactory > & xMgr )
77cdf0e10cSrcweir         : _nRef( 0 )
78cdf0e10cSrcweir         {}
79cdf0e10cSrcweir 
80cdf0e10cSrcweir     // XInterface
81cdf0e10cSrcweir     virtual ::com::sun::star::uno::Any SAL_CALL queryInterface( const ::com::sun::star::uno::Type& aType ) throw(::com::sun::star::uno::RuntimeException)
82cdf0e10cSrcweir     {
83cdf0e10cSrcweir         // execution time remains appr. constant any time
84cdf0e10cSrcweir         Any aRet;
85cdf0e10cSrcweir         if (aType == ::getCppuType( (const Reference< XInterface > *)0 ))
86cdf0e10cSrcweir         {
87cdf0e10cSrcweir             void * p = (XInterface *)(XPerformanceTest *)this;
88cdf0e10cSrcweir             aRet.setValue( &p, ::getCppuType( (const Reference< XInterface > *)0 ) );
89cdf0e10cSrcweir         }
90cdf0e10cSrcweir         if (aType == ::getCppuType( (const Reference< XPerformanceTest > *)0 ))
91cdf0e10cSrcweir         {
92cdf0e10cSrcweir             void * p = (XPerformanceTest *)this;
93cdf0e10cSrcweir             aRet.setValue( &p, ::getCppuType( (const Reference< XPerformanceTest > *)0 ) );
94cdf0e10cSrcweir         }
95cdf0e10cSrcweir         if (! aRet.hasValue())
96cdf0e10cSrcweir         {
97cdf0e10cSrcweir             void * p = (XPerformanceTest *)this;
98cdf0e10cSrcweir             Any aDummy( &p, ::getCppuType( (const Reference< XPerformanceTest > *)0 ) );
99cdf0e10cSrcweir         }
100cdf0e10cSrcweir         return aRet;
101cdf0e10cSrcweir     }
102cdf0e10cSrcweir     virtual void SAL_CALL acquire() throw()
103cdf0e10cSrcweir         { osl_incrementInterlockedCount( &_nRef ); }
104cdf0e10cSrcweir     virtual void SAL_CALL release() throw()
105cdf0e10cSrcweir         { if (! osl_decrementInterlockedCount( &_nRef )) delete this; }
106cdf0e10cSrcweir 
107cdf0e10cSrcweir     // XServiceInfo
108cdf0e10cSrcweir     virtual OUString SAL_CALL getImplementationName() throw (RuntimeException);
109cdf0e10cSrcweir     virtual sal_Bool SAL_CALL supportsService( const OUString & rServiceName ) throw (RuntimeException);
110cdf0e10cSrcweir     virtual Sequence< OUString > SAL_CALL getSupportedServiceNames() throw (RuntimeException);
111cdf0e10cSrcweir 
112cdf0e10cSrcweir     // Attributes
113cdf0e10cSrcweir     virtual sal_Int32 SAL_CALL getLong_attr() throw(::com::sun::star::uno::RuntimeException)
114cdf0e10cSrcweir         { return 0; }
115cdf0e10cSrcweir     virtual void SAL_CALL setLong_attr( sal_Int32 _attributelong ) throw(::com::sun::star::uno::RuntimeException)
116cdf0e10cSrcweir         {}
117cdf0e10cSrcweir     virtual sal_Int64 SAL_CALL getHyper_attr() throw(::com::sun::star::uno::RuntimeException)
118cdf0e10cSrcweir         { return 0; }
119cdf0e10cSrcweir     virtual void SAL_CALL setHyper_attr( sal_Int64 _attributehyper ) throw(::com::sun::star::uno::RuntimeException)
120cdf0e10cSrcweir         {}
121cdf0e10cSrcweir     virtual float SAL_CALL getFloat_attr() throw(::com::sun::star::uno::RuntimeException)
122cdf0e10cSrcweir         { return 0.0; }
123cdf0e10cSrcweir     virtual void SAL_CALL setFloat_attr( float _attributefloat ) throw(::com::sun::star::uno::RuntimeException)
124cdf0e10cSrcweir         {}
125cdf0e10cSrcweir     virtual double SAL_CALL getDouble_attr() throw(::com::sun::star::uno::RuntimeException)
126cdf0e10cSrcweir         { return 0.0; }
127cdf0e10cSrcweir     virtual void SAL_CALL setDouble_attr( double _attributedouble ) throw(::com::sun::star::uno::RuntimeException)
128cdf0e10cSrcweir         {}
129cdf0e10cSrcweir     virtual OUString SAL_CALL getString_attr() throw(::com::sun::star::uno::RuntimeException)
130cdf0e10cSrcweir         { return _aDummyString; }
131cdf0e10cSrcweir     virtual void SAL_CALL setString_attr( const ::rtl::OUString& _attributestring ) throw(::com::sun::star::uno::RuntimeException)
132cdf0e10cSrcweir         {}
133cdf0e10cSrcweir     virtual Reference< XInterface > SAL_CALL getInterface_attr() throw(::com::sun::star::uno::RuntimeException)
134cdf0e10cSrcweir         { return Reference< XInterface >(); }
135cdf0e10cSrcweir     virtual void SAL_CALL setInterface_attr( const Reference< XInterface >& _attributeinterface ) throw(::com::sun::star::uno::RuntimeException)
136cdf0e10cSrcweir         {}
137cdf0e10cSrcweir     virtual Any SAL_CALL getAny_attr() throw(::com::sun::star::uno::RuntimeException)
138cdf0e10cSrcweir         { return _aDummyAny; }
139cdf0e10cSrcweir     virtual void SAL_CALL setAny_attr( const Any& _attributeany ) throw(::com::sun::star::uno::RuntimeException)
140cdf0e10cSrcweir         {}
141cdf0e10cSrcweir     virtual Sequence< Reference< XInterface > > SAL_CALL getSequence_attr() throw(::com::sun::star::uno::RuntimeException)
142cdf0e10cSrcweir         { return _aDummySequence; }
143cdf0e10cSrcweir     virtual void SAL_CALL setSequence_attr( const Sequence< Reference< XInterface > >& _attributesequence ) throw(::com::sun::star::uno::RuntimeException)
144cdf0e10cSrcweir         {}
145cdf0e10cSrcweir     virtual ComplexTypes SAL_CALL getStruct_attr() throw(::com::sun::star::uno::RuntimeException)
146cdf0e10cSrcweir         { return _aDummyStruct; }
147cdf0e10cSrcweir     virtual void SAL_CALL setStruct_attr( const ::com::sun::star::test::performance::ComplexTypes& _attributestruct ) throw(::com::sun::star::uno::RuntimeException)
148cdf0e10cSrcweir         {}
149cdf0e10cSrcweir 
150cdf0e10cSrcweir     // Methods
151cdf0e10cSrcweir     virtual sal_Int32 SAL_CALL getLong() throw(::com::sun::star::uno::RuntimeException)
152cdf0e10cSrcweir         { return 0; }
153cdf0e10cSrcweir     virtual void SAL_CALL setLong( sal_Int32 _long ) throw(::com::sun::star::uno::RuntimeException)
154cdf0e10cSrcweir         {}
155cdf0e10cSrcweir     virtual sal_Int64 SAL_CALL getHyper() throw(::com::sun::star::uno::RuntimeException)
156cdf0e10cSrcweir         { return 0; }
157cdf0e10cSrcweir     virtual void SAL_CALL setHyper( sal_Int64 _hyper ) throw(::com::sun::star::uno::RuntimeException)
158cdf0e10cSrcweir         {}
159cdf0e10cSrcweir     virtual float SAL_CALL getFloat() throw(::com::sun::star::uno::RuntimeException)
160cdf0e10cSrcweir         { return 0; }
161cdf0e10cSrcweir     virtual void SAL_CALL setFloat( float _float ) throw(::com::sun::star::uno::RuntimeException)
162cdf0e10cSrcweir         {}
163cdf0e10cSrcweir     virtual double SAL_CALL getDouble() throw(::com::sun::star::uno::RuntimeException)
164cdf0e10cSrcweir         { return 0; }
165cdf0e10cSrcweir     virtual void SAL_CALL setDouble( double _double ) throw(::com::sun::star::uno::RuntimeException)
166cdf0e10cSrcweir         {}
167cdf0e10cSrcweir     virtual OUString SAL_CALL getString() throw(::com::sun::star::uno::RuntimeException)
168cdf0e10cSrcweir         { return _aDummyString; }
169cdf0e10cSrcweir     virtual void SAL_CALL setString( const ::rtl::OUString& _string ) throw(::com::sun::star::uno::RuntimeException)
170cdf0e10cSrcweir         {}
171cdf0e10cSrcweir     virtual Reference< XInterface > SAL_CALL getInterface() throw(::com::sun::star::uno::RuntimeException)
172cdf0e10cSrcweir         { return Reference< XInterface >(); }
173cdf0e10cSrcweir     virtual void SAL_CALL setInterface( const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& _interface ) throw(::com::sun::star::uno::RuntimeException)
174cdf0e10cSrcweir         {}
175cdf0e10cSrcweir     virtual Any SAL_CALL getAny() throw(::com::sun::star::uno::RuntimeException)
176cdf0e10cSrcweir         { return _aDummyAny; }
177cdf0e10cSrcweir     virtual void SAL_CALL setAny( const ::com::sun::star::uno::Any& _any ) throw(::com::sun::star::uno::RuntimeException)
178cdf0e10cSrcweir         {}
179cdf0e10cSrcweir     virtual Sequence< Reference< XInterface > > SAL_CALL getSequence() throw(::com::sun::star::uno::RuntimeException)
180cdf0e10cSrcweir         { return _aDummySequence; }
181cdf0e10cSrcweir     virtual void SAL_CALL setSequence( const Sequence< Reference< XInterface > >& _sequence ) throw(::com::sun::star::uno::RuntimeException)
182cdf0e10cSrcweir         {}
183cdf0e10cSrcweir     virtual ComplexTypes SAL_CALL getStruct() throw(::com::sun::star::uno::RuntimeException)
184cdf0e10cSrcweir         { return _aDummyStruct; }
185cdf0e10cSrcweir     virtual void SAL_CALL setStruct( const ::com::sun::star::test::performance::ComplexTypes& c ) throw(::com::sun::star::uno::RuntimeException)
186cdf0e10cSrcweir         {}
187cdf0e10cSrcweir 
188cdf0e10cSrcweir     virtual void SAL_CALL async() throw(::com::sun::star::uno::RuntimeException)
189cdf0e10cSrcweir         {}
190cdf0e10cSrcweir     virtual void SAL_CALL sync() throw(::com::sun::star::uno::RuntimeException)
191cdf0e10cSrcweir         {}
192cdf0e10cSrcweir     virtual ComplexTypes SAL_CALL complex_in( const ::com::sun::star::test::performance::ComplexTypes& aVal ) throw(::com::sun::star::uno::RuntimeException)
193cdf0e10cSrcweir         { return aVal; }
194cdf0e10cSrcweir     virtual ComplexTypes SAL_CALL complex_inout( ::com::sun::star::test::performance::ComplexTypes& aVal ) throw(::com::sun::star::uno::RuntimeException)
195cdf0e10cSrcweir         { return aVal; }
196cdf0e10cSrcweir     virtual void SAL_CALL complex_oneway( const ::com::sun::star::test::performance::ComplexTypes& aVal ) throw(::com::sun::star::uno::RuntimeException)
197cdf0e10cSrcweir         {}
198cdf0e10cSrcweir     virtual void SAL_CALL complex_noreturn( const ::com::sun::star::test::performance::ComplexTypes& aVal ) throw(::com::sun::star::uno::RuntimeException)
199cdf0e10cSrcweir         {}
200cdf0e10cSrcweir     virtual Reference< XPerformanceTest > SAL_CALL createObject() throw(::com::sun::star::uno::RuntimeException)
201cdf0e10cSrcweir         { return new ServiceImpl(); }
202cdf0e10cSrcweir     virtual void SAL_CALL raiseRuntimeException(  ) throw(::com::sun::star::uno::RuntimeException)
203cdf0e10cSrcweir         { throw _aDummyRE; }
204cdf0e10cSrcweir };
205cdf0e10cSrcweir 
206cdf0e10cSrcweir //##################################################################################################
207cdf0e10cSrcweir 
208cdf0e10cSrcweir // XServiceInfo
209cdf0e10cSrcweir //__________________________________________________________________________________________________
210cdf0e10cSrcweir OUString ServiceImpl::getImplementationName()
211cdf0e10cSrcweir     throw (RuntimeException)
212cdf0e10cSrcweir {
213cdf0e10cSrcweir     return OUString( RTL_CONSTASCII_USTRINGPARAM(IMPLNAME) );
214cdf0e10cSrcweir }
215cdf0e10cSrcweir //__________________________________________________________________________________________________
216cdf0e10cSrcweir sal_Bool ServiceImpl::supportsService( const OUString & rServiceName )
217cdf0e10cSrcweir     throw (RuntimeException)
218cdf0e10cSrcweir {
219cdf0e10cSrcweir     const Sequence< OUString > & rSNL = getSupportedServiceNames();
220cdf0e10cSrcweir     const OUString * pArray = rSNL.getConstArray();
221cdf0e10cSrcweir     for ( sal_Int32 nPos = rSNL.getLength(); nPos--; )
222cdf0e10cSrcweir     {
223cdf0e10cSrcweir         if (pArray[nPos] == rServiceName)
224cdf0e10cSrcweir             return sal_True;
225cdf0e10cSrcweir     }
226cdf0e10cSrcweir     return sal_False;
227cdf0e10cSrcweir }
228cdf0e10cSrcweir //__________________________________________________________________________________________________
229cdf0e10cSrcweir Sequence< OUString > ServiceImpl::getSupportedServiceNames()
230cdf0e10cSrcweir     throw (RuntimeException)
231cdf0e10cSrcweir {
232cdf0e10cSrcweir     return benchmark_object::getSupportedServiceNames();
233cdf0e10cSrcweir }
234cdf0e10cSrcweir 
235cdf0e10cSrcweir // ...
236cdf0e10cSrcweir 
237cdf0e10cSrcweir //==================================================================================================
238cdf0e10cSrcweir static Reference< XInterface > SAL_CALL ServiceImpl_create( const Reference< XMultiServiceFactory > & xSMgr )
239cdf0e10cSrcweir {
240cdf0e10cSrcweir     return Reference< XInterface >( (XPerformanceTest *)new ServiceImpl( xSMgr ) );
241cdf0e10cSrcweir }
242cdf0e10cSrcweir 
243cdf0e10cSrcweir }
244cdf0e10cSrcweir 
245cdf0e10cSrcweir 
246cdf0e10cSrcweir //##################################################################################################
247cdf0e10cSrcweir //##################################################################################################
248cdf0e10cSrcweir //##################################################################################################
249cdf0e10cSrcweir 
250cdf0e10cSrcweir 
251cdf0e10cSrcweir extern "C"
252cdf0e10cSrcweir {
253cdf0e10cSrcweir //==================================================================================================
254cdf0e10cSrcweir void SAL_CALL component_getImplementationEnvironment(
255cdf0e10cSrcweir     const sal_Char ** ppEnvTypeName, uno_Environment ** ppEnv )
256cdf0e10cSrcweir {
257cdf0e10cSrcweir     *ppEnvTypeName = CPPU_CURRENT_LANGUAGE_BINDING_NAME;
258cdf0e10cSrcweir }
259cdf0e10cSrcweir //==================================================================================================
260cdf0e10cSrcweir sal_Bool SAL_CALL component_writeInfo(
261cdf0e10cSrcweir     void * pServiceManager, void * pRegistryKey )
262cdf0e10cSrcweir {
263cdf0e10cSrcweir     if (pRegistryKey)
264cdf0e10cSrcweir     {
265cdf0e10cSrcweir         try
266cdf0e10cSrcweir         {
267cdf0e10cSrcweir             Reference< XRegistryKey > xNewKey(
268cdf0e10cSrcweir                 reinterpret_cast< XRegistryKey * >( pRegistryKey )->createKey(
269cdf0e10cSrcweir                     OUString( RTL_CONSTASCII_USTRINGPARAM("/" IMPLNAME "/UNO/SERVICES") ) ) );
270cdf0e10cSrcweir             xNewKey->createKey( OUString( RTL_CONSTASCII_USTRINGPARAM(SERVICENAME) ) );
271cdf0e10cSrcweir 
272cdf0e10cSrcweir             return sal_True;
273cdf0e10cSrcweir         }
274cdf0e10cSrcweir         catch (InvalidRegistryException &)
275cdf0e10cSrcweir         {
276cdf0e10cSrcweir             OSL_ENSURE( sal_False, "### InvalidRegistryException!" );
277cdf0e10cSrcweir         }
278cdf0e10cSrcweir     }
279cdf0e10cSrcweir     return sal_False;
280cdf0e10cSrcweir }
281cdf0e10cSrcweir //==================================================================================================
282cdf0e10cSrcweir void * SAL_CALL component_getFactory(
283cdf0e10cSrcweir     const sal_Char * pImplName, void * pServiceManager, void * pRegistryKey )
284cdf0e10cSrcweir {
285cdf0e10cSrcweir     void * pRet = 0;
286cdf0e10cSrcweir 
287cdf0e10cSrcweir     if (pServiceManager && rtl_str_compare( pImplName, IMPLNAME ) == 0)
288cdf0e10cSrcweir     {
289cdf0e10cSrcweir         Reference< XSingleServiceFactory > xFactory( createSingleFactory(
290cdf0e10cSrcweir             reinterpret_cast< XMultiServiceFactory * >( pServiceManager ),
291cdf0e10cSrcweir             OUString( RTL_CONSTASCII_USTRINGPARAM(IMPLNAME) ),
292cdf0e10cSrcweir             benchmark_object::ServiceImpl_create,
293cdf0e10cSrcweir             benchmark_object::getSupportedServiceNames() ) );
294cdf0e10cSrcweir 
295cdf0e10cSrcweir         if (xFactory.is())
296cdf0e10cSrcweir         {
297cdf0e10cSrcweir             xFactory->acquire();
298cdf0e10cSrcweir             pRet = xFactory.get();
299cdf0e10cSrcweir         }
300cdf0e10cSrcweir     }
301cdf0e10cSrcweir 
302cdf0e10cSrcweir     return pRet;
303cdf0e10cSrcweir }
304cdf0e10cSrcweir }
305