8316927: JFR: Move shouldCommit check earlier for socket events

Reviewed-by: alanb, dfuchs, mgronlun
This commit is contained in:
Erik Gahlin 2023-10-17 13:11:52 +00:00
parent 5ca1beb30e
commit 6aa837eee6
5 changed files with 49 additions and 29 deletions

View file

@ -1096,7 +1096,10 @@ public class Socket implements java.io.Closeable {
}
long start = SocketReadEvent.timestamp();
int nbytes = implRead(b, off, len);
SocketReadEvent.offer(start, nbytes, parent.getRemoteSocketAddress(), getSoTimeout());
long duration = SocketReadEvent.timestamp() - start;
if (SocketReadEvent.shouldCommit(duration)) {
SocketReadEvent.emit(start, duration, nbytes, parent.getRemoteSocketAddress(), getSoTimeout());
}
return nbytes;
}
@ -1209,7 +1212,10 @@ public class Socket implements java.io.Closeable {
}
long start = SocketWriteEvent.timestamp();
implWrite(b, off, len);
SocketWriteEvent.offer(start, len, parent.getRemoteSocketAddress());
long duration = SocketWriteEvent.timestamp() - start;
if (SocketWriteEvent.shouldCommit(duration)) {
SocketWriteEvent.emit(start, duration, len, parent.getRemoteSocketAddress());
}
}
private void implWrite(byte[] b, int off, int len) throws IOException {

View file

@ -113,21 +113,19 @@ public class SocketReadEvent extends Event {
* {@link #commit(long, long, String, String, int, long, long, boolean)}.
*
* @param start the start time
* @param duration the duration
* @param nbytes how many bytes were transferred
* @param remote the address of the remote socket
* @param timeout maximum time to wait
*/
public static void offer(long start, long nbytes, SocketAddress remote, long timeout) {
long duration = timestamp() - start;
if (shouldCommit(duration)) {
boolean eof = nbytes < 0 ? true : false;
nbytes = nbytes < 0 ? 0 : nbytes;
if (remote instanceof InetSocketAddress isa) {
commit(start, duration, isa.getHostString(), isa.getAddress().getHostAddress(), isa.getPort(), timeout, nbytes, eof);
} else if (remote instanceof UnixDomainSocketAddress udsa) {
String path = "[" + udsa.getPath().toString() + "]";
commit(start, duration, "Unix domain socket", path, 0, timeout, nbytes, eof);
}
public static void emit(long start, long duration, long nbytes, SocketAddress remote, long timeout) {
boolean eof = nbytes < 0 ? true : false;
nbytes = nbytes < 0 ? 0 : nbytes;
if (remote instanceof InetSocketAddress isa) {
commit(start, duration, isa.getHostString(), isa.getAddress().getHostAddress(), isa.getPort(), timeout, nbytes, eof);
} else if (remote instanceof UnixDomainSocketAddress udsa) {
String path = "[" + udsa.getPath().toString() + "]";
commit(start, duration, "Unix domain socket", path, 0, timeout, nbytes, eof);
}
}

View file

@ -108,19 +108,17 @@ public class SocketWriteEvent extends Event {
* {@link #commit(long, long, String, String, int, long)}.
*
* @param start the start time
* @param duration the duration
* @param bytesWritten how many bytes were sent
* @param remote the address of the remote socket being written to
*/
public static void offer(long start, long bytesWritten, SocketAddress remote) {
long duration = timestamp() - start;
if (shouldCommit(duration)) {
long bytes = bytesWritten < 0 ? 0 : bytesWritten;
if (remote instanceof InetSocketAddress isa) {
commit(start, duration, isa.getHostString(), isa.getAddress().getHostAddress(), isa.getPort(), bytes);
} else if (remote instanceof UnixDomainSocketAddress udsa) {
String path = "[" + udsa.getPath().toString() + "]";
commit(start, duration, "Unix domain socket", path, 0, bytes);
}
public static void emit(long start, long duration, long bytesWritten, SocketAddress remote) {
long bytes = bytesWritten < 0 ? 0 : bytesWritten;
if (remote instanceof InetSocketAddress isa) {
commit(start, duration, isa.getHostString(), isa.getAddress().getHostAddress(), isa.getPort(), bytes);
} else if (remote instanceof UnixDomainSocketAddress udsa) {
String path = "[" + udsa.getPath().toString() + "]";
commit(start, duration, "Unix domain socket", path, 0, bytes);
}
}
}

View file

@ -494,7 +494,10 @@ class SocketChannelImpl
}
long start = SocketReadEvent.timestamp();
int nbytes = implRead(buf);
SocketReadEvent.offer(start, nbytes, remoteAddress(), 0);
long duration = SocketReadEvent.timestamp() - start;
if (SocketReadEvent.shouldCommit(duration)) {
SocketReadEvent.emit(start, duration, nbytes, remoteAddress(), 0);
}
return nbytes;
}
@ -508,7 +511,10 @@ class SocketChannelImpl
}
long start = SocketReadEvent.timestamp();
long nbytes = implRead(dsts, offset, length);
SocketReadEvent.offer(start, nbytes, remoteAddress(), 0);
long duration = SocketReadEvent.timestamp() - start;
if (SocketReadEvent.shouldCommit(duration)) {
SocketReadEvent.emit(start, duration, nbytes, remoteAddress(), 0);
}
return nbytes;
}
@ -619,7 +625,10 @@ class SocketChannelImpl
}
long start = SocketWriteEvent.timestamp();
int nbytes = implWrite(buf);
SocketWriteEvent.offer(start, nbytes, remoteAddress());
long duration = SocketWriteEvent.timestamp() - start;
if (SocketWriteEvent.shouldCommit(duration)) {
SocketWriteEvent.emit(start, duration, nbytes, remoteAddress());
}
return nbytes;
}
@ -632,7 +641,10 @@ class SocketChannelImpl
}
long start = SocketWriteEvent.timestamp();
long nbytes = implWrite(srcs, offset, length);
SocketWriteEvent.offer(start, nbytes, remoteAddress());
long duration = SocketWriteEvent.timestamp() - start;
if (SocketWriteEvent.shouldCommit(duration)) {
SocketWriteEvent.emit(start, duration, nbytes, remoteAddress());
}
return nbytes;
}