[test] Group test features behind a single GN switch

This will switch on various testing features in sanitizer builds and
for correctness fuzzer builds.

Currently we group enabling the slow-path runtime flag and allocation
timeout for atomic gc stress, but more features could be added in the
future.

This will enable gc fuzzer, clusterfuzz and correctness fuzzer to use
both slow-path and atomic gc stress in release sanitizer builds.

Bug: v8:6972
Change-Id: I5cade68241a8a0711f8a388be7e1543aab0035fa
Reviewed-on: https://chromium-review.googlesource.com/869932
Commit-Queue: Michael Achenbach <machenbach@chromium.org>
Reviewed-by: Michael Lippautz <mlippautz@chromium.org>
Cr-Commit-Position: refs/heads/master@{#50656}
This commit is contained in:
Michael Achenbach 2018-01-17 14:30:12 +01:00 committed by Commit Bot
parent 41f231a25a
commit 45833d9bb8
5 changed files with 41 additions and 34 deletions

View File

@ -89,8 +89,8 @@ declare_args() {
# Sets -dV8_CONCURRENT_MARKING
v8_enable_concurrent_marking = true
# Sets -dV8_ENABLE_FORCE_SLOW_PATH
v8_enable_force_slow_path = ""
# Enables various testing features.
v8_enable_test_features = ""
# Build the snapshot with unwinding information for perf.
# Sets -dV8_USE_SNAPSHOT_WITH_UNWINDING_INFO.
@ -153,8 +153,8 @@ if (v8_enable_disassembler == "") {
if (v8_enable_trace_maps == "") {
v8_enable_trace_maps = is_debug
}
if (v8_enable_force_slow_path == "") {
v8_enable_force_slow_path = is_debug
if (v8_enable_test_features == "") {
v8_enable_test_features = is_debug || dcheck_always_on
}
if (v8_enable_v8_checks == "") {
v8_enable_v8_checks = is_debug
@ -282,7 +282,8 @@ config("features") {
if (v8_enable_trace_feedback_updates) {
defines += [ "V8_TRACE_FEEDBACK_UPDATES" ]
}
if (v8_enable_force_slow_path) {
if (v8_enable_test_features) {
defines += [ "V8_ENABLE_ALLOCATION_TIMEOUT" ]
defines += [ "V8_ENABLE_FORCE_SLOW_PATH" ]
}
if (v8_enable_v8_checks) {

View File

@ -430,7 +430,7 @@
'gn_release_x64_trybot': [
'gn', 'release_trybot', 'x64', 'swarming'],
'gn_release_x64_test_features_trybot': [
'gn', 'release_trybot', 'x64', 'swarming', 'v8_enable_force_slow_path'],
'gn', 'release_trybot', 'x64', 'swarming', 'v8_enable_test_features'],
'gn_release_x64_tsan': [
'gn', 'release_bot', 'x64', 'tsan', 'swarming'],
'gn_release_x64_tsan_concurrent_marking': [
@ -558,7 +558,7 @@
},
'asan': {
'mixins': ['v8_enable_force_slow_path'],
'mixins': ['v8_enable_test_features'],
'gn_args': 'is_asan=true',
'gyp_defines': 'clang=1 asan=1',
},
@ -569,14 +569,14 @@
},
'cfi': {
'mixins': ['v8_enable_force_slow_path'],
'mixins': ['v8_enable_test_features'],
'gn_args': ('is_cfi=true use_cfi_cast=true use_cfi_diag=true '
'use_cfi_recover=false'),
'gyp_defines': 'cfi_vptr=1 cfi_diag=1',
},
'cfi_clusterfuzz': {
'mixins': ['v8_enable_force_slow_path'],
'mixins': ['v8_enable_test_features'],
'gn_args': ('is_cfi=true use_cfi_cast=true use_cfi_diag=true '
'use_cfi_recover=true'),
'gyp_defines': 'cfi_vptr=1 cfi_diag=1',
@ -653,7 +653,7 @@
},
'lsan': {
'mixins': ['v8_enable_force_slow_path'],
'mixins': ['v8_enable_test_features'],
'gn_args': 'is_lsan=true',
'gyp_defines': 'lsan=1',
},
@ -669,13 +669,13 @@
},
'msan': {
'mixins': ['v8_enable_force_slow_path'],
'mixins': ['v8_enable_test_features'],
'gn_args': ('is_msan=true msan_track_origins=2 '
'use_prebuilt_instrumented_libraries=true'),
},
'msan_no_origins': {
'mixins': ['v8_enable_force_slow_path'],
'mixins': ['v8_enable_test_features'],
'gn_args': ('is_msan=true msan_track_origins=0 '
'use_prebuilt_instrumented_libraries=true'),
},
@ -765,13 +765,13 @@
},
'tsan': {
'mixins': ['v8_enable_force_slow_path'],
'mixins': ['v8_enable_test_features'],
'gn_args': 'is_tsan=true',
'gyp_defines': 'clang=1 tsan=1',
},
'ubsan_vptr': {
'mixins': ['v8_enable_force_slow_path'],
'mixins': ['v8_enable_test_features'],
# TODO(krasin): Remove is_ubsan_no_recover=true when
# https://llvm.org/bugs/show_bug.cgi?id=25569 is fixed and just use
# ubsan_vptr instead.
@ -779,7 +779,7 @@
},
'ubsan_vptr_recover': {
'mixins': ['v8_enable_force_slow_path'],
'mixins': ['v8_enable_test_features'],
# Ubsan vptr with recovery.
'gn_args': 'is_ubsan_vptr=true is_ubsan_no_recover=false',
},
@ -794,7 +794,7 @@
},
'v8_correctness_fuzzer': {
'mixins': ['v8_enable_force_slow_path'],
'mixins': ['v8_enable_test_features'],
'gn_args': 'v8_correctness_fuzzer=true v8_multi_arch_build=true',
},
@ -808,8 +808,8 @@
'gyp_defines': 'v8_enable_slow_dchecks=1',
},
'v8_enable_force_slow_path': {
'gn_args': 'v8_enable_force_slow_path=true',
'v8_enable_test_features': {
'gn_args': 'v8_enable_test_features=true',
},
'v8_enable_verify_predictable': {

View File

@ -250,12 +250,14 @@ AllocationResult Heap::AllocateRaw(int size_in_bytes, AllocationSpace space,
DCHECK(AllowHandleAllocation::IsAllowed());
DCHECK(AllowHeapAllocation::IsAllowed());
DCHECK(gc_state_ == NOT_IN_GC);
#ifdef DEBUG
#ifdef V8_ENABLE_ALLOCATION_TIMEOUT
if (FLAG_random_gc_interval > 0 || FLAG_gc_interval >= 0) {
if (!always_allocate() && Heap::allocation_timeout_-- <= 0) {
return AllocationResult::Retry(space);
}
}
#endif
#ifdef DEBUG
isolate_->counters()->objs_since_last_full()->Increment();
isolate_->counters()->objs_since_last_young()->Increment();
#endif

View File

@ -182,9 +182,6 @@ Heap::Heap()
gc_count_(0),
mmap_region_base_(0),
remembered_unmapped_pages_index_(0),
#ifdef DEBUG
allocation_timeout_(0),
#endif // DEBUG
old_generation_allocation_limit_(initial_old_generation_size_),
inline_allocation_disabled_(false),
tracer_(nullptr),
@ -233,7 +230,12 @@ Heap::Heap()
use_tasks_(true),
force_oom_(false),
delay_sweeper_tasks_for_testing_(false),
pending_layout_change_object_(nullptr) {
pending_layout_change_object_(nullptr)
#ifdef V8_ENABLE_ALLOCATION_TIMEOUT
,
allocation_timeout_(0)
#endif // V8_ENABLE_ALLOCATION_TIMEOUT
{
// Ensure old_generation_size_ is a multiple of kPageSize.
DCHECK_EQ(0, max_old_generation_size_ & (Page::kPageSize - 1));
@ -1214,7 +1216,7 @@ bool Heap::CollectGarbage(AllocationSpace space,
const char* collector_reason = nullptr;
GarbageCollector collector = SelectGarbageCollector(space, &collector_reason);
#ifdef DEBUG
#ifdef V8_ENABLE_ALLOCATION_TIMEOUT
// Reset the allocation timeout, but make sure to allow at least a few
// allocations after a collection. The reason for this is that we have a lot
// of allocation sequences and we assume that a garbage collection will allow
@ -5513,7 +5515,7 @@ void Heap::DisableInlineAllocation() {
}
bool Heap::SetUp() {
#ifdef DEBUG
#ifdef V8_ENABLE_ALLOCATION_TIMEOUT
allocation_timeout_ = NextAllocationTimeout();
#endif

View File

@ -1600,12 +1600,14 @@ class Heap {
void VerifyRememberedSetFor(HeapObject* object);
#endif
#ifdef V8_ENABLE_ALLOCATION_TIMEOUT
void set_allocation_timeout(int timeout) { allocation_timeout_ = timeout; }
#endif
#ifdef DEBUG
void VerifyCountersAfterSweeping();
void VerifyCountersBeforeConcurrentSweeping();
void set_allocation_timeout(int timeout) { allocation_timeout_ = timeout; }
void Print();
void PrintHandles();
@ -2415,13 +2417,6 @@ class Heap {
int remembered_unmapped_pages_index_;
Address remembered_unmapped_pages_[kRememberedUnmappedPages];
#ifdef DEBUG
// If the --gc-interval flag is set to a positive value, this
// variable holds the value indicating the number of allocations
// remain until the next failure and garbage collection.
int allocation_timeout_;
#endif // DEBUG
// Limit that triggers a global GC on the next (normally caused) GC. This
// is checked when we have already decided to do a GC to help determine
// which collector to invoke, before expanding a paged space in the old
@ -2567,6 +2562,13 @@ class Heap {
HeapObject* pending_layout_change_object_;
#ifdef V8_ENABLE_ALLOCATION_TIMEOUT
// If the --gc-interval flag is set to a positive value, this
// variable holds the value indicating the number of allocations
// remain until the next failure and garbage collection.
int allocation_timeout_;
#endif // V8_ENABLE_ALLOCATION_TIMEOUT
std::map<HeapObject*, HeapObject*> retainer_;
std::map<HeapObject*, Root> retaining_root_;
// If an object is retained by an ephemeron, then the retaining key of the