[Lldb-commits] [PATCH] D43857: Speed up TestWatchpointMultipleThreads

Pavel Labath via Phabricator via lldb-commits lldb-commits at lists.llvm.org
Tue Feb 27 20:33:35 PST 2018


labath created this revision.
labath added reviewers: davide, jingham.
Herald added a subscriber: aprantl.

The inferior was sleeping before doing any interesting work. I remove that
to make the test faster.

While looking at the purpose of the test (to check that watchpoints are
propagated to all existing threads - r140757) I noticed that the test has
diverged from the original intention and now it creates the threads *after* the
watchpoint is set (this probably happened during the std::thread refactor), so
I reorganize the test to be closer to the original intention.

The watchpoint propagation functionality is not really debug info depenent, so
I also stop replication of this test. This brings the test's time from ~108s
down to 4s.


https://reviews.llvm.org/D43857

Files:
  packages/Python/lldbsuite/test/functionalities/watchpoint/multiple_threads/TestWatchpointMultipleThreads.py
  packages/Python/lldbsuite/test/functionalities/watchpoint/multiple_threads/main.cpp


Index: packages/Python/lldbsuite/test/functionalities/watchpoint/multiple_threads/main.cpp
===================================================================
--- packages/Python/lldbsuite/test/functionalities/watchpoint/multiple_threads/main.cpp
+++ packages/Python/lldbsuite/test/functionalities/watchpoint/multiple_threads/main.cpp
@@ -10,13 +10,11 @@
 #include <chrono>
 #include <cstdio>
 #include <mutex>
-#include <random>
 #include <thread>
-
-std::default_random_engine g_random_engine{std::random_device{}()};
-std::uniform_int_distribution<> g_distribution{0, 3000000};
+#include "pseudo_barrier.h"
 
 uint32_t g_val = 0;
+pseudo_barrier_t g_barrier;
 
 
 uint32_t
@@ -39,17 +37,13 @@
 void
 thread_func (uint32_t thread_index)
 {
+    pseudo_barrier_wait(g_barrier);
     printf ("%s (thread index = %u) starting...\n", __FUNCTION__, thread_index);
 
     uint32_t count = 0;
     uint32_t val;
     while (count++ < 15)
     {
-        // random micro second sleep from zero to 3 seconds
-        int usec = g_distribution(g_random_engine);
-        printf ("%s (thread = %u) doing a usleep (%d)...\n", __FUNCTION__, thread_index, usec);
-        std::this_thread::sleep_for(std::chrono::microseconds{usec});
-
         if (count < 7)
             val = access_pool ();
         else
@@ -63,14 +57,16 @@
 
 int main (int argc, char const *argv[])
 {
+    pseudo_barrier_init(g_barrier, 4);
     std::thread threads[3];
-
-    printf ("Before turning all three threads loose...\n"); // Set break point at this line,
-                                                            // in order to set our watchpoint.
     // Create 3 threads
     for (auto &thread : threads)
         thread = std::thread{thread_func, std::distance(threads, &thread)};
 
+    printf ("Before turning all three threads loose...\n"); // Set break point at this line,
+                                                            // in order to set our watchpoint.
+    pseudo_barrier_wait(g_barrier);
+
     // Join all of our threads
     for (auto &thread : threads)
         thread.join();
Index: packages/Python/lldbsuite/test/functionalities/watchpoint/multiple_threads/TestWatchpointMultipleThreads.py
===================================================================
--- packages/Python/lldbsuite/test/functionalities/watchpoint/multiple_threads/TestWatchpointMultipleThreads.py
+++ packages/Python/lldbsuite/test/functionalities/watchpoint/multiple_threads/TestWatchpointMultipleThreads.py
@@ -17,6 +17,7 @@
 class WatchpointForMultipleThreadsTestCase(TestBase):
 
     mydir = TestBase.compute_mydir(__file__)
+    NO_DEBUG_INFO_TESTCASE = True
 
     @expectedFailureAll(
         oslist=["windows"],
@@ -77,16 +78,14 @@
         self.expect("watchpoint list -v",
                     substrs=['hit_count = 0'])
 
-        while True:
-            self.runCmd("process continue")
+	self.runCmd("process continue")
 
-            self.runCmd("thread list")
-            if "stop reason = watchpoint" in self.res.GetOutput():
-                # Good, we verified that the watchpoint works!
-                self.runCmd("thread backtrace all")
-                break
-            else:
-                self.fail("The stop reason should be either break or watchpoint")
+	self.runCmd("thread list")
+	if "stop reason = watchpoint" in self.res.GetOutput():
+	    # Good, we verified that the watchpoint works!
+	    self.runCmd("thread backtrace all")
+	else:
+	    self.fail("The stop reason should be either break or watchpoint")
 
         # Use the '-v' option to do verbose listing of the watchpoint.
         # The hit count should now be 1.


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D43857.136223.patch
Type: text/x-patch
Size: 3643 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/lldb-commits/attachments/20180228/958e5f74/attachment-0001.bin>


More information about the lldb-commits mailing list