From c3657d1abdfc04253e2de007ceee8482e031eae4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Axel=20D=C3=B6rfler?= Date: Fri, 17 Oct 2008 15:46:45 +0000 Subject: [PATCH] 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! git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28216 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/tests/servers/app/stress_test/main.cpp | 128 ++++++++++++++++++++- 1 file changed, 124 insertions(+), 4 deletions(-) diff --git a/src/tests/servers/app/stress_test/main.cpp b/src/tests/servers/app/stress_test/main.cpp index e37f03bab1..649873b684 100644 --- a/src/tests/servers/app/stress_test/main.cpp +++ b/src/tests/servers/app/stress_test/main.cpp @@ -1,11 +1,12 @@ // main.cpp +#include +#include + #include #include #include -#include - int32 gMaxCount = 0; @@ -77,6 +78,7 @@ TestApp::MessageReceived(BMessage* message) 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 @@ TestApp::MessageReceived(BMessage* message) // 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 @@ TestWindow::TestWindow(BRect frame) 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();