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 StartsHumongous: return "StartsH"; 55 case ContinuesHumongous: return "ContinuesH"; 56 case Archive: return "Archive"; 57 default: ShouldNotReachHere(); 58 } 59 // trying to keep the Windows compiler happy 60 return NULL; 61 } 62 63 #define G1HR_PREFIX " G1HR" 64 65 void G1HRPrinter::print(ActionType action, RegionType type, 66 HeapRegion* hr, HeapWord* top) { 67 const char* action_str = action_name(action); 68 const char* type_str = region_type_name(type); 69 HeapWord* bottom = hr->bottom(); 70 71 if (type_str != NULL) { 72 if (top != NULL) { 73 log_trace(gc, region)(G1HR_PREFIX " %s(%s) " PTR_FORMAT " " PTR_FORMAT, 74 action_str, type_str, p2i(bottom), p2i(top)); 75 } else { 76 log_trace(gc, region)(G1HR_PREFIX " %s(%s) " PTR_FORMAT, 77 action_str, type_str, p2i(bottom)); 78 } 79 } else { 80 if (top != NULL) { 81 log_trace(gc, region)(G1HR_PREFIX " %s " PTR_FORMAT " " PTR_FORMAT, 82 action_str, p2i(bottom), p2i(top)); 83 } else { 84 log_trace(gc, region)(G1HR_PREFIX " %s " PTR_FORMAT, 85 action_str, p2i(bottom)); 86 } 87 } 88 } 89 90 void G1HRPrinter::print(ActionType action, HeapWord* bottom, HeapWord* end) { 91 const char* action_str = action_name(action); 92 93 log_trace(gc, region)(G1HR_PREFIX " %s [" PTR_FORMAT "," PTR_FORMAT "]", 94 action_str, p2i(bottom), p2i(end)); 95 }