[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