tools,test: fix V8 initialization order

Refs: https://chromium-review.googlesource.com/c/v8/v8/+/3300129/

PR-URL: https://github.com/nodejs/node/pull/42657
Reviewed-By: Darshan Sen <raisinten@gmail.com>
Reviewed-By: Richard Lau <rlau@redhat.com>
Reviewed-By: Jiawen Geng <technicalcute@gmail.com>
Reviewed-By: Michael Dawson <midawson@redhat.com>
This commit is contained in:
Camillo Bruni 2021-12-09 10:34:43 +01:00 committed by Michaël Zasso
parent 58f3fdcccd
commit 62e62757b3
No known key found for this signature in database
GPG Key ID: 770F7A9A5AE15600
3 changed files with 47 additions and 16 deletions

View File

@ -1,7 +1,39 @@
#include "node_test_fixture.h"
#include "cppgc/platform.h"
ArrayBufferUniquePtr NodeZeroIsolateTestFixture::allocator{nullptr, nullptr};
uv_loop_t NodeZeroIsolateTestFixture::current_loop;
NodePlatformUniquePtr NodeZeroIsolateTestFixture::platform;
TracingAgentUniquePtr NodeZeroIsolateTestFixture::tracing_agent;
bool NodeZeroIsolateTestFixture::node_initialized = false;
void NodeTestEnvironment::SetUp() {
NodeZeroIsolateTestFixture::tracing_agent =
std::make_unique<node::tracing::Agent>();
node::tracing::TraceEventHelper::SetAgent(
NodeZeroIsolateTestFixture::tracing_agent.get());
node::tracing::TracingController* tracing_controller =
NodeZeroIsolateTestFixture::tracing_agent->GetTracingController();
static constexpr int kV8ThreadPoolSize = 4;
NodeZeroIsolateTestFixture::platform.reset(
new node::NodePlatform(kV8ThreadPoolSize, tracing_controller));
v8::V8::InitializePlatform(NodeZeroIsolateTestFixture::platform.get());
#ifdef V8_SANDBOX
ASSERT_TRUE(v8::V8::InitializeSandbox());
#endif
cppgc::InitializeProcess(
NodeZeroIsolateTestFixture::platform->GetPageAllocator());
v8::V8::Initialize();
}
void NodeTestEnvironment::TearDown() {
v8::V8::Dispose();
v8::V8::DisposePlatform();
NodeZeroIsolateTestFixture::platform->Shutdown();
NodeZeroIsolateTestFixture::platform.reset(nullptr);
NodeZeroIsolateTestFixture::tracing_agent.reset(nullptr);
}
::testing::Environment* const node_env =
::testing::AddGlobalTestEnvironment(new NodeTestEnvironment());

View File

@ -60,18 +60,26 @@ using ArrayBufferUniquePtr = std::unique_ptr<node::ArrayBufferAllocator,
using TracingAgentUniquePtr = std::unique_ptr<node::tracing::Agent>;
using NodePlatformUniquePtr = std::unique_ptr<node::NodePlatform>;
class NodeTestEnvironment final : public ::testing::Environment {
public:
NodeTestEnvironment() = default;
void SetUp() override;
void TearDown() override;
};
class NodeZeroIsolateTestFixture : public ::testing::Test {
protected:
static ArrayBufferUniquePtr allocator;
static TracingAgentUniquePtr tracing_agent;
static NodePlatformUniquePtr platform;
static uv_loop_t current_loop;
static bool node_initialized;
static ArrayBufferUniquePtr allocator;
static NodePlatformUniquePtr platform;
static TracingAgentUniquePtr tracing_agent;
static void SetUpTestCase() {
if (!node_initialized) {
uv_os_unsetenv("NODE_OPTIONS");
node_initialized = true;
uv_os_unsetenv("NODE_OPTIONS");
std::vector<std::string> argv { "cctest" };
std::vector<std::string> exec_argv;
std::vector<std::string> errors;
@ -80,25 +88,13 @@ class NodeZeroIsolateTestFixture : public ::testing::Test {
CHECK_EQ(exitcode, 0);
CHECK(errors.empty());
}
tracing_agent = std::make_unique<node::tracing::Agent>();
node::tracing::TraceEventHelper::SetAgent(tracing_agent.get());
node::tracing::TracingController* tracing_controller =
tracing_agent->GetTracingController();
CHECK_EQ(0, uv_loop_init(&current_loop));
static constexpr int kV8ThreadPoolSize = 4;
platform.reset(
new node::NodePlatform(kV8ThreadPoolSize, tracing_controller));
v8::V8::InitializePlatform(platform.get());
v8::V8::Initialize();
}
static void TearDownTestCase() {
platform->Shutdown();
while (uv_loop_alive(&current_loop)) {
uv_run(&current_loop, UV_RUN_ONCE);
}
v8::V8::DisposePlatform();
CHECK_EQ(0, uv_loop_close(&current_loop));
}
@ -106,6 +102,8 @@ class NodeZeroIsolateTestFixture : public ::testing::Test {
allocator = ArrayBufferUniquePtr(node::CreateArrayBufferAllocator(),
&node::FreeArrayBufferAllocator);
}
friend NodeTestEnvironment;
};

View File

@ -68,6 +68,7 @@ int main(int argc, char* argv[]) {
}
isolate->Dispose();
v8::V8::Dispose();
v8::V8::DisposePlatform();
return 0;
}