16f4ffe41649f1e6381e8cda087ad3749206806e5Hiroshi Yamauchi/*
26f4ffe41649f1e6381e8cda087ad3749206806e5Hiroshi Yamauchi * Copyright (C) 2014 The Android Open Source Project
36f4ffe41649f1e6381e8cda087ad3749206806e5Hiroshi Yamauchi *
46f4ffe41649f1e6381e8cda087ad3749206806e5Hiroshi Yamauchi * Licensed under the Apache License, Version 2.0 (the "License");
56f4ffe41649f1e6381e8cda087ad3749206806e5Hiroshi Yamauchi * you may not use this file except in compliance with the License.
66f4ffe41649f1e6381e8cda087ad3749206806e5Hiroshi Yamauchi * You may obtain a copy of the License at
76f4ffe41649f1e6381e8cda087ad3749206806e5Hiroshi Yamauchi *
86f4ffe41649f1e6381e8cda087ad3749206806e5Hiroshi Yamauchi *      http://www.apache.org/licenses/LICENSE-2.0
96f4ffe41649f1e6381e8cda087ad3749206806e5Hiroshi Yamauchi *
106f4ffe41649f1e6381e8cda087ad3749206806e5Hiroshi Yamauchi * Unless required by applicable law or agreed to in writing, software
116f4ffe41649f1e6381e8cda087ad3749206806e5Hiroshi Yamauchi * distributed under the License is distributed on an "AS IS" BASIS,
126f4ffe41649f1e6381e8cda087ad3749206806e5Hiroshi Yamauchi * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
136f4ffe41649f1e6381e8cda087ad3749206806e5Hiroshi Yamauchi * See the License for the specific language governing permissions and
146f4ffe41649f1e6381e8cda087ad3749206806e5Hiroshi Yamauchi * limitations under the License.
156f4ffe41649f1e6381e8cda087ad3749206806e5Hiroshi Yamauchi */
166f4ffe41649f1e6381e8cda087ad3749206806e5Hiroshi Yamauchi
176f4ffe41649f1e6381e8cda087ad3749206806e5Hiroshi Yamauchi#include "gc_cause.h"
186f4ffe41649f1e6381e8cda087ad3749206806e5Hiroshi Yamauchi#include "globals.h"
196f4ffe41649f1e6381e8cda087ad3749206806e5Hiroshi Yamauchi#include "base/logging.h"
206f4ffe41649f1e6381e8cda087ad3749206806e5Hiroshi Yamauchi
216f4ffe41649f1e6381e8cda087ad3749206806e5Hiroshi Yamauchi#include <ostream>
226f4ffe41649f1e6381e8cda087ad3749206806e5Hiroshi Yamauchi
236f4ffe41649f1e6381e8cda087ad3749206806e5Hiroshi Yamauchinamespace art {
246f4ffe41649f1e6381e8cda087ad3749206806e5Hiroshi Yamauchinamespace gc {
256f4ffe41649f1e6381e8cda087ad3749206806e5Hiroshi Yamauchi
266f4ffe41649f1e6381e8cda087ad3749206806e5Hiroshi Yamauchiconst char* PrettyCause(GcCause cause) {
276f4ffe41649f1e6381e8cda087ad3749206806e5Hiroshi Yamauchi  switch (cause) {
286f4ffe41649f1e6381e8cda087ad3749206806e5Hiroshi Yamauchi    case kGcCauseForAlloc: return "Alloc";
296f4ffe41649f1e6381e8cda087ad3749206806e5Hiroshi Yamauchi    case kGcCauseBackground: return "Background";
306f4ffe41649f1e6381e8cda087ad3749206806e5Hiroshi Yamauchi    case kGcCauseExplicit: return "Explicit";
316f4ffe41649f1e6381e8cda087ad3749206806e5Hiroshi Yamauchi    case kGcCauseForNativeAlloc: return "NativeAlloc";
3289a201e599da95d88590c7b4d069b76735e20fa8Mathieu Chartier    case kGcCauseCollectorTransition: return "CollectorTransition";
3389a201e599da95d88590c7b4d069b76735e20fa8Mathieu Chartier    case kGcCauseDisableMovingGc: return "DisableMovingGc";
34f37a88b8e6db6c587fa449a12e40cb46be1689fcZuo Wang    case kGcCauseHomogeneousSpaceCompact: return "HomogeneousSpaceCompact";
3589a201e599da95d88590c7b4d069b76735e20fa8Mathieu Chartier    case kGcCauseTrim: return "HeapTrim";
366f4ffe41649f1e6381e8cda087ad3749206806e5Hiroshi Yamauchi    default:
376f4ffe41649f1e6381e8cda087ad3749206806e5Hiroshi Yamauchi      LOG(FATAL) << "Unreachable";
382c4257be8191c5eefde744e8965fcefc80a0a97dIan Rogers      UNREACHABLE();
396f4ffe41649f1e6381e8cda087ad3749206806e5Hiroshi Yamauchi  }
406f4ffe41649f1e6381e8cda087ad3749206806e5Hiroshi Yamauchi}
416f4ffe41649f1e6381e8cda087ad3749206806e5Hiroshi Yamauchi
426f4ffe41649f1e6381e8cda087ad3749206806e5Hiroshi Yamauchistd::ostream& operator<<(std::ostream& os, const GcCause& gc_cause) {
436f4ffe41649f1e6381e8cda087ad3749206806e5Hiroshi Yamauchi  os << PrettyCause(gc_cause);
446f4ffe41649f1e6381e8cda087ad3749206806e5Hiroshi Yamauchi  return os;
456f4ffe41649f1e6381e8cda087ad3749206806e5Hiroshi Yamauchi}
466f4ffe41649f1e6381e8cda087ad3749206806e5Hiroshi Yamauchi
476f4ffe41649f1e6381e8cda087ad3749206806e5Hiroshi Yamauchi}  // namespace gc
486f4ffe41649f1e6381e8cda087ad3749206806e5Hiroshi Yamauchi}  // namespace art
49