void ACE_Throughput_Stats::accumulate (const ACE_Throughput_Stats &rhs) { if (rhs.samples_count () == 0u) return; this->ACE_Basic_Stats::accumulate (rhs); if (this->samples_count () == 0u) { this->throughput_last_ = rhs.throughput_last_; } else if (this->throughput_last_ < rhs.throughput_last_) { this->throughput_last_ = rhs.throughput_last_; } }
void ACE_Throughput_Stats::accumulate (const ACE_Throughput_Stats &rhs) { if (rhs.samples_count () == 0u) return; this->ACE_Basic_Stats::accumulate (rhs); if (this->samples_count () == 0u) { this->throughput_last_ = rhs.throughput_last_; #if 0 // @@TODO: This is what I really wanted to compute, but it just // does not work. this->throughput_sum_x_ = rhs.throughput_sum_x_; this->throughput_sum_x2_ = rhs.throughput_sum_x2_; this->throughput_sum_y_ = rhs.throughput_sum_y_; this->throughput_sum_y2_ = rhs.throughput_sum_y2_; this->throughput_sum_xy_ = rhs.throughput_sum_xy_; #endif /* 0 */ return; } if (this->throughput_last_ < rhs.throughput_last_) this->throughput_last_ = rhs.throughput_last_; #if 0 // @@TODO: This is what I really wanted to compute, but it just // does not work. this->throughput_sum_x_ += rhs.throughput_sum_x_; this->throughput_sum_x2_ += rhs.throughput_sum_x2_; this->throughput_sum_y_ += rhs.throughput_sum_y_; this->throughput_sum_y2_ += rhs.throughput_sum_y2_; this->throughput_sum_xy_ += rhs.throughput_sum_xy_; #endif /* 0 */ }
void EC_Supplier::accumulate (ACE_Throughput_Stats& stats) const { stats.accumulate (this->throughput_); }
void EC_Consumer::accumulate (ACE_Throughput_Stats& throughput) const { throughput.accumulate (this->throughput_); }
int Identity_Client::run (void) { // Contact the <Object_Group_Factory> to obtain an <Object_Group>. CORBA::ORB_var orb = orb_manager_.orb (); CORBA::Object_var obj = orb->string_to_object (this->group_factory_ior_); if (obj.in () == 0) ACE_ERROR_RETURN ((LM_ERROR, ACE_TEXT ("(%N|%l) <ERROR> [Identity_Client::run]\n") ACE_TEXT ("factory_resolve\n")), -1); Load_Balancer::Object_Group_Factory_var factory = Load_Balancer::Object_Group_Factory::_narrow (obj.in ()); if (CORBA::is_nil (factory.in ())) ACE_ERROR_RETURN ((LM_ERROR, "Identity_Client: problems using the factory ior\n"), -1); const char *group_name; if (this->use_random_) group_name = "Random group"; else group_name = "Round Robin group"; Load_Balancer::Object_Group_var object_group; // We have this for the measurement that was done. #if defined (DOORS_MEASURE_STATS) // Performance measurements start here ACE_High_Res_Timer::calibrate (); ACE_hrtime_t throughput_base = ACE_OS::gethrtime (); ACE_Throughput_Stats throughput; ACE_High_Res_Timer::global_scale_factor_type gsf = ACE_High_Res_Timer::global_scale_factor (); for (int i = 0; i < this->iterations_; i++) { // Record current time. ACE_hrtime_t latency_base = ACE_OS::gethrtime (); #endif /*TAO_MEASURE_STATS*/ // Remote call object_group = factory->resolve (group_name); CORBA::String_var iorstring = orb->object_to_string (object_group.in ()); ACE_DEBUG ((LM_DEBUG, "The ior string is %s\n", iorstring.in ())); #if defined (DOORS_MEASURE_STATS) // Grab timestamp again. ACE_hrtime_t now = ACE_OS::gethrtime (); // Record statistics. throughput.sample (now - throughput_base, now - latency_base); } ACE_OS::printf ("*=*=*=*=Aggregated result *=*=*=*=*=\n"); throughput.dump_results (ACE_TEXT("Aggregated"), gsf); #endif /*TAO_MEASURE_STATS */ if (CORBA::is_nil (object_group.in ())) { ACE_ERROR_RETURN ((LM_ERROR, "(%l|%d)The narrowed object is NUL:"), -1); } // List <Object_Group>'s id. CORBA::String_var id = object_group->id (); ACE_DEBUG ((LM_DEBUG, "Object Group's id is: %s\n\n", id.in ())); // List all <Object_Group>s members. Load_Balancer::Member_ID_List_var id_list = object_group->members (); ACE_DEBUG ((LM_DEBUG, "The group contains %d members:\n", id_list->length ())); for (CORBA::ULong i = 0; i < id_list->length (); ++i) ACE_DEBUG ((LM_DEBUG, "%s\n", static_cast<char const*>(id_list[i]))); // Perform <number_of_invocations_> method calls on <Identity> // objects, which are members of the <Object_Group>. Before each // invocations, we get an <Identity> reference to use for that // invocation from our <Object_Group>. Identity_var identity_object; CORBA::String_var identity; CORBA::String_var objref; for (size_t ind = 0; ind < this->number_of_invocations_; ++ind) { objref = object_group->resolve (); obj = orb->string_to_object (objref.in ()); identity_object = Identity::_narrow (obj.in ()); if (CORBA::is_nil (identity_object.in ())) ACE_ERROR_RETURN ((LM_ERROR, "Identity_Client: cannot narrow an object received from" "<Object_Group::resolve> to <Identity>\n"), -1); identity_object->get_name (identity.out ()); ACE_DEBUG ((LM_DEBUG, "Invocation %s\n", identity.in ())); } return 0; }
void Test_Consumer::accumulate (ACE_Throughput_Stats& stats) const { stats.accumulate (this->throughput_); }
int main (int argc, char* argv[]) { const char* host = 0; int nsamples = 10000; int c; ACE_Get_Opt getopt (argc, argv, "h:i:"); while ((c = getopt ()) != -1) { switch ((char) c) { case 'h': host = getopt.optarg; break; case 'i': nsamples = ACE_OS::atoi (getopt.optarg); break; } } if (host == 0) { ACE_DEBUG ((LM_DEBUG, "Usage: client -h host -i iterations\n")); return 1; } CLIENT *cl = clnt_create (host, PINGPROG, PINGVERS, "tcp"); if (cl == 0) { ACE_DEBUG ((LM_DEBUG, "Cannot create client handle\n")); return 1; } ACE_Throughput_Stats throughput; ACE_hrtime_t test_start = ACE_OS::gethrtime (); for (int i = 0; i != nsamples; ++i) { ACE_hrtime_t start = ACE_OS::gethrtime (); int p = 0; (void) ping_1 (&p, cl); ACE_hrtime_t end = ACE_OS::gethrtime (); throughput.sample (end - test_start, end - start); } ACE_DEBUG ((LM_DEBUG, "Calibrating high resolution timer . . .")); ACE_UINT32 gsf = ACE_High_Res_Timer::global_scale_factor (); ACE_DEBUG ((LM_DEBUG, " done\n")); throughput.dump_results ("Client", gsf); return 0; }