Skip to content

Commit 5691dd5

Browse files
committed
Add logging if storage goes to native
1 parent 6ca7710 commit 5691dd5

File tree

2 files changed

+37
-6
lines changed

2 files changed

+37
-6
lines changed

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/cext/capi/PySequenceArrayWrapper.java

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,8 @@
4040
*/
4141
package com.oracle.graal.python.builtins.objects.cext.capi;
4242

43+
import java.util.logging.Level;
44+
4345
import com.oracle.graal.python.builtins.objects.bytes.PBytesLike;
4446
import com.oracle.graal.python.builtins.objects.cext.capi.PySequenceArrayWrapperFactory.ToNativeStorageNodeGen;
4547
import com.oracle.graal.python.builtins.objects.common.SequenceStorageNodes;
@@ -52,6 +54,7 @@
5254
import com.oracle.graal.python.runtime.sequence.storage.SequenceStorage;
5355
import com.oracle.graal.python.util.PythonUtils;
5456
import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
57+
import com.oracle.truffle.api.TruffleLogger;
5558
import com.oracle.truffle.api.dsl.Cached;
5659
import com.oracle.truffle.api.dsl.Cached.Shared;
5760
import com.oracle.truffle.api.dsl.GenerateCached;
@@ -66,6 +69,8 @@
6669
*/
6770
public final class PySequenceArrayWrapper {
6871

72+
private static final TruffleLogger LOGGER = CApiContext.getLogger(PySequenceArrayWrapper.class);
73+
6974
@GenerateInline
7075
@GenerateCached(false)
7176
@GenerateUncached
@@ -143,22 +148,32 @@ static boolean isMroSequenceStorage(SequenceStorage s) {
143148

144149
@TruffleBoundary
145150
public static Object ensureNativeSequence(PSequence sequence) {
151+
boolean loggable = LOGGER.isLoggable(Level.FINE);
152+
if (loggable) {
153+
LOGGER.fine(String.format("ensureNativeSequence(%s)", sequence));
154+
}
146155
/*
147156
* MroSequenceStorages are special. We cannot simply replace them with a
148157
* NativeSequenceStorage because we still need the "managed" one due to the assumptions.
149158
* Hence, if an MroSequenceStorage goes to native, we will create an additional
150159
* NativeSequenceStorage and link to it.
151160
*/
161+
Object result;
152162
SequenceStorage sequenceStorage = sequence.getSequenceStorage();
153163
if (sequenceStorage instanceof NativeSequenceStorage nativeStorage) {
154-
return nativeStorage.getPtr();
164+
result = nativeStorage.getPtr();
155165
} else if (sequenceStorage instanceof MroSequenceStorage mro && mro.isNative()) {
156-
return mro.getNativeMirror().getPtr();
166+
result = mro.getNativeMirror().getPtr();
167+
} else {
168+
NativeSequenceStorage nativeStorage = ToNativeStorageNode.executeUncached(sequenceStorage, sequence instanceof PBytesLike);
169+
if (!(sequenceStorage instanceof MroSequenceStorage)) {
170+
sequence.setSequenceStorage(nativeStorage);
171+
}
172+
result = nativeStorage.getPtr();
157173
}
158-
NativeSequenceStorage nativeStorage = ToNativeStorageNode.executeUncached(sequenceStorage, sequence instanceof PBytesLike);
159-
if (!(sequenceStorage instanceof MroSequenceStorage)) {
160-
sequence.setSequenceStorage(nativeStorage);
174+
if (loggable) {
175+
LOGGER.fine(String.format("ensureNativeSequence(%s) = %s", sequence, PythonUtils.formatPointer(result)));
161176
}
162-
return nativeStorage.getPtr();
177+
return result;
163178
}
164179
}

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/runtime/sequence/storage/NativeSequenceStorage.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,18 +40,34 @@
4040
*/
4141
package com.oracle.graal.python.runtime.sequence.storage;
4242

43+
import java.util.logging.Level;
44+
45+
import com.oracle.graal.python.PythonLanguage;
4346
import com.oracle.graal.python.builtins.objects.cext.capi.transitions.CApiTransitions.NativeStorageReference;
47+
import com.oracle.graal.python.util.PythonUtils;
4448
import com.oracle.truffle.api.CompilerDirectives;
49+
import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
50+
import com.oracle.truffle.api.TruffleLogger;
4551

4652
public abstract class NativeSequenceStorage extends SequenceStorage {
4753

54+
private static final TruffleLogger LOGGER = PythonLanguage.getLogger(NativeSequenceStorage.class);
55+
4856
/* native pointer object */
4957
private Object ptr;
5058
private NativeStorageReference reference;
5159

5260
NativeSequenceStorage(Object ptr, int length, int capacity) {
5361
super(length, capacity);
5462
this.ptr = ptr;
63+
if (LOGGER.isLoggable(Level.FINE)) {
64+
LOGGER.fine(PythonUtils.formatJString("new %s", toJString()));
65+
}
66+
}
67+
68+
@TruffleBoundary
69+
private String toJString() {
70+
return toString();
5571
}
5672

5773
public final Object getPtr() {

0 commit comments

Comments
 (0)