10de9f73afe3e835b63f2ee0c1416930656449f3fMathieu Chartier/* 20de9f73afe3e835b63f2ee0c1416930656449f3fMathieu Chartier * Copyright (C) 2013 The Android Open Source Project 30de9f73afe3e835b63f2ee0c1416930656449f3fMathieu Chartier * 40de9f73afe3e835b63f2ee0c1416930656449f3fMathieu Chartier * Licensed under the Apache License, Version 2.0 (the "License"); 50de9f73afe3e835b63f2ee0c1416930656449f3fMathieu Chartier * you may not use this file except in compliance with the License. 60de9f73afe3e835b63f2ee0c1416930656449f3fMathieu Chartier * You may obtain a copy of the License at 70de9f73afe3e835b63f2ee0c1416930656449f3fMathieu Chartier * 80de9f73afe3e835b63f2ee0c1416930656449f3fMathieu Chartier * http://www.apache.org/licenses/LICENSE-2.0 90de9f73afe3e835b63f2ee0c1416930656449f3fMathieu Chartier * 100de9f73afe3e835b63f2ee0c1416930656449f3fMathieu Chartier * Unless required by applicable law or agreed to in writing, software 110de9f73afe3e835b63f2ee0c1416930656449f3fMathieu Chartier * distributed under the License is distributed on an "AS IS" BASIS, 120de9f73afe3e835b63f2ee0c1416930656449f3fMathieu Chartier * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 130de9f73afe3e835b63f2ee0c1416930656449f3fMathieu Chartier * See the License for the specific language governing permissions and 140de9f73afe3e835b63f2ee0c1416930656449f3fMathieu Chartier * limitations under the License. 150de9f73afe3e835b63f2ee0c1416930656449f3fMathieu Chartier */ 160de9f73afe3e835b63f2ee0c1416930656449f3fMathieu Chartier 170de9f73afe3e835b63f2ee0c1416930656449f3fMathieu Chartier#ifndef ART_RUNTIME_GC_COLLECTOR_TYPE_H_ 180de9f73afe3e835b63f2ee0c1416930656449f3fMathieu Chartier#define ART_RUNTIME_GC_COLLECTOR_TYPE_H_ 190de9f73afe3e835b63f2ee0c1416930656449f3fMathieu Chartier 203cf225386e8129dcbe32b289279ecb87ec255318Mathieu Chartier#include <iosfwd> 210de9f73afe3e835b63f2ee0c1416930656449f3fMathieu Chartier 220de9f73afe3e835b63f2ee0c1416930656449f3fMathieu Chartiernamespace art { 230de9f73afe3e835b63f2ee0c1416930656449f3fMathieu Chartiernamespace gc { 240de9f73afe3e835b63f2ee0c1416930656449f3fMathieu Chartier 250de9f73afe3e835b63f2ee0c1416930656449f3fMathieu Chartier// Which types of collections are able to be performed. 260de9f73afe3e835b63f2ee0c1416930656449f3fMathieu Chartierenum CollectorType { 277bf82af01ec250a4ed2cee03a0e51d179fa820f9Mathieu Chartier // No collector selected. 287bf82af01ec250a4ed2cee03a0e51d179fa820f9Mathieu Chartier kCollectorTypeNone, 297410f29b4dae223befac036ea567d7f33351dad1Mathieu Chartier // Non concurrent mark-sweep. 300de9f73afe3e835b63f2ee0c1416930656449f3fMathieu Chartier kCollectorTypeMS, 317410f29b4dae223befac036ea567d7f33351dad1Mathieu Chartier // Concurrent mark-sweep. 320de9f73afe3e835b63f2ee0c1416930656449f3fMathieu Chartier kCollectorTypeCMS, 337410f29b4dae223befac036ea567d7f33351dad1Mathieu Chartier // Semi-space / mark-sweep hybrid, enables compaction. 340de9f73afe3e835b63f2ee0c1416930656449f3fMathieu Chartier kCollectorTypeSS, 356f4ffe41649f1e6381e8cda087ad3749206806e5Hiroshi Yamauchi // A generational variant of kCollectorTypeSS. 366f4ffe41649f1e6381e8cda087ad3749206806e5Hiroshi Yamauchi kCollectorTypeGSS, 3791d65e024846717fce3572106cffe9b957b8902cRoland Levillain // Mark compact collector. 3852e4b43d62896b56f8c2bd041e528472bb4a0d8dMathieu Chartier kCollectorTypeMC, 39d5a89ee74c00bd24a34b6e795828a0b86842630fMathieu Chartier // Heap trimming collector, doesn't do any actual collecting. 40d5a89ee74c00bd24a34b6e795828a0b86842630fMathieu Chartier kCollectorTypeHeapTrim, 41d5307ec41c8344be0c32273ec4f574064036187dHiroshi Yamauchi // A (mostly) concurrent copying collector. 42d5307ec41c8344be0c32273ec4f574064036187dHiroshi Yamauchi kCollectorTypeCC, 43aa5168291c46f9b418d989bccf2d8e09338a83e6Mathieu Chartier // Instrumentation critical section fake collector. 44aa5168291c46f9b418d989bccf2d8e09338a83e6Mathieu Chartier kCollectorTypeInstrumentation, 4561d2b2d353ba4ab952247d2bff2c905598118bb4Mathieu Chartier // Fake collector for adding or removing application image spaces. 4661d2b2d353ba4ab952247d2bff2c905598118bb4Mathieu Chartier kCollectorTypeAddRemoveAppImageSpace, 47f37a88b8e6db6c587fa449a12e40cb46be1689fcZuo Wang // A homogeneous space compaction collector used in background transition 48f37a88b8e6db6c587fa449a12e40cb46be1689fcZuo Wang // when both foreground and background collector are CMS. 49f37a88b8e6db6c587fa449a12e40cb46be1689fcZuo Wang kCollectorTypeHomogeneousSpaceCompact, 5022bd2a1b5ec2a5038cc3ae1964781f30aef0315fMathieu Chartier // Class linker fake collector. 5122bd2a1b5ec2a5038cc3ae1964781f30aef0315fMathieu Chartier kCollectorTypeClassLinker, 5299c959f3868512bb95432cf02a1f0ad3971698bfNicolas Geoffray // JIT Code cache fake collector. 5399c959f3868512bb95432cf02a1f0ad3971698bfNicolas Geoffray kCollectorTypeJitCodeCache, 540de9f73afe3e835b63f2ee0c1416930656449f3fMathieu Chartier}; 550de9f73afe3e835b63f2ee0c1416930656449f3fMathieu Chartierstd::ostream& operator<<(std::ostream& os, const CollectorType& collector_type); 560de9f73afe3e835b63f2ee0c1416930656449f3fMathieu Chartier 57aaebaa0121be3b9d9f13630585304482cbcaeb4bIgor Murashkinstatic constexpr CollectorType kCollectorTypeDefault = 58aaebaa0121be3b9d9f13630585304482cbcaeb4bIgor Murashkin#if ART_DEFAULT_GC_TYPE_IS_CMS 59aaebaa0121be3b9d9f13630585304482cbcaeb4bIgor Murashkin kCollectorTypeCMS 60aaebaa0121be3b9d9f13630585304482cbcaeb4bIgor Murashkin#elif ART_DEFAULT_GC_TYPE_IS_SS 61aaebaa0121be3b9d9f13630585304482cbcaeb4bIgor Murashkin kCollectorTypeSS 62aaebaa0121be3b9d9f13630585304482cbcaeb4bIgor Murashkin#elif ART_DEFAULT_GC_TYPE_IS_GSS 63aaebaa0121be3b9d9f13630585304482cbcaeb4bIgor Murashkin kCollectorTypeGSS 64aaebaa0121be3b9d9f13630585304482cbcaeb4bIgor Murashkin#else 65eb6c7c23a8065af665e71f3408980bacd8ecc529Igor Murashkin kCollectorTypeCMS 66aaebaa0121be3b9d9f13630585304482cbcaeb4bIgor Murashkin#error "ART default GC type must be set" 67aaebaa0121be3b9d9f13630585304482cbcaeb4bIgor Murashkin#endif 68aaebaa0121be3b9d9f13630585304482cbcaeb4bIgor Murashkin ; // NOLINT [whitespace/semicolon] [5] 69aaebaa0121be3b9d9f13630585304482cbcaeb4bIgor Murashkin 700de9f73afe3e835b63f2ee0c1416930656449f3fMathieu Chartier} // namespace gc 710de9f73afe3e835b63f2ee0c1416930656449f3fMathieu Chartier} // namespace art 720de9f73afe3e835b63f2ee0c1416930656449f3fMathieu Chartier 730de9f73afe3e835b63f2ee0c1416930656449f3fMathieu Chartier#endif // ART_RUNTIME_GC_COLLECTOR_TYPE_H_ 74