summaryrefslogtreecommitdiff
path: root/modules/CIAO/performance-tests/Protocols/Receiver/Receiver_exec.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'modules/CIAO/performance-tests/Protocols/Receiver/Receiver_exec.cpp')
-rw-r--r--modules/CIAO/performance-tests/Protocols/Receiver/Receiver_exec.cpp318
1 files changed, 318 insertions, 0 deletions
diff --git a/modules/CIAO/performance-tests/Protocols/Receiver/Receiver_exec.cpp b/modules/CIAO/performance-tests/Protocols/Receiver/Receiver_exec.cpp
new file mode 100644
index 00000000000..4ca39d6f56d
--- /dev/null
+++ b/modules/CIAO/performance-tests/Protocols/Receiver/Receiver_exec.cpp
@@ -0,0 +1,318 @@
+// $Id$
+
+#include "Receiver_exec.h"
+#include "ace/Stats.h"
+#include "tao/debug.h"
+
+static int do_dump_history = 0;
+static int print_missed_invocations = 0;
+static ACE_UINT32 gsf = 0;
+
+namespace CIDL_ReceiverImpl
+{
+ test_i::test_i (void)
+ : inter_arrival_times_ (0),
+ iterations_ (0),
+ session_id_ (-1)
+ {
+ gsf = ACE_High_Res_Timer::global_scale_factor ();
+ }
+
+ void
+ test_i::start_test (CORBA::Long session_id,
+ const char *protocol,
+ CORBA::ULong invocation_rate,
+ CORBA::ULong message_size,
+ CORBA::ULong iterations)
+ throw (CORBA::SystemException)
+ {
+ if (TAO_debug_level > 0)
+ {
+ ACE_DEBUG ((LM_DEBUG,
+ "Session id starts %d\n",
+ session_id));
+
+ }
+
+ ACE_DEBUG ((LM_DEBUG,
+ "Protocol = %5s Invocation Rate = %3d Message Size = %5d Expected Latency = %4d ",
+ protocol,
+ invocation_rate,
+ message_size,
+ 1000 / invocation_rate));
+
+ // Remember test parameters.
+ this->session_id_ = session_id;
+ this->iterations_ = iterations;
+ this->number_of_invocations_received_ = 0;
+
+ //
+ // Initialize counters and tables.
+ //
+ this->inter_arrival_times_ =
+ new ACE_Sample_History (iterations);
+
+ this->first_invocation_ = 1;
+
+ this->invocations_received_.size (iterations);
+ for (CORBA::ULong i = 0;
+ i < iterations;
+ ++i)
+ this->invocations_received_[i] = 0;
+
+ // Record start time.
+ this->test_start_ =
+ ACE_OS::gethrtime ();
+ }
+
+ void
+ test_i::end_test (void)
+ throw (CORBA::SystemException)
+ {
+ // Record end time.
+ this->test_end_ =
+ ACE_OS::gethrtime ();
+
+ if (do_dump_history)
+ {
+ this->inter_arrival_times_->dump_samples ("Inter-arrival times", gsf);
+ }
+
+ ACE_Basic_Stats stats;
+ this->inter_arrival_times_->collect_basic_stats (stats);
+
+ ACE_DEBUG ((LM_DEBUG,
+ "Max Latency = %6d ",
+ stats.max_ / gsf / 1000));
+
+ ACE_DEBUG ((LM_DEBUG,
+ "Invocations expected / received / missed / missed %% = %6d / %6d / %6d / %5.2f\n",
+ this->iterations_,
+ this->number_of_invocations_received_,
+ this->iterations_ - this->number_of_invocations_received_,
+ (this->iterations_ - this->number_of_invocations_received_) / (double) this->iterations_ * 100));
+
+ if (print_missed_invocations)
+ {
+ ACE_DEBUG ((LM_DEBUG, "\nFollowing invocations were never received:\n"));
+
+ for (CORBA::ULong i = 0;
+ i < this->iterations_;
+ ++i)
+ {
+ if (this->invocations_received_[i] == 0)
+ {
+ ACE_DEBUG ((LM_DEBUG,
+ "%d ",
+ i));
+ }
+ }
+
+ ACE_DEBUG ((LM_DEBUG, "\n"));
+ }
+
+ if (TAO_debug_level > 0)
+ {
+ ACE_DEBUG ((LM_DEBUG,
+ "Session id ends %d\n",
+ this->session_id_));
+
+ stats.dump_results ("Inter-arrival times", gsf);
+
+ ACE_Throughput_Stats::dump_throughput ("Inter-arrival times", gsf,
+ this->test_end_ - this->test_start_,
+ stats.samples_count ());
+ }
+
+ this->session_id_ = -1;
+
+ delete this->inter_arrival_times_;
+ }
+
+ void
+ test_i::oneway_sync (void)
+ throw (CORBA::SystemException)
+ {
+ }
+
+ void
+ test_i::twoway_sync (void)
+ throw (CORBA::SystemException)
+ {
+ }
+
+ void
+ test_i::oneway_method (CORBA::Long session_id,
+ CORBA::ULong iteration,
+ const Protocols::test::octets &payload)
+ throw (CORBA::SystemException)
+ {
+ if (this->session_id_ != session_id)
+ {
+ ACE_DEBUG ((LM_DEBUG,
+ "Late message with iteration id = %d: will not count message\n",
+ iteration));
+ return;
+ }
+
+ if (TAO_debug_level > 0)
+ {
+ ACE_DEBUG ((LM_DEBUG,
+ "test_i::oneway_method -> session id = %d iteration = %d payload size = %d\n",
+ session_id,
+ iteration,
+ payload.length ()));
+ }
+
+ this->invocations_received_[iteration] = 1;
+ ++this->number_of_invocations_received_;
+
+ ACE_hrtime_t time_of_current_call =
+ ACE_OS::gethrtime ();
+
+ if (this->first_invocation_)
+ this->first_invocation_ = 0;
+ else
+ this->inter_arrival_times_->sample (time_of_current_call - this->time_of_last_call_);
+
+ this->time_of_last_call_ = time_of_current_call;
+ }
+
+ void
+ test_i::twoway_method (CORBA::Long &session_id,
+ CORBA::ULong &iteration,
+ Protocols::test::octets &payload)
+ throw (CORBA::SystemException)
+ {
+ if (this->session_id_ != session_id)
+ {
+ ACE_DEBUG ((LM_DEBUG,
+ "Late message with iteration id = %d: will not count message\n",
+ iteration));
+ return;
+ }
+
+ if (TAO_debug_level > 0)
+ {
+ ACE_DEBUG ((LM_DEBUG,
+ "test_i::twoway_method -> session id = %d iteration = %d payload size = %d\n",
+ session_id,
+ iteration,
+ payload.length ()));
+ }
+
+ this->invocations_received_[iteration] = 1;
+ ++this->number_of_invocations_received_;
+
+ ACE_hrtime_t time_of_current_call =
+ ACE_OS::gethrtime ();
+
+ if (this->first_invocation_)
+ this->first_invocation_ = 0;
+ else
+ this->inter_arrival_times_->sample (time_of_current_call - this->time_of_last_call_);
+
+ this->time_of_last_call_ = time_of_current_call;
+ }
+
+ ReceiverExec_i::ReceiverExec_i (void)
+ {
+ ACE_DEBUG ((LM_DEBUG, "ReceiverExec_i::ReceiverExec_i\n"));
+
+ int argc = 0;
+ char **argv = 0;
+
+ this->orb_ =
+ CORBA::ORB_init (argc,
+ argv,
+ "");
+
+ }
+
+ ::Protocols::CCM_test_ptr
+ ReceiverExec_i::get_writer (void)
+ throw (CORBA::SystemException)
+ {
+ ACE_DEBUG ((LM_DEBUG, "ReceiverExec_i::get_writer\n"));
+ return new test_i;
+ }
+
+ void
+ ReceiverExec_i::shutdown (void)
+ throw (CORBA::SystemException)
+ {
+ ACE_DEBUG ((LM_DEBUG, "ReceiverExec_i::shutdown\n"));
+ this->orb_->shutdown ();
+ }
+
+ void
+ ReceiverExec_i::set_session_context (Components::SessionContext_ptr ctx)
+ throw (CORBA::SystemException,
+ Components::CCMException)
+ {
+ ACE_DEBUG ((LM_DEBUG, "ReceiverExec_i::set_session_context\n"));
+
+ this->context_ =
+ ReceiverExec_Context::_narrow (ctx);
+
+ if (CORBA::is_nil (this->context_.in ()))
+ throw CORBA::INTERNAL ();
+ }
+
+ void
+ ReceiverExec_i::ccm_activate (void)
+ throw (CORBA::SystemException,
+ Components::CCMException)
+ {
+ ACE_DEBUG ((LM_DEBUG, "ReceiverExec_i::ccm_activate\n"));
+ }
+
+ void
+ ReceiverExec_i::ccm_passivate (void)
+ throw (CORBA::SystemException,
+ Components::CCMException)
+ {
+ ACE_DEBUG ((LM_DEBUG, "ReceiverExec_i::ccm_passivate\n"));
+ }
+
+ void
+ ReceiverExec_i::ccm_remove (void)
+ throw (CORBA::SystemException,
+ Components::CCMException)
+ {
+ ACE_DEBUG ((LM_DEBUG, "ReceiverExec_i::ccm_remove\n"));
+ }
+
+ void
+ ReceiverExec_i::ciao_preactivate (void)
+ throw (CORBA::SystemException,
+ Components::CCMException)
+ {
+ ACE_DEBUG ((LM_DEBUG, "ReceiverExec_i::ccm_preactivate\n"));
+ }
+
+ void
+ ReceiverExec_i::ciao_postactivate (void)
+ throw (CORBA::SystemException,
+ Components::CCMException)
+ {
+ ACE_DEBUG ((LM_DEBUG, "ReceiverExec_i::ccm_postactivate\n"));
+ }
+
+ ::Components::EnterpriseComponent_ptr
+ ReceiverHomeExec_i::create (void)
+ throw (CORBA::SystemException,
+ Components::CCMException)
+ {
+ ACE_DEBUG ((LM_DEBUG, "ReceiverHome_exec::create\n"));
+ return new ReceiverExec_i;
+ }
+
+ extern "C" RECEIVER_EXEC_Export ::Components::HomeExecutorBase_ptr
+ createReceiverHome_Impl (void)
+ {
+ ACE_DEBUG ((LM_DEBUG, "createReceiverHome_Impl\n"));
+ return new ReceiverHomeExec_i;
+ }
+}
+