summaryrefslogtreecommitdiffstats
path: root/lldb/source/Core/Communication.cpp
diff options
context:
space:
mode:
authorGreg Clayton <gclayton@apple.com>2011-06-17 01:22:15 +0000
committerGreg Clayton <gclayton@apple.com>2011-06-17 01:22:15 +0000
commit73bf5dbd16d91cc70da178f4bf3fecc96471f7c2 (patch)
tree0af9a600c375f2376a73be9d0f49ce8b969c6c0b /lldb/source/Core/Communication.cpp
parent2cd8327605091d34bfcbc0a61901c7ad3bfb996c (diff)
downloadbcm5719-llvm-73bf5dbd16d91cc70da178f4bf3fecc96471f7c2.tar.gz
bcm5719-llvm-73bf5dbd16d91cc70da178f4bf3fecc96471f7c2.zip
Improved the packet throughput when debugging with GDB remote by over 3x on
darwin (not sure about other platforms). Modified the communication and connection classes to not require the BytesAvailable function. Now the "Read(...)" function has a timeout in microseconds. Fixed a lot of assertions that were firing off in certain cases and replaced them with error output and code that can deal with the assertion case. llvm-svn: 133224
Diffstat (limited to 'lldb/source/Core/Communication.cpp')
-rw-r--r--lldb/source/Core/Communication.cpp50
1 files changed, 17 insertions, 33 deletions
diff --git a/lldb/source/Core/Communication.cpp b/lldb/source/Core/Communication.cpp
index a603d6c7b78..3f10d8b63a9 100644
--- a/lldb/source/Core/Communication.cpp
+++ b/lldb/source/Core/Communication.cpp
@@ -69,19 +69,6 @@ Communication::Clear()
}
ConnectionStatus
-Communication::BytesAvailable (uint32_t timeout_usec, Error *error_ptr)
-{
- lldb_private::LogIfAnyCategoriesSet (LIBLLDB_LOG_COMMUNICATION, "%p Communication::BytesAvailable (timeout_usec = %u)", this, timeout_usec);
-
- lldb::ConnectionSP connection_sp (m_connection_sp);
- if (connection_sp.get())
- return connection_sp->BytesAvailable (timeout_usec, error_ptr);
- if (error_ptr)
- error_ptr->SetErrorString("Invalid connection.");
- return eConnectionStatusNoConnection;
-}
-
-ConnectionStatus
Communication::Connect (const char *url, Error *error_ptr)
{
Clear();
@@ -139,7 +126,7 @@ size_t
Communication::Read (void *dst, size_t dst_len, uint32_t timeout_usec, ConnectionStatus &status, Error *error_ptr)
{
lldb_private::LogIfAnyCategoriesSet (LIBLLDB_LOG_COMMUNICATION,
- "%p Communication::Read (dst = %p, dst_len = %zu, timeout_usec = %u) connection = %p",
+ "%p Communication::Read (dst = %p, dst_len = %zu, timeout = %u usec) connection = %p",
this,
dst,
dst_len,
@@ -196,9 +183,7 @@ Communication::Read (void *dst, size_t dst_len, uint32_t timeout_usec, Connectio
lldb::ConnectionSP connection_sp (m_connection_sp);
if (connection_sp.get())
{
- status = connection_sp->BytesAvailable (timeout_usec, error_ptr);
- if (status == eConnectionStatusSuccess)
- return connection_sp->Read (dst, dst_len, status, error_ptr);
+ return connection_sp->Read (dst, dst_len, timeout_usec, status, error_ptr);
}
if (error_ptr)
@@ -320,11 +305,15 @@ Communication::AppendBytesToCache (const uint8_t * bytes, size_t len, bool broad
}
size_t
-Communication::ReadFromConnection (void *dst, size_t dst_len, ConnectionStatus &status, Error *error_ptr)
+Communication::ReadFromConnection (void *dst,
+ size_t dst_len,
+ uint32_t timeout_usec,
+ ConnectionStatus &status,
+ Error *error_ptr)
{
lldb::ConnectionSP connection_sp (m_connection_sp);
if (connection_sp.get())
- return connection_sp->Read (dst, dst_len, status, error_ptr);
+ return connection_sp->Read (dst, dst_len, timeout_usec, status, error_ptr);
return 0;
}
@@ -351,20 +340,15 @@ Communication::ReadThread (void *p)
bool done = false;
while (!done && comm->m_read_thread_enabled)
{
- status = comm->BytesAvailable (UINT32_MAX, &error);
-
- if (status == eConnectionStatusSuccess)
+ size_t bytes_read = comm->ReadFromConnection (buf, sizeof(buf), 5 * USEC_PER_SEC, status, &error);
+ if (bytes_read > 0)
+ comm->AppendBytesToCache (buf, bytes_read, true, status);
+ else if ((bytes_read == 0)
+ && status == eConnectionStatusEndOfFile)
{
- size_t bytes_read = comm->ReadFromConnection (buf, sizeof(buf), status, &error);
- if (bytes_read > 0)
- comm->AppendBytesToCache (buf, bytes_read, true, status);
- else if ((bytes_read == 0)
- && status == eConnectionStatusEndOfFile)
- {
- if (comm->GetCloseOnEOF ())
- comm->Disconnect ();
- comm->AppendBytesToCache (buf, bytes_read, true, status);
- }
+ if (comm->GetCloseOnEOF ())
+ comm->Disconnect ();
+ comm->AppendBytesToCache (buf, bytes_read, true, status);
}
switch (status)
@@ -384,7 +368,7 @@ Communication::ReadThread (void *p)
case eConnectionStatusError: // Check GetError() for details
case eConnectionStatusTimedOut: // Request timed out
if (log)
- error.LogIfError(log.get(), "%p Communication::BytesAvailable () => status = %i", p, status);
+ error.LogIfError(log.get(), "%p Communication::ReadFromConnection () => status = %i", p, status);
break;
}
}
OpenPOWER on IntegriCloud