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

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

Issue 1856073002: Coalesce small buffers in net::BidirectionalStream (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix javadoc Created 4 years, 8 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.h
diff --git a/components/cronet/android/cronet_bidirectional_stream_adapter.h b/components/cronet/android/cronet_bidirectional_stream_adapter.h
index d61835f487156480ee1187df641a3ada392d57a2..8106c703797c902b3b14334ecfd9c0a83b013a07 100644
--- a/components/cronet/android/cronet_bidirectional_stream_adapter.h
+++ b/components/cronet/android/cronet_bidirectional_stream_adapter.h
@@ -29,9 +29,9 @@ class CronetURLRequestContextAdapter;
class IOBufferWithByteBuffer;
// An adapter from Java BidirectionalStream object to net::BidirectionalStream.
-// Created and configured from a Java thread. Start, ReadData, WriteData and
+// Created and configured from a Java thread. Start, ReadData, WritevData and
// Destroy can be called on any thread (including network thread), and post
-// calls to corresponding {Start|ReadData|WriteData|Destroy}OnNetworkThread to
+// calls to corresponding {Start|ReadData|WritevData|Destroy}OnNetworkThread to
// the network thread. The object is always deleted on network thread. All
// callbacks into the Java BidirectionalStream are done on the network thread.
// Java BidirectionalStream is expected to initiate the next step like ReadData
@@ -44,7 +44,8 @@ class CronetBidirectionalStreamAdapter
CronetBidirectionalStreamAdapter(
CronetURLRequestContextAdapter* context,
JNIEnv* env,
- const base::android::JavaParamRef<jobject>& jbidi_stream);
+ const base::android::JavaParamRef<jobject>& jbidi_stream,
+ bool jdisable_auto_flush);
~CronetBidirectionalStreamAdapter() override;
// Validates method and headers, initializes and starts the request. If
@@ -71,16 +72,19 @@ class CronetBidirectionalStreamAdapter
jint jposition,
jint jlimit);
- // Writes more data from |jbyte_buffer| starting at |jposition| and ending at
- // |jlimit|-1. Arguments are preserved to ensure that |jbyte_buffer|
+ // Writes more data from |jbyte_buffers|. For the i_th buffer in
+ // |jbyte_buffers|, bytes to write start from i_th position in |jpositions|
+ // and end at i_th limit in |jlimits|.
+ // Arguments are preserved to ensure that |jbyte_buffer|
// is not modified by the application during write. The |jend_of_stream| is
// passed to remote to indicate end of stream.
- jboolean WriteData(JNIEnv* env,
- const base::android::JavaParamRef<jobject>& jcaller,
- const base::android::JavaParamRef<jobject>& jbyte_buffer,
- jint jposition,
- jint jlimit,
- jboolean jend_of_stream);
+ jboolean WritevData(
+ JNIEnv* env,
+ const base::android::JavaParamRef<jobject>& jcaller,
+ const base::android::JavaParamRef<jobjectArray>& jbyte_buffers,
+ const base::android::JavaParamRef<jintArray>& jpositions,
+ const base::android::JavaParamRef<jintArray>& jlimits,
+ jboolean jend_of_stream);
// Releases all resources for the request and deletes the object itself.
// |jsend_on_canceled| indicates if Java onCanceled callback should be
@@ -90,8 +94,9 @@ class CronetBidirectionalStreamAdapter
jboolean jsend_on_canceled);
private:
+ typedef std::vector<scoped_refptr<IOBufferWithByteBuffer>> IOByteBufferList;
// net::BidirectionalStream::Delegate implementations:
- void OnHeadersSent() override;
+ void OnStreamReady() override;
void OnHeadersReceived(const net::SpdyHeaderBlock& response_headers) override;
void OnDataRead(int bytes_read) override;
void OnDataSent() override;
@@ -103,10 +108,8 @@ class CronetBidirectionalStreamAdapter
void ReadDataOnNetworkThread(
scoped_refptr<IOBufferWithByteBuffer> read_buffer,
int buffer_size);
- void WriteDataOnNetworkThread(
- scoped_refptr<IOBufferWithByteBuffer> read_buffer,
- int buffer_size,
- bool end_of_stream);
+ void WritevDataOnNetworkThread(const IOByteBufferList& buffers,
+ bool end_of_stream);
void DestroyOnNetworkThread(bool send_on_canceled);
// Gets headers as a Java array.
base::android::ScopedJavaLocalRef<jobjectArray> GetHeadersArray(
@@ -117,9 +120,13 @@ class CronetBidirectionalStreamAdapter
// Java object that owns this CronetBidirectionalStreamAdapter.
base::android::ScopedJavaGlobalRef<jobject> owner_;
+ const bool disable_auto_flush_;
+ // Whether an end of stream flag is passed in through a write call.
+ // Not applicable to HTTP methods that do not send data.
+ bool write_end_of_stream_;
scoped_refptr<IOBufferWithByteBuffer> read_buffer_;
- scoped_refptr<IOBufferWithByteBuffer> write_buffer_;
+ IOByteBufferList write_buffer_list_;
std::unique_ptr<net::BidirectionalStream> bidi_stream_;
// Whether BidirectionalStream::Delegate::OnFailed callback is invoked.

Powered by Google App Engine
This is Rietveld 408576698