aboutsummaryrefslogtreecommitdiff
path: root/cronet
diff options
context:
space:
mode:
authorEric Gribkoff <ericgribkoff@google.com>2018-08-28 20:19:45 -0700
committerGitHub <noreply@github.com>2018-08-28 20:19:45 -0700
commitfd73209e0c2bdfc6dc454825ba281b9c8039ce99 (patch)
tree71437394c582711599a965f904583ac65c860e76 /cronet
parent6037659dd76c00bae997053d4520d168ef7c0057 (diff)
downloadgrpc-grpc-java-fd73209e0c2bdfc6dc454825ba281b9c8039ce99.tar.gz
cronet: report statsTraceCtx.clientOutboundHeaders() (#4768)
Diffstat (limited to 'cronet')
-rw-r--r--cronet/src/main/java/io/grpc/cronet/CronetClientStream.java10
1 files changed, 10 insertions, 0 deletions
diff --git a/cronet/src/main/java/io/grpc/cronet/CronetClientStream.java b/cronet/src/main/java/io/grpc/cronet/CronetClientStream.java
index 100be20f5..de0bc629b 100644
--- a/cronet/src/main/java/io/grpc/cronet/CronetClientStream.java
+++ b/cronet/src/main/java/io/grpc/cronet/CronetClientStream.java
@@ -65,6 +65,7 @@ class CronetClientStream extends AbstractClientStream {
private static final String LOG_TAG = "grpc-java-cronet";
private final String url;
private final String userAgent;
+ private final StatsTraceContext statsTraceCtx;
private final Executor executor;
private final Metadata headers;
private final CronetClientTransport transport;
@@ -98,6 +99,7 @@ class CronetClientStream extends AbstractClientStream {
method.isSafe());
this.url = Preconditions.checkNotNull(url, "url");
this.userAgent = Preconditions.checkNotNull(userAgent, "userAgent");
+ this.statsTraceCtx = Preconditions.checkNotNull(statsTraceCtx, "statsTraceCtx");
this.executor = Preconditions.checkNotNull(executor, "executor");
this.headers = Preconditions.checkNotNull(headers, "headers");
this.transport = Preconditions.checkNotNull(transport, "transport");
@@ -221,6 +223,8 @@ class CronetClientStream extends AbstractClientStream {
private Status cancelReason;
@GuardedBy("lock")
private boolean readClosed;
+ @GuardedBy("lock")
+ private boolean firstWriteComplete;
public TransportState(
int maxMessageSize, StatsTraceContext statsTraceCtx, Object lock,
@@ -418,6 +422,12 @@ class CronetClientStream extends AbstractClientStream {
Log.v(LOG_TAG, "onWriteCompleted");
}
synchronized (state.lock) {
+ if (!state.firstWriteComplete) {
+ // Cronet API doesn't notify when headers are written to wire, but it occurs before first
+ // onWriteCompleted callback.
+ state.firstWriteComplete = true;
+ statsTraceCtx.clientOutboundHeaders();
+ }
state.onSentBytes(buffer.position());
}
}