changeset 9745:5a42c1dde332

8145301: Improve and unify the printout format for the g1HRPrinter. Reviewed-by: brutisso, tschatzl
author david
date Mon, 14 Dec 2015 13:47:35 +0100
parents ac3087a9d55a
children 55c0514c0a07 8512cbf64495
files src/share/vm/gc/g1/g1Allocator.cpp src/share/vm/gc/g1/g1CollectedHeap.cpp src/share/vm/gc/g1/g1HRPrinter.cpp src/share/vm/gc/g1/g1HRPrinter.hpp src/share/vm/gc/g1/heapRegionManager.cpp
diffstat 5 files changed, 27 insertions(+), 174 deletions(-) [+]
line wrap: on
line diff
--- a/src/share/vm/gc/g1/g1Allocator.cpp	Mon Dec 14 10:04:31 2015 +0100
+++ b/src/share/vm/gc/g1/g1Allocator.cpp	Mon Dec 14 13:47:35 2015 +0100
@@ -353,7 +353,7 @@
   assert(hr->is_empty(), "expected empty region (index %u)", hr->hrm_index());
   hr->set_archive();
   _g1h->old_set_add(hr);
-  _g1h->hr_printer()->alloc(hr, G1HRPrinter::Archive);
+  _g1h->hr_printer()->alloc(hr);
   _allocated_regions.append(hr);
   _allocation_region = hr;
 
--- a/src/share/vm/gc/g1/g1CollectedHeap.cpp	Mon Dec 14 10:04:31 2015 +0100
+++ b/src/share/vm/gc/g1/g1CollectedHeap.cpp	Mon Dec 14 13:47:35 2015 +0100
@@ -410,11 +410,7 @@
   for (uint i = first; i <= last; ++i) {
     hr = region_at(i);
     _humongous_set.add(hr);
-    if (i == first) {
-      _hr_printer.alloc(G1HRPrinter::StartsHumongous, hr, hr->top());
-    } else {
-      _hr_printer.alloc(G1HRPrinter::ContinuesHumongous, hr, hr->top());
-    }
+    _hr_printer.alloc(hr);
   }
 
   return new_obj;
