[Haiku-commits] r28216 - haiku/trunk/src/tests/servers/app/stress_test

axeld at BerliOS axeld at mail.berlios.de
Fri Oct 17 17:46:46 CEST 2008


Author: axeld
Date: 2008-10-17 17:46:45 +0200 (Fri, 17 Oct 2008)
New Revision: 28216
ViewCVS: http://svn.berlios.de/viewcvs/haiku?rev=28216&view=rev

Modified:
   haiku/trunk/src/tests/servers/app/stress_test/main.cpp
Log:
stippi+axeld:
* Made the StressTest app into a real stress test for the app_server, as the
  windows are now randomly changed, ie. moved, resized, hidden, activated, ...
* This already helped identifying two long-hiding bugs in the app_server code!


Modified: haiku/trunk/src/tests/servers/app/stress_test/main.cpp
===================================================================
--- haiku/trunk/src/tests/servers/app/stress_test/main.cpp	2008-10-17 15:44:13 UTC (rev 28215)
+++ haiku/trunk/src/tests/servers/app/stress_test/main.cpp	2008-10-17 15:46:45 UTC (rev 28216)
@@ -1,12 +1,13 @@
 // main.cpp
 
+#include <stdio.h>
+#include <stdlib.h>
+
 #include <Application.h>
 #include <MessageRunner.h>
 #include <Window.h>
 
-#include <stdlib.h>
 
-
 int32 gMaxCount = 0;
 
 enum {
@@ -77,6 +78,7 @@
 		case 'tick':
 			switch (fTestMode) {
 				case TEST_MANY_WINDOWS:
+				{
 					fFrame.OffsetBy(10.0, 0.0);
 					if (fFrame.right > fScreenFrame.right) {
 						// next row
@@ -86,8 +88,126 @@
 						// back to top
 						fFrame.OffsetTo(10.0, 30.0);
 					}
-					new TestWindow(fFrame);
+					int32 action = CountWindows() > 1 ? rand() % 10 : 0;
+					switch (action) {
+						case 0:	// new
+							new TestWindow(fFrame);
+							break;
+						case 1:	// move
+						{
+							BWindow* window = WindowAt(rand() % CountWindows());
+							if (window->Lock()) {
+								if (window->IsHidden())
+									window->Show();
+								window->MoveBy(23, 19);
+								window->Unlock();
+							}
+							break;
+						}
+						case 2:	// hide
+						{
+							BWindow* window = WindowAt(rand() % CountWindows());
+							if (window->Lock()) {
+								if (!window->IsHidden())
+									window->Hide();
+								window->Unlock();
+							}
+							break;
+						}
+						case 3:	// activate
+						{
+							BWindow* window = WindowAt(rand() % CountWindows());
+							if (window->Lock()) {
+								if (window->IsHidden())
+									window->Show();
+								window->Activate();
+								window->Unlock();
+							}
+							break;
+						}
+						case 4:	// change workspace
+						{
+							BWindow* window = WindowAt(rand() % CountWindows());
+							if (window->Lock()) {
+								if (window->IsHidden())
+									window->Show();
+								window->SetWorkspaces(1 << (rand() % 4));
+								window->Unlock();
+							}
+							break;
+						}
+						case 5:	// minimize
+						{
+							BWindow* window = WindowAt(rand() % CountWindows());
+							if (window->Lock()) {
+								if (window->IsHidden())
+									window->Show();
+								window->Minimize(true);
+								window->Unlock();
+							}
+							break;
+						}
+						case 6:	// change size
+						{
+							BWindow* window = WindowAt(rand() % CountWindows());
+							if (window->Lock()) {
+								if (window->IsHidden())
+									window->Show();
+								window->ResizeBy(1, 2);
+								window->Unlock();
+							}
+							break;
+						}
+						case 7:	// set title
+						{
+							BWindow* window = WindowAt(rand() % CountWindows());
+							if (window->Lock()) {
+								if (window->IsHidden())
+									window->Show();
+								char title[256];
+								snprintf(title, sizeof(title), "Title %d",
+									rand() % 100);
+								window->SetTitle(title);
+								window->Unlock();
+							}
+							break;
+						}
+						case 8:	// set look
+						{
+							BWindow* window = WindowAt(rand() % CountWindows());
+							if (window->Lock()) {
+								if (window->IsHidden())
+									window->Show();
+								window_look looks[] = {
+									B_DOCUMENT_WINDOW_LOOK,
+									B_MODAL_WINDOW_LOOK,
+									B_FLOATING_WINDOW_LOOK,
+								};
+								window->SetLook(looks[rand() % 3]);
+								window->Unlock();
+							}
+							break;
+						}
+						case 9:	// set feel
+						{
+							BWindow* window = WindowAt(rand() % CountWindows());
+							if (window->Lock()) {
+								if (window->IsHidden())
+									window->Show();
+								window_feel feels[] = {
+									B_NORMAL_WINDOW_FEEL,
+									B_FLOATING_APP_WINDOW_FEEL,
+									B_MODAL_APP_WINDOW_FEEL,
+								};
+								window->SetFeel(feels[rand() % 3]);
+								window->Unlock();
+							}
+							break;
+						}
+					}
 					break;
+				}
+
 				case TEST_SINGLE_WINDOW:
 					if (fWindow) {
 						fWindow->Lock();
@@ -114,7 +234,7 @@
 
 	BMessenger self(this);
 	BMessage message(B_QUIT_REQUESTED);
-	fPulse = new BMessageRunner(self, &message, 10000000, 1);
+	fPulse = new BMessageRunner(self, &message, 100000000LL, 1);
 
 	if (Thread() < B_OK)
 		Quit();




More information about the Haiku-commits mailing list