Commit 0ff82052 authored by Leszek Swirski's avatar Leszek Swirski Committed by V8 LUCI CQ

[test] Add a unittest platform setup mixin

Change the unittest runner to no longer uncondtionally set up a default
platform in the "environment", but to instead make platform set-up part
of the "mixin" framework for test fixtures.

Requires modifying some tests that expect the platform to be available,
and all flag implications resolved, before the mixin constructors run.

We still keep the environment for setting up the process for cppgc. This
process setup can only be done once per process, so it can no longer use
the platform -- that's ok though, the page allocator used by cppgc's
process initialisation doesn't have to be the same as the platform's so
we can just pass in a separate new one.

Change-Id: Ic8ccf39722e8212962c5bba87350c4b304388a7c
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/3571886Reviewed-by: 's avatarMichael Lippautz <mlippautz@chromium.org>
Auto-Submit: Leszek Swirski <leszeks@chromium.org>
Commit-Queue: Leszek Swirski <leszeks@chromium.org>
Cr-Commit-Position: refs/heads/main@{#79820}
parent 38facbaa
...@@ -2921,7 +2921,6 @@ filegroup( ...@@ -2921,7 +2921,6 @@ filegroup(
"src/heap/cppgc/compactor.h", "src/heap/cppgc/compactor.h",
"src/heap/cppgc/concurrent-marker.cc", "src/heap/cppgc/concurrent-marker.cc",
"src/heap/cppgc/concurrent-marker.h", "src/heap/cppgc/concurrent-marker.h",
"src/heap/cppgc/default-platform.cc",
"src/heap/cppgc/explicit-management.cc", "src/heap/cppgc/explicit-management.cc",
"src/heap/cppgc/free-list.cc", "src/heap/cppgc/free-list.cc",
"src/heap/cppgc/free-list.h", "src/heap/cppgc/free-list.h",
......
...@@ -5610,7 +5610,6 @@ v8_source_set("cppgc_base") { ...@@ -5610,7 +5610,6 @@ v8_source_set("cppgc_base") {
"src/heap/cppgc/compactor.h", "src/heap/cppgc/compactor.h",
"src/heap/cppgc/concurrent-marker.cc", "src/heap/cppgc/concurrent-marker.cc",
"src/heap/cppgc/concurrent-marker.h", "src/heap/cppgc/concurrent-marker.h",
"src/heap/cppgc/default-platform.cc",
"src/heap/cppgc/explicit-management.cc", "src/heap/cppgc/explicit-management.cc",
"src/heap/cppgc/free-list.cc", "src/heap/cppgc/free-list.cc",
"src/heap/cppgc/free-list.h", "src/heap/cppgc/free-list.h",
......
...@@ -19,15 +19,6 @@ namespace cppgc { ...@@ -19,15 +19,6 @@ namespace cppgc {
*/ */
class V8_EXPORT DefaultPlatform : public Platform { class V8_EXPORT DefaultPlatform : public Platform {
public: public:
/**
* Use this method instead of 'cppgc::InitializeProcess' when using
* 'cppgc::DefaultPlatform'. 'cppgc::DefaultPlatform::InitializeProcess'
* will initialize cppgc and v8 if needed (for non-standalone builds).
*
* \param platform DefaultPlatform instance used to initialize cppgc/v8.
*/
static void InitializeProcess(DefaultPlatform* platform);
using IdleTaskSupport = v8::platform::IdleTaskSupport; using IdleTaskSupport = v8::platform::IdleTaskSupport;
explicit DefaultPlatform( explicit DefaultPlatform(
int thread_pool_size = 0, int thread_pool_size = 0,
......
...@@ -57,7 +57,7 @@ int main(int argc, char* argv[]) { ...@@ -57,7 +57,7 @@ int main(int argc, char* argv[]) {
#endif // !CPPGC_IS_STANDALONE #endif // !CPPGC_IS_STANDALONE
// Initialize the process. This must happen before any cppgc::Heap::Create() // Initialize the process. This must happen before any cppgc::Heap::Create()
// calls. // calls.
cppgc::DefaultPlatform::InitializeProcess(cppgc_platform.get()); cppgc::InitializeProcess(cppgc_platform->GetPageAllocator());
{ {
// Create a managed heap. // Create a managed heap.
std::unique_ptr<cppgc::Heap> heap = cppgc::Heap::Create(cppgc_platform); std::unique_ptr<cppgc::Heap> heap = cppgc::Heap::Create(cppgc_platform);
......
// Copyright 2020 the V8 project authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "include/cppgc/default-platform.h"
namespace cppgc {
// static
void DefaultPlatform::InitializeProcess(DefaultPlatform* platform) {
cppgc::InitializeProcess(platform->GetPageAllocator());
}
} // namespace cppgc
...@@ -15,7 +15,7 @@ ...@@ -15,7 +15,7 @@
namespace v8 { namespace v8 {
class DeserializeTest : public testing::Test { class DeserializeTest : public TestWithPlatform {
public: public:
class IsolateAndContextScope { class IsolateAndContextScope {
public: public:
......
...@@ -43,9 +43,8 @@ class LazyCompileDispatcherTestFlags { ...@@ -43,9 +43,8 @@ class LazyCompileDispatcherTestFlags {
static void SetFlagsForTest() { static void SetFlagsForTest() {
CHECK_NULL(save_flags_); CHECK_NULL(save_flags_);
save_flags_ = new SaveFlags(); save_flags_ = new SaveFlags();
FLAG_single_threaded = true;
FlagList::EnforceFlagImplications();
FLAG_lazy_compile_dispatcher = true; FLAG_lazy_compile_dispatcher = true;
FlagList::EnforceFlagImplications();
} }
static void RestoreFlags() { static void RestoreFlags() {
...@@ -68,13 +67,13 @@ class LazyCompileDispatcherTest : public TestWithNativeContext { ...@@ -68,13 +67,13 @@ class LazyCompileDispatcherTest : public TestWithNativeContext {
LazyCompileDispatcherTest& operator=(const LazyCompileDispatcherTest&) = LazyCompileDispatcherTest& operator=(const LazyCompileDispatcherTest&) =
delete; delete;
static void SetUpTestCase() { static void SetUpTestSuite() {
LazyCompileDispatcherTestFlags::SetFlagsForTest(); LazyCompileDispatcherTestFlags::SetFlagsForTest();
TestWithNativeContext::SetUpTestCase(); TestWithNativeContext::SetUpTestSuite();
} }
static void TearDownTestCase() { static void TearDownTestSuite() {
TestWithNativeContext::TearDownTestCase(); TestWithNativeContext::TearDownTestSuite();
LazyCompileDispatcherTestFlags::RestoreFlags(); LazyCompileDispatcherTestFlags::RestoreFlags();
} }
......
...@@ -28,17 +28,17 @@ class BytecodeAnalysisTest : public TestWithIsolateAndZone { ...@@ -28,17 +28,17 @@ class BytecodeAnalysisTest : public TestWithIsolateAndZone {
BytecodeAnalysisTest(const BytecodeAnalysisTest&) = delete; BytecodeAnalysisTest(const BytecodeAnalysisTest&) = delete;
BytecodeAnalysisTest& operator=(const BytecodeAnalysisTest&) = delete; BytecodeAnalysisTest& operator=(const BytecodeAnalysisTest&) = delete;
static void SetUpTestCase() { static void SetUpTestSuite() {
CHECK_NULL(save_flags_); CHECK_NULL(save_flags_);
save_flags_ = new SaveFlags(); save_flags_ = new SaveFlags();
i::FLAG_ignition_elide_noneffectful_bytecodes = false; i::FLAG_ignition_elide_noneffectful_bytecodes = false;
i::FLAG_ignition_reo = false; i::FLAG_ignition_reo = false;
TestWithIsolateAndZone::SetUpTestCase(); TestWithIsolateAndZone::SetUpTestSuite();
} }
static void TearDownTestCase() { static void TearDownTestSuite() {
TestWithIsolateAndZone::TearDownTestCase(); TestWithIsolateAndZone::TearDownTestSuite();
delete save_flags_; delete save_flags_;
save_flags_ = nullptr; save_flags_ = nullptr;
} }
......
...@@ -413,14 +413,14 @@ class GraphReducerTest : public TestWithZone { ...@@ -413,14 +413,14 @@ class GraphReducerTest : public TestWithZone {
public: public:
GraphReducerTest() : TestWithZone(kCompressGraphZone), graph_(zone()) {} GraphReducerTest() : TestWithZone(kCompressGraphZone), graph_(zone()) {}
static void SetUpTestCase() { static void SetUpTestSuite() {
TestWithZone::SetUpTestCase(); TestWithZone::SetUpTestSuite();
DefaultValue<Reduction>::Set(Reducer::NoChange()); DefaultValue<Reduction>::Set(Reducer::NoChange());
} }
static void TearDownTestCase() { static void TearDownTestSuite() {
DefaultValue<Reduction>::Clear(); DefaultValue<Reduction>::Clear();
TestWithZone::TearDownTestCase(); TestWithZone::TearDownTestSuite();
} }
protected: protected:
......
...@@ -17,7 +17,9 @@ static int small_big_distr(base::RandomNumberGenerator* rand) { ...@@ -17,7 +17,9 @@ static int small_big_distr(base::RandomNumberGenerator* rand) {
return rand->NextInt() / std::max(1, rand->NextInt() / 100); return rand->NextInt() / std::max(1, rand->NextInt() / 100);
} }
TEST(PersistentMap, RefTest) { class PersistentMapTest : public TestWithPlatform {};
TEST_F(PersistentMapTest, RefTest) {
base::RandomNumberGenerator rand(92834738); base::RandomNumberGenerator rand(92834738);
AccountingAllocator allocator; AccountingAllocator allocator;
Zone zone(&allocator, ZONE_NAME); Zone zone(&allocator, ZONE_NAME);
...@@ -76,7 +78,7 @@ TEST(PersistentMap, RefTest) { ...@@ -76,7 +78,7 @@ TEST(PersistentMap, RefTest) {
} }
} }
TEST(PersistentMap, Zip) { TEST_F(PersistentMapTest, Zip) {
base::RandomNumberGenerator rand(92834738); base::RandomNumberGenerator rand(92834738);
AccountingAllocator allocator; AccountingAllocator allocator;
Zone zone(&allocator, ZONE_NAME); Zone zone(&allocator, ZONE_NAME);
......
...@@ -10,7 +10,7 @@ namespace v8 { ...@@ -10,7 +10,7 @@ namespace v8 {
namespace internal { namespace internal {
namespace compiler { namespace compiler {
class ZoneStatsTest : public ::testing::Test { class ZoneStatsTest : public TestWithPlatform {
public: public:
ZoneStatsTest() : zone_stats_(&allocator_) {} ZoneStatsTest() : zone_stats_(&allocator_) {}
......
...@@ -39,16 +39,16 @@ class WithFinalizationRegistryMixin : public TMixin { ...@@ -39,16 +39,16 @@ class WithFinalizationRegistryMixin : public TMixin {
WithFinalizationRegistryMixin& operator=( WithFinalizationRegistryMixin& operator=(
const WithFinalizationRegistryMixin&) = delete; const WithFinalizationRegistryMixin&) = delete;
static void SetUpTestCase() { static void SetUpTestSuite() {
CHECK_NULL(save_flags_); CHECK_NULL(save_flags_);
save_flags_ = new SaveFlags(); save_flags_ = new SaveFlags();
FLAG_expose_gc = true; FLAG_expose_gc = true;
FLAG_allow_natives_syntax = true; FLAG_allow_natives_syntax = true;
TMixin::SetUpTestCase(); TMixin::SetUpTestSuite();
} }
static void TearDownTestCase() { static void TearDownTestSuite() {
TMixin::TearDownTestCase(); TMixin::TearDownTestSuite();
CHECK_NOT_NULL(save_flags_); CHECK_NOT_NULL(save_flags_);
delete save_flags_; delete save_flags_;
save_flags_ = nullptr; save_flags_ = nullptr;
...@@ -67,7 +67,8 @@ using TestWithNativeContextAndFinalizationRegistry = // ...@@ -67,7 +67,8 @@ using TestWithNativeContextAndFinalizationRegistry = //
WithFinalizationRegistryMixin< // WithFinalizationRegistryMixin< //
WithIsolateScopeMixin< // WithIsolateScopeMixin< //
WithIsolateMixin< // WithIsolateMixin< //
::testing::Test>>>>>; WithDefaultPlatformMixin< //
::testing::Test>>>>>>;
namespace { namespace {
......
...@@ -3,25 +3,22 @@ ...@@ -3,25 +3,22 @@
// found in the LICENSE file. // found in the LICENSE file.
#include "include/cppgc/platform.h" #include "include/cppgc/platform.h"
#include "src/base/page-allocator.h"
#include "test/unittests/heap/cppgc/test-platform.h" #include "test/unittests/heap/cppgc/test-platform.h"
#include "testing/gmock/include/gmock/gmock.h" #include "testing/gmock/include/gmock/gmock.h"
namespace { namespace {
class DefaultPlatformEnvironment final : public ::testing::Environment { class CppGCEnvironment final : public ::testing::Environment {
public: public:
DefaultPlatformEnvironment() = default;
void SetUp() override { void SetUp() override {
platform_ = // Initialize the process for cppgc with an arbitrary page allocator. This
std::make_unique<cppgc::internal::testing::TestPlatform>(nullptr); // has to survive as long as the process, so it's ok to leak the allocator
cppgc::InitializeProcess(platform_->GetPageAllocator()); // here.
cppgc::InitializeProcess(new v8::base::PageAllocator());
} }
void TearDown() override { cppgc::ShutdownProcess(); } void TearDown() override { cppgc::ShutdownProcess(); }
private:
std::shared_ptr<cppgc::internal::testing::TestPlatform> platform_;
}; };
} // namespace } // namespace
...@@ -35,6 +32,6 @@ int main(int argc, char** argv) { ...@@ -35,6 +32,6 @@ int main(int argc, char** argv) {
testing::FLAGS_gtest_death_test_style = "threadsafe"; testing::FLAGS_gtest_death_test_style = "threadsafe";
testing::InitGoogleMock(&argc, argv); testing::InitGoogleMock(&argc, argv);
testing::AddGlobalTestEnvironment(new DefaultPlatformEnvironment); testing::AddGlobalTestEnvironment(new CppGCEnvironment);
return RUN_ALL_TESTS(); return RUN_ALL_TESTS();
} }
...@@ -9,6 +9,10 @@ ...@@ -9,6 +9,10 @@
#include "src/heap/cppgc/object-allocator.h" #include "src/heap/cppgc/object-allocator.h"
#include "test/unittests/heap/cppgc/test-platform.h" #include "test/unittests/heap/cppgc/test-platform.h"
#if !CPPGC_IS_STANDALONE
#include "include/v8-initialization.h"
#endif // !CPPGC_IS_STANDALONE
namespace cppgc { namespace cppgc {
namespace internal { namespace internal {
namespace testing { namespace testing {
...@@ -18,12 +22,23 @@ std::shared_ptr<TestPlatform> TestWithPlatform::platform_; ...@@ -18,12 +22,23 @@ std::shared_ptr<TestPlatform> TestWithPlatform::platform_;
// static // static
void TestWithPlatform::SetUpTestSuite() { void TestWithPlatform::SetUpTestSuite() {
platform_ = std::make_unique<TestPlatform>( platform_ = std::make_shared<TestPlatform>(
std::make_unique<DelegatingTracingController>()); std::make_unique<DelegatingTracingController>());
#if !CPPGC_IS_STANDALONE
// For non-standalone builds, we need to initialize V8's platform so that it
// can be looked-up by trace-event.h.
v8::V8::InitializePlatform(platform_->GetV8Platform());
v8::V8::Initialize();
#endif // !CPPGC_IS_STANDALONE
} }
// static // static
void TestWithPlatform::TearDownTestSuite() { void TestWithPlatform::TearDownTestSuite() {
#if !CPPGC_IS_STANDALONE
v8::V8::Dispose();
v8::V8::DisposePlatform();
#endif // !CPPGC_IS_STANDALONE
platform_.reset(); platform_.reset();
} }
......
...@@ -42,7 +42,8 @@ using TestWithHeapInternals = // ...@@ -42,7 +42,8 @@ using TestWithHeapInternals = //
WithInternalIsolateMixin< // WithInternalIsolateMixin< //
WithIsolateScopeMixin< // WithIsolateScopeMixin< //
WithIsolateMixin< // WithIsolateMixin< //
::testing::Test>>>>; WithDefaultPlatformMixin< //
::testing::Test>>>>>;
} // namespace internal } // namespace internal
} // namespace v8 } // namespace v8
......
...@@ -236,14 +236,32 @@ class TrackingPageAllocator : public ::v8::PageAllocator { ...@@ -236,14 +236,32 @@ class TrackingPageAllocator : public ::v8::PageAllocator {
// This test is currently incompatible with the sandbox. Enable it // This test is currently incompatible with the sandbox. Enable it
// once the VirtualAddressSpace interface is stable. // once the VirtualAddressSpace interface is stable.
#if !V8_OS_FUCHSIA && !V8_SANDBOX #if !V8_OS_FUCHSIA && !V8_SANDBOX
class SequentialUnmapperTest : public TestWithIsolate {
template <typename TMixin>
class SequentialUnmapperTestMixin : public TMixin {
public:
SequentialUnmapperTestMixin();
~SequentialUnmapperTestMixin() override;
};
class SequentialUnmapperTest : public //
WithInternalIsolateMixin< //
WithIsolateScopeMixin< //
WithIsolateMixin< //
SequentialUnmapperTestMixin< //
WithDefaultPlatformMixin< //
::testing::Test>>>>> {
public: public:
SequentialUnmapperTest() = default; SequentialUnmapperTest() = default;
~SequentialUnmapperTest() override = default; ~SequentialUnmapperTest() override = default;
SequentialUnmapperTest(const SequentialUnmapperTest&) = delete; SequentialUnmapperTest(const SequentialUnmapperTest&) = delete;
SequentialUnmapperTest& operator=(const SequentialUnmapperTest&) = delete; SequentialUnmapperTest& operator=(const SequentialUnmapperTest&) = delete;
static void SetUpTestCase() { static void FreeProcessWidePtrComprCageForTesting() {
IsolateAllocator::FreeProcessWidePtrComprCageForTesting();
}
static void DoMixinSetUp() {
CHECK_NULL(tracking_page_allocator_); CHECK_NULL(tracking_page_allocator_);
old_page_allocator_ = GetPlatformPageAllocator(); old_page_allocator_ = GetPlatformPageAllocator();
tracking_page_allocator_ = new TrackingPageAllocator(old_page_allocator_); tracking_page_allocator_ = new TrackingPageAllocator(old_page_allocator_);
...@@ -266,11 +284,9 @@ class SequentialUnmapperTest : public TestWithIsolate { ...@@ -266,11 +284,9 @@ class SequentialUnmapperTest : public TestWithIsolate {
#endif #endif
IsolateAllocator::InitializeOncePerProcess(); IsolateAllocator::InitializeOncePerProcess();
#endif #endif
TestWithIsolate::SetUpTestCase();
} }
static void TearDownTestCase() { static void DoMixinTearDown() {
TestWithIsolate::TearDownTestCase();
#ifdef V8_COMPRESS_POINTERS_IN_SHARED_CAGE #ifdef V8_COMPRESS_POINTERS_IN_SHARED_CAGE
// Free the process-wide cage reservation, otherwise the pages won't be // Free the process-wide cage reservation, otherwise the pages won't be
// freed until process teardown. // freed until process teardown.
...@@ -308,6 +324,15 @@ TrackingPageAllocator* SequentialUnmapperTest::tracking_page_allocator_ = ...@@ -308,6 +324,15 @@ TrackingPageAllocator* SequentialUnmapperTest::tracking_page_allocator_ =
v8::PageAllocator* SequentialUnmapperTest::old_page_allocator_ = nullptr; v8::PageAllocator* SequentialUnmapperTest::old_page_allocator_ = nullptr;
bool SequentialUnmapperTest::old_flag_; bool SequentialUnmapperTest::old_flag_;
template <typename TMixin>
SequentialUnmapperTestMixin<TMixin>::SequentialUnmapperTestMixin() {
SequentialUnmapperTest::DoMixinSetUp();
}
template <typename TMixin>
SequentialUnmapperTestMixin<TMixin>::~SequentialUnmapperTestMixin() {
SequentialUnmapperTest::DoMixinTearDown();
}
// See v8:5945. // See v8:5945.
TEST_F(SequentialUnmapperTest, UnmapOnTeardownAfterAlreadyFreeingPooled) { TEST_F(SequentialUnmapperTest, UnmapOnTeardownAfterAlreadyFreeingPooled) {
if (FLAG_enable_third_party_heap) return; if (FLAG_enable_third_party_heap) return;
......
...@@ -50,14 +50,14 @@ class RuntimeCallStatsTest : public TestWithNativeContext { ...@@ -50,14 +50,14 @@ class RuntimeCallStatsTest : public TestWithNativeContext {
TracingFlags::runtime_stats.store(0, std::memory_order_relaxed); TracingFlags::runtime_stats.store(0, std::memory_order_relaxed);
} }
static void SetUpTestCase() { static void SetUpTestSuite() {
TestWithIsolate::SetUpTestCase(); TestWithIsolate::SetUpTestSuite();
// Use a custom time source to precisly emulate system time. // Use a custom time source to precisly emulate system time.
RuntimeCallTimer::Now = &RuntimeCallStatsTestNow; RuntimeCallTimer::Now = &RuntimeCallStatsTestNow;
} }
static void TearDownTestCase() { static void TearDownTestSuite() {
TestWithIsolate::TearDownTestCase(); TestWithIsolate::TearDownTestSuite();
// Restore the original time source. // Restore the original time source.
RuntimeCallTimer::Now = &base::TimeTicks::Now; RuntimeCallTimer::Now = &base::TimeTicks::Now;
} }
......
...@@ -2466,14 +2466,14 @@ class ValueSerializerTestWithSharedArrayBufferClone ...@@ -2466,14 +2466,14 @@ class ValueSerializerTestWithSharedArrayBufferClone
return sab; return sab;
} }
static void SetUpTestCase() { static void SetUpTestSuite() {
flag_was_enabled_ = i::FLAG_harmony_sharedarraybuffer; flag_was_enabled_ = i::FLAG_harmony_sharedarraybuffer;
i::FLAG_harmony_sharedarraybuffer = true; i::FLAG_harmony_sharedarraybuffer = true;
ValueSerializerTest::SetUpTestCase(); ValueSerializerTest::SetUpTestSuite();
} }
static void TearDownTestCase() { static void TearDownTestSuite() {
ValueSerializerTest::TearDownTestCase(); ValueSerializerTest::TearDownTestSuite();
i::FLAG_harmony_sharedarraybuffer = flag_was_enabled_; i::FLAG_harmony_sharedarraybuffer = flag_was_enabled_;
flag_was_enabled_ = false; flag_was_enabled_ = false;
} }
...@@ -2923,14 +2923,14 @@ class ValueSerializerTestWithWasm : public ValueSerializerTest { ...@@ -2923,14 +2923,14 @@ class ValueSerializerTestWithWasm : public ValueSerializerTest {
} }
protected: protected:
static void SetUpTestCase() { static void SetUpTestSuite() {
g_saved_flag = i::FLAG_expose_wasm; g_saved_flag = i::FLAG_expose_wasm;
i::FLAG_expose_wasm = true; i::FLAG_expose_wasm = true;
ValueSerializerTest::SetUpTestCase(); ValueSerializerTest::SetUpTestSuite();
} }
static void TearDownTestCase() { static void TearDownTestSuite() {
ValueSerializerTest::TearDownTestCase(); ValueSerializerTest::TearDownTestSuite();
i::FLAG_expose_wasm = g_saved_flag; i::FLAG_expose_wasm = g_saved_flag;
g_saved_flag = false; g_saved_flag = false;
} }
......
...@@ -8,34 +8,21 @@ ...@@ -8,34 +8,21 @@
#include "include/libplatform/libplatform.h" #include "include/libplatform/libplatform.h"
#include "include/v8-initialization.h" #include "include/v8-initialization.h"
#include "src/base/compiler-specific.h" #include "src/base/compiler-specific.h"
#include "src/base/page-allocator.h"
#include "testing/gmock/include/gmock/gmock.h" #include "testing/gmock/include/gmock/gmock.h"
namespace { namespace {
class DefaultPlatformEnvironment final : public ::testing::Environment { class CppGCEnvironment final : public ::testing::Environment {
public: public:
DefaultPlatformEnvironment() = default;
void SetUp() override { void SetUp() override {
platform_ = v8::platform::NewDefaultPlatform( // Initialize the process for cppgc with an arbitrary page allocator. This
0, v8::platform::IdleTaskSupport::kEnabled); // has to survive as long as the process, so it's ok to leak the allocator
ASSERT_TRUE(platform_.get() != nullptr); // here.
v8::V8::InitializePlatform(platform_.get()); cppgc::InitializeProcess(new v8::base::PageAllocator());
#ifdef V8_SANDBOX
ASSERT_TRUE(v8::V8::InitializeSandbox());
#endif
cppgc::InitializeProcess(platform_->GetPageAllocator());
v8::V8::Initialize();
}
void TearDown() override {
ASSERT_TRUE(platform_.get() != nullptr);
v8::V8::Dispose();
v8::V8::DisposePlatform();
} }
private: void TearDown() override { cppgc::ShutdownProcess(); }
std::unique_ptr<v8::Platform> platform_;
}; };
} // namespace } // namespace
...@@ -50,7 +37,7 @@ int main(int argc, char** argv) { ...@@ -50,7 +37,7 @@ int main(int argc, char** argv) {
testing::FLAGS_gtest_death_test_style = "threadsafe"; testing::FLAGS_gtest_death_test_style = "threadsafe";
testing::InitGoogleMock(&argc, argv); testing::InitGoogleMock(&argc, argv);
testing::AddGlobalTestEnvironment(new DefaultPlatformEnvironment); testing::AddGlobalTestEnvironment(new CppGCEnvironment);
v8::V8::SetFlagsFromCommandLine(&argc, argv, true); v8::V8::SetFlagsFromCommandLine(&argc, argv, true);
v8::V8::InitializeExternalStartupData(argv[0]); v8::V8::InitializeExternalStartupData(argv[0]);
v8::V8::InitializeICUDefaultLocation(argv[0]); v8::V8::InitializeICUDefaultLocation(argv[0]);
......
...@@ -35,14 +35,14 @@ class BackgroundCompileTaskTest : public TestWithNativeContext { ...@@ -35,14 +35,14 @@ class BackgroundCompileTaskTest : public TestWithNativeContext {
AccountingAllocator* allocator() { return allocator_; } AccountingAllocator* allocator() { return allocator_; }
static void SetUpTestCase() { static void SetUpTestSuite() {
CHECK_NULL(save_flags_); CHECK_NULL(save_flags_);
save_flags_ = new SaveFlags(); save_flags_ = new SaveFlags();
TestWithNativeContext::SetUpTestCase(); TestWithNativeContext::SetUpTestSuite();
} }
static void TearDownTestCase() { static void TearDownTestSuite() {
TestWithNativeContext::TearDownTestCase(); TestWithNativeContext::TearDownTestSuite();
CHECK_NOT_NULL(save_flags_); CHECK_NOT_NULL(save_flags_);
delete save_flags_; delete save_flags_;
save_flags_ = nullptr; save_flags_ = nullptr;
......
...@@ -8,6 +8,7 @@ ...@@ -8,6 +8,7 @@
#include <memory> #include <memory>
#include <vector> #include <vector>
#include "include/libplatform/libplatform.h"
#include "include/v8-array-buffer.h" #include "include/v8-array-buffer.h"
#include "include/v8-context.h" #include "include/v8-context.h"
#include "include/v8-local-handle.h" #include "include/v8-local-handle.h"
...@@ -26,6 +27,32 @@ namespace v8 { ...@@ -26,6 +27,32 @@ namespace v8 {
class ArrayBufferAllocator; class ArrayBufferAllocator;
template <typename TMixin>
class WithDefaultPlatformMixin : public TMixin {
public:
WithDefaultPlatformMixin() {
platform_ = v8::platform::NewDefaultPlatform(
0, v8::platform::IdleTaskSupport::kEnabled);
CHECK_NOT_NULL(platform_.get());
v8::V8::InitializePlatform(platform_.get());
#ifdef V8_SANDBOX
CHECK(v8::V8::InitializeSandbox());
#endif // V8_SANDBOX
v8::V8::Initialize();
}
~WithDefaultPlatformMixin() {
CHECK_NOT_NULL(platform_.get());
v8::V8::Dispose();
v8::V8::DisposePlatform();
}
v8::Platform* platform() const { return platform_.get(); }
private:
std::unique_ptr<v8::Platform> platform_;
};
using CounterMap = std::map<std::string, int>; using CounterMap = std::map<std::string, int>;
enum CountersMode { kNoCounters, kEnableCounters }; enum CountersMode { kNoCounters, kEnableCounters };
...@@ -123,12 +150,17 @@ class WithContextMixin : public TMixin { ...@@ -123,12 +150,17 @@ class WithContextMixin : public TMixin {
v8::Context::Scope context_scope_; v8::Context::Scope context_scope_;
}; };
using TestWithPlatform = //
WithDefaultPlatformMixin< //
::testing::Test>;
// Use v8::internal::TestWithIsolate if you are testing internals, // Use v8::internal::TestWithIsolate if you are testing internals,
// aka. directly work with Handles. // aka. directly work with Handles.
using TestWithIsolate = // using TestWithIsolate = //
WithIsolateScopeMixin< // WithIsolateScopeMixin< //
WithIsolateMixin< // WithIsolateMixin< //
::testing::Test>>; WithDefaultPlatformMixin< //
::testing::Test>>>;
// Use v8::internal::TestWithNativeContext if you are testing internals, // Use v8::internal::TestWithNativeContext if you are testing internals,
// aka. directly work with Handles. // aka. directly work with Handles.
...@@ -136,7 +168,8 @@ using TestWithContext = // ...@@ -136,7 +168,8 @@ using TestWithContext = //
WithContextMixin< // WithContextMixin< //
WithIsolateScopeMixin< // WithIsolateScopeMixin< //
WithIsolateMixin< // WithIsolateMixin< //
::testing::Test>>>; WithDefaultPlatformMixin< //
::testing::Test>>>>;
namespace internal { namespace internal {
...@@ -200,30 +233,36 @@ using TestWithIsolate = // ...@@ -200,30 +233,36 @@ using TestWithIsolate = //
WithInternalIsolateMixin< // WithInternalIsolateMixin< //
WithIsolateScopeMixin< // WithIsolateScopeMixin< //
WithIsolateMixin< // WithIsolateMixin< //
::testing::Test>>>; WithDefaultPlatformMixin< //
::testing::Test>>>>;
using TestWithZone = WithZoneMixin<::testing::Test>; using TestWithZone = WithZoneMixin<WithDefaultPlatformMixin< //
::testing::Test>>;
using TestWithIsolateAndZone = // using TestWithIsolateAndZone = //
WithZoneMixin< // WithZoneMixin< //
WithInternalIsolateMixin< // WithInternalIsolateMixin< //
WithIsolateScopeMixin< // WithIsolateScopeMixin< //
WithIsolateMixin< // WithIsolateMixin< //
::testing::Test>>>>; WithDefaultPlatformMixin< //
::testing::Test>>>>>;
using TestWithNativeContext = // using TestWithNativeContext = //
WithInternalIsolateMixin< // WithInternalIsolateMixin< //
WithContextMixin< // WithContextMixin< //
WithIsolateScopeMixin< // WithIsolateScopeMixin< //
WithIsolateMixin< // WithIsolateMixin< //
::testing::Test>>>>; WithDefaultPlatformMixin< //
::testing::Test>>>>>;
using TestWithNativeContextAndCounters = // using TestWithNativeContextAndCounters = //
WithInternalIsolateMixin< // WithInternalIsolateMixin< //
WithContextMixin< // WithContextMixin< //
WithIsolateScopeMixin< // WithIsolateScopeMixin< //
WithIsolateMixin< // WithIsolateMixin< //
::testing::Test, kEnableCounters>>>>; WithDefaultPlatformMixin< //
::testing::Test>,
kEnableCounters>>>>;
using TestWithNativeContextAndZone = // using TestWithNativeContextAndZone = //
WithZoneMixin< // WithZoneMixin< //
...@@ -231,7 +270,8 @@ using TestWithNativeContextAndZone = // ...@@ -231,7 +270,8 @@ using TestWithNativeContextAndZone = //
WithContextMixin< // WithContextMixin< //
WithIsolateScopeMixin< // WithIsolateScopeMixin< //
WithIsolateMixin< // WithIsolateMixin< //
::testing::Test>>>>>; WithDefaultPlatformMixin< //
::testing::Test>>>>>>;
class V8_NODISCARD SaveFlags { class V8_NODISCARD SaveFlags {
public: public:
......
...@@ -4,6 +4,8 @@ ...@@ -4,6 +4,8 @@
#include "src/utils/allocation.h" #include "src/utils/allocation.h"
#include "test/unittests/test-utils.h"
#if V8_OS_POSIX #if V8_OS_POSIX
#include <setjmp.h> #include <setjmp.h>
#include <signal.h> #include <signal.h>
...@@ -29,7 +31,7 @@ namespace { ...@@ -29,7 +31,7 @@ namespace {
// We don't test the execution permission because to do so we'd have to // We don't test the execution permission because to do so we'd have to
// dynamically generate code and test if we can execute it. // dynamically generate code and test if we can execute it.
class MemoryAllocationPermissionsTest : public ::testing::Test { class MemoryAllocationPermissionsTest : public TestWithPlatform {
static void SignalHandler(int signal, siginfo_t* info, void*) { static void SignalHandler(int signal, siginfo_t* info, void*) {
siglongjmp(continuation_, 1); siglongjmp(continuation_, 1);
} }
...@@ -127,9 +129,9 @@ TEST_F(MemoryAllocationPermissionsTest, DoTest) { ...@@ -127,9 +129,9 @@ TEST_F(MemoryAllocationPermissionsTest, DoTest) {
// Basic tests of allocation. // Basic tests of allocation.
class AllocationTest : public ::testing::Test {}; class AllocationTest : public TestWithPlatform {};
TEST(AllocationTest, AllocateAndFree) { TEST_F(AllocationTest, AllocateAndFree) {
size_t page_size = v8::internal::AllocatePageSize(); size_t page_size = v8::internal::AllocatePageSize();
CHECK_NE(0, page_size); CHECK_NE(0, page_size);
...@@ -154,7 +156,7 @@ TEST(AllocationTest, AllocateAndFree) { ...@@ -154,7 +156,7 @@ TEST(AllocationTest, AllocateAndFree) {
v8::internal::FreePages(page_allocator, aligned_mem_addr, kAllocationSize); v8::internal::FreePages(page_allocator, aligned_mem_addr, kAllocationSize);
} }
TEST(AllocationTest, ReserveMemory) { TEST_F(AllocationTest, ReserveMemory) {
v8::PageAllocator* page_allocator = v8::internal::GetPlatformPageAllocator(); v8::PageAllocator* page_allocator = v8::internal::GetPlatformPageAllocator();
size_t page_size = v8::internal::AllocatePageSize(); size_t page_size = v8::internal::AllocatePageSize();
const size_t kAllocationSize = 1 * v8::internal::MB; const size_t kAllocationSize = 1 * v8::internal::MB;
......
...@@ -344,7 +344,7 @@ class FunctionBodyDecoderTestBase : public WithZoneMixin<BaseTest> { ...@@ -344,7 +344,7 @@ class FunctionBodyDecoderTestBase : public WithZoneMixin<BaseTest> {
} }
}; };
using FunctionBodyDecoderTest = FunctionBodyDecoderTestBase<::testing::Test>; using FunctionBodyDecoderTest = FunctionBodyDecoderTestBase<TestWithPlatform>;
TEST_F(FunctionBodyDecoderTest, Int32Const1) { TEST_F(FunctionBodyDecoderTest, Int32Const1) {
byte code[] = {kExprI32Const, 0}; byte code[] = {kExprI32Const, 0};
...@@ -5142,7 +5142,8 @@ TEST_F(BytecodeIteratorTest, WithLocalDecls) { ...@@ -5142,7 +5142,8 @@ TEST_F(BytecodeIteratorTest, WithLocalDecls) {
******************************************************************************/ ******************************************************************************/
class FunctionBodyDecoderTestOnBothMemoryTypes class FunctionBodyDecoderTestOnBothMemoryTypes
: public FunctionBodyDecoderTestBase<::testing::TestWithParam<MemoryType>> { : public FunctionBodyDecoderTestBase<
WithDefaultPlatformMixin<::testing::TestWithParam<MemoryType>>> {
public: public:
bool is_memory64() const { return GetParam() == kMemory64; } bool is_memory64() const { return GetParam() == kMemory64; }
}; };
......
...@@ -13,7 +13,7 @@ namespace internal { ...@@ -13,7 +13,7 @@ namespace internal {
namespace wasm { namespace wasm {
namespace subtyping_unittest { namespace subtyping_unittest {
class WasmSubtypingTest : public ::testing::Test {}; class WasmSubtypingTest : public TestWithPlatform {};
using FieldInit = std::pair<ValueType, bool>; using FieldInit = std::pair<ValueType, bool>;
constexpr ValueType ref(uint32_t index) { constexpr ValueType ref(uint32_t index) {
......
...@@ -9,6 +9,7 @@ ...@@ -9,6 +9,7 @@
#include "src/base/page-allocator.h" #include "src/base/page-allocator.h"
#include "src/trap-handler/trap-handler.h" #include "src/trap-handler/trap-handler.h"
#include "src/utils/allocation.h" #include "src/utils/allocation.h"
#include "test/unittests/test-utils.h"
#include "testing/gtest/include/gtest/gtest.h" #include "testing/gtest/include/gtest/gtest.h"
namespace { namespace {
...@@ -23,7 +24,7 @@ i::Address g_start_address; ...@@ -23,7 +24,7 @@ i::Address g_start_address;
// on if V8 doesn't handle the exception. This allows tools like ASan to // on if V8 doesn't handle the exception. This allows tools like ASan to
// register a handler early on during the process startup and still generate // register a handler early on during the process startup and still generate
// stack traces on failures. // stack traces on failures.
class ExceptionHandlerFallbackTest : public ::testing::Test { class ExceptionHandlerFallbackTest : public v8::TestWithPlatform {
protected: protected:
void SetUp() override { void SetUp() override {
// Register this handler as the last handler. // Register this handler as the last handler.
......
...@@ -3,12 +3,16 @@ ...@@ -3,12 +3,16 @@
// found in the LICENSE file. // found in the LICENSE file.
#include "src/zone/zone-allocator.h" #include "src/zone/zone-allocator.h"
#include "test/unittests/test-utils.h"
#include "testing/gtest/include/gtest/gtest.h" #include "testing/gtest/include/gtest/gtest.h"
namespace v8 { namespace v8 {
namespace internal { namespace internal {
TEST(RecyclingZoneAllocator, ReuseSameSize) { class RecyclingZoneAllocatorTest : public TestWithPlatform {};
TEST_F(RecyclingZoneAllocatorTest, ReuseSameSize) {
AccountingAllocator accounting_allocator; AccountingAllocator accounting_allocator;
Zone zone(&accounting_allocator, ZONE_NAME); Zone zone(&accounting_allocator, ZONE_NAME);
RecyclingZoneAllocator<int> zone_allocator(&zone); RecyclingZoneAllocator<int> zone_allocator(&zone);
...@@ -18,7 +22,7 @@ TEST(RecyclingZoneAllocator, ReuseSameSize) { ...@@ -18,7 +22,7 @@ TEST(RecyclingZoneAllocator, ReuseSameSize) {
CHECK_EQ(zone_allocator.allocate(10), allocated); CHECK_EQ(zone_allocator.allocate(10), allocated);
} }
TEST(RecyclingZoneAllocator, ReuseSmallerSize) { TEST_F(RecyclingZoneAllocatorTest, ReuseSmallerSize) {
AccountingAllocator accounting_allocator; AccountingAllocator accounting_allocator;
Zone zone(&accounting_allocator, ZONE_NAME); Zone zone(&accounting_allocator, ZONE_NAME);
RecyclingZoneAllocator<int> zone_allocator(&zone); RecyclingZoneAllocator<int> zone_allocator(&zone);
...@@ -28,7 +32,7 @@ TEST(RecyclingZoneAllocator, ReuseSmallerSize) { ...@@ -28,7 +32,7 @@ TEST(RecyclingZoneAllocator, ReuseSmallerSize) {
CHECK_EQ(zone_allocator.allocate(10), allocated); CHECK_EQ(zone_allocator.allocate(10), allocated);
} }
TEST(RecyclingZoneAllocator, DontReuseTooSmallSize) { TEST_F(RecyclingZoneAllocatorTest, DontReuseTooSmallSize) {
AccountingAllocator accounting_allocator; AccountingAllocator accounting_allocator;
Zone zone(&accounting_allocator, ZONE_NAME); Zone zone(&accounting_allocator, ZONE_NAME);
RecyclingZoneAllocator<int> zone_allocator(&zone); RecyclingZoneAllocator<int> zone_allocator(&zone);
...@@ -40,7 +44,7 @@ TEST(RecyclingZoneAllocator, DontReuseTooSmallSize) { ...@@ -40,7 +44,7 @@ TEST(RecyclingZoneAllocator, DontReuseTooSmallSize) {
CHECK_NE(zone_allocator.allocate(1), allocated); CHECK_NE(zone_allocator.allocate(1), allocated);
} }
TEST(RecyclingZoneAllocator, ReuseMultipleSize) { TEST_F(RecyclingZoneAllocatorTest, ReuseMultipleSize) {
AccountingAllocator accounting_allocator; AccountingAllocator accounting_allocator;
Zone zone(&accounting_allocator, ZONE_NAME); Zone zone(&accounting_allocator, ZONE_NAME);
RecyclingZoneAllocator<int> zone_allocator(&zone); RecyclingZoneAllocator<int> zone_allocator(&zone);
...@@ -56,7 +60,7 @@ TEST(RecyclingZoneAllocator, ReuseMultipleSize) { ...@@ -56,7 +60,7 @@ TEST(RecyclingZoneAllocator, ReuseMultipleSize) {
CHECK_EQ(zone_allocator.allocate(10), allocated1); CHECK_EQ(zone_allocator.allocate(10), allocated1);
} }
TEST(RecyclingZoneAllocator, DontChainSmallerSizes) { TEST_F(RecyclingZoneAllocatorTest, DontChainSmallerSizes) {
AccountingAllocator accounting_allocator; AccountingAllocator accounting_allocator;
Zone zone(&accounting_allocator, ZONE_NAME); Zone zone(&accounting_allocator, ZONE_NAME);
RecyclingZoneAllocator<int> zone_allocator(&zone); RecyclingZoneAllocator<int> zone_allocator(&zone);
......
...@@ -6,6 +6,7 @@ ...@@ -6,6 +6,7 @@
#include "src/zone/accounting-allocator.h" #include "src/zone/accounting-allocator.h"
#include "src/zone/zone.h" #include "src/zone/zone.h"
#include "test/unittests/test-utils.h"
#include "testing/gtest/include/gtest/gtest.h" #include "testing/gtest/include/gtest/gtest.h"
namespace v8 { namespace v8 {
...@@ -13,7 +14,9 @@ namespace internal { ...@@ -13,7 +14,9 @@ namespace internal {
const size_t kItemCount = size_t(1) << 10; const size_t kItemCount = size_t(1) << 10;
TEST(ZoneChunkList, ForwardIterationTest) { class ZoneChunkListTest : public TestWithPlatform {};
TEST_F(ZoneChunkListTest, ForwardIterationTest) {
AccountingAllocator allocator; AccountingAllocator allocator;
Zone zone(&allocator, ZONE_NAME); Zone zone(&allocator, ZONE_NAME);
...@@ -33,7 +36,7 @@ TEST(ZoneChunkList, ForwardIterationTest) { ...@@ -33,7 +36,7 @@ TEST(ZoneChunkList, ForwardIterationTest) {
EXPECT_EQ(count, kItemCount); EXPECT_EQ(count, kItemCount);
} }
TEST(ZoneChunkList, ReverseIterationTest) { TEST_F(ZoneChunkListTest, ReverseIterationTest) {
AccountingAllocator allocator; AccountingAllocator allocator;
Zone zone(&allocator, ZONE_NAME); Zone zone(&allocator, ZONE_NAME);
...@@ -53,7 +56,7 @@ TEST(ZoneChunkList, ReverseIterationTest) { ...@@ -53,7 +56,7 @@ TEST(ZoneChunkList, ReverseIterationTest) {
EXPECT_EQ(count, kItemCount); EXPECT_EQ(count, kItemCount);
} }
TEST(ZoneChunkList, PushFrontTest) { TEST_F(ZoneChunkListTest, PushFrontTest) {
AccountingAllocator allocator; AccountingAllocator allocator;
Zone zone(&allocator, ZONE_NAME); Zone zone(&allocator, ZONE_NAME);
...@@ -73,7 +76,7 @@ TEST(ZoneChunkList, PushFrontTest) { ...@@ -73,7 +76,7 @@ TEST(ZoneChunkList, PushFrontTest) {
EXPECT_EQ(count, kItemCount); EXPECT_EQ(count, kItemCount);
} }
TEST(ZoneChunkList, RewindTest) { TEST_F(ZoneChunkListTest, RewindTest) {
AccountingAllocator allocator; AccountingAllocator allocator;
Zone zone(&allocator, ZONE_NAME); Zone zone(&allocator, ZONE_NAME);
...@@ -120,7 +123,7 @@ TEST(ZoneChunkList, RewindTest) { ...@@ -120,7 +123,7 @@ TEST(ZoneChunkList, RewindTest) {
EXPECT_EQ(count, zone_chunk_list.size()); EXPECT_EQ(count, zone_chunk_list.size());
} }
TEST(ZoneChunkList, FindTest) { TEST_F(ZoneChunkListTest, FindTest) {
AccountingAllocator allocator; AccountingAllocator allocator;
Zone zone(&allocator, ZONE_NAME); Zone zone(&allocator, ZONE_NAME);
...@@ -139,7 +142,7 @@ TEST(ZoneChunkList, FindTest) { ...@@ -139,7 +142,7 @@ TEST(ZoneChunkList, FindTest) {
EXPECT_EQ(*zone_chunk_list.Find(index), 42u); EXPECT_EQ(*zone_chunk_list.Find(index), 42u);
} }
TEST(ZoneChunkList, CopyToTest) { TEST_F(ZoneChunkListTest, CopyToTest) {
AccountingAllocator allocator; AccountingAllocator allocator;
Zone zone(&allocator, ZONE_NAME); Zone zone(&allocator, ZONE_NAME);
...@@ -158,7 +161,7 @@ TEST(ZoneChunkList, CopyToTest) { ...@@ -158,7 +161,7 @@ TEST(ZoneChunkList, CopyToTest) {
} }
} }
TEST(ZoneChunkList, SmallCopyToTest) { TEST_F(ZoneChunkListTest, SmallCopyToTest) {
AccountingAllocator allocator; AccountingAllocator allocator;
Zone zone(&allocator, ZONE_NAME); Zone zone(&allocator, ZONE_NAME);
...@@ -182,7 +185,7 @@ struct Fubar { ...@@ -182,7 +185,7 @@ struct Fubar {
size_t b_; size_t b_;
}; };
TEST(ZoneChunkList, BigCopyToTest) { TEST_F(ZoneChunkListTest, BigCopyToTest) {
AccountingAllocator allocator; AccountingAllocator allocator;
Zone zone(&allocator, ZONE_NAME); Zone zone(&allocator, ZONE_NAME);
...@@ -214,7 +217,7 @@ void TestForwardIterationOfConstList( ...@@ -214,7 +217,7 @@ void TestForwardIterationOfConstList(
EXPECT_EQ(count, kItemCount); EXPECT_EQ(count, kItemCount);
} }
TEST(ZoneChunkList, ConstForwardIterationTest) { TEST_F(ZoneChunkListTest, ConstForwardIterationTest) {
AccountingAllocator allocator; AccountingAllocator allocator;
Zone zone(&allocator, ZONE_NAME); Zone zone(&allocator, ZONE_NAME);
...@@ -227,7 +230,7 @@ TEST(ZoneChunkList, ConstForwardIterationTest) { ...@@ -227,7 +230,7 @@ TEST(ZoneChunkList, ConstForwardIterationTest) {
TestForwardIterationOfConstList(zone_chunk_list); TestForwardIterationOfConstList(zone_chunk_list);
} }
TEST(ZoneChunkList, RewindAndIterate) { TEST_F(ZoneChunkListTest, RewindAndIterate) {
// Regression test for https://bugs.chromium.org/p/v8/issues/detail?id=7478 // Regression test for https://bugs.chromium.org/p/v8/issues/detail?id=7478
AccountingAllocator allocator; AccountingAllocator allocator;
Zone zone(&allocator, ZONE_NAME); Zone zone(&allocator, ZONE_NAME);
...@@ -267,7 +270,7 @@ TEST(ZoneChunkList, RewindAndIterate) { ...@@ -267,7 +270,7 @@ TEST(ZoneChunkList, RewindAndIterate) {
} }
} }
TEST(ZoneChunkList, PushBackPopBackSize) { TEST_F(ZoneChunkListTest, PushBackPopBackSize) {
// Regression test for https://bugs.chromium.org/p/v8/issues/detail?id=7489 // Regression test for https://bugs.chromium.org/p/v8/issues/detail?id=7489
AccountingAllocator allocator; AccountingAllocator allocator;
Zone zone(&allocator, ZONE_NAME); Zone zone(&allocator, ZONE_NAME);
...@@ -280,7 +283,7 @@ TEST(ZoneChunkList, PushBackPopBackSize) { ...@@ -280,7 +283,7 @@ TEST(ZoneChunkList, PushBackPopBackSize) {
CHECK_EQ(size_t(0), zone_chunk_list.size()); CHECK_EQ(size_t(0), zone_chunk_list.size());
} }
TEST(ZoneChunkList, AdvanceZeroTest) { TEST_F(ZoneChunkListTest, AdvanceZeroTest) {
AccountingAllocator allocator; AccountingAllocator allocator;
Zone zone(&allocator, ZONE_NAME); Zone zone(&allocator, ZONE_NAME);
...@@ -297,7 +300,7 @@ TEST(ZoneChunkList, AdvanceZeroTest) { ...@@ -297,7 +300,7 @@ TEST(ZoneChunkList, AdvanceZeroTest) {
CHECK_EQ(iterator_advance, zone_chunk_list.begin()); CHECK_EQ(iterator_advance, zone_chunk_list.begin());
} }
TEST(ZoneChunkList, AdvancePartwayTest) { TEST_F(ZoneChunkListTest, AdvancePartwayTest) {
AccountingAllocator allocator; AccountingAllocator allocator;
Zone zone(&allocator, ZONE_NAME); Zone zone(&allocator, ZONE_NAME);
...@@ -318,7 +321,7 @@ TEST(ZoneChunkList, AdvancePartwayTest) { ...@@ -318,7 +321,7 @@ TEST(ZoneChunkList, AdvancePartwayTest) {
CHECK_EQ(iterator_advance, iterator_one_by_one); CHECK_EQ(iterator_advance, iterator_one_by_one);
} }
TEST(ZoneChunkList, AdvanceEndTest) { TEST_F(ZoneChunkListTest, AdvanceEndTest) {
AccountingAllocator allocator; AccountingAllocator allocator;
Zone zone(&allocator, ZONE_NAME); Zone zone(&allocator, ZONE_NAME);
...@@ -335,7 +338,7 @@ TEST(ZoneChunkList, AdvanceEndTest) { ...@@ -335,7 +338,7 @@ TEST(ZoneChunkList, AdvanceEndTest) {
CHECK_EQ(iterator_advance, zone_chunk_list.end()); CHECK_EQ(iterator_advance, zone_chunk_list.end());
} }
TEST(ZoneChunkList, FindOverChunkBoundary) { TEST_F(ZoneChunkListTest, FindOverChunkBoundary) {
AccountingAllocator allocator; AccountingAllocator allocator;
Zone zone(&allocator, ZONE_NAME); Zone zone(&allocator, ZONE_NAME);
......
...@@ -5,20 +5,23 @@ ...@@ -5,20 +5,23 @@
#include "src/zone/zone.h" #include "src/zone/zone.h"
#include "src/zone/accounting-allocator.h" #include "src/zone/accounting-allocator.h"
#include "test/unittests/test-utils.h"
#include "testing/gtest/include/gtest/gtest.h" #include "testing/gtest/include/gtest/gtest.h"
namespace v8 { namespace v8 {
namespace internal { namespace internal {
class ZoneTest : public TestWithPlatform {};
// This struct is just a type tag for Zone::Allocate<T>(size_t) call. // This struct is just a type tag for Zone::Allocate<T>(size_t) call.
struct ZoneTest {}; struct ZoneTestTag {};
TEST(Zone, 8ByteAlignment) { TEST_F(ZoneTest, 8ByteAlignment) {
AccountingAllocator allocator; AccountingAllocator allocator;
Zone zone(&allocator, ZONE_NAME); Zone zone(&allocator, ZONE_NAME);
for (size_t i = 0; i < 16; ++i) { for (size_t i = 0; i < 16; ++i) {
ASSERT_EQ(reinterpret_cast<intptr_t>(zone.Allocate<ZoneTest>(i)) % 8, 0); ASSERT_EQ(reinterpret_cast<intptr_t>(zone.Allocate<ZoneTestTag>(i)) % 8, 0);
} }
} }
......
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