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

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

Issue 1969893002: Remove unnecessary array allocation in cronet_bidirectional_stream_adapter.cc (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: self review Created 4 years, 7 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 4ed2dea985f4ec8e7787da535d563387fea15b25..a807960c3de48ee951348865a63f29b4c499180a 100644
--- a/components/cronet/android/cronet_bidirectional_stream_adapter.h
+++ b/components/cronet/android/cronet_bidirectional_stream_adapter.h
@@ -28,6 +28,26 @@ namespace cronet {
class CronetURLRequestContextAdapter;
class IOBufferWithByteBuffer;
+// Convenient wrapper to hold Java references and data to represent the pending
+// data to be written.
+struct PendingWriteData {
+ PendingWriteData(JNIEnv* env,
+ jobjectArray jwrite_buffer_list,
+ jintArray jwrite_buffer_pos_list,
+ jintArray jwrite_buffer_limit_list,
+ jboolean jwrite_end_of_stream);
+ ~PendingWriteData();
+
+ base::android::ScopedJavaGlobalRef<jobjectArray> jwrite_buffer_list;
+ base::android::ScopedJavaGlobalRef<jintArray> jwrite_buffer_pos_list;
+ base::android::ScopedJavaGlobalRef<jintArray> jwrite_buffer_limit_list;
+ jboolean jwrite_end_of_stream;
+ std::vector<scoped_refptr<net::IOBuffer>> write_buffer_list;
mef 2016/05/13 15:12:58 My concern about using net::IOBuffer insted of IOB
xunjieli 2016/05/13 15:35:22 But the Java ByteBuffer is not going to be destroy
mef 2016/05/16 13:54:18 Yeah, that's fine.
+ std::vector<int> write_buffer_len_list;
+
+ DISALLOW_COPY_AND_ASSIGN(PendingWriteData);
+};
+
// An adapter from Java BidirectionalStream object to net::BidirectionalStream.
// Created and configured from a Java thread. Start, ReadData, WritevData and
// Destroy can be called on any thread (including network thread), and post
@@ -94,8 +114,6 @@ class CronetBidirectionalStreamAdapter
jboolean jsend_on_canceled);
private:
- typedef std::vector<scoped_refptr<IOBufferWithByteBuffer>>
- IOBufferWithByteBufferList;
// net::BidirectionalStream::Delegate implementations:
void OnStreamReady() override;
void OnHeadersReceived(const net::SpdyHeaderBlock& response_headers) override;
@@ -109,8 +127,8 @@ class CronetBidirectionalStreamAdapter
void ReadDataOnNetworkThread(
scoped_refptr<IOBufferWithByteBuffer> read_buffer,
int buffer_size);
- void WritevDataOnNetworkThread(const IOBufferWithByteBufferList& buffers,
- bool end_of_stream);
+ void WritevDataOnNetworkThread(
+ std::unique_ptr<PendingWriteData> pending_write_data);
void DestroyOnNetworkThread(bool send_on_canceled);
// Gets headers as a Java array.
base::android::ScopedJavaLocalRef<jobjectArray> GetHeadersArray(
@@ -127,7 +145,7 @@ class CronetBidirectionalStreamAdapter
bool write_end_of_stream_;
scoped_refptr<IOBufferWithByteBuffer> read_buffer_;
- IOBufferWithByteBufferList write_buffer_list_;
+ std::unique_ptr<PendingWriteData> pending_write_data_;
std::unique_ptr<net::BidirectionalStream> bidi_stream_;
// Whether BidirectionalStream::Delegate::OnFailed callback is invoked.

Powered by Google App Engine
This is Rietveld 408576698