Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(6)

Unified Diff: components/cronet/android/cronet_bidirectional_stream_adapter.cc

Issue 2360813003: [Cronet] Pass metrics information from C++ BidirectionalStream to Java (Closed)
Patch Set: Rebased Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: components/cronet/android/cronet_bidirectional_stream_adapter.cc
diff --git a/components/cronet/android/cronet_bidirectional_stream_adapter.cc b/components/cronet/android/cronet_bidirectional_stream_adapter.cc
index d4a75edb86f1400e947ae2b7ea772136a500d04c..114520096ab6321c1e55d0ff606150d5ae0aab4c 100644
--- a/components/cronet/android/cronet_bidirectional_stream_adapter.cc
+++ b/components/cronet/android/cronet_bidirectional_stream_adapter.cc
@@ -49,6 +49,15 @@ size_t SafeGetArrayLength(JNIEnv* env, JavaArrayType jarray) {
return static_cast<size_t>(std::max(0, length));
}
+int64_t ConvertTime(base::TimeTicks ticks,
+ base::Time start_time,
+ base::TimeTicks start_ticks) {
+ if (ticks.is_null()) {
+ return -1;
+ }
+ return (start_time + (ticks - start_ticks)).ToJavaTime();
+}
+
} // namespace
PendingWriteData::PendingWriteData(JNIEnv* env,
@@ -73,7 +82,8 @@ static jlong CreateBidirectionalStream(
JNIEnv* env,
const base::android::JavaParamRef<jobject>& jbidi_stream,
jlong jurl_request_context_adapter,
- jboolean jsend_request_headers_automatically) {
+ jboolean jsend_request_headers_automatically,
+ jboolean jenable_metrics) {
CronetURLRequestContextAdapter* context_adapter =
reinterpret_cast<CronetURLRequestContextAdapter*>(
jurl_request_context_adapter);
@@ -81,7 +91,8 @@ static jlong CreateBidirectionalStream(
CronetBidirectionalStreamAdapter* adapter =
new CronetBidirectionalStreamAdapter(context_adapter, env, jbidi_stream,
- jsend_request_headers_automatically);
+ jsend_request_headers_automatically,
+ jenable_metrics);
return reinterpret_cast<jlong>(adapter);
}
@@ -95,10 +106,12 @@ CronetBidirectionalStreamAdapter::CronetBidirectionalStreamAdapter(
CronetURLRequestContextAdapter* context,
JNIEnv* env,
const base::android::JavaParamRef<jobject>& jbidi_stream,
- bool send_request_headers_automatically)
+ bool send_request_headers_automatically,
+ bool enable_metrics)
: context_(context),
owner_(env, jbidi_stream),
send_request_headers_automatically_(send_request_headers_automatically),
+ enable_metrics_(enable_metrics),
stream_failed_(false) {}
CronetBidirectionalStreamAdapter::~CronetBidirectionalStreamAdapter() {
@@ -411,6 +424,7 @@ void CronetBidirectionalStreamAdapter::DestroyOnNetworkThread(
JNIEnv* env = base::android::AttachCurrentThread();
cronet::Java_CronetBidirectionalStream_onCanceled(env, owner_.obj());
}
+ MaybeReportMetrics();
delete this;
}
@@ -428,4 +442,40 @@ CronetBidirectionalStreamAdapter::GetHeadersArray(
return base::android::ToJavaArrayOfStrings(env, headers);
}
+void CronetBidirectionalStreamAdapter::MaybeReportMetrics() {
+ if (!enable_metrics_)
+ return;
+
+ if (!bidi_stream_)
+ return;
+ net::LoadTimingInfo load_timing_info;
+ bidi_stream_->GetLoadTimingInfo(&load_timing_info);
+ JNIEnv* env = base::android::AttachCurrentThread();
+ base::Time start_time = load_timing_info.request_start_time;
+ base::TimeTicks start_ticks = load_timing_info.request_start;
+ cronet::Java_CronetBidirectionalStream_onMetricsCollected(
+ env, owner_.obj(), start_time.ToJavaTime(),
+ ConvertTime(load_timing_info.connect_timing.dns_start, start_time,
+ start_ticks),
+ ConvertTime(load_timing_info.connect_timing.dns_end, start_time,
+ start_ticks),
+ ConvertTime(load_timing_info.connect_timing.connect_start, start_time,
+ start_ticks),
+ ConvertTime(load_timing_info.connect_timing.connect_end, start_time,
+ start_ticks),
+ ConvertTime(load_timing_info.connect_timing.ssl_start, start_time,
+ start_ticks),
+ ConvertTime(load_timing_info.connect_timing.ssl_end, start_time,
+ start_ticks),
+ ConvertTime(load_timing_info.send_start, start_time, start_ticks),
+ ConvertTime(load_timing_info.send_end, start_time, start_ticks),
+ ConvertTime(load_timing_info.push_start, start_time, start_ticks),
+ ConvertTime(load_timing_info.push_end, start_time, start_ticks),
+ ConvertTime(load_timing_info.receive_headers_end, start_time,
+ start_ticks),
+ ConvertTime(base::TimeTicks::Now(), start_time, start_ticks),
+ load_timing_info.socket_reused, bidi_stream_->GetTotalSentBytes(),
+ bidi_stream_->GetTotalReceivedBytes());
+}
+
} // namespace cronet

Powered by Google App Engine
This is Rietveld 408576698