diff options
| -rw-r--r-- | build/art.go | 12 | ||||
| -rw-r--r-- | cmdline/cmdline_types.h | 2 | ||||
| -rw-r--r-- | runtime/gc/collector/mark_compact.cc | 9 | ||||
| -rw-r--r-- | runtime/gc/collector_type.h | 1 | ||||
| -rw-r--r-- | runtime/read_barrier_config.h | 9 |
5 files changed, 26 insertions, 7 deletions
diff --git a/build/art.go b/build/art.go index 56df14239f..672f28295f 100644 --- a/build/art.go +++ b/build/art.go @@ -38,10 +38,12 @@ func globalFlags(ctx android.LoadHookContext) ([]string, []string) { opt := ctx.Config().GetenvWithDefault("ART_NDEBUG_OPT_FLAG", "-O3") cflags = append(cflags, opt) + tlab := false gcType := ctx.Config().GetenvWithDefault("ART_DEFAULT_GC_TYPE", "CMC") if ctx.Config().IsEnvTrue("ART_TEST_DEBUG_GC") { gcType = "SS" + tlab = true } cflags = append(cflags, "-DART_DEFAULT_GC_TYPE_IS_"+gcType) @@ -72,10 +74,14 @@ func globalFlags(ctx android.LoadHookContext) ([]string, []string) { // Eventually, make it such that we force CC only if ART_USE_READ_BARRIER // was set to true explicitly during build time. cflags = append(cflags, "-DART_FORCE_USE_READ_BARRIER=1") + tlab = true + } else if gcType == "CMC" { + tlab = true + } + + if tlab { + cflags = append(cflags, "-DART_USE_TLAB=1") } - // The only GC which does not want ART_USE_TLAB set is CMS, which isn't actually used. - // When read-barrier is not set, we use userfaultfd GC. - cflags = append(cflags, "-DART_USE_TLAB=1") cdexLevel := ctx.Config().GetenvWithDefault("ART_DEFAULT_COMPACT_DEX_LEVEL", "fast") cflags = append(cflags, "-DART_DEFAULT_COMPACT_DEX_LEVEL="+cdexLevel) diff --git a/cmdline/cmdline_types.h b/cmdline/cmdline_types.h index 8c535a6fef..b16f0697fd 100644 --- a/cmdline/cmdline_types.h +++ b/cmdline/cmdline_types.h @@ -527,6 +527,8 @@ static gc::CollectorType ParseCollectorType(const std::string& option) { return gc::kCollectorTypeSS; } else if (option == "CC") { return gc::kCollectorTypeCC; + } else if (option == "CMC") { + return gc::kCollectorTypeCMC; } else { return gc::kCollectorTypeNone; } diff --git a/runtime/gc/collector/mark_compact.cc b/runtime/gc/collector/mark_compact.cc index 0b8d9016ab..f2817cfd03 100644 --- a/runtime/gc/collector/mark_compact.cc +++ b/runtime/gc/collector/mark_compact.cc @@ -99,13 +99,14 @@ static bool ShouldUseUserfaultfd() { } #endif -#ifdef ART_FORCE_USE_READ_BARRIER -const bool gUseReadBarrier = kUseBakerReadBarrier || kUseTableLookupReadBarrier; -#else +// The other cases are defined as a constexpr in runtime/read_barrier_config.h +#ifndef ART_FORCE_USE_READ_BARRIER const bool gUseReadBarrier = (kUseBakerReadBarrier || kUseTableLookupReadBarrier) && !ShouldUseUserfaultfd(); -#endif +#ifdef ART_DEFAULT_GC_TYPE_IS_CMC const bool gUseUserfaultfd = !gUseReadBarrier; +#endif +#endif namespace gc { namespace collector { diff --git a/runtime/gc/collector_type.h b/runtime/gc/collector_type.h index 8fdb524f8e..c20e3a7347 100644 --- a/runtime/gc/collector_type.h +++ b/runtime/gc/collector_type.h @@ -71,6 +71,7 @@ static constexpr CollectorType kCollectorTypeDefault = kCollectorTypeSS #elif ART_DEFAULT_GC_TYPE_IS_CMS kCollectorTypeCMS +#else #error "ART default GC type must be set" #endif ; // NOLINT [whitespace/semicolon] [5] diff --git a/runtime/read_barrier_config.h b/runtime/read_barrier_config.h index e974b04797..d5baee216e 100644 --- a/runtime/read_barrier_config.h +++ b/runtime/read_barrier_config.h @@ -62,8 +62,17 @@ static constexpr bool kUseTableLookupReadBarrier = true; static constexpr bool kUseTableLookupReadBarrier = false; #endif +#ifdef ART_FORCE_USE_READ_BARRIER +constexpr bool gUseReadBarrier = kUseBakerReadBarrier || kUseTableLookupReadBarrier; +constexpr bool gUseUserfaultfd = !gUseReadBarrier; +#else extern const bool gUseReadBarrier; +#ifdef ART_DEFAULT_GC_TYPE_IS_CMC extern const bool gUseUserfaultfd; +#else +constexpr bool gUseUserfaultfd = false; +#endif +#endif // Disabled for performance reasons. static constexpr bool kCheckDebugDisallowReadBarrierCount = kIsDebugBuild; |