[K/N] Extract common part of gc runtime tests (2/2)

Restore ParallelMarkConcurrentSweepTest.cpp with new content.
This commit is contained in:
Aleksei.Glushko
2023-11-10 18:01:49 +01:00
committed by Space Team
parent 8180400a36
commit f7057edce1
@@ -0,0 +1,84 @@
/*
* Copyright 2010-2023 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
* that can be found in the LICENSE file.
*/
#include "ParallelMarkConcurrentSweep.hpp"
#include <mutex>
#include "gmock/gmock.h"
#include "gtest/gtest.h"
#include "GCImpl.hpp"
#include "GlobalData.hpp"
#include "SafePoint.hpp"
#include "StableRef.hpp"
#include "TestSupport.hpp"
#include "TracingGCTest.hpp"
using namespace kotlin;
namespace {
template<std::size_t kMaxParallelism, bool kCooperativeMutators, std::size_t kAuxGCThreads>
class ParallelMarkConcurrentSweepTest {
public:
ParallelMarkConcurrentSweepTest() {
if (supportedConfiguration()) {
mm::GlobalData::Instance().gc().impl().gc().reconfigure(kMaxParallelism, kCooperativeMutators, kAuxGCThreads);
}
}
~ParallelMarkConcurrentSweepTest() {
mm::GlobalsRegistry::Instance().ClearForTests();
mm::SpecialRefRegistry::instance().clearForTests();
mm::GlobalData::Instance().gc().ClearForTests();
mm::GlobalData::Instance().allocator().clearForTests();
}
void SetUp() {
if (!supportedConfiguration()) {
GTEST_SKIP() << "Unsupported parallelism configuration";
}
}
static std::string getName() {
using namespace std::string_literals;
auto base = ""s;
auto parallelism = std::to_string(kMaxParallelism) + "Parallel";
auto withMutators = kCooperativeMutators ? "WithMutators" : "";
auto withAux = kAuxGCThreads > 0 ? "WithGCThreads" : "";
return base + parallelism + withMutators + withAux;
}
private:
bool supportedConfiguration() const {
return !compiler::gcMarkSingleThreaded() || (!kCooperativeMutators && kAuxGCThreads == 0);
}
};
} // namespace
using ParallelismConfigs = ::testing::Types<
ParallelMarkConcurrentSweepTest<kDefaultThreadCount * 3, false, 0>,
ParallelMarkConcurrentSweepTest<kDefaultThreadCount * 3, true, 0>
#if !__has_feature(thread_sanitizer) // TODO: Fix auxilary threads with tsan.
, ParallelMarkConcurrentSweepTest<kDefaultThreadCount * 3, false, kDefaultThreadCount>,
ParallelMarkConcurrentSweepTest<kDefaultThreadCount * 3, true, kDefaultThreadCount>,
ParallelMarkConcurrentSweepTest<kDefaultThreadCount / 2, false, kDefaultThreadCount>,
ParallelMarkConcurrentSweepTest<kDefaultThreadCount / 2 * 3, true, kDefaultThreadCount>
#endif
>;
struct NameGenerator {
template <typename T>
static std::string GetName(int) {
return T::getName();
}
};
REGISTER_TYPED_TEST_SUITE_WITH_LISTS(TracingGCTest, TRACING_GC_TEST_LIST);
INSTANTIATE_TYPED_TEST_SUITE_P(PMCS, TracingGCTest, ParallelismConfigs, NameGenerator);
REGISTER_TYPED_TEST_SUITE_WITH_LISTS(STWMarkGCTest, STW_MARK_GC_TEST_LIST);
INSTANTIATE_TYPED_TEST_SUITE_P(PMCS, STWMarkGCTest, ParallelismConfigs, NameGenerator);