--- old/src/share/classes/java/io/RandomAccessFile.java 2012-11-02 19:24:27.000000000 +0100 +++ new/src/share/classes/java/io/RandomAccessFile.java 2012-11-02 19:24:26.000000000 +0100 @@ -27,6 +27,7 @@ import java.nio.channels.FileChannel; import sun.nio.ch.FileChannelImpl; +import sun.misc.IoTrace; /** @@ -61,6 +62,7 @@ private FileDescriptor fd; private FileChannel channel = null; private boolean rw; + private final String path; private Object closeLock = new Object(); private volatile boolean closed = false; @@ -230,6 +232,7 @@ } fd = new FileDescriptor(); fd.attach(this); + this.path = name; open(name, imode); } @@ -269,7 +272,7 @@ public final FileChannel getChannel() { synchronized (this) { if (channel == null) { - channel = FileChannelImpl.open(fd, true, rw, this); + channel = FileChannelImpl.open(fd, path, true, rw, this); } return channel; } @@ -306,7 +309,14 @@ * @exception IOException if an I/O error occurs. Not thrown if * end-of-file has been reached. */ - public native int read() throws IOException; + public int read() throws IOException { + Object traceHandle = IoTrace.fileReadBegin(path); + int v = read0(); + IoTrace.fileReadEnd(traceHandle, v == -1 ? -1 : 1); + return v; + } + + private native int read0() throws IOException; /** * Reads a sub array as a sequence of bytes. @@ -315,7 +325,14 @@ * @param len the number of bytes to read. * @exception IOException If an I/O error has occurred. */ - private native int readBytes(byte b[], int off, int len) throws IOException; + private int readBytes(byte b[], int off, int len) throws IOException { + Object traceHandle = IoTrace.fileReadBegin(path); + int v = readBytes0(b, off, len); + IoTrace.fileReadEnd(traceHandle, v); + return v; + } + + private native int readBytes0(byte b[], int off, int len) throws IOException; /** * Reads up to {@code len} bytes of data from this file into an @@ -454,17 +471,28 @@ * @param b the {@code byte} to be written. * @exception IOException if an I/O error occurs. */ - public native void write(int b) throws IOException; + public void write(int b) throws IOException { + Object traceHandle = IoTrace.fileWriteBegin(path); + write0(b); + IoTrace.fileWriteEnd(traceHandle, 1); + } + + private native void write0(int b) throws IOException; /** * Writes a sub array as a sequence of bytes. * @param b the data to be written - * @param off the start offset in the data * @param len the number of bytes that are written * @exception IOException If an I/O error has occurred. */ - private native void writeBytes(byte b[], int off, int len) throws IOException; + private void writeBytes(byte b[], int off, int len) throws IOException { + Object traceHandle = IoTrace.fileWriteBegin(path); + writeBytes0(b, off, len); + IoTrace.fileWriteEnd(traceHandle, len); + } + + private native void writeBytes0(byte b[], int off, int len) throws IOException; /** * Writes {@code b.length} bytes from the specified byte array