Skip to content

Commit 4317123

Browse files
committed
TruffleObject.getTypeId() added to speedup TypesComputer.addObject()
1 parent 913791c commit 4317123

File tree

5 files changed

+30
-2
lines changed

5 files changed

+30
-2
lines changed

visualvm/heapviewer.truffle/src/org/graalvm/visualvm/heapviewer/truffle/TruffleObject.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ public abstract class TruffleObject {
4545

4646
public abstract String getType(Heap heap);
4747

48+
public abstract long getTypeId(Heap heap);
4849

4950
public static abstract class InstanceBased extends TruffleObject {
5051

visualvm/heapviewer.truffle/src/org/graalvm/visualvm/heapviewer/truffle/TruffleType.java

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -135,12 +135,14 @@ public static class TypesComputer<O extends TruffleObject, T extends TruffleType
135135

136136
private final Heap heap;
137137
private final Map<String, T> cache;
138+
private final Map<Long,String> typeCache;
138139

139140

140141
public TypesComputer(TruffleLanguage<O, T, ? extends TruffleLanguageHeapFragment<O, T>> language, Heap heap) {
141142
this.language = language;
142143
this.heap = heap;
143144
cache = new HashMap();
145+
typeCache = new HashMap();
144146
retainedAvailable = DataType.RETAINED_SIZE.valuesAvailable(heap);
145147
}
146148

@@ -152,7 +154,7 @@ public final void addObject(O object) {
152154
long objectSize = object.getSize();
153155
long objectRetainedSize = retainedAvailable ? object.getRetainedSize() :
154156
DataType.RETAINED_SIZE.getNotAvailableValue();
155-
String typeName = object.getType(heap);
157+
String typeName = getTypeName(object);
156158

157159
addingObject(objectSize, objectRetainedSize, typeName);
158160

@@ -168,7 +170,17 @@ public final void addObject(O object) {
168170
public final List<T> getTypes() {
169171
return Collections.unmodifiableList(new ArrayList(cache.values()));
170172
}
171-
173+
174+
private String getTypeName(O object) {
175+
Long typeId = Long.valueOf(object.getTypeId(heap));
176+
String typeName = typeCache.get(typeId);
177+
178+
if (typeName == null) {
179+
typeName = object.getType(heap);
180+
typeCache.put(typeId, typeName);
181+
}
182+
return typeName;
183+
}
172184
}
173185

174186
}

visualvm/heapviewer.truffle/src/org/graalvm/visualvm/heapviewer/truffle/dynamicobject/DynamicObject.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,11 @@ public String getType(Heap heap) {
161161
}
162162
return type;
163163
}
164+
165+
@Override
166+
public long getTypeId(Heap heap) {
167+
return getShape().getInstanceId();
168+
}
164169

165170
protected String computeType(Heap heap) {
166171
return DetailsSupport.getDetailsString(getShape(), heap);

visualvm/heapviewer.truffle/src/org/graalvm/visualvm/heapviewer/truffle/lang/python/PythonObject.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,11 @@ public String getType(Heap heap) {
147147
}
148148
return type;
149149
}
150+
151+
@Override
152+
public long getTypeId(Heap heap) {
153+
return pythonClass.getInstanceId();
154+
}
150155

151156
static String getPythonType(Instance instance) {
152157
return DetailsUtils.getInstanceString((Instance) instance.getValueOfField("pythonClass"), null); // NOI18N

visualvm/heapviewer.truffle/src/org/graalvm/visualvm/heapviewer/truffle/lang/r/RObject.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -231,6 +231,11 @@ public String getType(Heap heap) {
231231
if (type == null) type = getType(className);
232232
return type;
233233
}
234+
235+
@Override
236+
public long getTypeId(Heap heap) {
237+
return instance.getJavaClass().getJavaClassId();
238+
}
234239

235240
static String getRType(Instance instance) {
236241
return getType(instance.getJavaClass().getName());

0 commit comments

Comments
 (0)