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