@@ -807,9 +803,9 @@
     while (curr_region != NULL) {
       assert(curr_region->is_empty() && !curr_region->is_pinned(),
              "Region already in use (index %u)", curr_region->hrm_index());
-      _hr_printer.alloc(curr_region, G1HRPrinter::Archive);
       curr_region->set_allocation_context(AllocationContext::system());
       curr_region->set_archive();
+      _hr_printer.alloc(curr_region);
       _old_set.add(curr_region);
       if (curr_region != last_region) {
         curr_region->set_top(curr_region->end());
@@ -1195,19 +1191,7 @@
 public:
   bool doHeapRegion(HeapRegion* hr) {
     assert(!hr->is_young(), "not expecting to find young regions");
-    if (hr->is_free()) {
-      // We only generate output for non-empty regions.
-    } else if (hr->is_starts_humongous()) {
-      _hr_printer->post_compaction(hr, G1HRPrinter::StartsHumongous);
-    } else if (hr->is_continues_humongous()) {
-      _hr_printer->post_compaction(hr, G1HRPrinter::ContinuesHumongous);
-    } else if (hr->is_archive()) {
-      _hr_printer->post_compaction(hr, G1HRPrinter::Archive);
-    } else if (hr->is_old()) {
-      _hr_printer->post_compaction(hr, G1HRPrinter::Old);
-    } else {
-      ShouldNotReachHere();
-    }
+    _hr_printer->post_compaction(hr);
     return false;
   }
 
@@ -5967,7 +5951,7 @@
                                               false /* do_expand */);
     if (new_alloc_region != NULL) {
       set_region_short_lived_locked(new_alloc_region);
-      _hr_printer.alloc(new_alloc_region, G1HRPrinter::Eden, young_list_full);
+      _hr_printer.alloc(new_alloc_region, young_list_full);
       check_bitmaps("Mutator Region Allocation", new_alloc_region);
       return new_alloc_region;
     }
@@ -6008,13 +5992,12 @@
       new_alloc_region->record_timestamp();
       if (is_survivor) {
         new_alloc_region->set_survivor();
-        _hr_printer.alloc(new_alloc_region, G1HRPrinter::Survivor);
         check_bitmaps("Survivor Region Allocation", new_alloc_region);
       } else {
         new_alloc_region->set_old();
-        _hr_printer.alloc(new_alloc_region, G1HRPrinter::Old);
         check_bitmaps("Old Region Allocation", new_alloc_region);
       }
+      _hr_printer.alloc(new_alloc_region);
       bool during_im = collector_state()->during_initial_mark_pause();
       new_alloc_region->note_start_of_copying(during_im);
       return new_alloc_region;
--- a/src/share/vm/gc/g1/g1HRPrinter.cpp	Mon Dec 14 10:04:31 2015 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,95 +0,0 @@
-/*
- * Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-#include "precompiled.hpp"
-#include "gc/g1/g1HRPrinter.hpp"
-#include "gc/g1/heapRegion.hpp"
-#include "utilities/ostream.hpp"
-
-const char* G1HRPrinter::action_name(ActionType action) {
-  switch(action) {
-    case Alloc:          return "ALLOC";
-    case AllocForce:     return "ALLOC-FORCE";
-    case Retire:         return "RETIRE";
-    case Reuse:          return "REUSE";
-    case CSet:           return "CSET";
-    case EvacFailure:    return "EVAC-FAILURE";
-    case Cleanup:        return "CLEANUP";
-    case PostCompaction: return "POST-COMPACTION";
-    case Commit:         return "COMMIT";
-    case Uncommit:       return "UNCOMMIT";
-    default:             ShouldNotReachHere();
-  }
-  // trying to keep the Windows compiler happy
-  return NULL;
-}
-
-const char* G1HRPrinter::region_type_name(RegionType type) {
-  switch (type) {
-    case Unset:              return NULL;
-    case Eden:               return "Eden";
-    case Survivor:           return "Survivor";
-    case Old:                return "Old";
-    case StartsHumongous:    return "StartsH";
-    case ContinuesHumongous: return "ContinuesH";
-    case Archive:            return "Archive";
-    default:                 ShouldNotReachHere();
-  }
-  // trying to keep the Windows compiler happy
-  return NULL;
-}
-
-#define G1HR_PREFIX     " G1HR"
-
-void G1HRPrinter::print(ActionType action, RegionType type,
-                        HeapRegion* hr, HeapWord* top) {
-  const char* action_str = action_name(action);
-  const char* type_str   = region_type_name(type);
-  HeapWord* bottom = hr->bottom();
-
-  if (type_str != NULL) {
-    if (top != NULL) {
-      log_trace(gc, region)(G1HR_PREFIX " %s(%s) " PTR_FORMAT " " PTR_FORMAT,
-                            action_str, type_str, p2i(bottom), p2i(top));
-    } else {
-      log_trace(gc, region)(G1HR_PREFIX " %s(%s) " PTR_FORMAT,
-                            action_str, type_str, p2i(bottom));
-    }
-  } else {
-    if (top != NULL) {
-      log_trace(gc, region)(G1HR_PREFIX " %s " PTR_FORMAT " " PTR_FORMAT,
-                            action_str, p2i(bottom), p2i(top));
-    } else {
-      log_trace(gc, region)(G1HR_PREFIX " %s " PTR_FORMAT,
-                            action_str, p2i(bottom));
-    }
-  }
-}
-
-void G1HRPrinter::print(ActionType action, HeapWord* bottom, HeapWord* end) {
-  const char* action_str = action_name(action);
-
-  log_trace(gc, region)(G1HR_PREFIX " %s [" PTR_FORMAT "," PTR_FORMAT "]",
-                        action_str, p2i(bottom), p2i(end));
-}
--- a/src/share/vm/gc/g1/g1HRPrinter.hpp	Mon Dec 14 10:04:31 2015 +0100
+++ b/src/share/vm/gc/g1/g1HRPrinter.hpp	Mon Dec 14 13:47:35 2015 +0100
@@ -32,43 +32,14 @@
 #define SKIP_RETIRED_FULL_REGIONS 1
 
 class G1HRPrinter VALUE_OBJ_CLASS_SPEC {
-public:
-  typedef enum {
-    Alloc,
-    AllocForce,
-    Retire,
-    Reuse,
-    CSet,
-    EvacFailure,
-    Cleanup,
-    PostCompaction,
-    Commit,
-    Uncommit
-  } ActionType;
-
-  typedef enum {
-    Unset,
-    Eden,
-    Survivor,
-    Old,
-    StartsHumongous,
-    ContinuesHumongous,
-    Archive
-  } RegionType;
 
 private:
-  static const char* action_name(ActionType action);
-  static const char* region_type_name(RegionType type);
 
-  // Print an action event. This version is used in most scenarios and
-  // only prints the region's bottom. The parameters type and top are
-  // optional (the "not set" values are Unset and NULL).
-  static void print(ActionType action, RegionType type,
-                    HeapRegion* hr, HeapWord* top);
-
-  // Print an action event. This version prints both the region's
-  // bottom and end. Used for Commit / Uncommit events.
-  static void print(ActionType action, HeapWord* bottom, HeapWord* end);
+  // Print an action event.
+  static void print(const char* action, HeapRegion* hr) {
+    log_trace(gc, region)("G1HR %s(%s) [" PTR_FORMAT ", " PTR_FORMAT ", " PTR_FORMAT "]",
+                          action, hr->get_type_str(), p2i(hr->bottom()), p2i(hr->top()), p2i(hr->end()));
+  }
 
 public:
   // In some places we iterate over a list in order to generate output
@@ -76,67 +47,61 @@
   // iteration if the printer is not active.
   const bool is_active() { return log_is_enabled(Trace, gc, region); }
 
-  // The methods below are convenient wrappers for the print() methods.
+  // The methods below are convenient wrappers for the print() method.
 
-  void alloc(HeapRegion* hr, RegionType type, bool force = false) {
+  void alloc(HeapRegion* hr, bool force = false) {
     if (is_active()) {
-      print((!force) ? Alloc : AllocForce, type, hr, NULL);
-    }
-  }
-
-  void alloc(RegionType type, HeapRegion* hr, HeapWord* top) {
-    if (is_active()) {
-      print(Alloc, type, hr, top);
+      print((force) ? "ALLOC-FORCE" : "ALLOC", hr);
     }
   }
 
   void retire(HeapRegion* hr) {
     if (is_active()) {
       if (!SKIP_RETIRED_FULL_REGIONS || hr->top() < hr->end()) {
-        print(Retire, Unset, hr, hr->top());
+        print("RETIRE", hr);
       }
     }
   }
 
   void reuse(HeapRegion* hr) {
     if (is_active()) {
-      print(Reuse, Unset, hr, NULL);
+      print("REUSE", hr);
     }
   }
 
   void cset(HeapRegion* hr) {
     if (is_active()) {
-      print(CSet, Unset, hr, NULL);
+      print("CSET", hr);
     }
   }
 
   void evac_failure(HeapRegion* hr) {
     if (is_active()) {
-      print(EvacFailure, Unset, hr, NULL);
+      print("EVAC-FAILURE", hr);
     }
   }
 
   void cleanup(HeapRegion* hr) {
     if (is_active()) {
-      print(Cleanup, Unset, hr, NULL);
+      print("CLEANUP", hr);
     }
   }
 
-  void post_compaction(HeapRegion* hr, RegionType type) {
+  void post_compaction(HeapRegion* hr) {
     if (is_active()) {
-      print(PostCompaction, type, hr, hr->top());
+      print("POST-COMPACTION", hr);
     }
   }
 
-  void commit(HeapWord* bottom, HeapWord* end) {
+  void commit(HeapRegion* hr) {
     if (is_active()) {
-      print(Commit, bottom, end);
+      print("COMMIT", hr);
     }
   }
 
-  void uncommit(HeapWord* bottom, HeapWord* end) {
+  void uncommit(HeapRegion* hr) {
     if (is_active()) {
-      print(Uncommit, bottom, end);
+      print("UNCOMMIT", hr);
     }
   }
 };
--- a/src/share/vm/gc/g1/heapRegionManager.cpp	Mon Dec 14 10:04:31 2015 +0100
+++ b/src/share/vm/gc/g1/heapRegionManager.cpp	Mon Dec 14 13:47:35 2015 +0100
@@ -99,7 +99,7 @@
   if (G1CollectedHeap::heap()->hr_printer()->is_active()) {
     for (uint i = start; i < start + num_regions; i++) {
       HeapRegion* hr = at(i);
-      G1CollectedHeap::heap()->hr_printer()->uncommit(hr->bottom(), hr->end());
+      G1CollectedHeap::heap()->hr_printer()->uncommit(hr);
     }
   }
 
@@ -135,7 +135,7 @@
     assert(is_available(i), "Just made region %u available but is apparently not.", i);
     HeapRegion* hr = at(i);
     if (G1CollectedHeap::heap()->hr_printer()->is_active()) {
-      G1CollectedHeap::heap()->hr_printer()->commit(hr->bottom(), hr->end());
+      G1CollectedHeap::heap()->hr_printer()->commit(hr);
     }
     HeapWord* bottom = G1CollectedHeap::heap()->bottom_addr_for_region(i);
     MemRegion mr(bottom, bottom + HeapRegion::GrainWords);