summaryrefslogtreecommitdiff
path: root/CIAO/performance-tests/Benchmark/RoundTripServer
diff options
context:
space:
mode:
Diffstat (limited to 'CIAO/performance-tests/Benchmark/RoundTripServer')
-rw-r--r--CIAO/performance-tests/Benchmark/RoundTripServer/LatencyTest.cpp26
-rw-r--r--CIAO/performance-tests/Benchmark/RoundTripServer/LatencyTest.h40
-rw-r--r--CIAO/performance-tests/Benchmark/RoundTripServer/RoundTripServer.mpc14
-rw-r--r--CIAO/performance-tests/Benchmark/RoundTripServer/Test.idl16
-rw-r--r--CIAO/performance-tests/Benchmark/RoundTripServer/server.cpp96
5 files changed, 192 insertions, 0 deletions
diff --git a/CIAO/performance-tests/Benchmark/RoundTripServer/LatencyTest.cpp b/CIAO/performance-tests/Benchmark/RoundTripServer/LatencyTest.cpp
new file mode 100644
index 00000000000..a3aed5e135f
--- /dev/null
+++ b/CIAO/performance-tests/Benchmark/RoundTripServer/LatencyTest.cpp
@@ -0,0 +1,26 @@
+//
+// $Id$
+//
+#include "LatencyTest.h"
+#include "CIAO_common.h"
+
+LatencyTest_Impl::LatencyTest_Impl (CORBA::ORB_ptr orb)
+ : orb_ (CORBA::ORB::_duplicate (orb))
+{
+}
+
+
+CORBA::Long
+LatencyTest_Impl::makeCall (CORBA::Long send_time)
+{
+ if (CIAO::debug_level () > 0)
+ ACE_DEBUG ((LM_DEBUG, "Sending Time back \n"));
+
+ return send_time;
+}
+
+void
+LatencyTest_Impl::shutdown ()
+{
+ this->orb_->shutdown (0);
+}
diff --git a/CIAO/performance-tests/Benchmark/RoundTripServer/LatencyTest.h b/CIAO/performance-tests/Benchmark/RoundTripServer/LatencyTest.h
new file mode 100644
index 00000000000..e2dbaf7cc0e
--- /dev/null
+++ b/CIAO/performance-tests/Benchmark/RoundTripServer/LatencyTest.h
@@ -0,0 +1,40 @@
+//
+// $Id$
+//
+
+#ifndef LATENCYTEST_H
+#define LATENCYTEST_H
+#include /**/ "ace/pre.h"
+
+#include "../BenchmarkS.h"
+
+#if defined (_MSC_VER)
+# pragma warning(push)
+# pragma warning (disable:4250)
+#endif /* _MSC_VER */
+
+/// Implement the Test::LatencyTest interface
+class LatencyTest_Impl :
+ public virtual POA_Benchmark::LatencyTest
+{
+public:
+ /// Constructor
+ LatencyTest_Impl (CORBA::ORB_ptr orb);
+
+ // = The skeleton methods
+ virtual CORBA::Long makeCall (CORBA::Long send_time);
+
+ virtual void shutdown ();
+
+private:
+ /// Use an ORB reference to conver strings to objects and shutdown
+ /// the application.
+ CORBA::ORB_var orb_;
+};
+
+#if defined(_MSC_VER)
+# pragma warning(pop)
+#endif /* _MSC_VER */
+
+#include /**/ "ace/post.h"
+#endif /* LATENCYTEST_H */
diff --git a/CIAO/performance-tests/Benchmark/RoundTripServer/RoundTripServer.mpc b/CIAO/performance-tests/Benchmark/RoundTripServer/RoundTripServer.mpc
new file mode 100644
index 00000000000..35a3dbed71b
--- /dev/null
+++ b/CIAO/performance-tests/Benchmark/RoundTripServer/RoundTripServer.mpc
@@ -0,0 +1,14 @@
+// $Id$
+project (RoundTripServer) : strategies, ciao_component_dnc {
+ after += Benchmark_svnt
+ libs += Benchmark_stub Benchmark_svnt
+ libpaths += ..
+
+ IDL_Files {
+ }
+
+ Source_Files {
+ server.cpp
+ LatencyTest.cpp
+ }
+}
diff --git a/CIAO/performance-tests/Benchmark/RoundTripServer/Test.idl b/CIAO/performance-tests/Benchmark/RoundTripServer/Test.idl
new file mode 100644
index 00000000000..b7f83dbedd8
--- /dev/null
+++ b/CIAO/performance-tests/Benchmark/RoundTripServer/Test.idl
@@ -0,0 +1,16 @@
+//
+// $Id$
+//
+
+/// Measure roundtrip delay
+interface LatencyTest
+{
+ /// A simple method to measure roundtrip delays
+ /**
+ * The operation simply returns its argument, this is used in AMI
+ * and deferred synchronous tests to measure the roundtrip delay
+ * without the need for a different reply handler for each
+ * request.
+ */
+ long makeCall (in long send_time);
+};
diff --git a/CIAO/performance-tests/Benchmark/RoundTripServer/server.cpp b/CIAO/performance-tests/Benchmark/RoundTripServer/server.cpp
new file mode 100644
index 00000000000..5b592728bec
--- /dev/null
+++ b/CIAO/performance-tests/Benchmark/RoundTripServer/server.cpp
@@ -0,0 +1,96 @@
+// $Id$
+
+#include "LatencyTest.h"
+#include "ace/Sched_Params.h"
+#include "ace/OS_NS_errno.h"
+
+#include "tao/Strategies/advanced_resource.h"
+
+const char *ior_output_file = "rtserver.ior";
+
+int
+main (int argc, char *argv[])
+{
+ int priority =
+ (ACE_Sched_Params::priority_min (ACE_SCHED_FIFO)
+ + ACE_Sched_Params::priority_max (ACE_SCHED_FIFO)) / 2;
+ priority = ACE_Sched_Params::next_priority (ACE_SCHED_FIFO,
+ priority);
+ // Enable FIFO scheduling, e.g., RT scheduling class on Solaris.
+
+ if (ACE_OS::sched_params (ACE_Sched_Params (ACE_SCHED_FIFO,
+ priority,
+ ACE_SCOPE_PROCESS)) != 0)
+ {
+ if (ACE_OS::last_error () == EPERM)
+ {
+ ACE_DEBUG ((LM_DEBUG,
+ "server (%P|%t): user is not superuser, "
+ "test runs in time-shared class\n"));
+ }
+ else
+ ACE_ERROR ((LM_ERROR,
+ "server (%P|%t): sched_params failed\n"));
+ }
+
+ try
+ {
+ CORBA::ORB_var orb =
+ CORBA::ORB_init (argc, argv);
+
+ CORBA::Object_var poa_object =
+ orb->resolve_initial_references("RootPOA");
+
+ if (CORBA::is_nil (poa_object.in ()))
+ ACE_ERROR_RETURN ((LM_ERROR,
+ " (%P|%t) Unable to initialize the POA.\n"),
+ 1);
+
+ PortableServer::POA_var root_poa =
+ PortableServer::POA::_narrow (poa_object.in ());
+
+ PortableServer::POAManager_var poa_manager =
+ root_poa->the_POAManager ();
+
+ LatencyTest_Impl *roundtrip_impl;
+ ACE_NEW_RETURN (roundtrip_impl,
+ LatencyTest_Impl (orb.in ()),
+ 1);
+ PortableServer::ServantBase_var owner_transfer(roundtrip_impl);
+
+ Benchmark::LatencyTest_var roundtrip =
+ roundtrip_impl->_this ();
+
+ CORBA::String_var ior =
+ orb->object_to_string (roundtrip.in ());
+
+ // If the ior_output_file exists, output the ior to it
+ 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);
+
+ ACE_DEBUG ((LM_DEBUG, "%s", ior.in ()));
+
+ poa_manager->activate ();
+
+ orb->run ();
+
+ ACE_DEBUG ((LM_DEBUG, "(%P|%t) server - event loop finished\n"));
+
+ root_poa->destroy (1, 1);
+
+ orb->destroy ();
+ }
+ catch (const CORBA::Exception& ex)
+ {
+ ex._tao_print_exception ("Exception caught:");
+ return 1;
+ }
+
+ return 0;
+}