/* * Copyright (C) 2011 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef ART_RUNTIME_RUNTIME_GLOBALS_H_ #define ART_RUNTIME_RUNTIME_GLOBALS_H_ #include "base/globals.h" namespace art { // Size of Dex virtual registers. static constexpr size_t kVRegSize = 4; // Returns whether the given memory offset can be used for generating // an implicit null check. static inline bool CanDoImplicitNullCheckOn(uintptr_t offset) { return offset < kPageSize; } // Required object alignment static constexpr size_t kObjectAlignmentShift = 3; static constexpr size_t kObjectAlignment = 1u << kObjectAlignmentShift; static constexpr size_t kLargeObjectAlignment = kPageSize; // Garbage collector constants. static constexpr bool kMovingCollector = true; static constexpr bool kMarkCompactSupport = false && kMovingCollector; // True if we allow moving classes. static constexpr bool kMovingClasses = !kMarkCompactSupport; // When using the Concurrent Copying (CC) collector, if // `ART_USE_GENERATIONAL_CC` is true, enable generational collection by default, // i.e. use sticky-bit CC for minor collections and (full) CC for major // collections. // This default value can be overridden with the runtime option // `-Xgc:[no]generational_cc`. // // TODO(b/67628039): Consider either: // - renaming this to a better descriptive name (e.g. // `ART_USE_GENERATIONAL_CC_BY_DEFAULT`); or // - removing `ART_USE_GENERATIONAL_CC` and having a fixed default value. // Any of these changes will require adjusting users of this preprocessor // directive and the corresponding build system environment variable (e.g. in // ART's continuous testing). #ifdef ART_USE_GENERATIONAL_CC static constexpr bool kEnableGenerationalCCByDefault = true; #else static constexpr bool kEnableGenerationalCCByDefault = false; #endif // If true, enable the tlab allocator by default. #ifdef ART_USE_TLAB static constexpr bool kUseTlab = true; #else static constexpr bool kUseTlab = false; #endif // Kinds of tracing clocks. enum class TraceClockSource { kThreadCpu, kWall, kDual, // Both wall and thread CPU clocks. }; #if defined(__linux__) static constexpr TraceClockSource kDefaultTraceClockSource = TraceClockSource::kDual; #else static constexpr TraceClockSource kDefaultTraceClockSource = TraceClockSource::kWall; #endif static constexpr bool kDefaultMustRelocate = true; // Size of a heap reference. static constexpr size_t kHeapReferenceSize = sizeof(uint32_t); } // namespace art #endif // ART_RUNTIME_RUNTIME_GLOBALS_H_