Snap for 6664334 from 198388c4da3b16dccefb208835c55f8bd261220b to rvc-release

Change-Id: I0f0e2eb595e16a42f4609e21a7adaad1ecfce485
diff --git a/src/profiling/memory/client.cc b/src/profiling/memory/client.cc
index a194f75..d7ea370 100644
--- a/src/profiling/memory/client.cc
+++ b/src/profiling/memory/client.cc
@@ -86,19 +86,17 @@
   return 0;
 }
 
-constexpr uint64_t kInfiniteTries = 0;
+}  // namespace
 
 uint64_t GetMaxTries(const ClientConfiguration& client_config) {
   if (!client_config.block_client)
     return 1u;
   if (client_config.block_client_timeout_us == 0)
     return kInfiniteTries;
-  return std::min<uint64_t>(
+  return std::max<uint64_t>(
       1ul, client_config.block_client_timeout_us / kResendBackoffUs);
 }
 
-}  // namespace
-
 const char* GetThreadStackBase() {
   pthread_attr_t attr;
   if (pthread_getattr_np(pthread_self(), &attr) != 0)
diff --git a/src/profiling/memory/client.h b/src/profiling/memory/client.h
index c6e581e..0ef00be 100644
--- a/src/profiling/memory/client.h
+++ b/src/profiling/memory/client.h
@@ -35,8 +35,10 @@
 namespace perfetto {
 namespace profiling {
 
+uint64_t GetMaxTries(const ClientConfiguration& client_config);
 const char* GetThreadStackBase();
 
+constexpr uint64_t kInfiniteTries = 0;
 constexpr uint32_t kClientSockTimeoutMs = 1000;
 
 // Profiling client, used to sample and record the malloc/free family of calls,
diff --git a/src/profiling/memory/client_unittest.cc b/src/profiling/memory/client_unittest.cc
index 68b2ee7..62f0909 100644
--- a/src/profiling/memory/client_unittest.cc
+++ b/src/profiling/memory/client_unittest.cc
@@ -20,6 +20,7 @@
 
 #include "perfetto/base/thread_utils.h"
 #include "perfetto/ext/base/unix_socket.h"
+#include "src/profiling/memory/wire_protocol.h"
 #include "test/gtest_and_gmock.h"
 
 namespace perfetto {
@@ -50,6 +51,41 @@
   th.join();
 }
 
+TEST(ClientTest, GetMaxTriesBlock) {
+  ClientConfiguration cfg = {};
+  cfg.block_client = true;
+  cfg.block_client_timeout_us = 200;
+  EXPECT_EQ(GetMaxTries(cfg), 2u);
+}
+
+TEST(ClientTest, GetMaxTriesBlockSmall) {
+  ClientConfiguration cfg = {};
+  cfg.block_client = true;
+  cfg.block_client_timeout_us = 99;
+  EXPECT_EQ(GetMaxTries(cfg), 1u);
+}
+
+TEST(ClientTest, GetMaxTriesBlockVerySmall) {
+  ClientConfiguration cfg = {};
+  cfg.block_client = true;
+  cfg.block_client_timeout_us = 1;
+  EXPECT_EQ(GetMaxTries(cfg), 1u);
+}
+
+TEST(ClientTest, GetMaxTriesBlockInfinite) {
+  ClientConfiguration cfg = {};
+  cfg.block_client = true;
+  cfg.block_client_timeout_us = 0;
+  EXPECT_EQ(GetMaxTries(cfg), kInfiniteTries);
+}
+
+TEST(ClientTest, GetMaxTriesNoBlock) {
+  ClientConfiguration cfg = {};
+  cfg.block_client = false;
+  cfg.block_client_timeout_us = 200;
+  EXPECT_EQ(GetMaxTries(cfg), 1u);
+}
+
 }  // namespace
 }  // namespace profiling
 }  // namespace perfetto