Skip to content

Commit 11fcec9

Browse files
author
Helen Li
committed
Revert "[cronet] Re-use Direct ByteBuffer for Cronet upload"
This reverts commit 9580368. Reason for revert: Suspect that there is a leak in this CL Original change's description: > [cronet] Re-use Direct ByteBuffer for Cronet upload > > This CL makes Cronet upload reuse a Java ByteBuffer object if the > underlying net::IOBuffer's address and buffer length are unchanged. > > This should reduce the number of constructor calls to > NewDirectByteBuffer(). > > Bug: 756841 > Cq-Include-Trybots: master.tryserver.chromium.android:android_cronet_tester > Change-Id: I751242095e2ba5793750d5a91e2bc3b10ec8b7a1 > Reviewed-on: https://chromium-review.googlesource.com/624196 > Reviewed-by: Andrei Kapishnikov <[email protected]> > Commit-Queue: Helen Li <[email protected]> > Cr-Commit-Position: refs/heads/master@{#496067} [email protected], [email protected] (cherry picked from commit f9121d1) Bug: 756841 Change-Id: I186de0df7b316e4284648b1b9cca1addc7f7845d Cq-Include-Trybots: master.tryserver.chromium.android:android_cronet_tester Reviewed-on: https://chromium-review.googlesource.com/656109 Reviewed-by: Helen Li <[email protected]> Commit-Queue: Helen Li <[email protected]> Cr-Original-Commit-Position: refs/heads/master@{#500411} Reviewed-on: https://chromium-review.googlesource.com/656002 Cr-Commit-Position: refs/branch-heads/3202@{#72} Cr-Branched-From: fa6a5d8-refs/heads/master@{#499098}
1 parent ad925cd commit 11fcec9

File tree

5 files changed

+11
-49
lines changed

5 files changed

+11
-49
lines changed

components/cronet/android/cronet_upload_data_stream_adapter.cc

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,9 @@
1111
#include "base/android/jni_string.h"
1212
#include "base/bind.h"
1313
#include "base/logging.h"
14-
#include "base/memory/ptr_util.h"
1514
#include "base/single_thread_task_runner.h"
1615
#include "base/threading/thread_task_runner_handle.h"
1716
#include "components/cronet/android/cronet_url_request_adapter.h"
18-
#include "components/cronet/android/io_buffer_with_byte_buffer.h"
1917
#include "jni/CronetUploadDataStream_jni.h"
2018

2119
using base::android::JavaParamRef;
@@ -46,16 +44,15 @@ void CronetUploadDataStreamAdapter::Read(net::IOBuffer* buffer, int buf_len) {
4644
DCHECK(network_task_runner_);
4745
DCHECK(network_task_runner_->BelongsToCurrentThread());
4846
DCHECK_GT(buf_len, 0);
47+
DCHECK(!buffer_.get());
48+
buffer_ = buffer;
4949

50+
// TODO(mmenke): Consider preserving the java buffer across reads, when the
51+
// IOBuffer's data pointer and its length are unchanged.
5052
JNIEnv* env = base::android::AttachCurrentThread();
51-
// Allow buffer reuse if |buffer| and |buf_len| are exactly the same as the
52-
// ones used last time.
53-
if (!(buffer_ && buffer_->io_buffer()->data() == buffer->data() &&
54-
buffer_->io_buffer_len() == buf_len)) {
55-
buffer_ = base::MakeUnique<ByteBufferWithIOBuffer>(env, buffer, buf_len);
56-
}
57-
Java_CronetUploadDataStream_readData(env, jupload_data_stream_,
58-
buffer_->byte_buffer());
53+
base::android::ScopedJavaLocalRef<jobject> java_buffer(
54+
env, env->NewDirectByteBuffer(buffer->data(), buf_len));
55+
Java_CronetUploadDataStream_readData(env, jupload_data_stream_, java_buffer);
5956
}
6057

6158
void CronetUploadDataStreamAdapter::Rewind() {
@@ -85,6 +82,7 @@ void CronetUploadDataStreamAdapter::OnReadSucceeded(
8582
bool final_chunk) {
8683
DCHECK(bytes_read > 0 || (final_chunk && bytes_read == 0));
8784

85+
buffer_ = nullptr;
8886
network_task_runner_->PostTask(
8987
FROM_HERE, base::Bind(&CronetUploadDataStream::OnReadSuccess,
9088
upload_data_stream_, bytes_read, final_chunk));

components/cronet/android/cronet_upload_data_stream_adapter.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ class SingleThreadTaskRunner;
1919
} // namespace base
2020

2121
namespace cronet {
22-
class ByteBufferWithIOBuffer;
2322

2423
// The Adapter holds onto a reference to the IOBuffer that is currently being
2524
// written to in Java, so may not be deleted until any read operation in Java
@@ -67,8 +66,9 @@ class CronetUploadDataStreamAdapter : public CronetUploadDataStream::Delegate {
6766
scoped_refptr<base::SingleThreadTaskRunner> network_task_runner_;
6867
base::WeakPtr<CronetUploadDataStream> upload_data_stream_;
6968

70-
// Keeps the net::IOBuffer and Java ByteBuffer alive until the next Read().
71-
std::unique_ptr<ByteBufferWithIOBuffer> buffer_;
69+
// Used to keep the read buffer alive until the callback from Java has been
70+
// received.
71+
scoped_refptr<net::IOBuffer> buffer_;
7272

7373
DISALLOW_COPY_AND_ASSIGN(CronetUploadDataStreamAdapter);
7474
};

components/cronet/android/io_buffer_with_byte_buffer.cc

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -24,14 +24,4 @@ IOBufferWithByteBuffer::IOBufferWithByteBuffer(
2424

2525
IOBufferWithByteBuffer::~IOBufferWithByteBuffer() {}
2626

27-
ByteBufferWithIOBuffer::ByteBufferWithIOBuffer(JNIEnv* env,
28-
net::IOBuffer* io_buffer,
29-
int io_buffer_len)
30-
: io_buffer_(io_buffer), io_buffer_len_(io_buffer_len) {
31-
byte_buffer_.Reset(
32-
env, env->NewDirectByteBuffer(io_buffer_->data(), io_buffer_len_));
33-
}
34-
35-
ByteBufferWithIOBuffer::~ByteBufferWithIOBuffer() {}
36-
3727
} // namespace cronet

components/cronet/android/io_buffer_with_byte_buffer.h

Lines changed: 0 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -48,31 +48,6 @@ class IOBufferWithByteBuffer : public net::WrappedIOBuffer {
4848
DISALLOW_COPY_AND_ASSIGN(IOBufferWithByteBuffer);
4949
};
5050

51-
// Represents a Java direct ByteBuffer backed by a net::IOBuffer. Keeps both the
52-
// net::IOBuffer and the Java ByteBuffer object alive until destroyed.
53-
class ByteBufferWithIOBuffer {
54-
public:
55-
ByteBufferWithIOBuffer(JNIEnv* env,
56-
net::IOBuffer* io_buffer,
57-
int io_buffer_len);
58-
59-
~ByteBufferWithIOBuffer();
60-
const net::IOBuffer* io_buffer() const { return io_buffer_.get(); }
61-
int io_buffer_len() const { return io_buffer_len_; }
62-
63-
const base::android::JavaRef<jobject>& byte_buffer() const {
64-
return byte_buffer_;
65-
}
66-
67-
private:
68-
scoped_refptr<net::IOBuffer> io_buffer_;
69-
int io_buffer_len_;
70-
71-
base::android::ScopedJavaGlobalRef<jobject> byte_buffer_;
72-
73-
DISALLOW_COPY_AND_ASSIGN(ByteBufferWithIOBuffer);
74-
};
75-
7651
} // namespace cronet
7752

7853
#endif // COMPONENTS_CRONET_ANDROID_IO_BUFFER_WITH_BYTE_BUFFER_H_

components/cronet/android/java/src/org/chromium/net/impl/CronetUploadDataStream.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -216,7 +216,6 @@ public void onReadSucceeded(boolean lastChunk) {
216216
String.format("Read upload data length %d exceeds expected length %d",
217217
mLength - mRemainingLength, mLength));
218218
}
219-
mByteBuffer.position(0);
220219
mByteBuffer = null;
221220
mInWhichUserCallback = UserCallback.NOT_IN_CALLBACK;
222221

0 commit comments

Comments
 (0)