diff options
Diffstat (limited to 'TAO/orbsvcs/tests/Notify/performance-tests/Filter/Structured_Supplier.cpp')
-rw-r--r-- | TAO/orbsvcs/tests/Notify/performance-tests/Filter/Structured_Supplier.cpp | 248 |
1 files changed, 135 insertions, 113 deletions
diff --git a/TAO/orbsvcs/tests/Notify/performance-tests/Filter/Structured_Supplier.cpp b/TAO/orbsvcs/tests/Notify/performance-tests/Filter/Structured_Supplier.cpp index c3cc5ac0f4a..348166d0e44 100644 --- a/TAO/orbsvcs/tests/Notify/performance-tests/Filter/Structured_Supplier.cpp +++ b/TAO/orbsvcs/tests/Notify/performance-tests/Filter/Structured_Supplier.cpp @@ -5,6 +5,7 @@ // ****************************************************************** #include "ace/Get_Opt.h" +#include "ace/Auto_Ptr.h" #include "tao/ORB_Core.h" @@ -21,29 +22,53 @@ // ****************************************************************** static TAO_Notify_Tests_StructuredPushSupplier* supplier_1 = 0; -static CORBA::Boolean done = 0; -static CORBA::Boolean start = 0; static int max_events = 1000; static const char* ior_output_file = "supplier.ior"; // ****************************************************************** // Subroutine Section // ****************************************************************** - class sig_i : public POA_sig { public: + sig_i(CORBA::ORB_ptr orb) + : orb_(orb) + , started_(false) + { + } + void go (ACE_ENV_SINGLE_ARG_DECL) - ACE_THROW_SPEC ((CORBA::SystemException)); -}; + ACE_THROW_SPEC ((CORBA::SystemException)) + { + started_ = true; + } + void done (ACE_ENV_SINGLE_ARG_DECL) + ACE_THROW_SPEC ((CORBA::SystemException)) + { + started_ = false; + } -void -sig_i::go (ACE_ENV_SINGLE_ARG_DECL_NOT_USED /*ACE_ENV_SINGLE_ARG_PARAMETER*/) - ACE_THROW_SPEC ((CORBA::SystemException)) -{ - start = 1; -} + void wait_for_startup() + { + while (! started_) { + ACE_Time_Value tv(0, 100 * 1000); // 100ms + orb_->run(tv); + } + } + + void wait_for_completion() + { + while (started_) { + ACE_Time_Value tv(0, 100 * 1000); // 100ms + orb_->run(tv); + } + } + +private: + CORBA::ORB_ptr orb_; + bool started_; +}; class Supplier_Client : public Notify_Test_Client @@ -61,23 +86,23 @@ Supplier_Client::parse_args (int argc, char *argv[]) while ((c = get_opts ()) != -1) switch (c) - { - case 'e': - max_events = ACE_OS::atoi(get_opts.optarg); - break; - - case 'o': - ior_output_file = get_opts.optarg; - break; - - default: - ACE_ERROR_RETURN ((LM_ERROR, - "usage: %s " - "-o <iorfile> -e <# of events>" - "\n", - argv [0]), - -1); - } + { + case 'e': + max_events = ACE_OS::atoi(get_opts.optarg); + break; + + case 'o': + ior_output_file = get_opts.optarg; + break; + + default: + ACE_ERROR_RETURN ((LM_ERROR, + "usage: %s " + "-o <iorfile> -e <# of events>" + "\n", + argv [0]), + -1); + } // Indicates sucessful parsing of the command line return 0; @@ -91,8 +116,8 @@ create_supplieradmin (CosNotifyChannelAdmin::EventChannel_ptr ec CosNotifyChannelAdmin::AdminID adminid = 0; CosNotifyChannelAdmin::SupplierAdmin_var admin = ec->new_for_suppliers (CosNotifyChannelAdmin::AND_OP, - adminid - ACE_ENV_ARG_PARAMETER); + adminid + ACE_ENV_ARG_PARAMETER); ACE_CHECK_RETURN (0); @@ -101,45 +126,33 @@ create_supplieradmin (CosNotifyChannelAdmin::EventChannel_ptr ec static void -SendEvent (void) +SendEvent (int id ACE_ENV_ARG_DECL) { - if (start) - { - static int count = 0; - static const char* types[] = { "odd", "even" }; - CosNotification::StructuredEvent event; + const char* type = ( (id & 1) == 1 ? "odd" : "even" ); + CosNotification::StructuredEvent event; - event.header.fixed_header.event_type.domain_name = - CORBA::string_dup("Orbix 2000 Demos"); - event.header.fixed_header.event_type.type_name = - CORBA::string_dup("Sequence Notification Push Demo Event"); + event.header.fixed_header.event_type.domain_name = + CORBA::string_dup("Orbix 2000 Demos"); + event.header.fixed_header.event_type.type_name = + CORBA::string_dup("Sequence Notification Push Demo Event"); - event.header.fixed_header.event_name = CORBA::string_dup("test event"); + event.header.fixed_header.event_name = CORBA::string_dup("test event"); - event.filterable_data.length (1); - event.filterable_data[0].name = CORBA::string_dup("type"); - event.filterable_data[0].value <<= ((count & 1) == 1 ? - types[0] : types[1]); - count++; + event.filterable_data.length (1); + event.filterable_data[0].name = CORBA::string_dup("type"); + event.filterable_data[0].value <<= type; - if (count >= max_events) - { - done = 1; - } - - ACE_TRY_NEW_ENV - { - supplier_1->send_event(event ACE_ENV_ARG_PARAMETER); - ACE_TRY_CHECK; - } - ACE_CATCH (CORBA::Exception, e) - { - ACE_PRINT_EXCEPTION (e, - "Supplier exception: "); - } - ACE_ENDTRY; + ACE_TRY_NEW_ENV + { + supplier_1->send_event(event ACE_ENV_ARG_PARAMETER); + ACE_TRY_CHECK; + } + ACE_CATCH (CORBA::Exception, e) + { + ACE_PRINT_EXCEPTION (e, "Error: Supplier exception: "); } + ACE_ENDTRY; } static void @@ -149,8 +162,8 @@ create_suppliers (CosNotifyChannelAdmin::SupplierAdmin_ptr admin, { // startup the first supplier ACE_NEW_THROW_EX (supplier_1, - TAO_Notify_Tests_StructuredPushSupplier (), - CORBA::NO_MEMORY ()); + TAO_Notify_Tests_StructuredPushSupplier (), + CORBA::NO_MEMORY ()); supplier_1->init (poa ACE_ENV_ARG_PARAMETER); ACE_CHECK; @@ -166,67 +179,76 @@ create_suppliers (CosNotifyChannelAdmin::SupplierAdmin_ptr admin, int main (int argc, char* argv[]) { + ACE_Auto_Ptr< sig_i > sig_impl; int status = 0; ACE_TRY_NEW_ENV + { + Supplier_Client client; + status = client.init (argc, argv ACE_ENV_ARG_PARAMETER); + ACE_TRY_CHECK; + + if (status == 0) { - Supplier_Client client; - status = client.init (argc, argv ACE_ENV_ARG_PARAMETER); + CosNotifyChannelAdmin::EventChannel_var ec = + client.create_event_channel ("MyEventChannel", 0 + ACE_ENV_ARG_PARAMETER); ACE_TRY_CHECK; - if (status == 0) + CORBA::ORB_ptr orb = client.orb (); + + sig_impl.reset( new sig_i( orb ) ); + sig_var sig = sig_impl->_this (ACE_ENV_SINGLE_ARG_PARAMETER); + ACE_TRY_CHECK; + + CORBA::String_var ior = + orb->object_to_string (sig.in () ACE_ENV_ARG_PARAMETER); + ACE_TRY_CHECK; + + // If the ior_output_file exists, output the ior to it + if (ior_output_file != 0) + { + FILE *output_file= ACE_OS::fopen (ior_output_file, "w"); + if (output_file == 0) + ACE_ERROR_RETURN ((LM_ERROR, + "Cannot open output file for " + "writing IOR: %s", + ior_output_file), + 1); + ACE_OS::fprintf (output_file, "%s", ior.in ()); + ACE_OS::fclose (output_file); + } + + CosNotifyChannelAdmin::SupplierAdmin_var admin = + create_supplieradmin (ec.in () ACE_ENV_ARG_PARAMETER); + if (!CORBA::is_nil (admin.in ())) + { + create_suppliers(admin.in (), client.root_poa () ACE_ENV_ARG_PARAMETER); + ACE_TRY_CHECK; + + sig_impl->wait_for_startup(); + + ACE_DEBUG((LM_DEBUG, "1 supplier sending %d events...\n", max_events)); + for (int i = 0; i < max_events; ++i) { - CosNotifyChannelAdmin::EventChannel_var ec = - client.create_event_channel ("MyEventChannel", 0 - ACE_ENV_ARG_PARAMETER); + SendEvent (i ACE_ENV_ARG_PARAMETER); ACE_TRY_CHECK; + } + ACE_DEBUG((LM_DEBUG, "\nSupplier sent %d events.\n", max_events)); - sig_i sig_impl; - sig_var sig = sig_impl._this (ACE_ENV_SINGLE_ARG_PARAMETER); - ACE_TRY_CHECK; + sig_impl->wait_for_completion(); - CORBA::ORB_ptr orb = client.orb (); - CORBA::String_var ior = - orb->object_to_string (sig.in () ACE_ENV_ARG_PARAMETER); - ACE_TRY_CHECK; + ACE_OS::unlink (ior_output_file); - // If the ior_output_file exists, output the ior to it - if (ior_output_file != 0) - { - FILE *output_file= ACE_OS::fopen (ior_output_file, "w"); - if (output_file == 0) - ACE_ERROR_RETURN ((LM_ERROR, - "Cannot open output file for " - "writing IOR: %s", - ior_output_file), - 1); - ACE_OS::fprintf (output_file, "%s", ior.in ()); - ACE_OS::fclose (output_file); - } - - CosNotifyChannelAdmin::SupplierAdmin_var admin = - create_supplieradmin (ec.in () ACE_ENV_ARG_PARAMETER); - if (!CORBA::is_nil (admin.in ())) - { - create_suppliers(admin.in (), client.root_poa () ACE_ENV_ARG_PARAMETER); - ACE_TRY_CHECK; - - while (!done) - { - SendEvent (); - if (orb->work_pending ()) - { - orb->perform_work (); - } - } - } - } + ec->destroy(ACE_ENV_SINGLE_ARG_PARAMETER); + ACE_TRY_CHECK; + } } + } ACE_CATCH (CORBA::Exception, e) - { - ACE_PRINT_EXCEPTION (e, - "Supplier exception: "); - status = 1; - } + { + ACE_PRINT_EXCEPTION (e, "Error: Supplier exception: "); + status = 1; + } ACE_ENDTRY; return status; |