diff options
-rw-r--r-- | .clang-format | 13 | ||||
-rw-r--r-- | cmds/dumpstate/dumpstate.cpp | 13 | ||||
-rw-r--r-- | libs/vr/libbufferhubqueue/Android.bp | 2 | ||||
-rw-r--r-- | libs/vr/libbufferhubqueue/buffer_hub_queue_client.cpp | 2 | ||||
-rw-r--r-- | libs/vr/libpdx_uds/client_channel_factory.cpp | 69 | ||||
-rw-r--r-- | services/surfaceflinger/SurfaceFlinger.cpp | 3 | ||||
-rw-r--r-- | services/vr/bufferhubd/Android.mk | 1 | ||||
-rw-r--r-- | services/vr/bufferhubd/producer_channel.cpp | 2 |
8 files changed, 83 insertions, 22 deletions
diff --git a/.clang-format b/.clang-format new file mode 100644 index 0000000000..03af56d640 --- /dev/null +++ b/.clang-format @@ -0,0 +1,13 @@ +BasedOnStyle: Google + +AccessModifierOffset: -4 +AlignOperands: false +AllowShortFunctionsOnASingleLine: Inline +AlwaysBreakBeforeMultilineStrings: false +ColumnLimit: 100 +CommentPragmas: NOLINT:.* +ConstructorInitializerIndentWidth: 6 +ContinuationIndentWidth: 8 +IndentWidth: 4 +PenaltyBreakBeforeFirstCallParameter: 100000 +SpacesBeforeTrailingComments: 1 diff --git a/cmds/dumpstate/dumpstate.cpp b/cmds/dumpstate/dumpstate.cpp index cba8f36cc9..5421a7558c 100644 --- a/cmds/dumpstate/dumpstate.cpp +++ b/cmds/dumpstate/dumpstate.cpp @@ -820,28 +820,33 @@ static void DoLogcat() { if (timeout < 20000) { timeout = 20000; } - RunCommand("SYSTEM LOG", {"logcat", "-v", "threadtime", "-v", "printable", "-d", "*:v"}, + RunCommand("SYSTEM LOG", + {"logcat", "-v", "threadtime", "-v", "printable", "-v", "uid", + "-d", "*:v"}, CommandOptions::WithTimeout(timeout / 1000).Build()); timeout = logcat_timeout("events"); if (timeout < 20000) { timeout = 20000; } RunCommand("EVENT LOG", - {"logcat", "-b", "events", "-v", "threadtime", "-v", "printable", "-d", "*:v"}, + {"logcat", "-b", "events", "-v", "threadtime", "-v", "printable", "-v", "uid", + "-d", "*:v"}, CommandOptions::WithTimeout(timeout / 1000).Build()); timeout = logcat_timeout("radio"); if (timeout < 20000) { timeout = 20000; } RunCommand("RADIO LOG", - {"logcat", "-b", "radio", "-v", "threadtime", "-v", "printable", "-d", "*:v"}, + {"logcat", "-b", "radio", "-v", "threadtime", "-v", "printable", "-v", "uid", + "-d", "*:v"}, CommandOptions::WithTimeout(timeout / 1000).Build()); RunCommand("LOG STATISTICS", {"logcat", "-b", "all", "-S"}); /* kernels must set CONFIG_PSTORE_PMSG, slice up pstore with device tree */ RunCommand("LAST LOGCAT", - {"logcat", "-L", "-b", "all", "-v", "threadtime", "-v", "printable", "-d", "*:v"}); + {"logcat", "-L", "-b", "all", "-v", "threadtime", "-v", "printable", "-v", "uid", + "-d", "*:v"}); } static void DumpIpTables() { diff --git a/libs/vr/libbufferhubqueue/Android.bp b/libs/vr/libbufferhubqueue/Android.bp index 2d96638070..0fa1f01aad 100644 --- a/libs/vr/libbufferhubqueue/Android.bp +++ b/libs/vr/libbufferhubqueue/Android.bp @@ -42,7 +42,7 @@ sharedLibraries = [ cc_library { name: "libbufferhubqueue", - cflags = [ + cflags: [ "-DLOG_TAG=\"libbufferhubqueue\"", "-DTRACE=0", ], diff --git a/libs/vr/libbufferhubqueue/buffer_hub_queue_client.cpp b/libs/vr/libbufferhubqueue/buffer_hub_queue_client.cpp index bd6511de5a..031401a1b6 100644 --- a/libs/vr/libbufferhubqueue/buffer_hub_queue_client.cpp +++ b/libs/vr/libbufferhubqueue/buffer_hub_queue_client.cpp @@ -146,7 +146,7 @@ void BufferHubQueue::HandleBufferEvent(size_t slot, const epoll_event& event) { ALOGW( "Receives EPOLLHUP at slot: %zu, buffer event fd: %d, EPOLLHUP " "pending: %d", - slot, buffer->event_fd(), epollhup_pending_[slot]); + slot, buffer->event_fd(), int{epollhup_pending_[slot]}); if (epollhup_pending_[slot]) { epollhup_pending_[slot] = false; } else { diff --git a/libs/vr/libpdx_uds/client_channel_factory.cpp b/libs/vr/libpdx_uds/client_channel_factory.cpp index 18791276a1..f059453ce0 100644 --- a/libs/vr/libpdx_uds/client_channel_factory.cpp +++ b/libs/vr/libpdx_uds/client_channel_factory.cpp @@ -6,10 +6,16 @@ #include <sys/un.h> #include <unistd.h> +#include <chrono> +#include <thread> + #include <uds/channel_manager.h> #include <uds/client_channel.h> #include <uds/ipc_helper.h> +using std::chrono::duration_cast; +using std::chrono::steady_clock; + namespace android { namespace pdx { namespace uds { @@ -41,13 +47,11 @@ std::unique_ptr<pdx::ClientChannelFactory> ClientChannelFactory::Create( Status<std::unique_ptr<pdx::ClientChannel>> ClientChannelFactory::Connect( int64_t timeout_ms) const { - auto status = WaitForEndpoint(endpoint_path_, timeout_ms); - if (!status) - return ErrorStatus(status.error()); + Status<void> status; LocalHandle socket_fd{socket(AF_UNIX, SOCK_STREAM, 0)}; if (!socket_fd) { - ALOGE("ClientChannelFactory::Connect: socket error %s", strerror(errno)); + ALOGE("ClientChannelFactory::Connect: socket error: %s", strerror(errno)); return ErrorStatus(errno); } @@ -56,16 +60,55 @@ Status<std::unique_ptr<pdx::ClientChannel>> ClientChannelFactory::Connect( strncpy(remote.sun_path, endpoint_path_.c_str(), sizeof(remote.sun_path)); remote.sun_path[sizeof(remote.sun_path) - 1] = '\0'; - int ret = RETRY_EINTR(connect( - socket_fd.Get(), reinterpret_cast<sockaddr*>(&remote), sizeof(remote))); - if (ret == -1) { - ALOGE( - "ClientChannelFactory::Connect: Failed to initialize connection when " - "connecting %s", - strerror(errno)); - return ErrorStatus(errno); - } + bool use_timeout = (timeout_ms >= 0); + auto now = steady_clock::now(); + auto time_end = now + std::chrono::milliseconds{timeout_ms}; + + bool connected = false; + while (!connected) { + int64_t timeout = -1; + if (use_timeout) { + auto remaining = time_end - now; + timeout = duration_cast<std::chrono::milliseconds>(remaining).count(); + if (timeout < 0) + return ErrorStatus(ETIMEDOUT); + } + ALOGD("ClientChannelFactory: Waiting for endpoint at %s", remote.sun_path); + status = WaitForEndpoint(endpoint_path_, timeout); + if (!status) + return ErrorStatus(status.error()); + + ALOGD("ClientChannelFactory: Connecting to %s", remote.sun_path); + int ret = RETRY_EINTR(connect( + socket_fd.Get(), reinterpret_cast<sockaddr*>(&remote), sizeof(remote))); + if (ret == -1) { + ALOGD("ClientChannelFactory: Connect error %d: %s", errno, + strerror(errno)); + if (errno == ECONNREFUSED) { + // Connection refused can be the result of connecting too early (the + // service socket is created but not being listened to yet). + ALOGD("ClientChannelFactory: Connection refused, waiting..."); + using namespace std::literals::chrono_literals; + std::this_thread::sleep_for(100ms); + } else if (errno != ENOENT && errno != ENOTDIR) { + // ENOENT/ENOTDIR might mean that the socket file/directory containing + // it has been just deleted. Try to wait for its creation and do not + // return an error immediately. + ALOGE( + "ClientChannelFactory::Connect: Failed to initialize connection " + "when connecting: %s", + strerror(errno)); + return ErrorStatus(errno); + } + } else { + connected = true; + } + if (use_timeout) + now = steady_clock::now(); + } // while (!connected) + ALOGD("ClientChannelFactory: Connected successfully to %s...", + remote.sun_path); RequestHeader<BorrowedHandle> request; InitRequest(&request, opcodes::CHANNEL_OPEN, 0, 0, false); status = SendData(socket_fd.Get(), request); diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp index f82b363cb5..04358dc76b 100644 --- a/services/surfaceflinger/SurfaceFlinger.cpp +++ b/services/surfaceflinger/SurfaceFlinger.cpp @@ -1903,7 +1903,8 @@ void SurfaceFlinger::handleTransactionLocked(uint32_t transactionFlags) // etc.) but no internal state (i.e. a DisplayDevice). if (state.surface != NULL) { - if (mUseHwcVirtualDisplays) { + // Allow VR composer to use virtual displays. + if (mUseHwcVirtualDisplays || mHwc == mVrHwc) { int width = 0; int status = state.surface->query( NATIVE_WINDOW_WIDTH, &width); diff --git a/services/vr/bufferhubd/Android.mk b/services/vr/bufferhubd/Android.mk index c1a0b6f1f4..b3d777e207 100644 --- a/services/vr/bufferhubd/Android.mk +++ b/services/vr/bufferhubd/Android.mk @@ -30,7 +30,6 @@ staticLibraries := \ sharedLibraries := \ libbase \ libcutils \ - libhardware \ liblog \ libsync \ libutils \ diff --git a/services/vr/bufferhubd/producer_channel.cpp b/services/vr/bufferhubd/producer_channel.cpp index 98a419f976..43010b0f79 100644 --- a/services/vr/bufferhubd/producer_channel.cpp +++ b/services/vr/bufferhubd/producer_channel.cpp @@ -238,7 +238,7 @@ LocalFence ProducerChannel::OnProducerGain(Message& message) { ClearAvailable(); producer_owns_ = true; - post_fence_.get_fd(); + post_fence_.close(); return std::move(returned_fence_); } |