src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/gc/g1/HeapRegionType.java
changeset 49463 ccb003941743
parent 47602 d4380ee1cbe9
--- a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/gc/g1/HeapRegionType.java	Mon Mar 19 14:20:28 2018 -0500
+++ b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/gc/g1/HeapRegionType.java	Tue Mar 20 11:24:32 2018 +0530
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2018, 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
@@ -40,8 +40,13 @@
 
     private static int freeTag;
     private static int youngMask;
+    private static int edenTag;
+    private static int survTag;
     private static int humongousMask;
+    private static int startsHumongousTag;
+    private static int continuesHumongousTag;
     private static int pinnedMask;
+    private static int archiveMask;
     private static int oldMask;
     private static CIntegerField tagField;
     private int tag;
@@ -61,6 +66,11 @@
 
         freeTag = db.lookupIntConstant("HeapRegionType::FreeTag");
         youngMask = db.lookupIntConstant("HeapRegionType::YoungMask");
+        edenTag = db.lookupIntConstant("HeapRegionType::EdenTag");
+        survTag = db.lookupIntConstant("HeapRegionType::SurvTag");
+        startsHumongousTag = db.lookupIntConstant("HeapRegionType::StartsHumongousTag");
+        continuesHumongousTag = db.lookupIntConstant("HeapRegionType::ContinuesHumongousTag");
+        archiveMask = db.lookupIntConstant("HeapRegionType::ArchiveMask");
         humongousMask = db.lookupIntConstant("HeapRegionType::HumongousMask");
         pinnedMask = db.lookupIntConstant("HeapRegionType::PinnedMask");
         oldMask = db.lookupIntConstant("HeapRegionType::OldMask");
@@ -70,6 +80,14 @@
         return tagField.getValue(addr) == freeTag;
     }
 
+    public boolean isEden() {
+        return tagField.getValue(addr) == edenTag;
+    }
+
+    public boolean isSurvivor() {
+        return tagField.getValue(addr) == survTag;
+    }
+
     public boolean isYoung() {
         return (tagField.getValue(addr) & youngMask) != 0;
     }
@@ -78,6 +96,18 @@
         return (tagField.getValue(addr) & humongousMask) != 0;
     }
 
+    public boolean isStartsHumongous() {
+        return tagField.getValue(addr) == startsHumongousTag;
+    }
+
+    public boolean isContinuesHumongous() {
+        return tagField.getValue(addr) == continuesHumongousTag;
+    }
+
+    public boolean isArchive() {
+        return (tagField.getValue(addr) & archiveMask) != 0;
+    }
+
     public boolean isPinned() {
         return (tagField.getValue(addr) & pinnedMask) != 0;
     }
@@ -89,4 +119,32 @@
     public HeapRegionType(Address addr) {
         super(addr);
     }
+
+    public String typeAnnotation() {
+        if (isFree()) {
+            return "Free";
+        }
+        if (isEden()) {
+            return "Eden";
+        }
+        if (isSurvivor()) {
+            return "Survivor";
+        }
+        if (isStartsHumongous()) {
+            return "StartsHumongous";
+        }
+        if (isContinuesHumongous()) {
+            return "ContinuesHumongous";
+        }
+        if (isArchive()) {
+            return "Archive";
+        }
+        if (isPinned()) {
+            return "Pinned";
+        }
+        if (isOld()) {
+            return "Old";
+        }
+        return "Unknown Region Type";
+    }
 }