diff options
| author | Greg Clayton <gclayton@apple.com> | 2011-06-17 01:22:15 +0000 |
|---|---|---|
| committer | Greg Clayton <gclayton@apple.com> | 2011-06-17 01:22:15 +0000 |
| commit | 73bf5dbd16d91cc70da178f4bf3fecc96471f7c2 (patch) | |
| tree | 0af9a600c375f2376a73be9d0f49ce8b969c6c0b /lldb/source/Core/Communication.cpp | |
| parent | 2cd8327605091d34bfcbc0a61901c7ad3bfb996c (diff) | |
| download | bcm5719-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.cpp | 50 |
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; } } |

