Use chrono in AdbClient

This refactors the class implementations to use chrono. I'll follow this up with
a refactor of the class interface.

llvm-svn: 287879
This commit is contained in:
Pavel Labath 2016-11-24 14:03:57 +00:00
parent 7c26a6f9ef
commit 818dd516da
2 changed files with 19 additions and 29 deletions

View File

@ -41,10 +41,11 @@
using namespace lldb;
using namespace lldb_private;
using namespace lldb_private::platform_android;
using namespace std::chrono;
namespace {
const std::chrono::seconds kReadTimeout(8);
const seconds kReadTimeout(8);
const char *kOKAY = "OKAY";
const char *kFAIL = "FAIL";
const char *kDATA = "DATA";
@ -64,7 +65,6 @@ const char *kSocketNamespaceAbstract = "localabstract";
const char *kSocketNamespaceFileSystem = "localfilesystem";
Error ReadAllBytes(Connection &conn, void *buffer, size_t size) {
using namespace std::chrono;
Error error;
ConnectionStatus status;
@ -263,23 +263,22 @@ Error AdbClient::ReadMessage(std::vector<char> &message) {
}
Error AdbClient::ReadMessageStream(std::vector<char> &message,
uint32_t timeout_ms) {
auto start = std::chrono::steady_clock::now();
milliseconds timeout) {
auto start = steady_clock::now();
message.clear();
Error error;
lldb::ConnectionStatus status = lldb::eConnectionStatusSuccess;
char buffer[1024];
while (error.Success() && status == lldb::eConnectionStatusSuccess) {
auto end = std::chrono::steady_clock::now();
uint32_t elapsed_time =
std::chrono::duration_cast<std::chrono::milliseconds>(end - start)
.count();
if (elapsed_time >= timeout_ms)
auto end = steady_clock::now();
auto elapsed = end - start;
if (elapsed >= timeout)
return Error("Timed out");
size_t n = m_conn->Read(buffer, sizeof(buffer),
1000 * (timeout_ms - elapsed_time), status, &error);
size_t n = m_conn->Read(
buffer, sizeof(buffer),
duration_cast<microseconds>(timeout - elapsed).count(), status, &error);
if (n > 0)
message.insert(message.end(), &buffer[0], &buffer[n]);
}
@ -350,7 +349,7 @@ Error AdbClient::ReadAllBytes(void *buffer, size_t size) {
return ::ReadAllBytes(*m_conn, buffer, size);
}
Error AdbClient::internalShell(const char *command, uint32_t timeout_ms,
Error AdbClient::internalShell(const char *command, milliseconds timeout,
std::vector<char> &output_buf) {
output_buf.clear();
@ -368,7 +367,7 @@ Error AdbClient::internalShell(const char *command, uint32_t timeout_ms,
if (error.Fail())
return error;
error = ReadMessageStream(output_buf, timeout_ms);
error = ReadMessageStream(output_buf, timeout);
if (error.Fail())
return error;
@ -387,7 +386,7 @@ Error AdbClient::internalShell(const char *command, uint32_t timeout_ms,
Error AdbClient::Shell(const char *command, uint32_t timeout_ms,
std::string *output) {
std::vector<char> output_buffer;
auto error = internalShell(command, timeout_ms, output_buffer);
auto error = internalShell(command, milliseconds(timeout_ms), output_buffer);
if (error.Fail())
return error;
@ -399,7 +398,7 @@ Error AdbClient::Shell(const char *command, uint32_t timeout_ms,
Error AdbClient::ShellToFile(const char *command, uint32_t timeout_ms,
const FileSpec &output_file_spec) {
std::vector<char> output_buffer;
auto error = internalShell(command, timeout_ms, output_buffer);
auto error = internalShell(command, milliseconds(timeout_ms), output_buffer);
if (error.Fail())
return error;
@ -477,9 +476,7 @@ Error AdbClient::SyncService::internalPushFile(const FileSpec &local_file,
return Error("Failed to send file chunk: %s", error.AsCString());
}
error = SendSyncRequest(
kDONE, std::chrono::duration_cast<std::chrono::seconds>(
FileSystem::GetModificationTime(local_file).time_since_epoch())
.count(),
kDONE, llvm::sys::toTimeT(FileSystem::GetModificationTime(local_file)),
nullptr);
if (error.Fail())
return error;

View File

@ -10,21 +10,14 @@
#ifndef liblldb_AdbClient_h_
#define liblldb_AdbClient_h_
// C Includes
// C++ Includes
#include "lldb/Core/Error.h"
#include <chrono>
#include <functional>
#include <list>
#include <memory>
#include <string>
#include <vector>
// Other libraries and framework includes
// Project includes
#include "lldb/Core/Error.h"
namespace lldb_private {
class FileSpec;
@ -121,7 +114,7 @@ private:
Error ReadMessage(std::vector<char> &message);
Error ReadMessageStream(std::vector<char> &message, uint32_t timeout_ms);
Error ReadMessageStream(std::vector<char> &message, std::chrono::milliseconds timeout);
Error GetResponseError(const char *response_id);
@ -131,7 +124,7 @@ private:
Error StartSync();
Error internalShell(const char *command, uint32_t timeout_ms,
Error internalShell(const char *command, std::chrono::milliseconds timeout,
std::vector<char> &output_buf);
Error ReadAllBytes(void *buffer, size_t size);