Commit 106a47fd authored by Peter Marshall's avatar Peter Marshall Committed by Commit Bot

[cpu-profiler] Enable deopt test

There is a race in the way we handle deopts that made this test flaky.
The race is not hugely important to fix, and is difficult without
breaking something else.

The best thing to do here is update the test to reflect reality so we
can get the test coverage back.

This updates the test so that the deopt reason can be found either
on the first or second level function. The test assumed it would
always be available on the second level function in the profile,
but if we get a regular profile tick at the exact wrong time, we
could end up with the deopt info getting attached to the first level
function. So we accept either.

Bug: v8:5193
Change-Id: Ia43880ebafd1341a514b3143dc215514b5dccf15
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2594775Reviewed-by: 's avatarSimon Zünd <szuend@chromium.org>
Commit-Queue: Peter Marshall <petermarshall@chromium.org>
Cr-Commit-Position: refs/heads/master@{#71797}
parent 3dffdf03
......@@ -71,7 +71,6 @@
'test-heap/OutOfMemory': [SKIP],
# BUG(5193). The cpu profiler tests are notoriously flaky.
'test-cpu-profiler/CollectDeoptEvents': [SKIP],
'test-cpu-profiler/CollectCpuProfile': [SKIP],
'test-cpu-profiler/JsNative1JsNative2JsSample': [SKIP],
'test-cpu-profiler/JsNativeJsRuntimeJsSample': [SKIP],
......
......@@ -2418,7 +2418,10 @@ const char* GetBranchDeoptReason(v8::Local<v8::Context> context,
v8::CpuProfile* profile = reinterpret_cast<v8::CpuProfile*>(iprofile);
const ProfileNode* iopt_function = nullptr;
iopt_function = GetSimpleBranch(context, profile, branch, length);
CHECK_EQ(1U, iopt_function->deopt_infos().size());
if (iopt_function->deopt_infos().size() == 0) {
iopt_function = iopt_function->parent();
}
CHECK_LE(1U, iopt_function->deopt_infos().size());
return iopt_function->deopt_infos()[0].deopt_reason;
}
......@@ -2492,7 +2495,8 @@ TEST(CollectDeoptEvents) {
.ToLocalChecked();
i::CpuProfile* iprofile = iprofiler->GetProfile(0);
iprofile->Print();
/* The expected profile
/* The expected profile. Note that the deopt reasons can hang off either of
the two nodes for each function, depending on the exact timing at runtime.
[Top down]:
0 (root) 0 #1
23 32 #2
......
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