diff options
Diffstat (limited to 'ACE/performance-tests/Synch-Benchmarks/Synch_Lib/Benchmark_Base.cpp')
-rw-r--r-- | ACE/performance-tests/Synch-Benchmarks/Synch_Lib/Benchmark_Base.cpp | 95 |
1 files changed, 95 insertions, 0 deletions
diff --git a/ACE/performance-tests/Synch-Benchmarks/Synch_Lib/Benchmark_Base.cpp b/ACE/performance-tests/Synch-Benchmarks/Synch_Lib/Benchmark_Base.cpp new file mode 100644 index 00000000000..48c2ec20cd0 --- /dev/null +++ b/ACE/performance-tests/Synch-Benchmarks/Synch_Lib/Benchmark_Base.cpp @@ -0,0 +1,95 @@ +// $Id$ + +#if !defined (SYNCHLIB_BUILD_DLL) +#define SYNCHLIB_BUILD_DLL +#endif /* SYNCHLIB_BUILD_DLL */ + +#include "ace/Log_Msg.h" +#include "Benchmark_Base.h" + +ACE_RCSID(Synch_Benchmarks, Benchmark_Base, "$Id$") + +#if defined (ACE_HAS_THREADS) + +// Initialize the static variables. +/* static */ + +Benchmark_Base::Benchmark_Base (int type) + : benchmark_type_ (type) +{ +} + +int +Benchmark_Base::benchmark_type (void) +{ + return this->benchmark_type_; +} + +int +Benchmark_Base::thr_id (void) +{ +#if defined (ACE_HAS_PTHREADS) || defined (ACE_HAS_DCETHREADS) || defined (VXWORKS) + // This invokes the thread-specific storage smart pointer. + return this->id_->thr_id (); +#else + return ACE_Thread::self (); +#endif /* ACE_HAS_PTHREADS || ACE_HAS_DCETHREADS || VXWORKS */ +} + +Benchmark_Method_Base::Benchmark_Method_Base (void) + : Benchmark_Base (Benchmark_Base::METHOD) +{ +} + +int +Benchmark_Method_Base::exec (ACE_Service_Repository_Iterator *sri) +{ + sri->advance (); + for (const ACE_Service_Type *sr; + sri->next (sr) != 0; + sri->advance ()) + { + // This would greatly benefit from RTTI typesafe downcasting... + const ACE_Service_Type_Impl *type = sr->type (); + const void *obj = type->object (); + ACE_Service_Object *so = (ACE_Service_Object *) obj; + Benchmark_Base *bp = (Benchmark_Base *) so; + + if (this->valid_test_object (bp)) + { + + ACE_DEBUG ((LM_DEBUG, "\nstarting up %s\n", sr->name ())); + + int notused = this->pre_run_test (bp) == 0 && this->run_test () == 0 && + this->post_run_test () == 0; + notused = notused; + } + else + return 0; + } + return 0; +} + +#if defined (ACE_HAS_PTHREADS) || defined (ACE_HAS_DCETHREADS) || defined (VXWORKS) +/* static */ +MT_INT Thr_ID::thread_id_ (0); + +Thr_ID::Thr_ID (void) + : thr_id_ (++Thr_ID::thread_id_) +{ +} + +int +Thr_ID::thr_id (void) +{ + return this->thr_id_; +} + +void +Thr_ID::thr_id (int i) +{ + this->thr_id_ = i; +} + +#endif /* ACE_HAS_PTHREADS || ACE_HAS_DCETHREADS || VXWORKS */ +#endif /* ACE_HAS_THREADS */ |