1 /* 2 * Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. 8 * 9 * This code is distributed in the hope that it will be useful, but WITHOUT 10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 12 * version 2 for more details (a copy is included in the LICENSE file that 13 * accompanied this code). 14 * 15 * You should have received a copy of the GNU General Public License version 16 * 2 along with this work; if not, write to the Free Software Foundation, 17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 18 * 19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 20 * or visit www.oracle.com if you need additional information or have any 21 * questions. 22 * 23 */ 24 25 #include "precompiled.hpp" 26 #include "gc/g1/g1HRPrinter.hpp" 27 #include "gc/g1/heapRegion.hpp" 28 #include "utilities/ostream.hpp" 29 30 const char* G1HRPrinter::action_name(ActionType action) { 31 switch(action) { 32 case Alloc: return "ALLOC"; 33 case AllocForce: return "ALLOC-FORCE"; 34 case Retire: return "RETIRE"; 35 case Reuse: return "REUSE"; 36 case CSet: return "CSET"; 37 case EvacFailure: return "EVAC-FAILURE"; 38 case Cleanup: return "CLEANUP"; 39 case PostCompaction: return "POST-COMPACTION"; 40 case Commit: return "COMMIT"; 41 case Uncommit: return "UNCOMMIT"; 42 default: ShouldNotReachHere(); 43 } 44 // trying to keep the Windows compiler happy 45 return NULL; 46 } 47 48 const char* G1HRPrinter::region_type_name(RegionType type) { 49 switch (type) { 50 case Unset: return NULL; 51 case Eden: return "Eden"; 52 case Survivor: return "Survivor"; 53 case Old: return "Old"; 54 case SingleHumongous: return "SingleH"; 55 case StartsHumongous: return "StartsH"; 56 case ContinuesHumongous: return "ContinuesH"; 57 default: ShouldNotReachHere(); 58 } 59 // trying to keep the Windows compiler happy 60 return NULL; 61 } 62 63 const char* G1HRPrinter::phase_name(PhaseType phase) { 64 switch (phase) { 65 case StartGC: return "StartGC"; 66 case EndGC: return "EndGC"; 67 case StartFullGC: return "StartFullGC"; 68 case EndFullGC: return "EndFullGC"; 69 default: ShouldNotReachHere(); 70 } 71 // trying to keep the Windows compiler happy 72 return NULL; 73 } 74 75 #define G1HR_PREFIX " G1HR" 76 77 void G1HRPrinter::print(ActionType action, RegionType type, 78 HeapRegion* hr, HeapWord* top) { 79 const char* action_str = action_name(action); 80 const char* type_str = region_type_name(type); 81 HeapWord* bottom = hr->bottom(); 82 83 if (type_str != NULL) { 84 if (top != NULL) { 85 gclog_or_tty->print_cr(G1HR_PREFIX" %s(%s) "PTR_FORMAT" "PTR_FORMAT, 86 action_str, type_str, p2i(bottom), p2i(top)); 87 } else { 88 gclog_or_tty->print_cr(G1HR_PREFIX" %s(%s) "PTR_FORMAT, 89 action_str, type_str, p2i(bottom)); 90 } 91 } else { 92 if (top != NULL) { 93 gclog_or_tty->print_cr(G1HR_PREFIX" %s "PTR_FORMAT" "PTR_FORMAT, 94 action_str, p2i(bottom), p2i(top)); 95 } else { 96 gclog_or_tty->print_cr(G1HR_PREFIX" %s "PTR_FORMAT, 97 action_str, p2i(bottom)); 98 } 99 } 100 } 101 102 void G1HRPrinter::print(ActionType action, HeapWord* bottom, HeapWord* end) { 103 const char* action_str = action_name(action); 104 105 gclog_or_tty->print_cr(G1HR_PREFIX" %s ["PTR_FORMAT","PTR_FORMAT"]", 106 action_str, p2i(bottom), p2i(end)); 107 } 108 109 void G1HRPrinter::print(PhaseType phase, size_t phase_num) { 110 const char* phase_str = phase_name(phase); 111 gclog_or_tty->print_cr(G1HR_PREFIX" #%s "SIZE_FORMAT, phase_str, phase_num); 112 }