diff options
author | coryan <coryan@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 1999-02-15 22:25:47 +0000 |
---|---|---|
committer | coryan <coryan@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 1999-02-15 22:25:47 +0000 |
commit | bd8e5f2f992892e55f01b1f4258e7752d29db083 (patch) | |
tree | 8818d271495c242be1782e07390977617aea7e7b | |
parent | 1d311770b545bf6f0610c09dc25e302d4e57c522 (diff) | |
download | ATCD-bd8e5f2f992892e55f01b1f4258e7752d29db083.tar.gz |
ChangeLogTag:Mon Feb 15 16:24:42 1999 Carlos O'Ryan <coryan@cs.wustl.edu>
-rw-r--r-- | TAO/ChangeLog-99c | 7 | ||||
-rw-r--r-- | TAO/tests/CDR/Makefile | 270 | ||||
-rw-r--r-- | TAO/tests/CDR/allocator.cpp | 246 |
3 files changed, 511 insertions, 12 deletions
diff --git a/TAO/ChangeLog-99c b/TAO/ChangeLog-99c index 0e57b07dfe4..40cae770c30 100644 --- a/TAO/ChangeLog-99c +++ b/TAO/ChangeLog-99c @@ -1,3 +1,10 @@ +Mon Feb 15 16:24:42 1999 Carlos O'Ryan <coryan@cs.wustl.edu> + + * tests/CDR/Makefile: + * tests/CDR/allocator.cpp: + Added a new test to measure the effect of using TSS allocators + in the CDR streams. + Mon Feb 15 13:26:29 1999 Douglas C. Schmidt <schmidt@cs.wustl.edu> * TAO version 0.3.4 released. diff --git a/TAO/tests/CDR/Makefile b/TAO/tests/CDR/Makefile index d73f3c99f54..4e315cfb17b 100644 --- a/TAO/tests/CDR/Makefile +++ b/TAO/tests/CDR/Makefile @@ -20,6 +20,7 @@ PROG_SRCS = \ tc.cpp \ growth.cpp \ octet_sequence.cpp \ + allocator.cpp LSRC = $(PROG_SRCS) @@ -27,8 +28,9 @@ BASIC_TYPES_OBJS = basic_types.o TC_OBJS = tc.o GROWTH_OBJS = growth.o OCTET_SEQUENCE_OBJS = octet_sequence.o +ALLOCATOR_OBJS = allocator.o -BIN = basic_types tc growth octet_sequence +BIN = basic_types tc growth octet_sequence allocator BUILD = $(BIN) VLDLIBS = $(LDLIBS:%=%$(VAR)) VBIN = $(BIN:%=%$(VAR)) @@ -59,6 +61,9 @@ growth: $(addprefix $(VDIR),$(GROWTH_OBJS)) octet_sequence: $(addprefix $(VDIR),$(OCTET_SEQUENCE_OBJS)) $(LINK.cc) $(LDFLAGS) -o $@ $^ $(VLDLIBS) $(POSTLINK) +allocator: $(addprefix $(VDIR),$(ALLOCATOR_OBJS)) + $(LINK.cc) $(LDFLAGS) -o $@ $^ $(VLDLIBS) $(POSTLINK) + clean: -/bin/rm -rf *.o $(BIN) obj.* core Templates.DB .make.state @@ -145,10 +150,8 @@ clean: $(TAO_ROOT)/tao/ORB.i \ $(TAO_ROOT)/tao/Any.h \ $(TAO_ROOT)/tao/CDR.h \ - $(TAO_ROOT)/tao/Marshal.h \ $(TAO_ROOT)/tao/Typecode.h \ $(TAO_ROOT)/tao/Typecode.i \ - $(TAO_ROOT)/tao/Marshal.i \ $(TAO_ROOT)/tao/CDR.i \ $(TAO_ROOT)/tao/Any.i \ $(TAO_ROOT)/tao/NVList.h \ @@ -175,6 +178,8 @@ clean: $(TAO_ROOT)/tao/varout.h \ $(TAO_ROOT)/tao/varout.i \ $(TAO_ROOT)/tao/varout.cpp \ + $(TAO_ROOT)/tao/Marshal.h \ + $(TAO_ROOT)/tao/Marshal.i \ $(TAO_ROOT)/tao/singletons.h \ $(ACE_ROOT)/ace/Singleton.h \ $(ACE_ROOT)/ace/Singleton.i \ @@ -301,7 +306,6 @@ clean: $(ACE_ROOT)/ace/Dynamic_Service.h \ $(ACE_ROOT)/ace/Dynamic_Service.cpp \ $(TAO_ROOT)/tao/Operation_Table.h \ - $(TAO_ROOT)/tao/debug.h \ $(TAO_ROOT)/tao/Client_Strategy_Factory.h \ $(TAO_ROOT)/tao/Server_Strategy_Factory.h \ $(TAO_ROOT)/tao/Invocation.h \ @@ -387,10 +391,8 @@ clean: $(TAO_ROOT)/tao/ORB.i \ $(TAO_ROOT)/tao/Any.h \ $(TAO_ROOT)/tao/CDR.h \ - $(TAO_ROOT)/tao/Marshal.h \ $(TAO_ROOT)/tao/Typecode.h \ $(TAO_ROOT)/tao/Typecode.i \ - $(TAO_ROOT)/tao/Marshal.i \ $(TAO_ROOT)/tao/CDR.i \ $(TAO_ROOT)/tao/Any.i \ $(TAO_ROOT)/tao/NVList.h \ @@ -417,6 +419,8 @@ clean: $(TAO_ROOT)/tao/varout.h \ $(TAO_ROOT)/tao/varout.i \ $(TAO_ROOT)/tao/varout.cpp \ + $(TAO_ROOT)/tao/Marshal.h \ + $(TAO_ROOT)/tao/Marshal.i \ $(TAO_ROOT)/tao/singletons.h \ $(ACE_ROOT)/ace/Singleton.h \ $(ACE_ROOT)/ace/Singleton.i \ @@ -543,7 +547,6 @@ clean: $(ACE_ROOT)/ace/Dynamic_Service.h \ $(ACE_ROOT)/ace/Dynamic_Service.cpp \ $(TAO_ROOT)/tao/Operation_Table.h \ - $(TAO_ROOT)/tao/debug.h \ $(TAO_ROOT)/tao/Client_Strategy_Factory.h \ $(TAO_ROOT)/tao/Server_Strategy_Factory.h \ $(TAO_ROOT)/tao/Invocation.h \ @@ -633,10 +636,8 @@ clean: $(TAO_ROOT)/tao/ORB.i \ $(TAO_ROOT)/tao/Any.h \ $(TAO_ROOT)/tao/CDR.h \ - $(TAO_ROOT)/tao/Marshal.h \ $(TAO_ROOT)/tao/Typecode.h \ $(TAO_ROOT)/tao/Typecode.i \ - $(TAO_ROOT)/tao/Marshal.i \ $(TAO_ROOT)/tao/CDR.i \ $(TAO_ROOT)/tao/Any.i \ $(TAO_ROOT)/tao/NVList.h \ @@ -663,6 +664,8 @@ clean: $(TAO_ROOT)/tao/varout.h \ $(TAO_ROOT)/tao/varout.i \ $(TAO_ROOT)/tao/varout.cpp \ + $(TAO_ROOT)/tao/Marshal.h \ + $(TAO_ROOT)/tao/Marshal.i \ $(TAO_ROOT)/tao/singletons.h \ $(ACE_ROOT)/ace/Singleton.h \ $(ACE_ROOT)/ace/Singleton.i \ @@ -789,7 +792,6 @@ clean: $(ACE_ROOT)/ace/Dynamic_Service.h \ $(ACE_ROOT)/ace/Dynamic_Service.cpp \ $(TAO_ROOT)/tao/Operation_Table.h \ - $(TAO_ROOT)/tao/debug.h \ $(TAO_ROOT)/tao/Client_Strategy_Factory.h \ $(TAO_ROOT)/tao/Server_Strategy_Factory.h \ $(TAO_ROOT)/tao/Invocation.h \ @@ -875,10 +877,253 @@ clean: $(TAO_ROOT)/tao/ORB.i \ $(TAO_ROOT)/tao/Any.h \ $(TAO_ROOT)/tao/CDR.h \ - $(TAO_ROOT)/tao/Marshal.h \ $(TAO_ROOT)/tao/Typecode.h \ $(TAO_ROOT)/tao/Typecode.i \ + $(TAO_ROOT)/tao/CDR.i \ + $(TAO_ROOT)/tao/Any.i \ + $(TAO_ROOT)/tao/NVList.h \ + $(TAO_ROOT)/tao/NVList.i \ + $(TAO_ROOT)/tao/Principal.h \ + $(TAO_ROOT)/tao/Sequence.h \ + $(TAO_ROOT)/tao/Managed_Types.h \ + $(TAO_ROOT)/tao/Managed_Types.i \ + $(TAO_ROOT)/tao/Sequence.i \ + $(TAO_ROOT)/tao/Principal.i \ + $(TAO_ROOT)/tao/Request.h \ + $(TAO_ROOT)/tao/Request.i \ + $(TAO_ROOT)/tao/Server_Request.h \ + $(TAO_ROOT)/tao/Object_KeyC.h \ + $(TAO_ROOT)/tao/Object_KeyC.i \ + $(TAO_ROOT)/tao/GIOP.h \ + $(TAO_ROOT)/tao/Sequence_T.h \ + $(TAO_ROOT)/tao/Sequence_T.i \ + $(TAO_ROOT)/tao/Sequence_T.cpp \ + $(TAO_ROOT)/tao/GIOP.i \ + $(TAO_ROOT)/tao/Object.h \ + $(TAO_ROOT)/tao/Object.i \ + $(TAO_ROOT)/tao/Server_Request.i \ + $(TAO_ROOT)/tao/varout.h \ + $(TAO_ROOT)/tao/varout.i \ + $(TAO_ROOT)/tao/varout.cpp \ + $(TAO_ROOT)/tao/Marshal.h \ $(TAO_ROOT)/tao/Marshal.i \ + $(TAO_ROOT)/tao/singletons.h \ + $(ACE_ROOT)/ace/Singleton.h \ + $(ACE_ROOT)/ace/Singleton.i \ + $(ACE_ROOT)/ace/Singleton.cpp \ + $(TAO_ROOT)/tao/PolicyC.h \ + $(TAO_ROOT)/tao/PolicyC.i \ + $(TAO_ROOT)/tao/CurrentC.h \ + $(TAO_ROOT)/tao/CurrentC.i \ + $(TAO_ROOT)/tao/POA.h \ + $(ACE_ROOT)/ace/Hash_Map_Manager.h \ + $(ACE_ROOT)/ace/Functor.h \ + $(ACE_ROOT)/ace/Functor.i \ + $(ACE_ROOT)/ace/Functor_T.h \ + $(ACE_ROOT)/ace/Functor_T.i \ + $(ACE_ROOT)/ace/Functor_T.cpp \ + $(ACE_ROOT)/ace/Hash_Map_Manager.i \ + $(ACE_ROOT)/ace/Hash_Map_Manager_T.h \ + $(ACE_ROOT)/ace/Hash_Map_Manager_T.i \ + $(ACE_ROOT)/ace/Hash_Map_Manager_T.cpp \ + $(ACE_ROOT)/ace/Service_Config.h \ + $(ACE_ROOT)/ace/Service_Object.h \ + $(ACE_ROOT)/ace/Shared_Object.h \ + $(ACE_ROOT)/ace/Shared_Object.i \ + $(ACE_ROOT)/ace/Service_Object.i \ + $(ACE_ROOT)/ace/Service_Config.i \ + $(ACE_ROOT)/ace/Reactor.h \ + $(ACE_ROOT)/ace/Handle_Set.h \ + $(ACE_ROOT)/ace/Handle_Set.i \ + $(ACE_ROOT)/ace/Timer_Queue.h \ + $(ACE_ROOT)/ace/Timer_Queue_T.h \ + $(ACE_ROOT)/ace/Timer_Queue_T.i \ + $(ACE_ROOT)/ace/Timer_Queue_T.cpp \ + $(ACE_ROOT)/ace/Reactor.i \ + $(ACE_ROOT)/ace/Reactor_Impl.h \ + $(ACE_ROOT)/ace/Svc_Conf_Tokens.h \ + $(TAO_ROOT)/tao/POAC.h \ + $(TAO_ROOT)/tao/POAC.i \ + $(TAO_ROOT)/tao/Servant_Base.h \ + $(TAO_ROOT)/tao/Servant_Base.i \ + $(TAO_ROOT)/tao/POAS.h \ + $(TAO_ROOT)/tao/POA_CORBA.h \ + $(TAO_ROOT)/tao/DynAnyC.h \ + $(TAO_ROOT)/tao/DynAnyC.i \ + $(TAO_ROOT)/tao/POAS.i \ + $(TAO_ROOT)/tao/Active_Object_Map.h \ + $(TAO_ROOT)/tao/Active_Object_Map.i \ + $(TAO_ROOT)/tao/POA.i \ + $(TAO_ROOT)/tao/poa_macros.h \ + $(TAO_ROOT)/tao/Stub.h \ + $(TAO_ROOT)/tao/Pluggable.h \ + $(TAO_ROOT)/tao/MProfile.h \ + $(TAO_ROOT)/tao/Stub.i \ + $(TAO_ROOT)/tao/params.h \ + $(ACE_ROOT)/ace/INET_Addr.h \ + $(ACE_ROOT)/ace/Addr.h \ + $(ACE_ROOT)/ace/Addr.i \ + $(ACE_ROOT)/ace/INET_Addr.i \ + $(TAO_ROOT)/tao/params.i \ + $(TAO_ROOT)/tao/ORB_Core.h \ + $(ACE_ROOT)/ace/Strategies_T.h \ + $(ACE_ROOT)/ace/Strategies.h \ + $(ACE_ROOT)/ace/Strategies.i \ + $(ACE_ROOT)/ace/Synch_Options.h \ + $(ACE_ROOT)/ace/Synch_Options.i \ + $(ACE_ROOT)/ace/Thread_Manager.h \ + $(ACE_ROOT)/ace/Thread_Manager.i \ + $(ACE_ROOT)/ace/Strategies_T.i \ + $(ACE_ROOT)/ace/Strategies_T.cpp \ + $(ACE_ROOT)/ace/Service_Repository.h \ + $(ACE_ROOT)/ace/Service_Types.h \ + $(ACE_ROOT)/ace/Service_Types.i \ + $(ACE_ROOT)/ace/Service_Repository.i \ + $(ACE_ROOT)/ace/WFMO_Reactor.h \ + $(ACE_ROOT)/ace/Message_Queue.h \ + $(ACE_ROOT)/ace/IO_Cntl_Msg.h \ + $(ACE_ROOT)/ace/Message_Queue_T.h \ + $(ACE_ROOT)/ace/Message_Queue_T.i \ + $(ACE_ROOT)/ace/Message_Queue_T.cpp \ + $(ACE_ROOT)/ace/Message_Queue.i \ + $(ACE_ROOT)/ace/WFMO_Reactor.i \ + $(TAO_ROOT)/tao/IIOP_Connector.h \ + $(ACE_ROOT)/ace/Connector.h \ + $(ACE_ROOT)/ace/Map_Manager.h \ + $(ACE_ROOT)/ace/Map_Manager.i \ + $(ACE_ROOT)/ace/Map_Manager.cpp \ + $(ACE_ROOT)/ace/Svc_Handler.h \ + $(ACE_ROOT)/ace/Task.h \ + $(ACE_ROOT)/ace/Task.i \ + $(ACE_ROOT)/ace/Task_T.h \ + $(ACE_ROOT)/ace/Task_T.i \ + $(ACE_ROOT)/ace/Task_T.cpp \ + $(ACE_ROOT)/ace/Module.h \ + $(ACE_ROOT)/ace/Module.i \ + $(ACE_ROOT)/ace/Module.cpp \ + $(ACE_ROOT)/ace/Stream_Modules.h \ + $(ACE_ROOT)/ace/Stream_Modules.i \ + $(ACE_ROOT)/ace/Stream_Modules.cpp \ + $(ACE_ROOT)/ace/Svc_Handler.i \ + $(ACE_ROOT)/ace/Svc_Handler.cpp \ + $(ACE_ROOT)/ace/Dynamic.h \ + $(ACE_ROOT)/ace/Dynamic.i \ + $(ACE_ROOT)/ace/Connector.i \ + $(ACE_ROOT)/ace/Connector.cpp \ + $(ACE_ROOT)/ace/SOCK_Connector.h \ + $(ACE_ROOT)/ace/SOCK_Stream.h \ + $(ACE_ROOT)/ace/SOCK_IO.h \ + $(ACE_ROOT)/ace/SOCK.h \ + $(ACE_ROOT)/ace/IPC_SAP.h \ + $(ACE_ROOT)/ace/IPC_SAP.i \ + $(ACE_ROOT)/ace/SOCK.i \ + $(ACE_ROOT)/ace/SOCK_IO.i \ + $(ACE_ROOT)/ace/SOCK_Stream.i \ + $(ACE_ROOT)/ace/Time_Value.h \ + $(ACE_ROOT)/ace/SOCK_Connector.i \ + $(TAO_ROOT)/tao/Connect.h \ + $(ACE_ROOT)/ace/Acceptor.h \ + $(ACE_ROOT)/ace/Acceptor.i \ + $(ACE_ROOT)/ace/Acceptor.cpp \ + $(ACE_ROOT)/ace/SOCK_Acceptor.h \ + $(ACE_ROOT)/ace/SOCK_Acceptor.i \ + $(TAO_ROOT)/tao/Connect.i \ + $(TAO_ROOT)/tao/IIOP_Acceptor.h \ + $(TAO_ROOT)/tao/ORB_Core.i \ + $(ACE_ROOT)/ace/Dynamic_Service.h \ + $(ACE_ROOT)/ace/Dynamic_Service.cpp \ + $(TAO_ROOT)/tao/Operation_Table.h \ + $(TAO_ROOT)/tao/Client_Strategy_Factory.h \ + $(TAO_ROOT)/tao/Server_Strategy_Factory.h \ + $(TAO_ROOT)/tao/Invocation.h \ + $(TAO_ROOT)/tao/Invocation.i \ + $(TAO_ROOT)/tao/InconsistentTypeCodeC.h \ + $(TAO_ROOT)/tao/DynAny_i.h \ + $(TAO_ROOT)/tao/Union.h +.obj/allocator.o .obj/allocator.so .shobj/allocator.o .shobj/allocator.so: allocator.cpp \ + $(ACE_ROOT)/ace/Get_Opt.h \ + $(ACE_ROOT)/ace/ACE.h \ + $(ACE_ROOT)/ace/OS.h \ + $(ACE_ROOT)/ace/inc_user_config.h \ + $(ACE_ROOT)/ace/config.h \ + $(ACE_ROOT)/ace/config-sunos5.5.h \ + $(ACE_ROOT)/ace/config-g++-common.h \ + $(ACE_ROOT)/ace/streams.h \ + $(ACE_ROOT)/ace/Basic_Types.h \ + $(ACE_ROOT)/ace/Basic_Types.i \ + $(ACE_ROOT)/ace/OS.i \ + $(ACE_ROOT)/ace/Trace.h \ + $(ACE_ROOT)/ace/Log_Msg.h \ + $(ACE_ROOT)/ace/Log_Record.h \ + $(ACE_ROOT)/ace/ACE.i \ + $(ACE_ROOT)/ace/Log_Priority.h \ + $(ACE_ROOT)/ace/SString.h \ + $(ACE_ROOT)/ace/SString.i \ + $(ACE_ROOT)/ace/Malloc_Base.h \ + $(ACE_ROOT)/ace/Log_Record.i \ + $(ACE_ROOT)/ace/Get_Opt.i \ + $(ACE_ROOT)/ace/High_Res_Timer.h \ + $(ACE_ROOT)/ace/High_Res_Timer.i \ + $(TAO_ROOT)/tao/corba.h \ + $(TAO_ROOT)/tao/corbafwd.h \ + $(ACE_ROOT)/ace/CDR_Stream.h \ + $(ACE_ROOT)/ace/Message_Block.h \ + $(ACE_ROOT)/ace/Malloc.h \ + $(ACE_ROOT)/ace/Malloc.i \ + $(ACE_ROOT)/ace/Malloc_T.h \ + $(ACE_ROOT)/ace/Synch.h \ + $(ACE_ROOT)/ace/SV_Semaphore_Complex.h \ + $(ACE_ROOT)/ace/SV_Semaphore_Simple.h \ + $(ACE_ROOT)/ace/SV_Semaphore_Simple.i \ + $(ACE_ROOT)/ace/SV_Semaphore_Complex.i \ + $(ACE_ROOT)/ace/Synch.i \ + $(ACE_ROOT)/ace/Synch_T.h \ + $(ACE_ROOT)/ace/Event_Handler.h \ + $(ACE_ROOT)/ace/Event_Handler.i \ + $(ACE_ROOT)/ace/Synch_T.i \ + $(ACE_ROOT)/ace/Thread.h \ + $(ACE_ROOT)/ace/Thread.i \ + $(ACE_ROOT)/ace/Atomic_Op.i \ + $(ACE_ROOT)/ace/Synch_T.cpp \ + $(ACE_ROOT)/ace/Free_List.h \ + $(ACE_ROOT)/ace/Free_List.i \ + $(ACE_ROOT)/ace/Free_List.cpp \ + $(ACE_ROOT)/ace/Malloc_T.i \ + $(ACE_ROOT)/ace/Malloc_T.cpp \ + $(ACE_ROOT)/ace/Memory_Pool.h \ + $(ACE_ROOT)/ace/Signal.h \ + $(ACE_ROOT)/ace/Containers.h \ + $(ACE_ROOT)/ace/Containers.i \ + $(ACE_ROOT)/ace/Containers_T.h \ + $(ACE_ROOT)/ace/Containers_T.i \ + $(ACE_ROOT)/ace/Containers_T.cpp \ + $(ACE_ROOT)/ace/Signal.i \ + $(ACE_ROOT)/ace/Object_Manager.h \ + $(ACE_ROOT)/ace/Object_Manager.i \ + $(ACE_ROOT)/ace/Managed_Object.h \ + $(ACE_ROOT)/ace/Managed_Object.i \ + $(ACE_ROOT)/ace/Managed_Object.cpp \ + $(ACE_ROOT)/ace/Mem_Map.h \ + $(ACE_ROOT)/ace/Mem_Map.i \ + $(ACE_ROOT)/ace/Memory_Pool.i \ + $(ACE_ROOT)/ace/Message_Block.i \ + $(ACE_ROOT)/ace/Message_Block_T.h \ + $(ACE_ROOT)/ace/Message_Block_T.i \ + $(ACE_ROOT)/ace/Message_Block_T.cpp \ + $(ACE_ROOT)/ace/CDR_Stream.i \ + $(TAO_ROOT)/tao/try_macros.h \ + $(TAO_ROOT)/tao/orbconf.h \ + $(ACE_ROOT)/ace/CORBA_macros.h \ + $(TAO_ROOT)/tao/Environment.h \ + $(TAO_ROOT)/tao/Environment.i \ + $(TAO_ROOT)/tao/ORB.h \ + $(TAO_ROOT)/tao/Exception.h \ + $(TAO_ROOT)/tao/Exception.i \ + $(TAO_ROOT)/tao/ORB.i \ + $(TAO_ROOT)/tao/Any.h \ + $(TAO_ROOT)/tao/CDR.h \ + $(TAO_ROOT)/tao/Typecode.h \ + $(TAO_ROOT)/tao/Typecode.i \ $(TAO_ROOT)/tao/CDR.i \ $(TAO_ROOT)/tao/Any.i \ $(TAO_ROOT)/tao/NVList.h \ @@ -905,6 +1150,8 @@ clean: $(TAO_ROOT)/tao/varout.h \ $(TAO_ROOT)/tao/varout.i \ $(TAO_ROOT)/tao/varout.cpp \ + $(TAO_ROOT)/tao/Marshal.h \ + $(TAO_ROOT)/tao/Marshal.i \ $(TAO_ROOT)/tao/singletons.h \ $(ACE_ROOT)/ace/Singleton.h \ $(ACE_ROOT)/ace/Singleton.i \ @@ -1031,7 +1278,6 @@ clean: $(ACE_ROOT)/ace/Dynamic_Service.h \ $(ACE_ROOT)/ace/Dynamic_Service.cpp \ $(TAO_ROOT)/tao/Operation_Table.h \ - $(TAO_ROOT)/tao/debug.h \ $(TAO_ROOT)/tao/Client_Strategy_Factory.h \ $(TAO_ROOT)/tao/Server_Strategy_Factory.h \ $(TAO_ROOT)/tao/Invocation.h \ diff --git a/TAO/tests/CDR/allocator.cpp b/TAO/tests/CDR/allocator.cpp new file mode 100644 index 00000000000..92b2b2d905a --- /dev/null +++ b/TAO/tests/CDR/allocator.cpp @@ -0,0 +1,246 @@ +// $Id$ + +// ============================================================================ +// +// = LIBRARY +// TAO/tests/CDR +// +// = FILENAME +// allocator.cpp +// +// = DESCRIPTION +// Compares the performance of a TSS allocator, with no locks, to +// the global allocator (with locks) even in the abscence of +// contention. +// The idea behind this test is to measure the predictability of +// each allocator, specially under the light of potential +// fragmentation in the main allocator. +// +// = AUTHORS +// Carlos O'Ryan +// +// ============================================================================ + +#include "ace/Get_Opt.h" +#include "ace/High_Res_Timer.h" + +#include "tao/corba.h" + +ACE_RCSID(CDR, allocator, "$Id$") + +#define DEFAULT_BUFFER_SIZE 512 + +class Application_Simulator +{ + // = DESCRIPTION + // Tries to simulate the behavior of an application: it randomly + // acquires and releases memory, of variable sizes. + // The intention is to produce some level of fragmentation in main + // memory. + +public: + Application_Simulator (int max_fragments, + int max_fragment_size); + // Constructor, limits the amount of fragmentation and memory this + // class takes. + + ~Application_Simulator (void); + // Destructor, releases any memory left behind. + + void upcall (ACE_RANDR_TYPE& seed); + // Simulate an upcall. The class allocates some memory and then + // releases some memory too, the amount of memory allocated and the + // number of allocations is random. + +private: + char** buffers_; + // The allocated buffers. + + int max_fragments_; + // The size of the <buffers_> array. + + int max_fragment_size_; + // The maximum size of any element of <buffers_> +}; + +int +main (int argc, char *argv[]) +{ + CORBA::ORB_var orb = + CORBA::ORB_init (argc, argv); + + int tss = 0; + int iterations = 500; + int repeat = 100; + int max_fragments = 2048; + int max_fragment_size = 1024; + int max_arguments = 16; + int max_argument_size = 1024; + ACE_RANDR_TYPE seed = time(0); + + ACE_Get_Opt get_opt (argc, argv, "tn:f:m:s:a:b:r:"); + int opt; + + while ((opt = get_opt ()) != EOF) + { + switch (opt) + { + case 't': + tss = 1; + break; + case 'n': + iterations = ACE_OS::atoi (get_opt.optarg); + break; + case 'r': + repeat = ACE_OS::atoi (get_opt.optarg); + break; + case 'f': + max_fragments = ACE_OS::atoi (get_opt.optarg); + break; + case 'm': + max_fragment_size = ACE_OS::atoi (get_opt.optarg); + break; + case 's': + seed = ACE_OS::atoi (get_opt.optarg); + break; + case 'a': + max_arguments = ACE_OS::atoi (get_opt.optarg); + break; + case 'b': + max_argument_size = ACE_OS::atoi (get_opt.optarg); + break; + case '?': + default: + ACE_DEBUG ((LM_DEBUG, + "Usage: %s " + "-n iterations " + "-n repeat " + "-f max_fragments " + "-m max_fragment_size " + "-s seed " + "-a max_arguments " + "-b max_argument_size " + "\n", + argv[0])); + return -1; + } + } + + ACE_DEBUG ((LM_DEBUG, "SEED = %d\n", seed)); + + ACE_Allocator* buffer_allocator = + ACE_Allocator::instance (); + ACE_Allocator* dblock_allocator = + ACE_Allocator::instance (); + if (tss) + { + buffer_allocator = + TAO_ORB_Core_instance ()->output_cdr_buffer_allocator (); + dblock_allocator = + TAO_ORB_Core_instance ()->output_cdr_dblock_allocator (); + } + + Application_Simulator simulator (max_fragments, + max_fragment_size); + char* argument_buffer; + ACE_NEW_RETURN (argument_buffer, char[max_argument_size], 1); + + int* argument_sizes; + ACE_NEW_RETURN (argument_sizes, int[max_arguments], 1); + + int n = ACE_OS::rand_r (seed) % max_arguments + 1; + for (int k = 0; k < n; ++k) + argument_sizes[k] = ACE_OS::rand_r (seed) % max_argument_size + 1; + + for (int i = 0; i < iterations; ++i) + { + simulator.upcall (seed); + + // @@ TODO this is the place to put the other allocators. + ACE_High_Res_Timer cdr_encoding; + for (int j = 0; j < repeat; ++j) + { + cdr_encoding.start_incr (); + + char buffer[DEFAULT_BUFFER_SIZE]; + ACE_OutputCDR cdr (buffer, sizeof(buffer), + TAO_ENCAP_BYTE_ORDER, + buffer_allocator, + dblock_allocator); + + for (int k = 0; k < n; ++k) + { + cdr.write_char_array (argument_buffer, + argument_sizes[k]); + } + + cdr_encoding.stop_incr (); + } + + ACE_Time_Value tv; + cdr_encoding.elapsed_time_incr (tv); + ACE_hrtime_t usecs = tv.sec (); + usecs *= ACE_static_cast (ACE_UINT32, ACE_ONE_SECOND_IN_USECS); + usecs += tv.usec (); + double average = ACE_U64_TO_U32(usecs) / repeat; + ACE_OS::printf ("AVE: %d %f\n", + i, average); + + } + return 0; +} + +Application_Simulator::Application_Simulator (int max_fragments, + int max_fragment_size) + : max_fragments_ (max_fragments), + max_fragment_size_ (max_fragment_size) +{ + ACE_NEW (buffers_, char*[this->max_fragments_]); + for (char** i = this->buffers_; + i != this->buffers_ + this->max_fragments_; + ++i) + *i = 0; +} + +Application_Simulator::~Application_Simulator (void) +{ + for (char** i = this->buffers_; + i != this->buffers_ + this->max_fragments_; + ++i) + { + if (*i != 0) + { + delete[] *i; + *i = 0; + } + } + delete[] this->buffers_; + this->buffers_ = 0; +} + +void +Application_Simulator::upcall (ACE_RANDR_TYPE& seed) +{ + for (char** i = this->buffers_; + i != this->buffers_ + this->max_fragments_; + ++i) + { + if (*i != 0) + { + if (ACE_OS::rand_r (seed) % 10000 < 5000) + { + delete[] *i; + *i = 0; + } + } + else + { + if (ACE_OS::rand_r (seed) % 10000 < 5000) + { + int size = ACE_OS::rand_r (seed) % + this->max_fragment_size_ + 1; + ACE_NEW (*i, char[size]); + } + } + } +} |