Commit 0801c4cb authored by Alexander Timin's avatar Alexander Timin Committed by Chromium LUCI CQ

[tracing] (try to) deflake StartupTracingTest x2.

Rewrite WaitForCondition to call RunLoop::Run only once and avoid
relying on an explicit timeout.

Combined with crrev.com/c/2616018 this should eliminate timeouts on
asan/tsan bots, where the tests are known to take more than the old
timeout of 30 seconds.

R=eseckler@chromium.org
BUG=1157954,1041392

Change-Id: Idb880b64a69b9c5323a683a2764549452345924a
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2615351
Commit-Queue: Alexander Timin <altimin@chromium.org>
Commit-Queue: Eric Seckler <eseckler@chromium.org>
Auto-Submit: Alexander Timin <altimin@chromium.org>
Reviewed-by: default avatarEric Seckler <eseckler@chromium.org>
Cr-Commit-Position: refs/heads/master@{#841547}
parent e5493174
...@@ -28,17 +28,27 @@ namespace content { ...@@ -28,17 +28,27 @@ namespace content {
namespace { namespace {
void CheckForConditionAndWaitMoreIfNeeded(
base::RepeatingCallback<bool()> condition,
base::OnceClosure quit_closure) {
if (condition.Run()) {
std::move(quit_closure).Run();
return;
}
base::ThreadTaskRunnerHandle::Get()->PostDelayedTask(
FROM_HERE,
base::BindOnce(&CheckForConditionAndWaitMoreIfNeeded,
std::move(condition), std::move(quit_closure)),
TestTimeouts::tiny_timeout());
}
// Wait until |condition| returns true. // Wait until |condition| returns true.
void WaitForCondition(base::RepeatingCallback<bool()> condition, void WaitForCondition(base::RepeatingCallback<bool()> condition,
const std::string& description) { const std::string& description) {
const base::TimeDelta kTimeout = base::TimeDelta::FromSeconds(30);
const base::TimeTicks start_time = base::TimeTicks::Now();
while (!condition.Run() && (base::TimeTicks::Now() - start_time < kTimeout)) {
base::RunLoop run_loop; base::RunLoop run_loop;
base::ThreadTaskRunnerHandle::Get()->PostDelayedTask( CheckForConditionAndWaitMoreIfNeeded(condition, run_loop.QuitClosure());
FROM_HERE, run_loop.QuitClosure(), TestTimeouts::tiny_timeout());
run_loop.Run(); run_loop.Run();
}
ASSERT_TRUE(condition.Run()) ASSERT_TRUE(condition.Run())
<< "Timeout waiting for condition: " << description; << "Timeout waiting for condition: " << description;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment