Split ByteBuffer into writer/reader objects.
This allows the reader to reference data, thus avoiding unnecessary
allocations and memory copies.
BUG=webrtc:5155,webrtc:5670
Review URL: https://codereview.webrtc.org/1821083002
Cr-Commit-Position: refs/heads/master@{#12160}
diff --git a/webrtc/libjingle/xmpp/xmppsocket.cc b/webrtc/libjingle/xmpp/xmppsocket.cc
index fd07828..9c1bf8b 100644
--- a/webrtc/libjingle/xmpp/xmppsocket.cc
+++ b/webrtc/libjingle/xmpp/xmppsocket.cc
@@ -77,10 +77,13 @@
void XmppSocket::OnWriteEvent(rtc::AsyncSocket * socket) {
// Write bytes if there are any
- while (buffer_.Length() != 0) {
- int written = cricket_socket_->Send(buffer_.Data(), buffer_.Length());
+ while (buffer_.size() > 0) {
+ int written = cricket_socket_->Send(buffer_.data(), buffer_.size());
if (written > 0) {
- buffer_.Consume(written);
+ ASSERT(static_cast<size_t>(written) <= buffer_.size());
+ memmove(buffer_.data(), buffer_.data() + written,
+ buffer_.size() - written);
+ buffer_.SetSize(buffer_.size() - written);
continue;
}
if (!cricket_socket_->IsBlocking())
@@ -127,11 +130,11 @@
SignalRead();
if ((events & rtc::SE_WRITE)) {
// Write bytes if there are any
- while (buffer_.Length() != 0) {
+ while (buffer_.size() > 0) {
rtc::StreamResult result;
size_t written;
int error;
- result = stream_->Write(buffer_.Data(), buffer_.Length(),
+ result = stream_->Write(buffer_.data(), buffer_.size(),
&written, &error);
if (result == rtc::SR_ERROR) {
LOG(LS_ERROR) << "Send error: " << error;
@@ -141,7 +144,10 @@
return;
ASSERT(result == rtc::SR_SUCCESS);
ASSERT(written > 0);
- buffer_.Shift(written);
+ ASSERT(written <= buffer_.size());
+ memmove(buffer_.data(), buffer_.data() + written,
+ buffer_.size() - written);
+ buffer_.SetSize(buffer_.size() - written);
}
}
if ((events & rtc::SE_CLOSE))
@@ -187,7 +193,7 @@
}
bool XmppSocket::Write(const char * data, size_t len) {
- buffer_.WriteBytes(data, len);
+ buffer_.AppendData(data, len);
#ifndef USE_SSLSTREAM
OnWriteEvent(cricket_socket_);
#else // USE_SSLSTREAM
diff --git a/webrtc/libjingle/xmpp/xmppsocket.h b/webrtc/libjingle/xmpp/xmppsocket.h
index 527b23a..d862afd 100644
--- a/webrtc/libjingle/xmpp/xmppsocket.h
+++ b/webrtc/libjingle/xmpp/xmppsocket.h
@@ -14,7 +14,7 @@
#include "webrtc/libjingle/xmpp/asyncsocket.h"
#include "webrtc/libjingle/xmpp/xmppengine.h"
#include "webrtc/base/asyncsocket.h"
-#include "webrtc/base/bytebuffer.h"
+#include "webrtc/base/buffer.h"
#include "webrtc/base/sigslot.h"
// The below define selects the SSLStreamAdapter implementation for
@@ -62,7 +62,7 @@
rtc::StreamInterface *stream_;
#endif // USE_SSLSTREAM
buzz::AsyncSocket::State state_;
- rtc::ByteBuffer buffer_;
+ rtc::Buffer buffer_;
buzz::TlsOptions tls_;
};