diff options
-rw-r--r-- | ChangeLog-97b | 18 | ||||
-rw-r--r-- | ace/ACE_Library.mak | 515 | ||||
-rw-r--r-- | ace/ACE_Library.mdp | bin | 163328 -> 163328 bytes | |||
-rw-r--r-- | ace/Atomic_Op.i | 8 | ||||
-rw-r--r-- | ace/Svc_Handler.cpp | 3 | ||||
-rw-r--r-- | ace/Synch_T.h | 3 | ||||
-rw-r--r-- | tests/Notify_Performance_Test.cpp | 228 | ||||
-rw-r--r-- | tests/Reactor_Performance_Test.cpp | 374 | ||||
-rw-r--r-- | tests/tests.mak | 430 | ||||
-rw-r--r-- | tests/tests.mdp | bin | 18590 -> 19081 bytes |
10 files changed, 1568 insertions, 11 deletions
diff --git a/ChangeLog-97b b/ChangeLog-97b index 42243b87b22..b341f61d2cd 100644 --- a/ChangeLog-97b +++ b/ChangeLog-97b @@ -1,3 +1,21 @@ +Tue Oct 14 02:49:02 1997 <irfan@TWOSTEP> + + * tests/Notify_Performance_Test.cpp: New performance test. This + test is used to time the notification mechanisms of the + ACE_Reactors. Both the WFMO_Reactor and Select_Reactor can be + tested. The notify() mechanism can also be tested with or + without data. + + * tests/Reactor_Performance_Test.cpp: New performance test. This + test is used to time the dispatching mechanisms of the + ACE_Reactors. Both the WFMO_Reactor and Select_Reactor can be + tested. + + * ace/Svc_Handler.cpp (shutdown): Change READ_MASK | WRITE_MASK to + ALL_EVENTS_MASK. + + * ace/Atomic_Op (value): Added an explicit value accessor. + Tue Oct 14 01:50:34 1997 Douglas C. Schmidt <schmidt@cs.wustl.edu> * ACE version 4.3.17, released Tue Oct 14 01:50:34 1997. diff --git a/ace/ACE_Library.mak b/ace/ACE_Library.mak index 2d6e1358a54..d4cd5d73353 100644 --- a/ace/ACE_Library.mak +++ b/ace/ACE_Library.mak @@ -131,6 +131,7 @@ CLEAN : -@erase "$(INTDIR)\OS.obj"
-@erase "$(INTDIR)\Parse_Node.obj"
-@erase "$(INTDIR)\Pipe.obj"
+ -@erase "$(INTDIR)\Priority_Reactor.obj"
-@erase "$(INTDIR)\Proactor.obj"
-@erase "$(INTDIR)\Process.obj"
-@erase "$(INTDIR)\Process_Manager.obj"
@@ -315,6 +316,7 @@ LINK32_OBJS= \ "$(INTDIR)\OS.obj" \
"$(INTDIR)\Parse_Node.obj" \
"$(INTDIR)\Pipe.obj" \
+ "$(INTDIR)\Priority_Reactor.obj" \
"$(INTDIR)\Proactor.obj" \
"$(INTDIR)\Process.obj" \
"$(INTDIR)\Process_Manager.obj" \
@@ -465,6 +467,7 @@ CLEAN : -@erase "$(INTDIR)\OS.obj"
-@erase "$(INTDIR)\Parse_Node.obj"
-@erase "$(INTDIR)\Pipe.obj"
+ -@erase "$(INTDIR)\Priority_Reactor.obj"
-@erase "$(INTDIR)\Proactor.obj"
-@erase "$(INTDIR)\Process.obj"
-@erase "$(INTDIR)\Process_Manager.obj"
@@ -634,6 +637,7 @@ LIB32_OBJS= \ "$(INTDIR)\OS.obj" \
"$(INTDIR)\Parse_Node.obj" \
"$(INTDIR)\Pipe.obj" \
+ "$(INTDIR)\Priority_Reactor.obj" \
"$(INTDIR)\Proactor.obj" \
"$(INTDIR)\Process.obj" \
"$(INTDIR)\Process_Manager.obj" \
@@ -784,6 +788,7 @@ CLEAN : -@erase "$(INTDIR)\OS.obj"
-@erase "$(INTDIR)\Parse_Node.obj"
-@erase "$(INTDIR)\Pipe.obj"
+ -@erase "$(INTDIR)\Priority_Reactor.obj"
-@erase "$(INTDIR)\Proactor.obj"
-@erase "$(INTDIR)\Process.obj"
-@erase "$(INTDIR)\Process_Manager.obj"
@@ -953,6 +958,7 @@ LIB32_OBJS= \ "$(INTDIR)\OS.obj" \
"$(INTDIR)\Parse_Node.obj" \
"$(INTDIR)\Pipe.obj" \
+ "$(INTDIR)\Priority_Reactor.obj" \
"$(INTDIR)\Proactor.obj" \
"$(INTDIR)\Process.obj" \
"$(INTDIR)\Process_Manager.obj" \
@@ -1103,6 +1109,7 @@ CLEAN : -@erase "$(INTDIR)\OS.obj"
-@erase "$(INTDIR)\Parse_Node.obj"
-@erase "$(INTDIR)\Pipe.obj"
+ -@erase "$(INTDIR)\Priority_Reactor.obj"
-@erase "$(INTDIR)\Proactor.obj"
-@erase "$(INTDIR)\Process.obj"
-@erase "$(INTDIR)\Process_Manager.obj"
@@ -1272,6 +1279,7 @@ LIB32_OBJS= \ "$(INTDIR)\OS.obj" \
"$(INTDIR)\Parse_Node.obj" \
"$(INTDIR)\Pipe.obj" \
+ "$(INTDIR)\Priority_Reactor.obj" \
"$(INTDIR)\Proactor.obj" \
"$(INTDIR)\Process.obj" \
"$(INTDIR)\Process_Manager.obj" \
@@ -1422,6 +1430,7 @@ CLEAN : -@erase "$(INTDIR)\OS.obj"
-@erase "$(INTDIR)\Parse_Node.obj"
-@erase "$(INTDIR)\Pipe.obj"
+ -@erase "$(INTDIR)\Priority_Reactor.obj"
-@erase "$(INTDIR)\Proactor.obj"
-@erase "$(INTDIR)\Process.obj"
-@erase "$(INTDIR)\Process_Manager.obj"
@@ -1591,6 +1600,7 @@ LIB32_OBJS= \ "$(INTDIR)\OS.obj" \
"$(INTDIR)\Parse_Node.obj" \
"$(INTDIR)\Pipe.obj" \
+ "$(INTDIR)\Priority_Reactor.obj" \
"$(INTDIR)\Proactor.obj" \
"$(INTDIR)\Process.obj" \
"$(INTDIR)\Process_Manager.obj" \
@@ -1741,6 +1751,7 @@ CLEAN : -@erase "$(INTDIR)\OS.obj"
-@erase "$(INTDIR)\Parse_Node.obj"
-@erase "$(INTDIR)\Pipe.obj"
+ -@erase "$(INTDIR)\Priority_Reactor.obj"
-@erase "$(INTDIR)\Proactor.obj"
-@erase "$(INTDIR)\Process.obj"
-@erase "$(INTDIR)\Process_Manager.obj"
@@ -1925,6 +1936,7 @@ LINK32_OBJS= \ "$(INTDIR)\OS.obj" \
"$(INTDIR)\Parse_Node.obj" \
"$(INTDIR)\Pipe.obj" \
+ "$(INTDIR)\Priority_Reactor.obj" \
"$(INTDIR)\Proactor.obj" \
"$(INTDIR)\Process.obj" \
"$(INTDIR)\Process_Manager.obj" \
@@ -2075,6 +2087,7 @@ CLEAN : -@erase "$(INTDIR)\OS.obj"
-@erase "$(INTDIR)\Parse_Node.obj"
-@erase "$(INTDIR)\Pipe.obj"
+ -@erase "$(INTDIR)\Priority_Reactor.obj"
-@erase "$(INTDIR)\Proactor.obj"
-@erase "$(INTDIR)\Process.obj"
-@erase "$(INTDIR)\Process_Manager.obj"
@@ -2255,6 +2268,7 @@ LINK32_OBJS= \ "$(INTDIR)\OS.obj" \
"$(INTDIR)\Parse_Node.obj" \
"$(INTDIR)\Pipe.obj" \
+ "$(INTDIR)\Priority_Reactor.obj" \
"$(INTDIR)\Proactor.obj" \
"$(INTDIR)\Process.obj" \
"$(INTDIR)\Process_Manager.obj" \
@@ -2405,6 +2419,7 @@ CLEAN : -@erase "$(INTDIR)\OS.obj"
-@erase "$(INTDIR)\Parse_Node.obj"
-@erase "$(INTDIR)\Pipe.obj"
+ -@erase "$(INTDIR)\Priority_Reactor.obj"
-@erase "$(INTDIR)\Proactor.obj"
-@erase "$(INTDIR)\Process.obj"
-@erase "$(INTDIR)\Process_Manager.obj"
@@ -2585,6 +2600,7 @@ LINK32_OBJS= \ "$(INTDIR)\OS.obj" \
"$(INTDIR)\Parse_Node.obj" \
"$(INTDIR)\Pipe.obj" \
+ "$(INTDIR)\Priority_Reactor.obj" \
"$(INTDIR)\Proactor.obj" \
"$(INTDIR)\Process.obj" \
"$(INTDIR)\Process_Manager.obj" \
@@ -13616,6 +13632,125 @@ DEP_CPP_WFMO_=\ !ENDIF
# End Source File
+################################################################################
+# Begin Source File
+
+SOURCE=.\Priority_Reactor.cpp
+DEP_CPP_PRIOR=\
+ {$(INCLUDE)}"\.\ACE.h"\
+ {$(INCLUDE)}"\.\ACE.i"\
+ {$(INCLUDE)}"\.\Atomic_Op.i"\
+ {$(INCLUDE)}"\.\Auto_Ptr.cpp"\
+ {$(INCLUDE)}"\.\Auto_Ptr.h"\
+ {$(INCLUDE)}"\.\Auto_Ptr.i"\
+ {$(INCLUDE)}"\.\config-win32-common.h"\
+ {$(INCLUDE)}"\.\config-win32.h"\
+ {$(INCLUDE)}"\.\config.h"\
+ {$(INCLUDE)}"\.\Containers.cpp"\
+ {$(INCLUDE)}"\.\Containers.h"\
+ {$(INCLUDE)}"\.\Containers.i"\
+ {$(INCLUDE)}"\.\Event_Handler.h"\
+ {$(INCLUDE)}"\.\Event_Handler.i"\
+ {$(INCLUDE)}"\.\Free_List.cpp"\
+ {$(INCLUDE)}"\.\Free_List.h"\
+ {$(INCLUDE)}"\.\Free_List.i"\
+ {$(INCLUDE)}"\.\Handle_Set.h"\
+ {$(INCLUDE)}"\.\Handle_Set.i"\
+ {$(INCLUDE)}"\.\Local_Tokens.h"\
+ {$(INCLUDE)}"\.\Local_Tokens.i"\
+ {$(INCLUDE)}"\.\Log_Msg.h"\
+ {$(INCLUDE)}"\.\Log_Priority.h"\
+ {$(INCLUDE)}"\.\Log_Record.h"\
+ {$(INCLUDE)}"\.\Log_Record.i"\
+ {$(INCLUDE)}"\.\Malloc.h"\
+ {$(INCLUDE)}"\.\Malloc.i"\
+ {$(INCLUDE)}"\.\Malloc_T.cpp"\
+ {$(INCLUDE)}"\.\Malloc_T.h"\
+ {$(INCLUDE)}"\.\Malloc_T.i"\
+ {$(INCLUDE)}"\.\Managed_Object.cpp"\
+ {$(INCLUDE)}"\.\Managed_Object.h"\
+ {$(INCLUDE)}"\.\Managed_Object.i"\
+ {$(INCLUDE)}"\.\Map_Manager.cpp"\
+ {$(INCLUDE)}"\.\Map_Manager.h"\
+ {$(INCLUDE)}"\.\Map_Manager.i"\
+ {$(INCLUDE)}"\.\Mem_Map.h"\
+ {$(INCLUDE)}"\.\Mem_Map.i"\
+ {$(INCLUDE)}"\.\Memory_Pool.h"\
+ {$(INCLUDE)}"\.\Memory_Pool.i"\
+ {$(INCLUDE)}"\.\Object_Manager.h"\
+ {$(INCLUDE)}"\.\Object_Manager.i"\
+ {$(INCLUDE)}"\.\OS.h"\
+ {$(INCLUDE)}"\.\OS.i"\
+ {$(INCLUDE)}"\.\Pipe.h"\
+ {$(INCLUDE)}"\.\Pipe.i"\
+ {$(INCLUDE)}"\.\Priority_Reactor.h"\
+ {$(INCLUDE)}"\.\Priority_Reactor.i"\
+ {$(INCLUDE)}"\.\Reactor.h"\
+ {$(INCLUDE)}"\.\Reactor.i"\
+ {$(INCLUDE)}"\.\Reactor_Impl.h"\
+ {$(INCLUDE)}"\.\Select_Reactor.h"\
+ {$(INCLUDE)}"\.\Select_Reactor.i"\
+ {$(INCLUDE)}"\.\Service_Config.h"\
+ {$(INCLUDE)}"\.\Service_Config.i"\
+ {$(INCLUDE)}"\.\Service_Object.h"\
+ {$(INCLUDE)}"\.\Service_Object.i"\
+ {$(INCLUDE)}"\.\Shared_Object.h"\
+ {$(INCLUDE)}"\.\Shared_Object.i"\
+ {$(INCLUDE)}"\.\Signal.h"\
+ {$(INCLUDE)}"\.\Signal.i"\
+ {$(INCLUDE)}"\.\SString.h"\
+ {$(INCLUDE)}"\.\SString.i"\
+ {$(INCLUDE)}"\.\stdcpp.h"\
+ {$(INCLUDE)}"\.\SV_Semaphore_Complex.h"\
+ {$(INCLUDE)}"\.\SV_Semaphore_Complex.i"\
+ {$(INCLUDE)}"\.\SV_Semaphore_Simple.h"\
+ {$(INCLUDE)}"\.\SV_Semaphore_Simple.i"\
+ {$(INCLUDE)}"\.\Svc_Conf_Tokens.h"\
+ {$(INCLUDE)}"\.\Synch.h"\
+ {$(INCLUDE)}"\.\Synch.i"\
+ {$(INCLUDE)}"\.\Synch_Options.h"\
+ {$(INCLUDE)}"\.\Synch_T.cpp"\
+ {$(INCLUDE)}"\.\Synch_T.h"\
+ {$(INCLUDE)}"\.\Synch_T.i"\
+ {$(INCLUDE)}"\.\Thread.h"\
+ {$(INCLUDE)}"\.\Thread.i"\
+ {$(INCLUDE)}"\.\Timer_Queue.h"\
+ {$(INCLUDE)}"\.\Timer_Queue_T.cpp"\
+ {$(INCLUDE)}"\.\Timer_Queue_T.h"\
+ {$(INCLUDE)}"\.\Timer_Queue_T.i"\
+ {$(INCLUDE)}"\.\Token.h"\
+ {$(INCLUDE)}"\.\Token.i"\
+ {$(INCLUDE)}"\.\Trace.h"\
+ {$(INCLUDE)}"\.\ws2tcpip.h"\
+
+
+!IF "$(CFG)" == "ACE dynamic library - Win32 Debug"
+
+
+"$(INTDIR)\Priority_Reactor.obj" : $(SOURCE) $(DEP_CPP_PRIOR) "$(INTDIR)"
+
+
+!ELSEIF "$(CFG)" == "ACE dynamic library - Win32 Unicode Debug"
+
+
+"$(INTDIR)\Priority_Reactor.obj" : $(SOURCE) $(DEP_CPP_PRIOR) "$(INTDIR)"
+
+
+!ELSEIF "$(CFG)" == "ACE dynamic library - Win32 Unicode Release"
+
+
+"$(INTDIR)\Priority_Reactor.obj" : $(SOURCE) $(DEP_CPP_PRIOR) "$(INTDIR)"
+
+
+!ELSEIF "$(CFG)" == "ACE dynamic library - Win32 Release"
+
+
+"$(INTDIR)\Priority_Reactor.obj" : $(SOURCE) $(DEP_CPP_PRIOR) "$(INTDIR)"
+
+
+!ENDIF
+
+# End Source File
# End Target
################################################################################
# Begin Target
@@ -24571,6 +24706,386 @@ DEP_CPP_SELEC=\ !ENDIF
# End Source File
+################################################################################
+# Begin Source File
+
+SOURCE=.\Priority_Reactor.cpp
+
+!IF "$(CFG)" == "ACE static library - Win32 Release"
+
+DEP_CPP_PRIOR=\
+ {$(INCLUDE)}"\.\ACE.h"\
+ {$(INCLUDE)}"\.\ACE.i"\
+ {$(INCLUDE)}"\.\Atomic_Op.i"\
+ {$(INCLUDE)}"\.\Auto_Ptr.cpp"\
+ {$(INCLUDE)}"\.\Auto_Ptr.h"\
+ {$(INCLUDE)}"\.\Auto_Ptr.i"\
+ {$(INCLUDE)}"\.\config-win32-common.h"\
+ {$(INCLUDE)}"\.\config-win32.h"\
+ {$(INCLUDE)}"\.\config.h"\
+ {$(INCLUDE)}"\.\Containers.cpp"\
+ {$(INCLUDE)}"\.\Containers.h"\
+ {$(INCLUDE)}"\.\Containers.i"\
+ {$(INCLUDE)}"\.\Event_Handler.h"\
+ {$(INCLUDE)}"\.\Event_Handler.i"\
+ {$(INCLUDE)}"\.\Free_List.cpp"\
+ {$(INCLUDE)}"\.\Free_List.h"\
+ {$(INCLUDE)}"\.\Free_List.i"\
+ {$(INCLUDE)}"\.\Handle_Set.h"\
+ {$(INCLUDE)}"\.\Handle_Set.i"\
+ {$(INCLUDE)}"\.\Local_Tokens.h"\
+ {$(INCLUDE)}"\.\Local_Tokens.i"\
+ {$(INCLUDE)}"\.\Log_Msg.h"\
+ {$(INCLUDE)}"\.\Log_Priority.h"\
+ {$(INCLUDE)}"\.\Log_Record.h"\
+ {$(INCLUDE)}"\.\Log_Record.i"\
+ {$(INCLUDE)}"\.\Malloc.h"\
+ {$(INCLUDE)}"\.\Malloc.i"\
+ {$(INCLUDE)}"\.\Malloc_T.cpp"\
+ {$(INCLUDE)}"\.\Malloc_T.h"\
+ {$(INCLUDE)}"\.\Malloc_T.i"\
+ {$(INCLUDE)}"\.\Managed_Object.cpp"\
+ {$(INCLUDE)}"\.\Managed_Object.h"\
+ {$(INCLUDE)}"\.\Managed_Object.i"\
+ {$(INCLUDE)}"\.\Map_Manager.cpp"\
+ {$(INCLUDE)}"\.\Map_Manager.h"\
+ {$(INCLUDE)}"\.\Map_Manager.i"\
+ {$(INCLUDE)}"\.\Mem_Map.h"\
+ {$(INCLUDE)}"\.\Mem_Map.i"\
+ {$(INCLUDE)}"\.\Memory_Pool.h"\
+ {$(INCLUDE)}"\.\Memory_Pool.i"\
+ {$(INCLUDE)}"\.\Object_Manager.h"\
+ {$(INCLUDE)}"\.\Object_Manager.i"\
+ {$(INCLUDE)}"\.\OS.h"\
+ {$(INCLUDE)}"\.\OS.i"\
+ {$(INCLUDE)}"\.\Pipe.h"\
+ {$(INCLUDE)}"\.\Pipe.i"\
+ {$(INCLUDE)}"\.\Priority_Reactor.h"\
+ {$(INCLUDE)}"\.\Priority_Reactor.i"\
+ {$(INCLUDE)}"\.\Reactor.h"\
+ {$(INCLUDE)}"\.\Reactor.i"\
+ {$(INCLUDE)}"\.\Reactor_Impl.h"\
+ {$(INCLUDE)}"\.\Select_Reactor.h"\
+ {$(INCLUDE)}"\.\Select_Reactor.i"\
+ {$(INCLUDE)}"\.\Service_Config.h"\
+ {$(INCLUDE)}"\.\Service_Config.i"\
+ {$(INCLUDE)}"\.\Service_Object.h"\
+ {$(INCLUDE)}"\.\Service_Object.i"\
+ {$(INCLUDE)}"\.\Shared_Object.h"\
+ {$(INCLUDE)}"\.\Shared_Object.i"\
+ {$(INCLUDE)}"\.\Signal.h"\
+ {$(INCLUDE)}"\.\Signal.i"\
+ {$(INCLUDE)}"\.\SString.h"\
+ {$(INCLUDE)}"\.\SString.i"\
+ {$(INCLUDE)}"\.\stdcpp.h"\
+ {$(INCLUDE)}"\.\SV_Semaphore_Complex.h"\
+ {$(INCLUDE)}"\.\SV_Semaphore_Complex.i"\
+ {$(INCLUDE)}"\.\SV_Semaphore_Simple.h"\
+ {$(INCLUDE)}"\.\SV_Semaphore_Simple.i"\
+ {$(INCLUDE)}"\.\Svc_Conf_Tokens.h"\
+ {$(INCLUDE)}"\.\Synch.h"\
+ {$(INCLUDE)}"\.\Synch.i"\
+ {$(INCLUDE)}"\.\Synch_Options.h"\
+ {$(INCLUDE)}"\.\Synch_T.cpp"\
+ {$(INCLUDE)}"\.\Synch_T.h"\
+ {$(INCLUDE)}"\.\Synch_T.i"\
+ {$(INCLUDE)}"\.\Thread.h"\
+ {$(INCLUDE)}"\.\Thread.i"\
+ {$(INCLUDE)}"\.\Timer_Queue.h"\
+ {$(INCLUDE)}"\.\Timer_Queue_T.cpp"\
+ {$(INCLUDE)}"\.\Timer_Queue_T.h"\
+ {$(INCLUDE)}"\.\Timer_Queue_T.i"\
+ {$(INCLUDE)}"\.\Token.h"\
+ {$(INCLUDE)}"\.\Token.i"\
+ {$(INCLUDE)}"\.\Trace.h"\
+ {$(INCLUDE)}"\.\ws2tcpip.h"\
+
+
+"$(INTDIR)\Priority_Reactor.obj" : $(SOURCE) $(DEP_CPP_PRIOR) "$(INTDIR)"
+
+
+!ELSEIF "$(CFG)" == "ACE static library - Win32 Debug"
+
+DEP_CPP_PRIOR=\
+ {$(INCLUDE)}"\.\ACE.h"\
+ {$(INCLUDE)}"\.\ACE.i"\
+ {$(INCLUDE)}"\.\Atomic_Op.i"\
+ {$(INCLUDE)}"\.\Auto_Ptr.cpp"\
+ {$(INCLUDE)}"\.\Auto_Ptr.h"\
+ {$(INCLUDE)}"\.\Auto_Ptr.i"\
+ {$(INCLUDE)}"\.\config-win32-common.h"\
+ {$(INCLUDE)}"\.\config-win32.h"\
+ {$(INCLUDE)}"\.\config.h"\
+ {$(INCLUDE)}"\.\Containers.cpp"\
+ {$(INCLUDE)}"\.\Containers.h"\
+ {$(INCLUDE)}"\.\Containers.i"\
+ {$(INCLUDE)}"\.\Event_Handler.h"\
+ {$(INCLUDE)}"\.\Event_Handler.i"\
+ {$(INCLUDE)}"\.\Free_List.cpp"\
+ {$(INCLUDE)}"\.\Free_List.h"\
+ {$(INCLUDE)}"\.\Free_List.i"\
+ {$(INCLUDE)}"\.\Handle_Set.h"\
+ {$(INCLUDE)}"\.\Handle_Set.i"\
+ {$(INCLUDE)}"\.\Local_Tokens.h"\
+ {$(INCLUDE)}"\.\Local_Tokens.i"\
+ {$(INCLUDE)}"\.\Log_Msg.h"\
+ {$(INCLUDE)}"\.\Log_Priority.h"\
+ {$(INCLUDE)}"\.\Log_Record.h"\
+ {$(INCLUDE)}"\.\Log_Record.i"\
+ {$(INCLUDE)}"\.\Malloc.h"\
+ {$(INCLUDE)}"\.\Malloc.i"\
+ {$(INCLUDE)}"\.\Malloc_T.cpp"\
+ {$(INCLUDE)}"\.\Malloc_T.h"\
+ {$(INCLUDE)}"\.\Malloc_T.i"\
+ {$(INCLUDE)}"\.\Managed_Object.cpp"\
+ {$(INCLUDE)}"\.\Managed_Object.h"\
+ {$(INCLUDE)}"\.\Managed_Object.i"\
+ {$(INCLUDE)}"\.\Map_Manager.cpp"\
+ {$(INCLUDE)}"\.\Map_Manager.h"\
+ {$(INCLUDE)}"\.\Map_Manager.i"\
+ {$(INCLUDE)}"\.\Mem_Map.h"\
+ {$(INCLUDE)}"\.\Mem_Map.i"\
+ {$(INCLUDE)}"\.\Memory_Pool.h"\
+ {$(INCLUDE)}"\.\Memory_Pool.i"\
+ {$(INCLUDE)}"\.\Object_Manager.h"\
+ {$(INCLUDE)}"\.\Object_Manager.i"\
+ {$(INCLUDE)}"\.\OS.h"\
+ {$(INCLUDE)}"\.\OS.i"\
+ {$(INCLUDE)}"\.\Pipe.h"\
+ {$(INCLUDE)}"\.\Pipe.i"\
+ {$(INCLUDE)}"\.\Priority_Reactor.h"\
+ {$(INCLUDE)}"\.\Priority_Reactor.i"\
+ {$(INCLUDE)}"\.\Reactor.h"\
+ {$(INCLUDE)}"\.\Reactor.i"\
+ {$(INCLUDE)}"\.\Reactor_Impl.h"\
+ {$(INCLUDE)}"\.\Select_Reactor.h"\
+ {$(INCLUDE)}"\.\Select_Reactor.i"\
+ {$(INCLUDE)}"\.\Service_Config.h"\
+ {$(INCLUDE)}"\.\Service_Config.i"\
+ {$(INCLUDE)}"\.\Service_Object.h"\
+ {$(INCLUDE)}"\.\Service_Object.i"\
+ {$(INCLUDE)}"\.\Shared_Object.h"\
+ {$(INCLUDE)}"\.\Shared_Object.i"\
+ {$(INCLUDE)}"\.\Signal.h"\
+ {$(INCLUDE)}"\.\Signal.i"\
+ {$(INCLUDE)}"\.\SString.h"\
+ {$(INCLUDE)}"\.\SString.i"\
+ {$(INCLUDE)}"\.\stdcpp.h"\
+ {$(INCLUDE)}"\.\SV_Semaphore_Complex.h"\
+ {$(INCLUDE)}"\.\SV_Semaphore_Complex.i"\
+ {$(INCLUDE)}"\.\SV_Semaphore_Simple.h"\
+ {$(INCLUDE)}"\.\SV_Semaphore_Simple.i"\
+ {$(INCLUDE)}"\.\Svc_Conf_Tokens.h"\
+ {$(INCLUDE)}"\.\Synch.h"\
+ {$(INCLUDE)}"\.\Synch.i"\
+ {$(INCLUDE)}"\.\Synch_Options.h"\
+ {$(INCLUDE)}"\.\Synch_T.cpp"\
+ {$(INCLUDE)}"\.\Synch_T.h"\
+ {$(INCLUDE)}"\.\Synch_T.i"\
+ {$(INCLUDE)}"\.\Thread.h"\
+ {$(INCLUDE)}"\.\Thread.i"\
+ {$(INCLUDE)}"\.\Timer_Queue.h"\
+ {$(INCLUDE)}"\.\Timer_Queue_T.cpp"\
+ {$(INCLUDE)}"\.\Timer_Queue_T.h"\
+ {$(INCLUDE)}"\.\Timer_Queue_T.i"\
+ {$(INCLUDE)}"\.\Token.h"\
+ {$(INCLUDE)}"\.\Token.i"\
+ {$(INCLUDE)}"\.\Trace.h"\
+ {$(INCLUDE)}"\.\ws2tcpip.h"\
+
+
+"$(INTDIR)\Priority_Reactor.obj" : $(SOURCE) $(DEP_CPP_PRIOR) "$(INTDIR)"
+
+
+!ELSEIF "$(CFG)" == "ACE static library - Win32 Unicode Debug"
+
+DEP_CPP_PRIOR=\
+ {$(INCLUDE)}"\.\ACE.h"\
+ {$(INCLUDE)}"\.\ACE.i"\
+ {$(INCLUDE)}"\.\Atomic_Op.i"\
+ {$(INCLUDE)}"\.\Auto_Ptr.cpp"\
+ {$(INCLUDE)}"\.\Auto_Ptr.h"\
+ {$(INCLUDE)}"\.\Auto_Ptr.i"\
+ {$(INCLUDE)}"\.\config-win32-common.h"\
+ {$(INCLUDE)}"\.\config-win32.h"\
+ {$(INCLUDE)}"\.\config.h"\
+ {$(INCLUDE)}"\.\Containers.cpp"\
+ {$(INCLUDE)}"\.\Containers.h"\
+ {$(INCLUDE)}"\.\Containers.i"\
+ {$(INCLUDE)}"\.\Event_Handler.h"\
+ {$(INCLUDE)}"\.\Event_Handler.i"\
+ {$(INCLUDE)}"\.\Free_List.cpp"\
+ {$(INCLUDE)}"\.\Free_List.h"\
+ {$(INCLUDE)}"\.\Free_List.i"\
+ {$(INCLUDE)}"\.\Handle_Set.h"\
+ {$(INCLUDE)}"\.\Handle_Set.i"\
+ {$(INCLUDE)}"\.\Local_Tokens.h"\
+ {$(INCLUDE)}"\.\Local_Tokens.i"\
+ {$(INCLUDE)}"\.\Log_Msg.h"\
+ {$(INCLUDE)}"\.\Log_Priority.h"\
+ {$(INCLUDE)}"\.\Log_Record.h"\
+ {$(INCLUDE)}"\.\Log_Record.i"\
+ {$(INCLUDE)}"\.\Malloc.h"\
+ {$(INCLUDE)}"\.\Malloc.i"\
+ {$(INCLUDE)}"\.\Malloc_T.cpp"\
+ {$(INCLUDE)}"\.\Malloc_T.h"\
+ {$(INCLUDE)}"\.\Malloc_T.i"\
+ {$(INCLUDE)}"\.\Managed_Object.cpp"\
+ {$(INCLUDE)}"\.\Managed_Object.h"\
+ {$(INCLUDE)}"\.\Managed_Object.i"\
+ {$(INCLUDE)}"\.\Map_Manager.cpp"\
+ {$(INCLUDE)}"\.\Map_Manager.h"\
+ {$(INCLUDE)}"\.\Map_Manager.i"\
+ {$(INCLUDE)}"\.\Mem_Map.h"\
+ {$(INCLUDE)}"\.\Mem_Map.i"\
+ {$(INCLUDE)}"\.\Memory_Pool.h"\
+ {$(INCLUDE)}"\.\Memory_Pool.i"\
+ {$(INCLUDE)}"\.\Object_Manager.h"\
+ {$(INCLUDE)}"\.\Object_Manager.i"\
+ {$(INCLUDE)}"\.\OS.h"\
+ {$(INCLUDE)}"\.\OS.i"\
+ {$(INCLUDE)}"\.\Pipe.h"\
+ {$(INCLUDE)}"\.\Pipe.i"\
+ {$(INCLUDE)}"\.\Priority_Reactor.h"\
+ {$(INCLUDE)}"\.\Priority_Reactor.i"\
+ {$(INCLUDE)}"\.\Reactor.h"\
+ {$(INCLUDE)}"\.\Reactor.i"\
+ {$(INCLUDE)}"\.\Reactor_Impl.h"\
+ {$(INCLUDE)}"\.\Select_Reactor.h"\
+ {$(INCLUDE)}"\.\Select_Reactor.i"\
+ {$(INCLUDE)}"\.\Service_Config.h"\
+ {$(INCLUDE)}"\.\Service_Config.i"\
+ {$(INCLUDE)}"\.\Service_Object.h"\
+ {$(INCLUDE)}"\.\Service_Object.i"\
+ {$(INCLUDE)}"\.\Shared_Object.h"\
+ {$(INCLUDE)}"\.\Shared_Object.i"\
+ {$(INCLUDE)}"\.\Signal.h"\
+ {$(INCLUDE)}"\.\Signal.i"\
+ {$(INCLUDE)}"\.\SString.h"\
+ {$(INCLUDE)}"\.\SString.i"\
+ {$(INCLUDE)}"\.\stdcpp.h"\
+ {$(INCLUDE)}"\.\SV_Semaphore_Complex.h"\
+ {$(INCLUDE)}"\.\SV_Semaphore_Complex.i"\
+ {$(INCLUDE)}"\.\SV_Semaphore_Simple.h"\
+ {$(INCLUDE)}"\.\SV_Semaphore_Simple.i"\
+ {$(INCLUDE)}"\.\Svc_Conf_Tokens.h"\
+ {$(INCLUDE)}"\.\Synch.h"\
+ {$(INCLUDE)}"\.\Synch.i"\
+ {$(INCLUDE)}"\.\Synch_Options.h"\
+ {$(INCLUDE)}"\.\Synch_T.cpp"\
+ {$(INCLUDE)}"\.\Synch_T.h"\
+ {$(INCLUDE)}"\.\Synch_T.i"\
+ {$(INCLUDE)}"\.\Thread.h"\
+ {$(INCLUDE)}"\.\Thread.i"\
+ {$(INCLUDE)}"\.\Timer_Queue.h"\
+ {$(INCLUDE)}"\.\Timer_Queue_T.cpp"\
+ {$(INCLUDE)}"\.\Timer_Queue_T.h"\
+ {$(INCLUDE)}"\.\Timer_Queue_T.i"\
+ {$(INCLUDE)}"\.\Token.h"\
+ {$(INCLUDE)}"\.\Token.i"\
+ {$(INCLUDE)}"\.\Trace.h"\
+ {$(INCLUDE)}"\.\ws2tcpip.h"\
+
+
+"$(INTDIR)\Priority_Reactor.obj" : $(SOURCE) $(DEP_CPP_PRIOR) "$(INTDIR)"
+
+
+!ELSEIF "$(CFG)" == "ACE static library - Win32 Unicode Release"
+
+DEP_CPP_PRIOR=\
+ {$(INCLUDE)}"\.\ACE.h"\
+ {$(INCLUDE)}"\.\ACE.i"\
+ {$(INCLUDE)}"\.\Atomic_Op.i"\
+ {$(INCLUDE)}"\.\Auto_Ptr.cpp"\
+ {$(INCLUDE)}"\.\Auto_Ptr.h"\
+ {$(INCLUDE)}"\.\Auto_Ptr.i"\
+ {$(INCLUDE)}"\.\config-win32-common.h"\
+ {$(INCLUDE)}"\.\config-win32.h"\
+ {$(INCLUDE)}"\.\config.h"\
+ {$(INCLUDE)}"\.\Containers.cpp"\
+ {$(INCLUDE)}"\.\Containers.h"\
+ {$(INCLUDE)}"\.\Containers.i"\
+ {$(INCLUDE)}"\.\Event_Handler.h"\
+ {$(INCLUDE)}"\.\Event_Handler.i"\
+ {$(INCLUDE)}"\.\Free_List.cpp"\
+ {$(INCLUDE)}"\.\Free_List.h"\
+ {$(INCLUDE)}"\.\Free_List.i"\
+ {$(INCLUDE)}"\.\Handle_Set.h"\
+ {$(INCLUDE)}"\.\Handle_Set.i"\
+ {$(INCLUDE)}"\.\Local_Tokens.h"\
+ {$(INCLUDE)}"\.\Local_Tokens.i"\
+ {$(INCLUDE)}"\.\Log_Msg.h"\
+ {$(INCLUDE)}"\.\Log_Priority.h"\
+ {$(INCLUDE)}"\.\Log_Record.h"\
+ {$(INCLUDE)}"\.\Log_Record.i"\
+ {$(INCLUDE)}"\.\Malloc.h"\
+ {$(INCLUDE)}"\.\Malloc.i"\
+ {$(INCLUDE)}"\.\Malloc_T.cpp"\
+ {$(INCLUDE)}"\.\Malloc_T.h"\
+ {$(INCLUDE)}"\.\Malloc_T.i"\
+ {$(INCLUDE)}"\.\Managed_Object.cpp"\
+ {$(INCLUDE)}"\.\Managed_Object.h"\
+ {$(INCLUDE)}"\.\Managed_Object.i"\
+ {$(INCLUDE)}"\.\Map_Manager.cpp"\
+ {$(INCLUDE)}"\.\Map_Manager.h"\
+ {$(INCLUDE)}"\.\Map_Manager.i"\
+ {$(INCLUDE)}"\.\Mem_Map.h"\
+ {$(INCLUDE)}"\.\Mem_Map.i"\
+ {$(INCLUDE)}"\.\Memory_Pool.h"\
+ {$(INCLUDE)}"\.\Memory_Pool.i"\
+ {$(INCLUDE)}"\.\Object_Manager.h"\
+ {$(INCLUDE)}"\.\Object_Manager.i"\
+ {$(INCLUDE)}"\.\OS.h"\
+ {$(INCLUDE)}"\.\OS.i"\
+ {$(INCLUDE)}"\.\Pipe.h"\
+ {$(INCLUDE)}"\.\Pipe.i"\
+ {$(INCLUDE)}"\.\Priority_Reactor.h"\
+ {$(INCLUDE)}"\.\Priority_Reactor.i"\
+ {$(INCLUDE)}"\.\Reactor.h"\
+ {$(INCLUDE)}"\.\Reactor.i"\
+ {$(INCLUDE)}"\.\Reactor_Impl.h"\
+ {$(INCLUDE)}"\.\Select_Reactor.h"\
+ {$(INCLUDE)}"\.\Select_Reactor.i"\
+ {$(INCLUDE)}"\.\Service_Config.h"\
+ {$(INCLUDE)}"\.\Service_Config.i"\
+ {$(INCLUDE)}"\.\Service_Object.h"\
+ {$(INCLUDE)}"\.\Service_Object.i"\
+ {$(INCLUDE)}"\.\Shared_Object.h"\
+ {$(INCLUDE)}"\.\Shared_Object.i"\
+ {$(INCLUDE)}"\.\Signal.h"\
+ {$(INCLUDE)}"\.\Signal.i"\
+ {$(INCLUDE)}"\.\SString.h"\
+ {$(INCLUDE)}"\.\SString.i"\
+ {$(INCLUDE)}"\.\stdcpp.h"\
+ {$(INCLUDE)}"\.\SV_Semaphore_Complex.h"\
+ {$(INCLUDE)}"\.\SV_Semaphore_Complex.i"\
+ {$(INCLUDE)}"\.\SV_Semaphore_Simple.h"\
+ {$(INCLUDE)}"\.\SV_Semaphore_Simple.i"\
+ {$(INCLUDE)}"\.\Svc_Conf_Tokens.h"\
+ {$(INCLUDE)}"\.\Synch.h"\
+ {$(INCLUDE)}"\.\Synch.i"\
+ {$(INCLUDE)}"\.\Synch_Options.h"\
+ {$(INCLUDE)}"\.\Synch_T.cpp"\
+ {$(INCLUDE)}"\.\Synch_T.h"\
+ {$(INCLUDE)}"\.\Synch_T.i"\
+ {$(INCLUDE)}"\.\Thread.h"\
+ {$(INCLUDE)}"\.\Thread.i"\
+ {$(INCLUDE)}"\.\Timer_Queue.h"\
+ {$(INCLUDE)}"\.\Timer_Queue_T.cpp"\
+ {$(INCLUDE)}"\.\Timer_Queue_T.h"\
+ {$(INCLUDE)}"\.\Timer_Queue_T.i"\
+ {$(INCLUDE)}"\.\Token.h"\
+ {$(INCLUDE)}"\.\Token.i"\
+ {$(INCLUDE)}"\.\Trace.h"\
+ {$(INCLUDE)}"\.\ws2tcpip.h"\
+
+
+"$(INTDIR)\Priority_Reactor.obj" : $(SOURCE) $(DEP_CPP_PRIOR) "$(INTDIR)"
+
+
+!ENDIF
+
+# End Source File
# End Target
# End Project
################################################################################
diff --git a/ace/ACE_Library.mdp b/ace/ACE_Library.mdp Binary files differindex c7b81ad872b..51e0799f77c 100644 --- a/ace/ACE_Library.mdp +++ b/ace/ACE_Library.mdp diff --git a/ace/Atomic_Op.i b/ace/Atomic_Op.i index 323de27e2c8..06c6b3f4611 100644 --- a/ace/Atomic_Op.i +++ b/ace/Atomic_Op.i @@ -115,6 +115,14 @@ ACE_Atomic_Op<ACE_LOCK, TYPE>::operator TYPE () const return this->value_; } +template <class ACE_LOCK, class TYPE> ACE_INLINE TYPE +ACE_Atomic_Op<ACE_LOCK, TYPE>::value (void) const +{ +// ACE_TRACE ("ACE_Atomic_Op<ACE_LOCK, TYPE>::value"); + ACE_Guard<ACE_LOCK> m ((ACE_LOCK &) this->lock_); + return this->value_; +} + template <class ACE_LOCK, class TYPE> ACE_INLINE void ACE_Atomic_Op<ACE_LOCK, TYPE>::operator= (const TYPE &i) { diff --git a/ace/Svc_Handler.cpp b/ace/Svc_Handler.cpp index ee4113600f9..2811ad35b98 100644 --- a/ace/Svc_Handler.cpp +++ b/ace/Svc_Handler.cpp @@ -179,8 +179,7 @@ ACE_Svc_Handler<PR_ST_2, ACE_SYNCH_2>::shutdown (void) // Deregister this handler with the ACE_Reactor. if (this->reactor ()) { - ACE_Reactor_Mask mask = ACE_Event_Handler::WRITE_MASK | - ACE_Event_Handler::READ_MASK | + ACE_Reactor_Mask mask = ACE_Event_Handler::ALL_EVENTS_MASK | ACE_Event_Handler::DONT_CALL; // Make sure there are no timers. diff --git a/ace/Synch_T.h b/ace/Synch_T.h index a00bad885cd..705f167a98a 100644 --- a/ace/Synch_T.h +++ b/ace/Synch_T.h @@ -193,6 +193,9 @@ public: operator TYPE () const; // Atomically return <count_>. + TYPE value (void) const; + // Explicitly return <count_>. + void dump (void) const; // Dump the state of an object. diff --git a/tests/Notify_Performance_Test.cpp b/tests/Notify_Performance_Test.cpp new file mode 100644 index 00000000000..243e7767eec --- /dev/null +++ b/tests/Notify_Performance_Test.cpp @@ -0,0 +1,228 @@ +// $Id$ + +// ============================================================================ +// +// = LIBRARY +// tests +// +// = FILENAME +// Notify_Performance_Test.cpp +// +// = DESCRIPTION +// +// This test is used to time the notification mechanisms of the +// ACE_Reactors. Both the WFMO_Reactor and Select_Reactor can be +// tested. The notify() mechanism can also be tested with or +// without data. +// +// = AUTHOR +// Irfan Pyarali +// +// ============================================================================ + +#include "test_config.h" +#include "ace/Profile_Timer.h" +#include "ace/Get_Opt.h" +#include "ace/Reactor.h" +#include "ace/WFMO_Reactor.h" +#include "ace/Select_Reactor.h" +#include "ace/Auto_Ptr.h" +#include "ace/Synch.h" + +#if defined (ACE_HAS_THREADS) + +// Number of client (user) threads +static long opt_nthreads = 1; + +// Number of notify calls +static int opt_nloops = 20000; + +// Use the WFMO_Reactor +static int opt_wfmo_reactor = 0; + +// Use the Select_Reactor +static int opt_select_reactor = 0; + +// Pass data through the notify call +static int opt_pass_notify_data = 0; + +// Simple no-op handler +class Handler : public ACE_Event_Handler +{ +public: + virtual int handle_exception (ACE_HANDLE fd = ACE_INVALID_HANDLE); + // The Handler callbacks. +}; + +int +Handler::handle_exception (ACE_HANDLE handle) +{ + return 0; +} + +// Execute the client tests. +void * +client (void *arg) +{ + // Number of client (user) threads + static ACE_Atomic_Op<ACE_Thread_Mutex, long> thread_counter = opt_nthreads; + + // To pass or not to pass is the question + Handler *handler = 0; + if (!opt_pass_notify_data) + handler = 0; + else + handler = (Handler *) arg; + + for (int i = 0; i < opt_nloops; i++) + ACE_Reactor::instance ()->notify (handler); + + if (--thread_counter == 0) + ACE_Reactor::end_event_loop (); + + return 0; +} + +#endif /* ACE_HAS_THREADS */ + +// Sets up the correct reactor (based on platform and options) +void +create_reactor (void) +{ + ACE_Reactor_Impl *impl = 0; + + if (opt_wfmo_reactor) + { +#if defined (ACE_WIN32) + ACE_NEW (impl, ACE_WFMO_Reactor); +#endif /* ACE_WIN32 */ + } + else if (opt_select_reactor) + { + ACE_NEW (impl, ACE_Select_Reactor); + } + ACE_Reactor *reactor = 0; + ACE_NEW (reactor, ACE_Reactor (impl)); + ACE_Reactor::instance (reactor); +} + +void +print_results (ACE_Profile_Timer::ACE_Elapsed_Time &et) +{ + char *reactor_type = 0; + if (opt_wfmo_reactor) + reactor_type = "WFMO_Reactor"; + else if (opt_select_reactor) + reactor_type = "Select_Reactor"; + else + reactor_type = "Platform's default Reactor"; + + ACE_DEBUG ((LM_DEBUG, "\nNotify_Performance Test statistics:\n\n")); + ACE_DEBUG ((LM_DEBUG, "\tReactor Type: %s\n", reactor_type)); + ACE_DEBUG ((LM_DEBUG, "\tWorker threads (calling notify()): %d\n", opt_nthreads)); + ACE_DEBUG ((LM_DEBUG, "\tIteration per thread: %d\n", opt_nloops)); + if (opt_pass_notify_data) + ACE_DEBUG ((LM_DEBUG, "\tData was passed in the notify() call\n")); + else + ACE_DEBUG ((LM_DEBUG, "\tNo data was passed in the notify() call\n")); + + ACE_DEBUG ((LM_DEBUG, "\n\tTiming results notify() call:\n")); + ACE_DEBUG ((LM_DEBUG, + "\t\treal time = %f secs \n\t\tuser time = %f secs \n\t\tsystem time = %f secs\n\n", + et.real_time, + et.user_time, + et.system_time)); +} + +int +main (int argc, char *argv[]) +{ + ACE_START_TEST ("Notify_Performance_Test"); + +#if defined (ACE_HAS_THREADS) + + ACE_Get_Opt getopt (argc, argv, "swdc:l:", 1); + for (int c; (c = getopt ()) != -1; ) + switch (c) + { + case 's': + opt_select_reactor = 1; + break; + case 'w': + opt_wfmo_reactor = 1; + break; + case 'c': + opt_nthreads = atoi (getopt.optarg); + break; + case 'l': + opt_nloops = atoi (getopt.optarg); + break; + case 'd': + opt_pass_notify_data = 1; + break; + } + + // Sets up the correct reactor (based on platform and options) + create_reactor (); + + // Manage memory automagically. + auto_ptr<ACE_Reactor> reactor (ACE_Reactor::instance ()); + auto_ptr<ACE_Reactor_Impl> impl; + + // If we are using other that the default implementation, we must + // clean up. + if (opt_select_reactor || opt_wfmo_reactor) + impl = ACE_Reactor::instance ()->implementation (); + + // Callback object + Handler handler; + + // Spawn worker threads + if (ACE_Thread_Manager::instance ()->spawn_n + (opt_nthreads, + ACE_THR_FUNC (client), + (void *) &handler, + THR_NEW_LWP | THR_DETACHED) == -1) + ACE_ERROR ((LM_ERROR, "(%P|%t) %p\n%a", "thread create failed")); + + // Timer business + ACE_Profile_Timer timer; + timer.start (); + + // Run event loop + ACE_Reactor::instance()->run_event_loop (); + + timer.stop (); + + ACE_Profile_Timer::ACE_Elapsed_Time et; + timer.elapsed_time (et); + + // Print results + print_results (et); + + ACE_DEBUG ((LM_DEBUG, "(%P|%t) waiting for the worker threads...\n")); + + // Wait for all worker to get done. + ACE_Thread_Manager::instance ()->wait (); + +#else + ACE_ERROR ((LM_ERROR, "threads not supported on this platform\n")); +#endif /* ACE_HAS_THREADS */ + + ACE_END_TEST; + return 0; +} + +#if defined (ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION) +template class auto_ptr<ACE_Reactor>; +template class ACE_Auto_Basic_Ptr<ACE_Reactor>; +template class auto_ptr<ACE_Reactor_Impl>; +template class ACE_Auto_Basic_Ptr<ACE_Reactor_Impl>; +template class ACE_Atomic_Op<ACE_Thread_Mutex, long>; +#elif defined (ACE_HAS_TEMPLATE_INSTANTIATION_PRAGMA) +#pragma instantiate auto_ptr<ACE_Reactor> +#pragma instantiate ACE_Auto_Basic_Ptr<ACE_Reactor> +#pragma instantiate auto_ptr<ACE_Reactor_Impl> +#pragma instantiate ACE_Auto_Basic_Ptr<ACE_Reactor_Impl> +#pragma instantiate ACE_Atomic_Op<ACE_Thread_Mutex, long> +#endif /* ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION */ diff --git a/tests/Reactor_Performance_Test.cpp b/tests/Reactor_Performance_Test.cpp new file mode 100644 index 00000000000..3b42420436a --- /dev/null +++ b/tests/Reactor_Performance_Test.cpp @@ -0,0 +1,374 @@ +// $Id$ + +// ============================================================================ +// +// = LIBRARY +// tests +// +// = FILENAME +// Reactor_Performance_Test.cpp +// +// = DESCRIPTION +// +// This test is used to time the dispatching mechanisms of the +// ACE_Reactors. Both the WFMO_Reactor and Select_Reactor can be +// tested. +// +// = AUTHOR +// Irfan Pyarali +// +// ============================================================================ + +#include "test_config.h" +#include "ace/Profile_Timer.h" +#include "ace/Get_Opt.h" +#include "ace/SOCK_Connector.h" +#include "ace/SOCK_Acceptor.h" +#include "ace/Acceptor.h" +#include "ace/Connector.h" +#include "ace/Reactor.h" +#include "ace/WFMO_Reactor.h" +#include "ace/Select_Reactor.h" +#include "ace/Auto_Ptr.h" + +#if defined (ACE_HAS_THREADS) + +// Number of client (user) threads +static int opt_nconnections = 20; + +// Number of data exchanges +static int opt_nloops = 200; + +// Use the WFMO_Reactor +static int opt_wfmo_reactor = 0; + +// Use the Select_Reactor +static int opt_select_reactor = 0; + +// Simple class for reading in the data +class Read_Handler : public ACE_Svc_Handler<ACE_SOCK_STREAM, ACE_SYNCH> +{ +public: + static void set_countdown (int nconnections); + + virtual int open (void *); + virtual int handle_input (ACE_HANDLE h); + virtual int handle_close (ACE_HANDLE handle, + ACE_Reactor_Mask close_mask); + // The Svc_Handler callbacks. + +private: + static int waiting_; + // How many connections are we waiting for. +}; + +int Read_Handler::waiting_ = 0; + +void +Read_Handler::set_countdown (int nconnections) +{ + Read_Handler::waiting_ = nconnections; +} + +// Initialize the Svc_Handler +int +Read_Handler::open (void *) +{ + if (this->peer ().enable (ACE_NONBLOCK) == -1) + ACE_ERROR_RETURN ((LM_ERROR, + "(%t) Read_Handler::open, cannot set non blocking mode\n"), -1); + + if (reactor ()->register_handler (this, READ_MASK | CLOSE_MASK) == -1) + ACE_ERROR_RETURN ((LM_ERROR, + "(%t) Read_Handler::open, cannot register handler\n"), -1); + + ACE_DEBUG ((LM_DEBUG, "(%t) created svc_handler for handle %d\n", get_handle ())); + return 0; +} + +// Handle incoming data +int +Read_Handler::handle_input (ACE_HANDLE h) +{ + char buf[BUFSIZ]; + + ssize_t result = this->peer ().recv (buf, sizeof (buf)); + if (result <= 0) + { + if (result < 0 && errno == EWOULDBLOCK) + return 0; + + if (result != 0) + ACE_DEBUG ((LM_DEBUG, "(%t) %p\n", "Read_Handler::handle_input")); + + // This will cause handle_close to get called + return -1; + } + + return 0; +} + +// Handle connection shutdown +int +Read_Handler::handle_close (ACE_HANDLE handle, + ACE_Reactor_Mask close_mask) +{ + // Reduce count + waiting_--; + + // If no connections are open + if (waiting_ == 0) + { + ACE_Reactor::instance ()->end_event_loop (); + } + + ACE_DEBUG ((LM_DEBUG, + "(%t) Read_Handler::handle_close closing down\n")); + + // Shutdown + this->destroy (); + return 0; +} + +// This Svc_Handler simply connects to a server and sends some output +// to it. Its purpose is to feed the test. +class Write_Handler : public ACE_Svc_Handler<ACE_SOCK_STREAM, ACE_SYNCH> +{ +public: + virtual int open (void *); + virtual int send_data (void); +}; + +int +Write_Handler::open (void *) +{ + return 0; +} + +int +Write_Handler::send_data (void) +{ + int send_size = sizeof (ACE_ALPHABET) - 1; + + if (this->peer ().send_n (ACE_ALPHABET, send_size) != send_size) + ACE_ERROR_RETURN ((LM_ERROR, "(%t) %p\n", "send_n"), -1); + + return 0; +} + +// Connection factories +typedef ACE_Connector<Write_Handler, ACE_SOCK_CONNECTOR> CONNECTOR; +typedef ACE_Acceptor<Read_Handler, ACE_SOCK_ACCEPTOR> ACCEPTOR; + +// Execute the client tests. +void * +client (void *arg) +{ + ACE_DEBUG ((LM_DEBUG, "(%t) running client\n")); + + ACE_INET_Addr *connection_addr = (ACE_INET_Addr*) arg; + CONNECTOR connector; + + int i; + + // Automagic memory cleanup + ACE_Auto_Basic_Array_Ptr <Write_Handler *> writers; + Write_Handler **temp_writers; + ACE_NEW_RETURN (temp_writers, Write_Handler *[opt_nconnections], 0); + writers = temp_writers; + + // Automagic memory cleanup + ACE_Auto_Array_Ptr <ACE_INET_Addr> addresses; + ACE_INET_Addr *temp_addresses; + ACE_NEW_RETURN (temp_addresses, ACE_INET_Addr [opt_nconnections], 0); + addresses = temp_addresses; + + // Initialize array + for (i = 0; i < opt_nconnections; i++) + { + writers[i] = 0; + addresses[i] = *connection_addr; + } + + // Connection all <opt_nconnections> svc_handlers + int result = connector.connect_n (opt_nconnections, + writers.get (), + addresses.get ()); + if (result == -1) + ACE_ERROR_RETURN ((LM_ERROR, "(%t) %p\n", "connects failed"), 0); + + // Iterate to send data + for (int j = 0; j < opt_nloops; j++) + for (i = 0; i < opt_nconnections; i++) + if (writers[i]->send_data () == -1) + ACE_ERROR_RETURN ((LM_ERROR, "(%t) %p\n", "writer::send_data"), 0); + + // Cleanup + for (i = 0; i < opt_nconnections; i++) + writers[i]->destroy (); + + ACE_DEBUG ((LM_DEBUG, "(%t) finishing client\n")); + return 0; +} + +// Sets up the correct reactor (based on platform and options) +void +create_reactor (void) +{ + ACE_Reactor_Impl *impl = 0; + + if (opt_wfmo_reactor) + { +#if defined (ACE_WIN32) + ACE_NEW (impl, ACE_WFMO_Reactor); +#endif /* ACE_WIN32 */ + } + else if (opt_select_reactor) + { + ACE_NEW (impl, ACE_Select_Reactor); + } + ACE_Reactor *reactor = 0; + ACE_NEW (reactor, ACE_Reactor (impl)); + ACE_Reactor::instance (reactor); +} + +// Print stats +void +print_results (ACE_Profile_Timer::ACE_Elapsed_Time &et) +{ + char *reactor_type = 0; + if (opt_wfmo_reactor) + reactor_type = "WFMO_Reactor"; + else if (opt_select_reactor) + reactor_type = "Select_Reactor"; + else + reactor_type = "Platform's default Reactor"; + + ACE_DEBUG ((LM_DEBUG, "\n\tReactor_Performance Test statistics:\n\n")); + ACE_DEBUG ((LM_DEBUG, "\tReactor Type: %s\n", reactor_type)); + ACE_DEBUG ((LM_DEBUG, "\tConnections: %d\n", opt_nconnections)); + ACE_DEBUG ((LM_DEBUG, "\tIteration per connection: %d\n", opt_nloops)); + + ACE_DEBUG ((LM_DEBUG, "\n\tTiming results:\n")); + ACE_DEBUG ((LM_DEBUG, + "\t\treal time = %f secs \n\t\tuser time = %f secs \n\t\tsystem time = %f secs\n\n", + et.real_time, + et.user_time, + et.system_time)); +} + +#endif /* ACE_HAS_THREADS */ + +int +main (int argc, char *argv[]) +{ + ACE_START_TEST ("Reactor_Performance_Test"); + +#if defined (ACE_HAS_THREADS) + + ACE_Get_Opt getopt (argc, argv, "swc:l:", 1); + for (int c; (c = getopt ()) != -1; ) + switch (c) + { + case 's': + opt_select_reactor = 1; + break; + case 'w': + opt_wfmo_reactor = 1; + break; + case 'c': + opt_nconnections = atoi (getopt.optarg); + break; + case 'l': + opt_nloops = atoi (getopt.optarg); + break; + } + + // Sets up the correct reactor (based on platform and options) + create_reactor (); + + // Manage memory automagically. + auto_ptr<ACE_Reactor> reactor (ACE_Reactor::instance ()); + auto_ptr<ACE_Reactor_Impl> impl; + + // If we are using other that the default implementation, we must + // clean up. + if (opt_select_reactor || opt_wfmo_reactor) + impl = ACE_Reactor::instance ()->implementation (); + + Read_Handler::set_countdown (opt_nconnections); + + // Acceptor + ACCEPTOR acceptor; + ACE_INET_Addr server_addr; + + // Bind acceptor to any port and then find out what the port was. + if (acceptor.open ((const ACE_INET_Addr &) ACE_Addr::sap_any) == -1 + || acceptor.acceptor ().get_local_addr (server_addr) == -1) + ACE_ERROR_RETURN ((LM_ERROR, "(%t) %p\n", "open"), -1); + + ACE_DEBUG ((LM_DEBUG, "(%t) starting server at port %d\n", + server_addr.get_port_number ())); + + ACE_INET_Addr connection_addr (server_addr.get_port_number (), "localhost"); + + if (ACE_Thread_Manager::instance ()->spawn + (ACE_THR_FUNC (client), + (void *) &connection_addr, + THR_NEW_LWP | THR_DETACHED) == -1) + ACE_ERROR ((LM_ERROR, "(%t) %p\n", "thread create failed")); + + ACE_Profile_Timer timer; + timer.start (); + ACE_Reactor::instance()->run_event_loop (); + timer.stop (); + + ACE_Profile_Timer::ACE_Elapsed_Time et; + timer.elapsed_time (et); + + // Print results + print_results (et); + + ACE_DEBUG ((LM_DEBUG, "(%t) waiting for the client thread...\n")); + + ACE_Thread_Manager::instance ()->wait (); + +#else + ACE_ERROR ((LM_ERROR, "threads not supported on this platform\n")); +#endif /* ACE_HAS_THREADS */ + + ACE_END_TEST; + return 0; +} + +#if defined (ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION) +template class ACE_Connector<Write_Handler, ACE_SOCK_CONNECTOR>; +template class ACE_Acceptor<Read_Handler, ACE_SOCK_ACCEPTOR>; +template class ACE_Svc_Handler<ACE_SOCK_STREAM, ACE_SYNCH>; +template class auto_ptr<ACE_Reactor>; +template class ACE_Auto_Basic_Ptr<ACE_Reactor>; +template class auto_ptr<ACE_Reactor_Impl>; +template class ACE_Auto_Basic_Ptr<ACE_Reactor_Impl>; +template class ACE_Map_Manager<int,ACE_Svc_Tuple<Write_Handler>*,ACE_SYNCH_RW_MUTEX>; +template class ACE_Map_Iterator<int,ACE_Svc_Tuple<Write_Handler>*,ACE_SYNCH_RW_MUTEX>; +template class ACE_Map_Entry<int,ACE_Svc_Tuple<Write_Handler>*>; +template class ACE_Svc_Tuple<Write_Handler>; +template class ACE_Auto_Basic_Array_Ptr <Write_Handler *>; +template class ACE_Auto_Basic_Array_Ptr <ACE_INET_Addr>; +template class ACE_Auto_Array_Ptr <ACE_INET_Addr>; +#elif defined (ACE_HAS_TEMPLATE_INSTANTIATION_PRAGMA) +#pragma instantiate ACE_Connector<Write_Handler, ACE_SOCK_CONNECTOR> +#pragma instantiate ACE_Acceptor<Read_Handler, ACE_SOCK_ACCEPTOR> +#pragma instantiate ACE_Svc_Handler<ACE_SOCK_STREAM, ACE_SYNCH> +#pragma instantiate auto_ptr<ACE_Reactor> +#pragma instantiate ACE_Auto_Basic_Ptr<ACE_Reactor> +#pragma instantiate auto_ptr<ACE_Reactor_Impl> +#pragma instantiate ACE_Auto_Basic_Ptr<ACE_Reactor_Impl> +#pragma instantiate ACE_Map_Manager<int,ACE_Svc_Tuple<Write_Handler>*,ACE_SYNCH_RW_MUTEX> +#pragma instantiate ACE_Map_Iterator<int,ACE_Svc_Tuple<Write_Handler>*,ACE_SYNCH_RW_MUTEX> +#pragma instantiate ACE_Map_Entry<int,ACE_Svc_Tuple<Write_Handler>*> +#pragma instantiate ACE_Svc_Tuple<Write_Handler> +#pragma instantiate ACE_Auto_Basic_Array_Ptr <Write_Handler *> +#pragma instantiate ACE_Auto_Basic_Array_Ptr <ACE_INET_Addr> +#pragma instantiate ACE_Auto_Array_Ptr <ACE_INET_Addr> +#endif /* ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION */ diff --git a/tests/tests.mak b/tests/tests.mak index 3317edc6977..d142e8e2eb1 100644 --- a/tests/tests.mak +++ b/tests/tests.mak @@ -4,8 +4,8 @@ # TARGTYPE "Win32 (x86) Console Application" 0x0103
!IF "$(CFG)" == ""
-CFG=Priority_Reactor_Test - Win32 Debug
-!MESSAGE No configuration specified. Defaulting to Priority_Reactor_Test -\
+CFG=Notify_Performance_Test - Win32 Debug
+!MESSAGE No configuration specified. Defaulting to Notify_Performance_Test -\
Win32 Debug.
!ENDIF
@@ -44,12 +44,14 @@ CFG=Priority_Reactor_Test - Win32 Debug "Hash_Map_Manager_Test - Win32 Debug" && "$(CFG)" !=\
"Semaphore_Test - Win32 Debug" && "$(CFG)" != "Atomic_Op_Test - Win32 Debug" &&\
"$(CFG)" != "MT_SOCK_Test - Win32 Debug" && "$(CFG)" !=\
- "Priority_Reactor_Test - Win32 Debug"
+ "Priority_Reactor_Test - Win32 Debug" && "$(CFG)" !=\
+ "Reactor_Performance_Test - Win32 Debug" && "$(CFG)" !=\
+ "Notify_Performance_Test - Win32 Debug"
!MESSAGE Invalid configuration "$(CFG)" specified.
!MESSAGE You can specify a configuration when running NMAKE on this makefile
!MESSAGE by defining the macro CFG on the command line. For example:
!MESSAGE
-!MESSAGE NMAKE /f "tests.mak" CFG="Priority_Reactor_Test - Win32 Debug"
+!MESSAGE NMAKE /f "tests.mak" CFG="Notify_Performance_Test - Win32 Debug"
!MESSAGE
!MESSAGE Possible choices for configuration are:
!MESSAGE
@@ -142,6 +144,10 @@ CFG=Priority_Reactor_Test - Win32 Debug "Win32 (x86) Console Application")
!MESSAGE "Priority_Reactor_Test - Win32 Debug" (based on\
"Win32 (x86) Console Application")
+!MESSAGE "Reactor_Performance_Test - Win32 Debug" (based on\
+ "Win32 (x86) Console Application")
+!MESSAGE "Notify_Performance_Test - Win32 Debug" (based on\
+ "Win32 (x86) Console Application")
!MESSAGE
!ERROR An invalid configuration is specified.
!ENDIF
@@ -3028,6 +3034,129 @@ LINK32_OBJS= \ $(LINK32_FLAGS) $(LINK32_OBJS)
<<
+!ELSEIF "$(CFG)" == "Reactor_Performance_Test - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Reactor_Performance_Test\Debug"
+# PROP BASE Intermediate_Dir "Reactor_Performance_Test\Debug"
+# PROP BASE Target_Dir "Reactor_Performance_Test"
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "."
+# PROP Intermediate_Dir "Debug"
+# PROP Target_Dir "Reactor_Performance_Test"
+OUTDIR=.\.
+INTDIR=.\Debug
+
+ALL : "$(OUTDIR)\Reactor_Performance_Test.exe"
+
+CLEAN :
+ -@erase "$(INTDIR)\Reactor_Performance_Test.obj"
+ -@erase "$(INTDIR)\vc40.idb"
+ -@erase "$(INTDIR)\vc40.pdb"
+ -@erase "$(OUTDIR)\Reactor_Performance_Test.exe"
+ -@erase "$(OUTDIR)\Reactor_Performance_Test.ilk"
+ -@erase "$(OUTDIR)\Reactor_Performance_Test.pdb"
+
+"$(OUTDIR)" :
+ if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
+
+"$(INTDIR)" :
+ if not exist "$(INTDIR)/$(NULL)" mkdir "$(INTDIR)"
+
+# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /YX /c
+# ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /YX /c
+CPP_PROJ=/nologo /MDd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE"\
+ /Fp"$(INTDIR)/Reactor_Performance_Test.pch" /YX /Fo"$(INTDIR)/" /Fd"$(INTDIR)/"\
+ /c
+CPP_OBJS=.\Debug/
+CPP_SBRS=.\.
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+BSC32_FLAGS=/nologo /o"$(OUTDIR)/Reactor_Performance_Test.bsc"
+BSC32_SBRS= \
+
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386
+# ADD LINK32 aced.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386
+LINK32_FLAGS=aced.lib kernel32.lib user32.lib gdi32.lib winspool.lib\
+ comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib\
+ odbc32.lib odbccp32.lib /nologo /subsystem:console /incremental:yes\
+ /pdb:"$(OUTDIR)/Reactor_Performance_Test.pdb" /debug /machine:I386\
+ /out:"$(OUTDIR)/Reactor_Performance_Test.exe"
+LINK32_OBJS= \
+ "$(INTDIR)\Reactor_Performance_Test.obj"
+
+"$(OUTDIR)\Reactor_Performance_Test.exe" : "$(OUTDIR)" $(DEF_FILE)\
+ $(LINK32_OBJS)
+ $(LINK32) @<<
+ $(LINK32_FLAGS) $(LINK32_OBJS)
+<<
+
+!ELSEIF "$(CFG)" == "Notify_Performance_Test - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Notify_Performance_Test\Debug"
+# PROP BASE Intermediate_Dir "Notify_Performance_Test\Debug"
+# PROP BASE Target_Dir "Notify_Performance_Test"
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir ""
+# PROP Intermediate_Dir "Debug"
+# PROP Target_Dir "Notify_Performance_Test"
+OUTDIR=.
+INTDIR=.\Debug
+
+ALL : "$(OUTDIR)\Notify_Performance_Test.exe"
+
+CLEAN :
+ -@erase "$(INTDIR)\Notify_Performance_Test.obj"
+ -@erase "$(INTDIR)\vc40.idb"
+ -@erase "$(INTDIR)\vc40.pdb"
+ -@erase "$(OUTDIR)\Notify_Performance_Test.exe"
+ -@erase "$(OUTDIR)\Notify_Performance_Test.ilk"
+ -@erase "$(OUTDIR)\Notify_Performance_Test.pdb"
+
+"$(INTDIR)" :
+ if not exist "$(INTDIR)/$(NULL)" mkdir "$(INTDIR)"
+
+# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /YX /c
+# ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /YX /c
+CPP_PROJ=/nologo /MDd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE"\
+ /Fp"$(INTDIR)/Notify_Performance_Test.pch" /YX /Fo"$(INTDIR)/" /Fd"$(INTDIR)/"\
+ /c
+CPP_OBJS=.\Debug/
+CPP_SBRS=.\.
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+BSC32_FLAGS=/nologo /o"$(OUTDIR)/Notify_Performance_Test.bsc"
+BSC32_SBRS= \
+
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386
+# ADD LINK32 aced.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386
+LINK32_FLAGS=aced.lib kernel32.lib user32.lib gdi32.lib winspool.lib\
+ comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib\
+ odbc32.lib odbccp32.lib /nologo /subsystem:console /incremental:yes\
+ /pdb:"$(OUTDIR)/Notify_Performance_Test.pdb" /debug /machine:I386\
+ /out:"$(OUTDIR)/Notify_Performance_Test.exe"
+LINK32_OBJS= \
+ "$(INTDIR)\Notify_Performance_Test.obj"
+
+"$(OUTDIR)\Notify_Performance_Test.exe" : "$(OUTDIR)" $(DEF_FILE)\
+ $(LINK32_OBJS)
+ $(LINK32) @<<
+ $(LINK32_FLAGS) $(LINK32_OBJS)
+<<
+
!ENDIF
.c{$(CPP_OBJS)}.obj:
@@ -7124,9 +7253,6 @@ DEP_CPP_ATOMI=\ # Begin Source File
SOURCE=.\MT_SOCK_Test.cpp
-
-!IF "$(CFG)" == "MT_SOCK_Test - Win32 Debug"
-
DEP_CPP_MT_SO=\
{$(INCLUDE)}"\.\test_config.h"\
{$(INCLUDE)}"\ace\ACE.h"\
@@ -7210,8 +7336,6 @@ DEP_CPP_MT_SO=\ "$(INTDIR)\MT_SOCK_Test.obj" : $(SOURCE) $(DEP_CPP_MT_SO) "$(INTDIR)"
-!ENDIF
-
# End Source File
# End Target
################################################################################
@@ -7376,5 +7500,293 @@ DEP_CPP_PRIORIT=\ # End Source File
# End Target
+################################################################################
+# Begin Target
+
+# Name "Reactor_Performance_Test - Win32 Debug"
+################################################################################
+# Begin Source File
+
+SOURCE=.\Reactor_Performance_Test.cpp
+DEP_CPP_REACTOR_P=\
+ {$(INCLUDE)}"\.\test_config.h"\
+ {$(INCLUDE)}"\ace\Acceptor.cpp"\
+ {$(INCLUDE)}"\ace\Acceptor.h"\
+ {$(INCLUDE)}"\ace\Acceptor.i"\
+ {$(INCLUDE)}"\ace\ACE.h"\
+ {$(INCLUDE)}"\ace\ACE.i"\
+ {$(INCLUDE)}"\ace\Addr.h"\
+ {$(INCLUDE)}"\ace\Addr.i"\
+ {$(INCLUDE)}"\ace\Atomic_Op.i"\
+ {$(INCLUDE)}"\ace\Auto_Ptr.cpp"\
+ {$(INCLUDE)}"\ace\Auto_Ptr.h"\
+ {$(INCLUDE)}"\ace\Auto_Ptr.i"\
+ {$(INCLUDE)}"\ace\config-win32-common.h"\
+ {$(INCLUDE)}"\ace\config-win32.h"\
+ {$(INCLUDE)}"\ace\config.h"\
+ {$(INCLUDE)}"\ace\Connector.cpp"\
+ {$(INCLUDE)}"\ace\Connector.h"\
+ {$(INCLUDE)}"\ace\Connector.i"\
+ {$(INCLUDE)}"\ace\Containers.cpp"\
+ {$(INCLUDE)}"\ace\Containers.h"\
+ {$(INCLUDE)}"\ace\Containers.i"\
+ {$(INCLUDE)}"\ace\Dynamic.h"\
+ {$(INCLUDE)}"\ace\Dynamic.i"\
+ {$(INCLUDE)}"\ace\Event_Handler.h"\
+ {$(INCLUDE)}"\ace\Event_Handler.i"\
+ {$(INCLUDE)}"\ace\Free_List.cpp"\
+ {$(INCLUDE)}"\ace\Free_List.h"\
+ {$(INCLUDE)}"\ace\Free_List.i"\
+ {$(INCLUDE)}"\ace\Get_Opt.h"\
+ {$(INCLUDE)}"\ace\Get_Opt.i"\
+ {$(INCLUDE)}"\ace\Handle_Set.h"\
+ {$(INCLUDE)}"\ace\Handle_Set.i"\
+ {$(INCLUDE)}"\ace\Hash_Map_Manager.cpp"\
+ {$(INCLUDE)}"\ace\Hash_Map_Manager.h"\
+ {$(INCLUDE)}"\ace\High_Res_Timer.h"\
+ {$(INCLUDE)}"\ace\High_Res_Timer.i"\
+ {$(INCLUDE)}"\ace\INET_Addr.h"\
+ {$(INCLUDE)}"\ace\INET_Addr.i"\
+ {$(INCLUDE)}"\ace\IO_Cntl_Msg.h"\
+ {$(INCLUDE)}"\ace\IPC_SAP.h"\
+ {$(INCLUDE)}"\ace\IPC_SAP.i"\
+ {$(INCLUDE)}"\ace\Local_Tokens.h"\
+ {$(INCLUDE)}"\ace\Local_Tokens.i"\
+ {$(INCLUDE)}"\ace\Log_Msg.h"\
+ {$(INCLUDE)}"\ace\Log_Priority.h"\
+ {$(INCLUDE)}"\ace\Log_Record.h"\
+ {$(INCLUDE)}"\ace\Log_Record.i"\
+ {$(INCLUDE)}"\ace\Malloc.h"\
+ {$(INCLUDE)}"\ace\Malloc.i"\
+ {$(INCLUDE)}"\ace\Malloc_T.cpp"\
+ {$(INCLUDE)}"\ace\Malloc_T.h"\
+ {$(INCLUDE)}"\ace\Malloc_T.i"\
+ {$(INCLUDE)}"\ace\Managed_Object.cpp"\
+ {$(INCLUDE)}"\ace\Managed_Object.h"\
+ {$(INCLUDE)}"\ace\Managed_Object.i"\
+ {$(INCLUDE)}"\ace\Map_Manager.cpp"\
+ {$(INCLUDE)}"\ace\Map_Manager.h"\
+ {$(INCLUDE)}"\ace\Map_Manager.i"\
+ {$(INCLUDE)}"\ace\Mem_Map.h"\
+ {$(INCLUDE)}"\ace\Mem_Map.i"\
+ {$(INCLUDE)}"\ace\Memory_Pool.h"\
+ {$(INCLUDE)}"\ace\Memory_Pool.i"\
+ {$(INCLUDE)}"\ace\Message_Block.h"\
+ {$(INCLUDE)}"\ace\Message_Block.i"\
+ {$(INCLUDE)}"\ace\Message_Queue.cpp"\
+ {$(INCLUDE)}"\ace\Message_Queue.h"\
+ {$(INCLUDE)}"\ace\Message_Queue.i"\
+ {$(INCLUDE)}"\ace\Module.cpp"\
+ {$(INCLUDE)}"\ace\Module.h"\
+ {$(INCLUDE)}"\ace\Module.i"\
+ {$(INCLUDE)}"\ace\Object_Manager.h"\
+ {$(INCLUDE)}"\ace\Object_Manager.i"\
+ {$(INCLUDE)}"\ace\OS.h"\
+ {$(INCLUDE)}"\ace\OS.i"\
+ {$(INCLUDE)}"\ace\Pipe.h"\
+ {$(INCLUDE)}"\ace\Pipe.i"\
+ {$(INCLUDE)}"\ace\Profile_Timer.h"\
+ {$(INCLUDE)}"\ace\Profile_Timer.i"\
+ {$(INCLUDE)}"\ace\Reactor.h"\
+ {$(INCLUDE)}"\ace\Reactor.i"\
+ {$(INCLUDE)}"\ace\Reactor_Impl.h"\
+ {$(INCLUDE)}"\ace\Select_Reactor.h"\
+ {$(INCLUDE)}"\ace\Select_Reactor.i"\
+ {$(INCLUDE)}"\ace\Service_Config.h"\
+ {$(INCLUDE)}"\ace\Service_Config.i"\
+ {$(INCLUDE)}"\ace\Service_Object.h"\
+ {$(INCLUDE)}"\ace\Service_Object.i"\
+ {$(INCLUDE)}"\ace\Service_Types.h"\
+ {$(INCLUDE)}"\ace\Service_Types.i"\
+ {$(INCLUDE)}"\ace\Shared_Object.h"\
+ {$(INCLUDE)}"\ace\Shared_Object.i"\
+ {$(INCLUDE)}"\ace\Signal.h"\
+ {$(INCLUDE)}"\ace\Signal.i"\
+ {$(INCLUDE)}"\ace\SOCK.h"\
+ {$(INCLUDE)}"\ace\SOCK.i"\
+ {$(INCLUDE)}"\ace\SOCK_Acceptor.h"\
+ {$(INCLUDE)}"\ace\SOCK_Acceptor.i"\
+ {$(INCLUDE)}"\ace\SOCK_Connector.h"\
+ {$(INCLUDE)}"\ace\SOCK_Connector.i"\
+ {$(INCLUDE)}"\ace\SOCK_IO.h"\
+ {$(INCLUDE)}"\ace\SOCK_IO.i"\
+ {$(INCLUDE)}"\ace\SOCK_Stream.h"\
+ {$(INCLUDE)}"\ace\SOCK_Stream.i"\
+ {$(INCLUDE)}"\ace\SString.h"\
+ {$(INCLUDE)}"\ace\SString.i"\
+ {$(INCLUDE)}"\ace\stdcpp.h"\
+ {$(INCLUDE)}"\ace\Strategies.h"\
+ {$(INCLUDE)}"\ace\Strategies_T.cpp"\
+ {$(INCLUDE)}"\ace\Strategies_T.h"\
+ {$(INCLUDE)}"\ace\Stream_Modules.cpp"\
+ {$(INCLUDE)}"\ace\Stream_Modules.h"\
+ {$(INCLUDE)}"\ace\Stream_Modules.i"\
+ {$(INCLUDE)}"\ace\SV_Semaphore_Complex.h"\
+ {$(INCLUDE)}"\ace\SV_Semaphore_Complex.i"\
+ {$(INCLUDE)}"\ace\SV_Semaphore_Simple.h"\
+ {$(INCLUDE)}"\ace\SV_Semaphore_Simple.i"\
+ {$(INCLUDE)}"\ace\Svc_Conf_Tokens.h"\
+ {$(INCLUDE)}"\ace\Svc_Handler.cpp"\
+ {$(INCLUDE)}"\ace\Svc_Handler.h"\
+ {$(INCLUDE)}"\ace\Svc_Handler.i"\
+ {$(INCLUDE)}"\ace\Synch.h"\
+ {$(INCLUDE)}"\ace\Synch.i"\
+ {$(INCLUDE)}"\ace\Synch_Options.h"\
+ {$(INCLUDE)}"\ace\Synch_T.cpp"\
+ {$(INCLUDE)}"\ace\Synch_T.h"\
+ {$(INCLUDE)}"\ace\Synch_T.i"\
+ {$(INCLUDE)}"\ace\Task.h"\
+ {$(INCLUDE)}"\ace\Task.i"\
+ {$(INCLUDE)}"\ace\Task_T.cpp"\
+ {$(INCLUDE)}"\ace\Task_T.h"\
+ {$(INCLUDE)}"\ace\Task_T.i"\
+ {$(INCLUDE)}"\ace\Thread.h"\
+ {$(INCLUDE)}"\ace\Thread.i"\
+ {$(INCLUDE)}"\ace\Thread_Manager.h"\
+ {$(INCLUDE)}"\ace\Thread_Manager.i"\
+ {$(INCLUDE)}"\ace\Time_Value.h"\
+ {$(INCLUDE)}"\ace\Timer_Queue.h"\
+ {$(INCLUDE)}"\ace\Timer_Queue_T.cpp"\
+ {$(INCLUDE)}"\ace\Timer_Queue_T.h"\
+ {$(INCLUDE)}"\ace\Timer_Queue_T.i"\
+ {$(INCLUDE)}"\ace\Token.h"\
+ {$(INCLUDE)}"\ace\Token.i"\
+ {$(INCLUDE)}"\ace\Trace.h"\
+ {$(INCLUDE)}"\ace\WFMO_Reactor.h"\
+ {$(INCLUDE)}"\ace\WFMO_Reactor.i"\
+ {$(INCLUDE)}"\ace\ws2tcpip.h"\
+
+
+"$(INTDIR)\Reactor_Performance_Test.obj" : $(SOURCE) $(DEP_CPP_REACTOR_P)\
+ "$(INTDIR)"
+
+
+# End Source File
+# End Target
+################################################################################
+# Begin Target
+
+# Name "Notify_Performance_Test - Win32 Debug"
+################################################################################
+# Begin Source File
+
+SOURCE=.\Notify_Performance_Test.cpp
+DEP_CPP_NOTIF=\
+ {$(INCLUDE)}"\.\test_config.h"\
+ {$(INCLUDE)}"\ace\ACE.h"\
+ {$(INCLUDE)}"\ace\ACE.i"\
+ {$(INCLUDE)}"\ace\Atomic_Op.i"\
+ {$(INCLUDE)}"\ace\Auto_Ptr.cpp"\
+ {$(INCLUDE)}"\ace\Auto_Ptr.h"\
+ {$(INCLUDE)}"\ace\Auto_Ptr.i"\
+ {$(INCLUDE)}"\ace\config-win32-common.h"\
+ {$(INCLUDE)}"\ace\config-win32.h"\
+ {$(INCLUDE)}"\ace\config.h"\
+ {$(INCLUDE)}"\ace\Containers.cpp"\
+ {$(INCLUDE)}"\ace\Containers.h"\
+ {$(INCLUDE)}"\ace\Containers.i"\
+ {$(INCLUDE)}"\ace\Event_Handler.h"\
+ {$(INCLUDE)}"\ace\Event_Handler.i"\
+ {$(INCLUDE)}"\ace\Free_List.cpp"\
+ {$(INCLUDE)}"\ace\Free_List.h"\
+ {$(INCLUDE)}"\ace\Free_List.i"\
+ {$(INCLUDE)}"\ace\Get_Opt.h"\
+ {$(INCLUDE)}"\ace\Get_Opt.i"\
+ {$(INCLUDE)}"\ace\Handle_Set.h"\
+ {$(INCLUDE)}"\ace\Handle_Set.i"\
+ {$(INCLUDE)}"\ace\Hash_Map_Manager.cpp"\
+ {$(INCLUDE)}"\ace\Hash_Map_Manager.h"\
+ {$(INCLUDE)}"\ace\High_Res_Timer.h"\
+ {$(INCLUDE)}"\ace\High_Res_Timer.i"\
+ {$(INCLUDE)}"\ace\IO_Cntl_Msg.h"\
+ {$(INCLUDE)}"\ace\Local_Tokens.h"\
+ {$(INCLUDE)}"\ace\Local_Tokens.i"\
+ {$(INCLUDE)}"\ace\Log_Msg.h"\
+ {$(INCLUDE)}"\ace\Log_Priority.h"\
+ {$(INCLUDE)}"\ace\Log_Record.h"\
+ {$(INCLUDE)}"\ace\Log_Record.i"\
+ {$(INCLUDE)}"\ace\Malloc.h"\
+ {$(INCLUDE)}"\ace\Malloc.i"\
+ {$(INCLUDE)}"\ace\Malloc_T.cpp"\
+ {$(INCLUDE)}"\ace\Malloc_T.h"\
+ {$(INCLUDE)}"\ace\Malloc_T.i"\
+ {$(INCLUDE)}"\ace\Managed_Object.cpp"\
+ {$(INCLUDE)}"\ace\Managed_Object.h"\
+ {$(INCLUDE)}"\ace\Managed_Object.i"\
+ {$(INCLUDE)}"\ace\Map_Manager.cpp"\
+ {$(INCLUDE)}"\ace\Map_Manager.h"\
+ {$(INCLUDE)}"\ace\Map_Manager.i"\
+ {$(INCLUDE)}"\ace\Mem_Map.h"\
+ {$(INCLUDE)}"\ace\Mem_Map.i"\
+ {$(INCLUDE)}"\ace\Memory_Pool.h"\
+ {$(INCLUDE)}"\ace\Memory_Pool.i"\
+ {$(INCLUDE)}"\ace\Message_Block.h"\
+ {$(INCLUDE)}"\ace\Message_Block.i"\
+ {$(INCLUDE)}"\ace\Message_Queue.cpp"\
+ {$(INCLUDE)}"\ace\Message_Queue.h"\
+ {$(INCLUDE)}"\ace\Message_Queue.i"\
+ {$(INCLUDE)}"\ace\Object_Manager.h"\
+ {$(INCLUDE)}"\ace\Object_Manager.i"\
+ {$(INCLUDE)}"\ace\OS.h"\
+ {$(INCLUDE)}"\ace\OS.i"\
+ {$(INCLUDE)}"\ace\Pipe.h"\
+ {$(INCLUDE)}"\ace\Pipe.i"\
+ {$(INCLUDE)}"\ace\Profile_Timer.h"\
+ {$(INCLUDE)}"\ace\Profile_Timer.i"\
+ {$(INCLUDE)}"\ace\Reactor.h"\
+ {$(INCLUDE)}"\ace\Reactor.i"\
+ {$(INCLUDE)}"\ace\Reactor_Impl.h"\
+ {$(INCLUDE)}"\ace\Select_Reactor.h"\
+ {$(INCLUDE)}"\ace\Select_Reactor.i"\
+ {$(INCLUDE)}"\ace\Service_Config.h"\
+ {$(INCLUDE)}"\ace\Service_Config.i"\
+ {$(INCLUDE)}"\ace\Service_Object.h"\
+ {$(INCLUDE)}"\ace\Service_Object.i"\
+ {$(INCLUDE)}"\ace\Service_Types.h"\
+ {$(INCLUDE)}"\ace\Service_Types.i"\
+ {$(INCLUDE)}"\ace\Shared_Object.h"\
+ {$(INCLUDE)}"\ace\Shared_Object.i"\
+ {$(INCLUDE)}"\ace\Signal.h"\
+ {$(INCLUDE)}"\ace\Signal.i"\
+ {$(INCLUDE)}"\ace\SString.h"\
+ {$(INCLUDE)}"\ace\SString.i"\
+ {$(INCLUDE)}"\ace\stdcpp.h"\
+ {$(INCLUDE)}"\ace\Strategies.h"\
+ {$(INCLUDE)}"\ace\Strategies_T.cpp"\
+ {$(INCLUDE)}"\ace\Strategies_T.h"\
+ {$(INCLUDE)}"\ace\SV_Semaphore_Complex.h"\
+ {$(INCLUDE)}"\ace\SV_Semaphore_Complex.i"\
+ {$(INCLUDE)}"\ace\SV_Semaphore_Simple.h"\
+ {$(INCLUDE)}"\ace\SV_Semaphore_Simple.i"\
+ {$(INCLUDE)}"\ace\Svc_Conf_Tokens.h"\
+ {$(INCLUDE)}"\ace\Synch.h"\
+ {$(INCLUDE)}"\ace\Synch.i"\
+ {$(INCLUDE)}"\ace\Synch_Options.h"\
+ {$(INCLUDE)}"\ace\Synch_T.cpp"\
+ {$(INCLUDE)}"\ace\Synch_T.h"\
+ {$(INCLUDE)}"\ace\Synch_T.i"\
+ {$(INCLUDE)}"\ace\Thread.h"\
+ {$(INCLUDE)}"\ace\Thread.i"\
+ {$(INCLUDE)}"\ace\Thread_Manager.h"\
+ {$(INCLUDE)}"\ace\Thread_Manager.i"\
+ {$(INCLUDE)}"\ace\Time_Value.h"\
+ {$(INCLUDE)}"\ace\Timer_Queue.h"\
+ {$(INCLUDE)}"\ace\Timer_Queue_T.cpp"\
+ {$(INCLUDE)}"\ace\Timer_Queue_T.h"\
+ {$(INCLUDE)}"\ace\Timer_Queue_T.i"\
+ {$(INCLUDE)}"\ace\Token.h"\
+ {$(INCLUDE)}"\ace\Token.i"\
+ {$(INCLUDE)}"\ace\Trace.h"\
+ {$(INCLUDE)}"\ace\WFMO_Reactor.h"\
+ {$(INCLUDE)}"\ace\WFMO_Reactor.i"\
+ {$(INCLUDE)}"\ace\ws2tcpip.h"\
+
+
+"$(INTDIR)\Notify_Performance_Test.obj" : $(SOURCE) $(DEP_CPP_NOTIF)\
+ "$(INTDIR)"
+
+
+# End Source File
+# End Target
# End Project
################################################################################
diff --git a/tests/tests.mdp b/tests/tests.mdp Binary files differindex 75fa4ef6901..9db3f6d764c 100644 --- a/tests/tests.mdp +++ b/tests/tests.mdp |