Remove QuicheMutex, etc., indirection

As of https://chromium-review.googlesource.com/c/chromium/src/+/6020098,
I believe no one is using this override. Just use Abseil directly.

PiperOrigin-RevId: 697415717
diff --git a/build/source_list.bzl b/build/source_list.bzl
index 1db4c11..9c9ed2b 100644
--- a/build/source_list.bzl
+++ b/build/source_list.bzl
@@ -29,7 +29,6 @@
     "common/platform/api/quiche_logging.h",
     "common/platform/api/quiche_lower_case_string.h",
     "common/platform/api/quiche_mem_slice.h",
-    "common/platform/api/quiche_mutex.h",
     "common/platform/api/quiche_prefetch.h",
     "common/platform/api/quiche_reference_counted.h",
     "common/platform/api/quiche_server_stats.h",
@@ -394,7 +393,6 @@
     "quic/platform/api/quic_ip_address.h",
     "quic/platform/api/quic_ip_address_family.h",
     "quic/platform/api/quic_logging.h",
-    "quic/platform/api/quic_mutex.h",
     "quic/platform/api/quic_server_stats.h",
     "quic/platform/api/quic_socket_address.h",
     "quic/platform/api/quic_stack_trace.h",
@@ -413,7 +411,6 @@
     "common/masque/connect_ip_datagram_payload.cc",
     "common/masque/connect_udp_datagram_payload.cc",
     "common/platform/api/quiche_hostname_utils.cc",
-    "common/platform/api/quiche_mutex.cc",
     "common/quiche_buffer_allocator.cc",
     "common/quiche_crypto_logging.cc",
     "common/quiche_data_reader.cc",
@@ -1452,7 +1449,6 @@
     "common/platform/default/quiche_platform_impl/quiche_logging_impl.h",
     "common/platform/default/quiche_platform_impl/quiche_lower_case_string_impl.h",
     "common/platform/default/quiche_platform_impl/quiche_mem_slice_impl.h",
-    "common/platform/default/quiche_platform_impl/quiche_mutex_impl.h",
     "common/platform/default/quiche_platform_impl/quiche_prefetch_impl.h",
     "common/platform/default/quiche_platform_impl/quiche_reference_counted_impl.h",
     "common/platform/default/quiche_platform_impl/quiche_server_stats_impl.h",
@@ -1466,7 +1462,6 @@
 default_platform_impl_srcs = [
     "common/platform/default/quiche_platform_impl/quiche_flags_impl.cc",
     "common/platform/default/quiche_platform_impl/quiche_logging_impl.cc",
-    "common/platform/default/quiche_platform_impl/quiche_mutex_impl.cc",
     "common/platform/default/quiche_platform_impl/quiche_stack_trace_impl.cc",
     "common/platform/default/quiche_platform_impl/quiche_time_utils_impl.cc",
     "common/platform/default/quiche_platform_impl/quiche_url_utils_impl.cc",
diff --git a/build/source_list.gni b/build/source_list.gni
index 1a4a39c..4d0b463 100644
--- a/build/source_list.gni
+++ b/build/source_list.gni
@@ -29,7 +29,6 @@
     "src/quiche/common/platform/api/quiche_logging.h",
     "src/quiche/common/platform/api/quiche_lower_case_string.h",
     "src/quiche/common/platform/api/quiche_mem_slice.h",
-    "src/quiche/common/platform/api/quiche_mutex.h",
     "src/quiche/common/platform/api/quiche_prefetch.h",
     "src/quiche/common/platform/api/quiche_reference_counted.h",
     "src/quiche/common/platform/api/quiche_server_stats.h",
@@ -394,7 +393,6 @@
     "src/quiche/quic/platform/api/quic_ip_address.h",
     "src/quiche/quic/platform/api/quic_ip_address_family.h",
     "src/quiche/quic/platform/api/quic_logging.h",
-    "src/quiche/quic/platform/api/quic_mutex.h",
     "src/quiche/quic/platform/api/quic_server_stats.h",
     "src/quiche/quic/platform/api/quic_socket_address.h",
     "src/quiche/quic/platform/api/quic_stack_trace.h",
@@ -413,7 +411,6 @@
     "src/quiche/common/masque/connect_ip_datagram_payload.cc",
     "src/quiche/common/masque/connect_udp_datagram_payload.cc",
     "src/quiche/common/platform/api/quiche_hostname_utils.cc",
-    "src/quiche/common/platform/api/quiche_mutex.cc",
     "src/quiche/common/quiche_buffer_allocator.cc",
     "src/quiche/common/quiche_crypto_logging.cc",
     "src/quiche/common/quiche_data_reader.cc",
@@ -1456,7 +1453,6 @@
     "src/quiche/common/platform/default/quiche_platform_impl/quiche_logging_impl.h",
     "src/quiche/common/platform/default/quiche_platform_impl/quiche_lower_case_string_impl.h",
     "src/quiche/common/platform/default/quiche_platform_impl/quiche_mem_slice_impl.h",
-    "src/quiche/common/platform/default/quiche_platform_impl/quiche_mutex_impl.h",
     "src/quiche/common/platform/default/quiche_platform_impl/quiche_prefetch_impl.h",
     "src/quiche/common/platform/default/quiche_platform_impl/quiche_reference_counted_impl.h",
     "src/quiche/common/platform/default/quiche_platform_impl/quiche_server_stats_impl.h",
@@ -1470,7 +1466,6 @@
 default_platform_impl_srcs = [
     "src/quiche/common/platform/default/quiche_platform_impl/quiche_flags_impl.cc",
     "src/quiche/common/platform/default/quiche_platform_impl/quiche_logging_impl.cc",
-    "src/quiche/common/platform/default/quiche_platform_impl/quiche_mutex_impl.cc",
     "src/quiche/common/platform/default/quiche_platform_impl/quiche_stack_trace_impl.cc",
     "src/quiche/common/platform/default/quiche_platform_impl/quiche_time_utils_impl.cc",
     "src/quiche/common/platform/default/quiche_platform_impl/quiche_url_utils_impl.cc",
diff --git a/build/source_list.json b/build/source_list.json
index 5db7d3a..abb2a45 100644
--- a/build/source_list.json
+++ b/build/source_list.json
@@ -28,7 +28,6 @@
     "quiche/common/platform/api/quiche_logging.h",
     "quiche/common/platform/api/quiche_lower_case_string.h",
     "quiche/common/platform/api/quiche_mem_slice.h",
-    "quiche/common/platform/api/quiche_mutex.h",
     "quiche/common/platform/api/quiche_prefetch.h",
     "quiche/common/platform/api/quiche_reference_counted.h",
     "quiche/common/platform/api/quiche_server_stats.h",
@@ -393,7 +392,6 @@
     "quiche/quic/platform/api/quic_ip_address.h",
     "quiche/quic/platform/api/quic_ip_address_family.h",
     "quiche/quic/platform/api/quic_logging.h",
-    "quiche/quic/platform/api/quic_mutex.h",
     "quiche/quic/platform/api/quic_server_stats.h",
     "quiche/quic/platform/api/quic_socket_address.h",
     "quiche/quic/platform/api/quic_stack_trace.h",
@@ -412,7 +410,6 @@
     "quiche/common/masque/connect_ip_datagram_payload.cc",
     "quiche/common/masque/connect_udp_datagram_payload.cc",
     "quiche/common/platform/api/quiche_hostname_utils.cc",
-    "quiche/common/platform/api/quiche_mutex.cc",
     "quiche/common/quiche_buffer_allocator.cc",
     "quiche/common/quiche_crypto_logging.cc",
     "quiche/common/quiche_data_reader.cc",
@@ -1455,7 +1452,6 @@
     "quiche/common/platform/default/quiche_platform_impl/quiche_logging_impl.h",
     "quiche/common/platform/default/quiche_platform_impl/quiche_lower_case_string_impl.h",
     "quiche/common/platform/default/quiche_platform_impl/quiche_mem_slice_impl.h",
-    "quiche/common/platform/default/quiche_platform_impl/quiche_mutex_impl.h",
     "quiche/common/platform/default/quiche_platform_impl/quiche_prefetch_impl.h",
     "quiche/common/platform/default/quiche_platform_impl/quiche_reference_counted_impl.h",
     "quiche/common/platform/default/quiche_platform_impl/quiche_server_stats_impl.h",
@@ -1469,7 +1465,6 @@
   "default_platform_impl_srcs": [
     "quiche/common/platform/default/quiche_platform_impl/quiche_flags_impl.cc",
     "quiche/common/platform/default/quiche_platform_impl/quiche_logging_impl.cc",
-    "quiche/common/platform/default/quiche_platform_impl/quiche_mutex_impl.cc",
     "quiche/common/platform/default/quiche_platform_impl/quiche_stack_trace_impl.cc",
     "quiche/common/platform/default/quiche_platform_impl/quiche_time_utils_impl.cc",
     "quiche/common/platform/default/quiche_platform_impl/quiche_url_utils_impl.cc"
diff --git a/quiche/blind_sign_auth/blind_sign_auth_test.cc b/quiche/blind_sign_auth/blind_sign_auth_test.cc
index 7c681df..8fa6561 100644
--- a/quiche/blind_sign_auth/blind_sign_auth_test.cc
+++ b/quiche/blind_sign_auth/blind_sign_auth_test.cc
@@ -13,6 +13,7 @@
 #include "absl/status/statusor.h"
 #include "absl/strings/escaping.h"
 #include "absl/strings/string_view.h"
+#include "absl/synchronization/notification.h"
 #include "absl/time/clock.h"
 #include "absl/time/time.h"
 #include "absl/types/span.h"
@@ -26,7 +27,6 @@
 #include "quiche/blind_sign_auth/blind_sign_message_interface.h"
 #include "quiche/blind_sign_auth/blind_sign_message_response.h"
 #include "quiche/blind_sign_auth/test_tools/mock_blind_sign_message_interface.h"
-#include "quiche/common/platform/api/quiche_mutex.h"
 #include "quiche/common/platform/api/quiche_test.h"
 #include "quiche/common/test_tools/quiche_test_utils.h"
 
@@ -266,7 +266,7 @@
       .Times(0);
 
   int num_tokens = 1;
-  QuicheNotification done;
+  absl::Notification done;
   SignedTokenCallback callback =
       [&done](absl::StatusOr<absl::Span<BlindSignToken>> tokens) {
         EXPECT_THAT(tokens.status().code(), absl::StatusCode::kInvalidArgument);
@@ -301,7 +301,7 @@
       .Times(0);
 
   int num_tokens = 1;
-  QuicheNotification done;
+  absl::Notification done;
   SignedTokenCallback callback =
       [&done](absl::StatusOr<absl::Span<BlindSignToken>> tokens) {
         EXPECT_THAT(tokens.status().code(), absl::StatusCode::kInvalidArgument);
@@ -346,7 +346,7 @@
   }
 
   int num_tokens = 1;
-  QuicheNotification done;
+  absl::Notification done;
   SignedTokenCallback callback =
       [&done](absl::StatusOr<absl::Span<BlindSignToken>> tokens) {
         EXPECT_THAT(tokens.status().code(), absl::StatusCode::kInternal);
@@ -389,7 +389,7 @@
   }
 
   int num_tokens = 1;
-  QuicheNotification done;
+  absl::Notification done;
   SignedTokenCallback callback =
       [this, &done](absl::StatusOr<absl::Span<BlindSignToken>> tokens) {
         QUICHE_EXPECT_OK(tokens);
@@ -430,7 +430,7 @@
       });
 
   int num_tokens = 1;
-  QuicheNotification done;
+  absl::Notification done;
   SignedTokenCallback callback =
       [&done](absl::StatusOr<absl::Span<BlindSignToken>> tokens) {
         EXPECT_THAT(tokens.status().code(), absl::StatusCode::kInvalidArgument);
diff --git a/quiche/blind_sign_auth/cached_blind_sign_auth.cc b/quiche/blind_sign_auth/cached_blind_sign_auth.cc
index 4579086..883e2aa 100644
--- a/quiche/blind_sign_auth/cached_blind_sign_auth.cc
+++ b/quiche/blind_sign_auth/cached_blind_sign_auth.cc
@@ -13,12 +13,12 @@
 #include "absl/status/status.h"
 #include "absl/status/statusor.h"
 #include "absl/strings/str_format.h"
+#include "absl/synchronization/mutex.h"
 #include "absl/time/clock.h"
 #include "absl/time/time.h"
 #include "absl/types/span.h"
 #include "quiche/blind_sign_auth/blind_sign_auth_interface.h"
 #include "quiche/common/platform/api/quiche_logging.h"
-#include "quiche/common/platform/api/quiche_mutex.h"
 
 namespace quiche {
 
@@ -42,7 +42,7 @@
 
   std::vector<BlindSignToken> output_tokens;
   {
-    QuicheWriterMutexLock lock(&mutex_);
+    absl::WriterMutexLock lock(&mutex_);
 
     RemoveExpiredTokens();
     // Try to fill the request from cache.
@@ -83,7 +83,7 @@
   std::vector<BlindSignToken> output_tokens;
   size_t cache_size;
   {
-    QuicheWriterMutexLock lock(&mutex_);
+    absl::WriterMutexLock lock(&mutex_);
 
     // Add returned tokens to cache.
     for (const BlindSignToken& token : *tokens) {
diff --git a/quiche/blind_sign_auth/cached_blind_sign_auth.h b/quiche/blind_sign_auth/cached_blind_sign_auth.h
index 9d90e6c..7eaa677 100644
--- a/quiche/blind_sign_auth/cached_blind_sign_auth.h
+++ b/quiche/blind_sign_auth/cached_blind_sign_auth.h
@@ -8,11 +8,12 @@
 #include <string>
 #include <vector>
 
+#include "absl/base/thread_annotations.h"
 #include "absl/status/statusor.h"
+#include "absl/synchronization/mutex.h"
 #include "absl/types/span.h"
 #include "quiche/blind_sign_auth/blind_sign_auth_interface.h"
 #include "quiche/common/platform/api/quiche_export.h"
-#include "quiche/common/platform/api/quiche_mutex.h"
 #include "quiche/common/quiche_circular_deque.h"
 
 namespace quiche {
@@ -45,7 +46,7 @@
 
   // Removes all tokens in the cache.
   void ClearCache() {
-    QuicheWriterMutexLock lock(&mutex_);
+    absl::WriterMutexLock lock(&mutex_);
     cached_tokens_.clear();
   }
 
@@ -54,13 +55,13 @@
       SignedTokenCallback callback, int num_tokens,
       absl::StatusOr<absl::Span<BlindSignToken>> tokens);
   std::vector<BlindSignToken> CreateOutputTokens(int num_tokens)
-      QUICHE_EXCLUSIVE_LOCKS_REQUIRED(mutex_);
-  void RemoveExpiredTokens() QUICHE_EXCLUSIVE_LOCKS_REQUIRED(mutex_);
+      ABSL_EXCLUSIVE_LOCKS_REQUIRED(mutex_);
+  void RemoveExpiredTokens() ABSL_EXCLUSIVE_LOCKS_REQUIRED(mutex_);
 
   BlindSignAuthInterface* blind_sign_auth_;
   int max_tokens_per_request_;
-  QuicheMutex mutex_;
-  QuicheCircularDeque<BlindSignToken> cached_tokens_ QUICHE_GUARDED_BY(mutex_);
+  absl::Mutex mutex_;
+  QuicheCircularDeque<BlindSignToken> cached_tokens_ ABSL_GUARDED_BY(mutex_);
 };
 
 }  // namespace quiche
diff --git a/quiche/blind_sign_auth/cached_blind_sign_auth_test.cc b/quiche/blind_sign_auth/cached_blind_sign_auth_test.cc
index f353cb6..b84d2f8 100644
--- a/quiche/blind_sign_auth/cached_blind_sign_auth_test.cc
+++ b/quiche/blind_sign_auth/cached_blind_sign_auth_test.cc
@@ -14,12 +14,12 @@
 #include "absl/status/statusor.h"
 #include "absl/strings/str_cat.h"
 #include "absl/strings/str_format.h"
+#include "absl/synchronization/notification.h"
 #include "absl/time/clock.h"
 #include "absl/time/time.h"
 #include "absl/types/span.h"
 #include "quiche/blind_sign_auth/blind_sign_auth_interface.h"
 #include "quiche/blind_sign_auth/test_tools/mock_blind_sign_auth_interface.h"
-#include "quiche/common/platform/api/quiche_mutex.h"
 #include "quiche/common/platform/api/quiche_test.h"
 #include "quiche/common/test_tools/quiche_test_utils.h"
 
@@ -79,7 +79,7 @@
       });
 
   int num_tokens = 5;
-  QuicheNotification done;
+  absl::Notification done;
   SignedTokenCallback callback =
       [num_tokens, &done](absl::StatusOr<absl::Span<BlindSignToken>> tokens) {
         QUICHE_EXPECT_OK(tokens);
@@ -107,7 +107,7 @@
       });
 
   int num_tokens = kBlindSignAuthRequestMaxTokens - 1;
-  QuicheNotification first;
+  absl::Notification first;
   SignedTokenCallback first_callback =
       [num_tokens, &first](absl::StatusOr<absl::Span<BlindSignToken>> tokens) {
         QUICHE_EXPECT_OK(tokens);
@@ -123,7 +123,7 @@
       BlindSignAuthServiceType::kChromeIpBlinding, std::move(first_callback));
   first.WaitForNotification();
 
-  QuicheNotification second;
+  absl::Notification second;
   SignedTokenCallback second_callback =
       [num_tokens, &second](absl::StatusOr<absl::Span<BlindSignToken>> tokens) {
         QUICHE_EXPECT_OK(tokens);
@@ -153,7 +153,7 @@
       });
 
   int num_tokens = kBlindSignAuthRequestMaxTokens / 2;
-  QuicheNotification first;
+  absl::Notification first;
   SignedTokenCallback first_callback =
       [num_tokens, &first](absl::StatusOr<absl::Span<BlindSignToken>> tokens) {
         QUICHE_EXPECT_OK(tokens);
@@ -169,7 +169,7 @@
       BlindSignAuthServiceType::kChromeIpBlinding, std::move(first_callback));
   first.WaitForNotification();
 
-  QuicheNotification second;
+  absl::Notification second;
   SignedTokenCallback second_callback =
       [num_tokens, &second](absl::StatusOr<absl::Span<BlindSignToken>> tokens) {
         QUICHE_EXPECT_OK(tokens);
@@ -198,7 +198,7 @@
       });
 
   int num_tokens = kBlindSignAuthRequestMaxTokens / 2;
-  QuicheNotification first;
+  absl::Notification first;
   SignedTokenCallback first_callback =
       [num_tokens, &first](absl::StatusOr<absl::Span<BlindSignToken>> tokens) {
         QUICHE_EXPECT_OK(tokens);
@@ -214,7 +214,7 @@
       BlindSignAuthServiceType::kChromeIpBlinding, std::move(first_callback));
   first.WaitForNotification();
 
-  QuicheNotification second;
+  absl::Notification second;
   SignedTokenCallback second_callback =
       [num_tokens, &second](absl::StatusOr<absl::Span<BlindSignToken>> tokens) {
         QUICHE_EXPECT_OK(tokens);
@@ -231,7 +231,7 @@
       BlindSignAuthServiceType::kChromeIpBlinding, std::move(second_callback));
   second.WaitForNotification();
 
-  QuicheNotification third;
+  absl::Notification third;
   int third_request_tokens = 10;
   SignedTokenCallback third_callback =
       [third_request_tokens,
@@ -305,7 +305,7 @@
       });
 
   int num_tokens = kBlindSignAuthRequestMaxTokens;
-  QuicheNotification first;
+  absl::Notification first;
   SignedTokenCallback first_callback =
       [&first](absl::StatusOr<absl::Span<BlindSignToken>> tokens) {
         EXPECT_THAT(tokens.status().code(), absl::StatusCode::kInternal);
@@ -318,7 +318,7 @@
       BlindSignAuthServiceType::kChromeIpBlinding, std::move(first_callback));
   first.WaitForNotification();
 
-  QuicheNotification second;
+  absl::Notification second;
   SignedTokenCallback second_callback =
       [&second](absl::StatusOr<absl::Span<BlindSignToken>> tokens) {
         EXPECT_THAT(tokens.status().code(),
@@ -360,7 +360,7 @@
       });
 
   int num_tokens = kBlindSignAuthRequestMaxTokens;
-  QuicheNotification first;
+  absl::Notification first;
   SignedTokenCallback first_callback =
       [&first](absl::StatusOr<absl::Span<BlindSignToken>> tokens) {
         EXPECT_THAT(tokens.status().code(),
@@ -385,7 +385,7 @@
       });
 
   int num_tokens = kBlindSignAuthRequestMaxTokens / 2;
-  QuicheNotification first;
+  absl::Notification first;
   SignedTokenCallback first_callback =
       [&first](absl::StatusOr<absl::Span<BlindSignToken>> tokens) {
         EXPECT_THAT(tokens.status().code(),
@@ -400,7 +400,7 @@
 
   cached_blind_sign_auth_->ClearCache();
 
-  QuicheNotification second;
+  absl::Notification second;
   SignedTokenCallback second_callback =
       [&second](absl::StatusOr<absl::Span<BlindSignToken>> tokens) {
         EXPECT_THAT(tokens.status().code(),
diff --git a/quiche/common/platform/api/quiche_mutex.cc b/quiche/common/platform/api/quiche_mutex.cc
deleted file mode 100644
index e6d4b0c..0000000
--- a/quiche/common/platform/api/quiche_mutex.cc
+++ /dev/null
@@ -1,31 +0,0 @@
-// Copyright (c) 2016 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "quiche/common/platform/api/quiche_mutex.h"
-
-namespace quiche {
-
-void QuicheMutex::WriterLock() { impl_.WriterLock(); }
-
-void QuicheMutex::WriterUnlock() { impl_.WriterUnlock(); }
-
-void QuicheMutex::ReaderLock() { impl_.ReaderLock(); }
-
-void QuicheMutex::ReaderUnlock() { impl_.ReaderUnlock(); }
-
-void QuicheMutex::AssertReaderHeld() const { impl_.AssertReaderHeld(); }
-
-QuicheReaderMutexLock::QuicheReaderMutexLock(QuicheMutex* lock) : lock_(lock) {
-  lock->ReaderLock();
-}
-
-QuicheReaderMutexLock::~QuicheReaderMutexLock() { lock_->ReaderUnlock(); }
-
-QuicheWriterMutexLock::QuicheWriterMutexLock(QuicheMutex* lock) : lock_(lock) {
-  lock->WriterLock();
-}
-
-QuicheWriterMutexLock::~QuicheWriterMutexLock() { lock_->WriterUnlock(); }
-
-}  // namespace quiche
diff --git a/quiche/common/platform/api/quiche_mutex.h b/quiche/common/platform/api/quiche_mutex.h
deleted file mode 100644
index 11e6287..0000000
--- a/quiche/common/platform/api/quiche_mutex.h
+++ /dev/null
@@ -1,101 +0,0 @@
-// Copyright (c) 2016 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef QUICHE_COMMON_PLATFORM_API_QUICHE_MUTEX_H_
-#define QUICHE_COMMON_PLATFORM_API_QUICHE_MUTEX_H_
-
-#include "quiche_platform_impl/quiche_mutex_impl.h"
-
-#define QUICHE_EXCLUSIVE_LOCKS_REQUIRED QUICHE_EXCLUSIVE_LOCKS_REQUIRED_IMPL
-#define QUICHE_GUARDED_BY QUICHE_GUARDED_BY_IMPL
-#define QUICHE_LOCKABLE QUICHE_LOCKABLE_IMPL
-#define QUICHE_LOCKS_EXCLUDED QUICHE_LOCKS_EXCLUDED_IMPL
-#define QUICHE_SHARED_LOCKS_REQUIRED QUICHE_SHARED_LOCKS_REQUIRED_IMPL
-#define QUICHE_EXCLUSIVE_LOCK_FUNCTION QUICHE_EXCLUSIVE_LOCK_FUNCTION_IMPL
-#define QUICHE_UNLOCK_FUNCTION QUICHE_UNLOCK_FUNCTION_IMPL
-#define QUICHE_SHARED_LOCK_FUNCTION QUICHE_SHARED_LOCK_FUNCTION_IMPL
-#define QUICHE_SCOPED_LOCKABLE QUICHE_SCOPED_LOCKABLE_IMPL
-#define QUICHE_ASSERT_SHARED_LOCK QUICHE_ASSERT_SHARED_LOCK_IMPL
-
-namespace quiche {
-
-// A class representing a non-reentrant mutex in QUIC.
-class QUICHE_LOCKABLE QUICHE_EXPORT QuicheMutex {
- public:
-  QuicheMutex() = default;
-  QuicheMutex(const QuicheMutex&) = delete;
-  QuicheMutex& operator=(const QuicheMutex&) = delete;
-
-  // Block until this Mutex is free, then acquire it exclusively.
-  void WriterLock() QUICHE_EXCLUSIVE_LOCK_FUNCTION();
-
-  // Release this Mutex. Caller must hold it exclusively.
-  void WriterUnlock() QUICHE_UNLOCK_FUNCTION();
-
-  // Block until this Mutex is free or shared, then acquire a share of it.
-  void ReaderLock() QUICHE_SHARED_LOCK_FUNCTION();
-
-  // Release this Mutex. Caller could hold it in shared mode.
-  void ReaderUnlock() QUICHE_UNLOCK_FUNCTION();
-
-  // Returns immediately if current thread holds the Mutex in at least shared
-  // mode.  Otherwise, may report an error (typically by crashing with a
-  // diagnostic), or may return immediately.
-  void AssertReaderHeld() const QUICHE_ASSERT_SHARED_LOCK();
-
- private:
-  QuicheLockImpl impl_;
-};
-
-// A helper class that acquires the given QuicheMutex shared lock while the
-// QuicheReaderMutexLock is in scope.
-class QUICHE_SCOPED_LOCKABLE QUICHE_EXPORT QuicheReaderMutexLock {
- public:
-  explicit QuicheReaderMutexLock(QuicheMutex* lock)
-      QUICHE_SHARED_LOCK_FUNCTION(lock);
-  QuicheReaderMutexLock(const QuicheReaderMutexLock&) = delete;
-  QuicheReaderMutexLock& operator=(const QuicheReaderMutexLock&) = delete;
-
-  ~QuicheReaderMutexLock() QUICHE_UNLOCK_FUNCTION();
-
- private:
-  QuicheMutex* const lock_;
-};
-
-// A helper class that acquires the given QuicheMutex exclusive lock while the
-// QuicheWriterMutexLock is in scope.
-class QUICHE_SCOPED_LOCKABLE QUICHE_EXPORT QuicheWriterMutexLock {
- public:
-  explicit QuicheWriterMutexLock(QuicheMutex* lock)
-      QUICHE_EXCLUSIVE_LOCK_FUNCTION(lock);
-  QuicheWriterMutexLock(const QuicheWriterMutexLock&) = delete;
-  QuicheWriterMutexLock& operator=(const QuicheWriterMutexLock&) = delete;
-
-  ~QuicheWriterMutexLock() QUICHE_UNLOCK_FUNCTION();
-
- private:
-  QuicheMutex* const lock_;
-};
-
-// A Notification allows threads to receive notification of a single occurrence
-// of a single event.
-class QUICHE_EXPORT QuicheNotification {
- public:
-  QuicheNotification() = default;
-  QuicheNotification(const QuicheNotification&) = delete;
-  QuicheNotification& operator=(const QuicheNotification&) = delete;
-
-  bool HasBeenNotified() { return impl_.HasBeenNotified(); }
-
-  void Notify() { impl_.Notify(); }
-
-  void WaitForNotification() { impl_.WaitForNotification(); }
-
- private:
-  QuicheNotificationImpl impl_;
-};
-
-}  // namespace quiche
-
-#endif  // QUICHE_COMMON_PLATFORM_API_QUICHE_MUTEX_H_
diff --git a/quiche/common/platform/default/quiche_platform_impl/quiche_mutex_impl.cc b/quiche/common/platform/default/quiche_platform_impl/quiche_mutex_impl.cc
deleted file mode 100644
index 78ca926..0000000
--- a/quiche/common/platform/default/quiche_platform_impl/quiche_mutex_impl.cc
+++ /dev/null
@@ -1,15 +0,0 @@
-#include "quiche_platform_impl/quiche_mutex_impl.h"
-
-namespace quiche {
-
-void QuicheLockImpl::WriterLock() { mu_.WriterLock(); }
-
-void QuicheLockImpl::WriterUnlock() { mu_.WriterUnlock(); }
-
-void QuicheLockImpl::ReaderLock() { mu_.ReaderLock(); }
-
-void QuicheLockImpl::ReaderUnlock() { mu_.ReaderUnlock(); }
-
-void QuicheLockImpl::AssertReaderHeld() const { mu_.AssertReaderHeld(); }
-
-}  // namespace quiche
diff --git a/quiche/common/platform/default/quiche_platform_impl/quiche_mutex_impl.h b/quiche/common/platform/default/quiche_platform_impl/quiche_mutex_impl.h
deleted file mode 100644
index c6f6655..0000000
--- a/quiche/common/platform/default/quiche_platform_impl/quiche_mutex_impl.h
+++ /dev/null
@@ -1,68 +0,0 @@
-#ifndef QUICHE_COMMON_PLATFORM_DEFAULT_QUICHE_PLATFORM_IMPL_QUICHE_MUTEX_IMPL_H_
-#define QUICHE_COMMON_PLATFORM_DEFAULT_QUICHE_PLATFORM_IMPL_QUICHE_MUTEX_IMPL_H_
-
-#include "absl/synchronization/mutex.h"
-#include "absl/synchronization/notification.h"
-#include "quiche/common/platform/api/quiche_export.h"
-
-#define QUICHE_EXCLUSIVE_LOCKS_REQUIRED_IMPL ABSL_EXCLUSIVE_LOCKS_REQUIRED
-#define QUICHE_GUARDED_BY_IMPL ABSL_GUARDED_BY
-#define QUICHE_LOCKABLE_IMPL ABSL_LOCKABLE
-#define QUICHE_LOCKS_EXCLUDED_IMPL ABSL_LOCKS_EXCLUDED
-#define QUICHE_SHARED_LOCKS_REQUIRED_IMPL ABSL_SHARED_LOCKS_REQUIRED
-#define QUICHE_EXCLUSIVE_LOCK_FUNCTION_IMPL ABSL_EXCLUSIVE_LOCK_FUNCTION
-#define QUICHE_UNLOCK_FUNCTION_IMPL ABSL_UNLOCK_FUNCTION
-#define QUICHE_SHARED_LOCK_FUNCTION_IMPL ABSL_SHARED_LOCK_FUNCTION
-#define QUICHE_SCOPED_LOCKABLE_IMPL ABSL_SCOPED_LOCKABLE
-#define QUICHE_ASSERT_SHARED_LOCK_IMPL ABSL_ASSERT_SHARED_LOCK
-
-namespace quiche {
-
-// A class wrapping a non-reentrant mutex.
-class ABSL_LOCKABLE QUICHE_EXPORT QuicheLockImpl {
- public:
-  QuicheLockImpl() = default;
-  QuicheLockImpl(const QuicheLockImpl&) = delete;
-  QuicheLockImpl& operator=(const QuicheLockImpl&) = delete;
-
-  // Block until mu_ is free, then acquire it exclusively.
-  void WriterLock() ABSL_EXCLUSIVE_LOCK_FUNCTION();
-
-  // Release mu_. Caller must hold it exclusively.
-  void WriterUnlock() ABSL_UNLOCK_FUNCTION();
-
-  // Block until mu_ is free or shared, then acquire a share of it.
-  void ReaderLock() ABSL_SHARED_LOCK_FUNCTION();
-
-  // Release mu_. Caller could hold it in shared mode.
-  void ReaderUnlock() ABSL_UNLOCK_FUNCTION();
-
-  // Returns immediately if current thread holds mu_ in at least shared
-  // mode.  Otherwise, reports an error by crashing with a diagnostic.
-  void AssertReaderHeld() const ABSL_ASSERT_SHARED_LOCK();
-
- private:
-  absl::Mutex mu_;
-};
-
-// A Notification allows threads to receive notification of a single occurrence
-// of a single event.
-class QUICHE_EXPORT QuicheNotificationImpl {
- public:
-  QuicheNotificationImpl() = default;
-  QuicheNotificationImpl(const QuicheNotificationImpl&) = delete;
-  QuicheNotificationImpl& operator=(const QuicheNotificationImpl&) = delete;
-
-  bool HasBeenNotified() { return notification_.HasBeenNotified(); }
-
-  void Notify() { notification_.Notify(); }
-
-  void WaitForNotification() { notification_.WaitForNotification(); }
-
- private:
-  absl::Notification notification_;
-};
-
-}  // namespace quiche
-
-#endif  // QUICHE_COMMON_PLATFORM_DEFAULT_QUICHE_PLATFORM_IMPL_QUICHE_MUTEX_IMPL_H_
diff --git a/quiche/quic/core/crypto/crypto_secret_boxer.cc b/quiche/quic/core/crypto/crypto_secret_boxer.cc
index b51ce6b..e133a7f 100644
--- a/quiche/quic/core/crypto/crypto_secret_boxer.cc
+++ b/quiche/quic/core/crypto/crypto_secret_boxer.cc
@@ -11,11 +11,11 @@
 #include <vector>
 
 #include "absl/strings/string_view.h"
+#include "absl/synchronization/mutex.h"
 #include "openssl/aead.h"
 #include "openssl/err.h"
 #include "quiche/quic/core/crypto/quic_random.h"
 #include "quiche/quic/platform/api/quic_logging.h"
-#include "quiche/common/platform/api/quiche_mutex.h"
 
 namespace quic {
 
@@ -68,7 +68,7 @@
     new_state->ctxs.push_back(std::move(ctx));
   }
 
-  quiche::QuicheWriterMutexLock l(&lock_);
+  absl::WriterMutexLock l(&lock_);
   state_ = std::move(new_state);
   return true;
 }
@@ -95,7 +95,7 @@
 
   size_t bytes_written;
   {
-    quiche::QuicheReaderMutexLock l(&lock_);
+    absl::ReaderMutexLock l(&lock_);
     if (!EVP_AEAD_CTX_seal(state_->ctxs[0].get(), out, &bytes_written, out_len,
                            nonce, kSIVNonceSize,
                            reinterpret_cast<const uint8_t*>(plaintext.data()),
@@ -126,7 +126,7 @@
 
   bool ok = false;
   {
-    quiche::QuicheReaderMutexLock l(&lock_);
+    absl::ReaderMutexLock l(&lock_);
     for (const bssl::UniquePtr<EVP_AEAD_CTX>& ctx : state_->ctxs) {
       size_t bytes_written;
       if (EVP_AEAD_CTX_open(ctx.get(),
diff --git a/quiche/quic/core/crypto/crypto_secret_boxer.h b/quiche/quic/core/crypto/crypto_secret_boxer.h
index 5b76891..e3c9119 100644
--- a/quiche/quic/core/crypto/crypto_secret_boxer.h
+++ b/quiche/quic/core/crypto/crypto_secret_boxer.h
@@ -10,10 +10,11 @@
 #include <string>
 #include <vector>
 
+#include "absl/base/thread_annotations.h"
 #include "absl/strings/string_view.h"
+#include "absl/synchronization/mutex.h"
 #include "quiche/quic/core/crypto/quic_random.h"
 #include "quiche/quic/platform/api/quic_export.h"
-#include "quiche/common/platform/api/quiche_mutex.h"
 
 namespace quic {
 
@@ -55,11 +56,11 @@
  private:
   struct State;
 
-  mutable quiche::QuicheMutex lock_;
+  mutable absl::Mutex lock_;
 
   // state_ is an opaque pointer to whatever additional state the concrete
   // implementation of CryptoSecretBoxer requires.
-  std::unique_ptr<State> state_ QUICHE_GUARDED_BY(lock_);
+  std::unique_ptr<State> state_ ABSL_GUARDED_BY(lock_);
 };
 
 }  // namespace quic
diff --git a/quiche/quic/core/crypto/quic_crypto_server_config.cc b/quiche/quic/core/crypto/quic_crypto_server_config.cc
index 6c8d52b..fa85ce1 100644
--- a/quiche/quic/core/crypto/quic_crypto_server_config.cc
+++ b/quiche/quic/core/crypto/quic_crypto_server_config.cc
@@ -438,7 +438,7 @@
   }
 
   {
-    quiche::QuicheWriterMutexLock locked(&configs_lock_);
+    absl::WriterMutexLock locked(&configs_lock_);
     if (configs_.find(config->id) != configs_.end()) {
       QUIC_LOG(WARNING) << "Failed to add config because another with the same "
                            "server config id already exists: "
@@ -501,7 +501,7 @@
 
   QUIC_LOG(INFO) << "Updating configs:";
 
-  quiche::QuicheWriterMutexLock locked(&configs_lock_);
+  absl::WriterMutexLock locked(&configs_lock_);
   ConfigMap new_configs;
 
   for (const quiche::QuicheReferenceCountedPointer<Config>& config :
@@ -552,7 +552,7 @@
 }
 
 std::vector<std::string> QuicCryptoServerConfig::GetConfigIds() const {
-  quiche::QuicheReaderMutexLock locked(&configs_lock_);
+  absl::ReaderMutexLock locked(&configs_lock_);
   std::vector<std::string> scids;
   for (auto it = configs_.begin(); it != configs_.end(); ++it) {
     scids.push_back(it->first);
@@ -1123,7 +1123,7 @@
     const QuicWallTime& now, absl::string_view requested_scid,
     quiche::QuicheReferenceCountedPointer<Config> old_primary_config,
     Configs* configs) const {
-  quiche::QuicheReaderMutexLock locked(&configs_lock_);
+  absl::ReaderMutexLock locked(&configs_lock_);
 
   if (!primary_config_) {
     return false;
@@ -1359,7 +1359,7 @@
   std::string serialized;
   std::string source_address_token;
   {
-    quiche::QuicheReaderMutexLock locked(&configs_lock_);
+    absl::ReaderMutexLock locked(&configs_lock_);
     serialized = primary_config_->serialized;
     source_address_token = NewSourceAddressToken(
         *primary_config_->source_address_token_boxer,
@@ -1717,7 +1717,7 @@
 
 void QuicCryptoServerConfig::AcquirePrimaryConfigChangedCb(
     std::unique_ptr<PrimaryConfigChangedCallback> cb) {
-  quiche::QuicheWriterMutexLock locked(&configs_lock_);
+  absl::WriterMutexLock locked(&configs_lock_);
   primary_config_changed_cb_ = std::move(cb);
 }
 
@@ -1758,7 +1758,7 @@
 }
 
 int QuicCryptoServerConfig::NumberOfConfigs() const {
-  quiche::QuicheReaderMutexLock locked(&configs_lock_);
+  absl::ReaderMutexLock locked(&configs_lock_);
   return configs_.size();
 }
 
diff --git a/quiche/quic/core/crypto/quic_crypto_server_config.h b/quiche/quic/core/crypto/quic_crypto_server_config.h
index 30875a6..1692cea 100644
--- a/quiche/quic/core/crypto/quic_crypto_server_config.h
+++ b/quiche/quic/core/crypto/quic_crypto_server_config.h
@@ -12,7 +12,9 @@
 #include <string>
 #include <vector>
 
+#include "absl/base/thread_annotations.h"
 #include "absl/strings/string_view.h"
+#include "absl/synchronization/mutex.h"
 #include "openssl/base.h"
 #include "quiche/quic/core/crypto/crypto_handshake.h"
 #include "quiche/quic/core/crypto/crypto_handshake_message.h"
@@ -28,7 +30,6 @@
 #include "quiche/quic/core/quic_time.h"
 #include "quiche/quic/platform/api/quic_export.h"
 #include "quiche/quic/platform/api/quic_socket_address.h"
-#include "quiche/common/platform/api/quiche_mutex.h"
 #include "quiche/common/platform/api/quiche_reference_counted.h"
 
 namespace quic {
@@ -539,7 +540,7 @@
   // Get a ref to the config with a given server config id.
   quiche::QuicheReferenceCountedPointer<Config> GetConfigWithScid(
       absl::string_view requested_scid) const
-      QUICHE_SHARED_LOCKS_REQUIRED(configs_lock_);
+      ABSL_SHARED_LOCKS_REQUIRED(configs_lock_);
 
   // A snapshot of the configs associated with an in-progress handshake.
   struct QUICHE_EXPORT Configs {
@@ -568,7 +569,7 @@
   // SelectNewPrimaryConfig reevaluates the primary config based on the
   // "primary_time" deadlines contained in each.
   void SelectNewPrimaryConfig(QuicWallTime now) const
-      QUICHE_EXCLUSIVE_LOCKS_REQUIRED(configs_lock_);
+      ABSL_EXCLUSIVE_LOCKS_REQUIRED(configs_lock_);
 
   // EvaluateClientHello checks |client_hello_state->client_hello| for gross
   // errors and determines whether it is fresh (i.e. not a replay). The results
@@ -843,7 +844,7 @@
 
   // Returns true if the next config promotion should happen now.
   bool IsNextConfigReady(QuicWallTime now) const
-      QUICHE_SHARED_LOCKS_REQUIRED(configs_lock_);
+      ABSL_SHARED_LOCKS_REQUIRED(configs_lock_);
 
   // replay_protection_ controls whether the server enforces that handshakes
   // aren't replays.
@@ -858,16 +859,16 @@
   //   1) configs_.empty() <-> primary_config_ == nullptr
   //   2) primary_config_ != nullptr -> primary_config_->is_primary
   //   3) ∀ c∈configs_, c->is_primary <-> c == primary_config_
-  mutable quiche::QuicheMutex configs_lock_;
+  mutable absl::Mutex configs_lock_;
 
   // configs_ contains all active server configs. It's expected that there are
   // about half-a-dozen configs active at any one time.
-  ConfigMap configs_ QUICHE_GUARDED_BY(configs_lock_);
+  ConfigMap configs_ ABSL_GUARDED_BY(configs_lock_);
 
   // primary_config_ points to a Config (which is also in |configs_|) which is
   // the primary config - i.e. the one that we'll give out to new clients.
   mutable quiche::QuicheReferenceCountedPointer<Config> primary_config_
-      QUICHE_GUARDED_BY(configs_lock_);
+      ABSL_GUARDED_BY(configs_lock_);
 
   // fallback_config_ points to a Config (which is also in |configs_|) which is
   // the fallback config, which will be used if the other configs are unuseable
@@ -875,16 +876,16 @@
   //
   // TODO(b/112548056): This is currently always nullptr.
   quiche::QuicheReferenceCountedPointer<Config> fallback_config_
-      QUICHE_GUARDED_BY(configs_lock_);
+      ABSL_GUARDED_BY(configs_lock_);
 
   // next_config_promotion_time_ contains the nearest, future time when an
   // active config will be promoted to primary.
   mutable QuicWallTime next_config_promotion_time_
-      QUICHE_GUARDED_BY(configs_lock_);
+      ABSL_GUARDED_BY(configs_lock_);
 
   // Callback to invoke when the primary config changes.
   std::unique_ptr<PrimaryConfigChangedCallback> primary_config_changed_cb_
-      QUICHE_GUARDED_BY(configs_lock_);
+      ABSL_GUARDED_BY(configs_lock_);
 
   // Used to protect the source-address tokens that are given to clients.
   CryptoSecretBoxer source_address_token_boxer_;
diff --git a/quiche/quic/core/http/end_to_end_test.cc b/quiche/quic/core/http/end_to_end_test.cc
index 05715e8..2ee4d33 100644
--- a/quiche/quic/core/http/end_to_end_test.cc
+++ b/quiche/quic/core/http/end_to_end_test.cc
@@ -16,6 +16,7 @@
 
 #include "absl/strings/str_cat.h"
 #include "absl/strings/string_view.h"
+#include "absl/synchronization/notification.h"
 #include "absl/time/clock.h"
 #include "absl/time/time.h"
 #include "absl/types/span.h"
@@ -7742,7 +7743,7 @@
   ASSERT_TRUE(Initialize());
 
   const uint32_t server_flow_label = 2;
-  quiche::QuicheNotification set;
+  absl::Notification set;
   server_thread_->Schedule([this, &set]() {
     QuicConnection* server_connection = GetServerConnection();
     if (server_connection != nullptr) {
diff --git a/quiche/quic/core/io/event_loop_connecting_client_socket_test.cc b/quiche/quic/core/io/event_loop_connecting_client_socket_test.cc
index f195d9d..f5583b5 100644
--- a/quiche/quic/core/io/event_loop_connecting_client_socket_test.cc
+++ b/quiche/quic/core/io/event_loop_connecting_client_socket_test.cc
@@ -15,6 +15,7 @@
 #include "absl/status/statusor.h"
 #include "absl/strings/str_cat.h"
 #include "absl/strings/string_view.h"
+#include "absl/synchronization/notification.h"
 #include "absl/types/span.h"
 #include "quiche/quic/core/connecting_client_socket.h"
 #include "quiche/quic/core/io/event_loop_socket_factory.h"
@@ -28,7 +29,6 @@
 #include "quiche/quic/test_tools/quic_test_utils.h"
 #include "quiche/common/platform/api/quiche_logging.h"
 #include "quiche/common/platform/api/quiche_mem_slice.h"
-#include "quiche/common/platform/api/quiche_mutex.h"
 #include "quiche/common/platform/api/quiche_test.h"
 #include "quiche/common/platform/api/quiche_test_loopback.h"
 #include "quiche/common/platform/api/quiche_thread.h"
@@ -63,7 +63,7 @@
 
   const SocketBehavior& behavior() const { return behavior_; }
 
-  quiche::QuicheNotification& completion_notification() {
+  absl::Notification& completion_notification() {
     return completion_notification_;
   }
 
@@ -71,7 +71,7 @@
   const SocketFd server_socket_descriptor_;
   const SocketBehavior behavior_;
 
-  quiche::QuicheNotification completion_notification_;
+  absl::Notification completion_notification_;
 };
 
 class TestTcpServerSocketRunner : public TestServerSocketRunner {
diff --git a/quiche/quic/platform/api/quic_mutex.h b/quiche/quic/platform/api/quic_mutex.h
deleted file mode 100644
index ac42b5a..0000000
--- a/quiche/quic/platform/api/quic_mutex.h
+++ /dev/null
@@ -1,29 +0,0 @@
-// Copyright (c) 2016 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// TODO(b/178613777): Remove this file.
-
-#ifndef QUICHE_QUIC_PLATFORM_API_QUIC_MUTEX_H_
-#define QUICHE_QUIC_PLATFORM_API_QUIC_MUTEX_H_
-
-#include "quiche/common/platform/api/quiche_mutex.h"
-
-#define QUIC_EXCLUSIVE_LOCKS_REQUIRED QUICHE_EXCLUSIVE_LOCKS_REQUIRED
-#define QUIC_LOCKABLE QUICHE_LOCKABLE
-#define QUIC_LOCKS_EXCLUDED QUICHE_LOCKS_EXCLUDED
-#define QUIC_EXCLUSIVE_LOCK_FUNCTION QUICHE_EXCLUSIVE_LOCK_FUNCTION
-#define QUIC_UNLOCK_FUNCTION QUICHE_UNLOCK_FUNCTION
-#define QUIC_SHARED_LOCK_FUNCTION QUICHE_SHARED_LOCK_FUNCTION
-#define QUIC_SCOPED_LOCKABLE QUICHE_SCOPED_LOCKABLE
-#define QUIC_ASSERT_SHARED_LOCK QUICHE_ASSERT_SHARED_LOCK
-
-namespace quic {
-
-using QuicMutex = quiche::QuicheMutex;
-using QuicWriterMutexLock = quiche::QuicheWriterMutexLock;
-using QuicNotification = quiche::QuicheNotification;
-
-}  // namespace quic
-
-#endif  // QUICHE_QUIC_PLATFORM_API_QUIC_MUTEX_H_
diff --git a/quiche/quic/qbone/bonnet/icmp_reachable.cc b/quiche/quic/qbone/bonnet/icmp_reachable.cc
index 54002e4..5b6c212 100644
--- a/quiche/quic/qbone/bonnet/icmp_reachable.cc
+++ b/quiche/quic/qbone/bonnet/icmp_reachable.cc
@@ -103,7 +103,7 @@
   }
   alarm_->Set(clock_->Now());
 
-  quiche::QuicheWriterMutexLock mu(&header_lock_);
+  absl::WriterMutexLock mu(&header_lock_);
   icmp_header_.icmp6_type = ICMP6_ECHO_REQUEST;
   icmp_header_.icmp6_code = 0;
 
@@ -134,7 +134,7 @@
       absl::string_view(buffer, size));
 
   auto* header = reinterpret_cast<const icmp6_hdr*>(&buffer);
-  quiche::QuicheWriterMutexLock mu(&header_lock_);
+  absl::WriterMutexLock mu(&header_lock_);
   if (header->icmp6_data32[0] != icmp_header_.icmp6_data32[0]) {
     QUIC_VLOG(2) << "Unexpected response. id: " << header->icmp6_id
                  << " seq: " << header->icmp6_seq
@@ -159,7 +159,7 @@
 }
 
 void IcmpReachable::OnAlarm() {
-  quiche::QuicheWriterMutexLock mu(&header_lock_);
+  absl::WriterMutexLock mu(&header_lock_);
 
   if (end_ < start_) {
     QUIC_VLOG(1) << "Timed out on sequence: " << icmp_header_.icmp6_seq;
diff --git a/quiche/quic/qbone/bonnet/icmp_reachable.h b/quiche/quic/qbone/bonnet/icmp_reachable.h
index d706c9b..89e15aa 100644
--- a/quiche/quic/qbone/bonnet/icmp_reachable.h
+++ b/quiche/quic/qbone/bonnet/icmp_reachable.h
@@ -9,7 +9,9 @@
 
 #include <memory>
 
+#include "absl/base/thread_annotations.h"
 #include "absl/strings/string_view.h"
+#include "absl/synchronization/mutex.h"
 #include "quiche/quic/core/io/quic_event_loop.h"
 #include "quiche/quic/core/quic_alarm.h"
 #include "quiche/quic/core/quic_alarm_factory.h"
@@ -18,7 +20,6 @@
 #include "quiche/quic/platform/api/quic_ip_address.h"
 #include "quiche/quic/qbone/bonnet/icmp_reachable_interface.h"
 #include "quiche/quic/qbone/platform/kernel_interface.h"
-#include "quiche/common/platform/api/quiche_mutex.h"
 
 namespace quic {
 
@@ -79,9 +80,9 @@
 
   // Initializes this reachability probe. Must be called from within the
   // |epoll_server|'s thread.
-  bool Init() QUICHE_LOCKS_EXCLUDED(header_lock_) override;
+  bool Init() ABSL_LOCKS_EXCLUDED(header_lock_) override;
 
-  void OnAlarm() QUICHE_LOCKS_EXCLUDED(header_lock_);
+  void OnAlarm() ABSL_LOCKS_EXCLUDED(header_lock_);
 
   static absl::string_view StatusName(Status status);
 
@@ -113,7 +114,7 @@
     IcmpReachable* reachable_;
   };
 
-  bool OnEvent(int fd) QUICHE_LOCKS_EXCLUDED(header_lock_);
+  bool OnEvent(int fd) ABSL_LOCKS_EXCLUDED(header_lock_);
 
   const QuicTime::Delta timeout_;
 
@@ -134,8 +135,8 @@
   int send_fd_;
   int recv_fd_;
 
-  quiche::QuicheMutex header_lock_;
-  icmp6_hdr icmp_header_ QUICHE_GUARDED_BY(header_lock_){};
+  absl::Mutex header_lock_;
+  icmp6_hdr icmp_header_ ABSL_GUARDED_BY(header_lock_){};
 
   QuicTime start_ = QuicTime::Zero();
   QuicTime end_ = QuicTime::Zero();
diff --git a/quiche/quic/qbone/qbone_client_test.cc b/quiche/quic/qbone/qbone_client_test.cc
index d7ea860..d986477 100644
--- a/quiche/quic/qbone/qbone_client_test.cc
+++ b/quiche/quic/qbone/qbone_client_test.cc
@@ -12,6 +12,7 @@
 #include <vector>
 
 #include "absl/strings/string_view.h"
+#include "absl/synchronization/mutex.h"
 #include "quiche/quic/core/io/quic_default_event_loop.h"
 #include "quiche/quic/core/io/quic_event_loop.h"
 #include "quiche/quic/core/quic_alarm_factory.h"
@@ -57,17 +58,17 @@
 class DataSavingQbonePacketWriter : public QbonePacketWriter {
  public:
   void WritePacketToNetwork(const char* packet, size_t size) override {
-    quiche::QuicheWriterMutexLock lock(&mu_);
+    absl::WriterMutexLock lock(&mu_);
     data_.push_back(std::string(packet, size));
   }
 
   std::vector<std::string> data() {
-    quiche::QuicheWriterMutexLock lock(&mu_);
+    absl::WriterMutexLock lock(&mu_);
     return data_;
   }
 
  private:
-  quiche::QuicheMutex mu_;
+  absl::Mutex mu_;
   std::vector<std::string> data_;
 };
 
diff --git a/quiche/quic/test_tools/packet_dropping_test_writer.cc b/quiche/quic/test_tools/packet_dropping_test_writer.cc
index a16cda7..5912910 100644
--- a/quiche/quic/test_tools/packet_dropping_test_writer.cc
+++ b/quiche/quic/test_tools/packet_dropping_test_writer.cc
@@ -97,7 +97,7 @@
   ++num_calls_to_write_;
   ReleaseOldPackets();
 
-  quiche::QuicheWriterMutexLock lock(&config_mutex_);
+  absl::WriterMutexLock lock(&config_mutex_);
   if (passthrough_for_next_n_packets_ > 0) {
     --passthrough_for_next_n_packets_;
     return QuicPacketWriterWrapper::WritePacket(buffer, buf_len, self_address,
@@ -201,7 +201,7 @@
   if (delayed_packets_.empty()) {
     return QuicTime::Zero();
   }
-  quiche::QuicheReaderMutexLock lock(&config_mutex_);
+  absl::ReaderMutexLock lock(&config_mutex_);
   auto iter = delayed_packets_.begin();
   // Determine if we should re-order.
   if (delayed_packets_.size() > 1 && fake_packet_reorder_percentage_ > 0 &&
diff --git a/quiche/quic/test_tools/packet_dropping_test_writer.h b/quiche/quic/test_tools/packet_dropping_test_writer.h
index 84bfcfa..6a72795 100644
--- a/quiche/quic/test_tools/packet_dropping_test_writer.h
+++ b/quiche/quic/test_tools/packet_dropping_test_writer.h
@@ -10,13 +10,14 @@
 #include <memory>
 
 #include "absl/base/attributes.h"
+#include "absl/base/thread_annotations.h"
+#include "absl/synchronization/mutex.h"
 #include "quiche/quic/core/quic_alarm.h"
 #include "quiche/quic/core/quic_alarm_factory.h"
 #include "quiche/quic/core/quic_clock.h"
 #include "quiche/quic/core/quic_connection.h"
 #include "quiche/quic/core/quic_packet_writer_wrapper.h"
 #include "quiche/quic/test_tools/quic_test_utils.h"
-#include "quiche/common/platform/api/quiche_mutex.h"
 
 namespace quic {
 namespace test {
@@ -80,7 +81,7 @@
   // |fake_packet_loss_percentage|, because every dropped package is followed by
   // a minimum number of successfully written packets.
   void set_fake_packet_loss_percentage(int32_t fake_packet_loss_percentage) {
-    quiche::QuicheWriterMutexLock lock(&config_mutex_);
+    absl::WriterMutexLock lock(&config_mutex_);
     fake_packet_loss_percentage_ = fake_packet_loss_percentage;
   }
 
@@ -89,14 +90,14 @@
   // simulated error conditions.
   void set_passthrough_for_next_n_packets(
       uint32_t passthrough_for_next_n_packets) {
-    quiche::QuicheWriterMutexLock lock(&config_mutex_);
+    absl::WriterMutexLock lock(&config_mutex_);
     passthrough_for_next_n_packets_ = passthrough_for_next_n_packets;
   }
 
   // Simulate dropping the first n packets unconditionally.
   // Subsequent packets will be lost at fake_packet_loss_percentage_ if set.
   void set_fake_drop_first_n_packets(int32_t fake_drop_first_n_packets) {
-    quiche::QuicheWriterMutexLock lock(&config_mutex_);
+    absl::WriterMutexLock lock(&config_mutex_);
     fake_drop_first_n_packets_ = fake_drop_first_n_packets;
   }
 
@@ -105,14 +106,14 @@
   void set_fake_blocked_socket_percentage(
       int32_t fake_blocked_socket_percentage) {
     QUICHE_DCHECK(clock_);
-    quiche::QuicheWriterMutexLock lock(&config_mutex_);
+    absl::WriterMutexLock lock(&config_mutex_);
     fake_blocked_socket_percentage_ = fake_blocked_socket_percentage;
   }
 
   // The percent of time a packet is simulated as being reordered.
   void set_fake_reorder_percentage(int32_t fake_packet_reorder_percentage) {
     QUICHE_DCHECK(clock_);
-    quiche::QuicheWriterMutexLock lock(&config_mutex_);
+    absl::WriterMutexLock lock(&config_mutex_);
     QUICHE_DCHECK(!fake_packet_delay_.IsZero());
     fake_packet_reorder_percentage_ = fake_packet_reorder_percentage;
   }
@@ -120,7 +121,7 @@
   // The delay before writing this packet.
   void set_fake_packet_delay(QuicTime::Delta fake_packet_delay) {
     QUICHE_DCHECK(clock_);
-    quiche::QuicheWriterMutexLock lock(&config_mutex_);
+    absl::WriterMutexLock lock(&config_mutex_);
     fake_packet_delay_ = fake_packet_delay;
   }
 
@@ -131,7 +132,7 @@
   void set_max_bandwidth_and_buffer_size(QuicBandwidth fake_bandwidth,
                                          QuicByteCount buffer_size) {
     QUICHE_DCHECK(clock_);
-    quiche::QuicheWriterMutexLock lock(&config_mutex_);
+    absl::WriterMutexLock lock(&config_mutex_);
     fake_bandwidth_ = fake_bandwidth;
     buffer_size_ = buffer_size;
   }
@@ -179,17 +180,17 @@
   DelayedPacketList delayed_packets_;
   QuicByteCount cur_buffer_size_;
   uint64_t num_calls_to_write_;
-  uint32_t passthrough_for_next_n_packets_ QUICHE_GUARDED_BY(config_mutex_);
+  uint32_t passthrough_for_next_n_packets_ ABSL_GUARDED_BY(config_mutex_);
   int32_t num_consecutive_succesful_writes_;
 
-  quiche::QuicheMutex config_mutex_;
-  int32_t fake_packet_loss_percentage_ QUICHE_GUARDED_BY(config_mutex_);
-  int32_t fake_drop_first_n_packets_ QUICHE_GUARDED_BY(config_mutex_);
-  int32_t fake_blocked_socket_percentage_ QUICHE_GUARDED_BY(config_mutex_);
-  int32_t fake_packet_reorder_percentage_ QUICHE_GUARDED_BY(config_mutex_);
-  QuicTime::Delta fake_packet_delay_ QUICHE_GUARDED_BY(config_mutex_);
-  QuicBandwidth fake_bandwidth_ QUICHE_GUARDED_BY(config_mutex_);
-  QuicByteCount buffer_size_ QUICHE_GUARDED_BY(config_mutex_);
+  absl::Mutex config_mutex_;
+  int32_t fake_packet_loss_percentage_ ABSL_GUARDED_BY(config_mutex_);
+  int32_t fake_drop_first_n_packets_ ABSL_GUARDED_BY(config_mutex_);
+  int32_t fake_blocked_socket_percentage_ ABSL_GUARDED_BY(config_mutex_);
+  int32_t fake_packet_reorder_percentage_ ABSL_GUARDED_BY(config_mutex_);
+  QuicTime::Delta fake_packet_delay_ ABSL_GUARDED_BY(config_mutex_);
+  QuicBandwidth fake_bandwidth_ ABSL_GUARDED_BY(config_mutex_);
+  QuicByteCount buffer_size_ ABSL_GUARDED_BY(config_mutex_);
 };
 
 }  // namespace test
diff --git a/quiche/quic/test_tools/quic_crypto_server_config_peer.cc b/quiche/quic/test_tools/quic_crypto_server_config_peer.cc
index b8a6280..7179ca4 100644
--- a/quiche/quic/test_tools/quic_crypto_server_config_peer.cc
+++ b/quiche/quic/test_tools/quic_crypto_server_config_peer.cc
@@ -19,14 +19,14 @@
 
 quiche::QuicheReferenceCountedPointer<QuicCryptoServerConfig::Config>
 QuicCryptoServerConfigPeer::GetPrimaryConfig() {
-  quiche::QuicheReaderMutexLock locked(&server_config_->configs_lock_);
+  absl::ReaderMutexLock locked(&server_config_->configs_lock_);
   return quiche::QuicheReferenceCountedPointer<QuicCryptoServerConfig::Config>(
       server_config_->primary_config_);
 }
 
 quiche::QuicheReferenceCountedPointer<QuicCryptoServerConfig::Config>
 QuicCryptoServerConfigPeer::GetConfig(std::string config_id) {
-  quiche::QuicheReaderMutexLock locked(&server_config_->configs_lock_);
+  absl::ReaderMutexLock locked(&server_config_->configs_lock_);
   if (config_id == "<primary>") {
     return quiche::QuicheReferenceCountedPointer<
         QuicCryptoServerConfig::Config>(server_config_->primary_config_);
@@ -83,7 +83,7 @@
 
 void QuicCryptoServerConfigPeer::CheckConfigs(
     std::vector<std::pair<std::string, bool>> expected_ids_and_status) {
-  quiche::QuicheReaderMutexLock locked(&server_config_->configs_lock_);
+  absl::ReaderMutexLock locked(&server_config_->configs_lock_);
 
   ASSERT_EQ(expected_ids_and_status.size(), server_config_->configs_.size())
       << ConfigsDebug();
@@ -132,7 +132,7 @@
 }
 
 void QuicCryptoServerConfigPeer::SelectNewPrimaryConfig(int seconds) {
-  quiche::QuicheWriterMutexLock locked(&server_config_->configs_lock_);
+  absl::WriterMutexLock locked(&server_config_->configs_lock_);
   server_config_->SelectNewPrimaryConfig(
       QuicWallTime::FromUNIXSeconds(seconds));
 }
diff --git a/quiche/quic/test_tools/quic_crypto_server_config_peer.h b/quiche/quic/test_tools/quic_crypto_server_config_peer.h
index fe9f32c..477b0a6 100644
--- a/quiche/quic/test_tools/quic_crypto_server_config_peer.h
+++ b/quiche/quic/test_tools/quic_crypto_server_config_peer.h
@@ -5,6 +5,7 @@
 #ifndef QUICHE_QUIC_TEST_TOOLS_QUIC_CRYPTO_SERVER_CONFIG_PEER_H_
 #define QUICHE_QUIC_TEST_TOOLS_QUIC_CRYPTO_SERVER_CONFIG_PEER_H_
 
+#include "absl/base/thread_annotations.h"
 #include "absl/strings/string_view.h"
 #include "quiche/quic/core/crypto/quic_crypto_server_config.h"
 
@@ -65,7 +66,7 @@
   // ConfigsDebug returns a std::string that contains debugging information
   // about the set of Configs loaded in |server_config_| and their status.
   std::string ConfigsDebug()
-      QUICHE_SHARED_LOCKS_REQUIRED(server_config_->configs_lock_);
+      ABSL_SHARED_LOCKS_REQUIRED(server_config_->configs_lock_);
 
   void SelectNewPrimaryConfig(int seconds);
 
diff --git a/quiche/quic/test_tools/quic_test_server.cc b/quiche/quic/test_tools/quic_test_server.cc
index 9ef1368..09795f7 100644
--- a/quiche/quic/test_tools/quic_test_server.cc
+++ b/quiche/quic/test_tools/quic_test_server.cc
@@ -9,6 +9,7 @@
 
 #include "absl/memory/memory.h"
 #include "absl/strings/string_view.h"
+#include "absl/synchronization/mutex.h"
 #include "quiche/quic/core/connection_id_generator.h"
 #include "quiche/quic/core/io/quic_default_event_loop.h"
 #include "quiche/quic/core/quic_default_connection_helper.h"
@@ -94,7 +95,7 @@
       const ParsedQuicVersion& version,
       const ParsedClientHello& /*parsed_chlo*/,
       ConnectionIdGeneratorInterface& connection_id_generator) override {
-    quiche::QuicheReaderMutexLock lock(&factory_lock_);
+    absl::ReaderMutexLock lock(&factory_lock_);
     // The QuicServerSessionBase takes ownership of |connection| below.
     QuicConnection* connection = new QuicConnection(
         id, self_address, peer_address, helper(), alarm_factory(), writer(),
@@ -130,7 +131,7 @@
   }
 
   void SetSessionFactory(QuicTestServer::SessionFactory* factory) {
-    quiche::QuicheWriterMutexLock lock(&factory_lock_);
+    absl::WriterMutexLock lock(&factory_lock_);
     QUICHE_DCHECK(session_factory_ == nullptr);
     QUICHE_DCHECK(stream_factory_ == nullptr);
     QUICHE_DCHECK(crypto_stream_factory_ == nullptr);
@@ -138,21 +139,21 @@
   }
 
   void SetStreamFactory(QuicTestServer::StreamFactory* factory) {
-    quiche::QuicheWriterMutexLock lock(&factory_lock_);
+    absl::WriterMutexLock lock(&factory_lock_);
     QUICHE_DCHECK(session_factory_ == nullptr);
     QUICHE_DCHECK(stream_factory_ == nullptr);
     stream_factory_ = factory;
   }
 
   void SetCryptoStreamFactory(QuicTestServer::CryptoStreamFactory* factory) {
-    quiche::QuicheWriterMutexLock lock(&factory_lock_);
+    absl::WriterMutexLock lock(&factory_lock_);
     QUICHE_DCHECK(session_factory_ == nullptr);
     QUICHE_DCHECK(crypto_stream_factory_ == nullptr);
     crypto_stream_factory_ = factory;
   }
 
  private:
-  quiche::QuicheMutex factory_lock_;
+  absl::Mutex factory_lock_;
   QuicTestServer::SessionFactory* session_factory_;             // Not owned.
   QuicTestServer::StreamFactory* stream_factory_;               // Not owned.
   QuicTestServer::CryptoStreamFactory* crypto_stream_factory_;  // Not owned.
diff --git a/quiche/quic/test_tools/quic_test_utils.h b/quiche/quic/test_tools/quic_test_utils.h
index f2fe5a5..90d9be4 100644
--- a/quiche/quic/test_tools/quic_test_utils.h
+++ b/quiche/quic/test_tools/quic_test_utils.h
@@ -17,6 +17,7 @@
 #include "absl/strings/ascii.h"
 #include "absl/strings/str_cat.h"
 #include "absl/strings/string_view.h"
+#include "absl/synchronization/mutex.h"
 #include "quiche/quic/core/congestion_control/loss_detection_interface.h"
 #include "quiche/quic/core/congestion_control/send_algorithm_interface.h"
 #include "quiche/quic/core/crypto/transport_parameters.h"
@@ -2082,7 +2083,7 @@
                           const QuicSocketAddress& peer_address,
                           PerPacketOptions* options,
                           const QuicPacketWriterParams& params) override {
-    quiche::QuicheReaderMutexLock lock(&mutex_);
+    absl::ReaderMutexLock lock(&mutex_);
     QUIC_LOG(ERROR) << "DroppingPacketsWithSpecificDestinationWriter::"
                        "WritePacket with peer address "
                     << peer_address.ToString() << " and peer_address_to_drop_ "
@@ -2098,12 +2099,12 @@
   }
 
   void set_peer_address_to_drop(const QuicSocketAddress& peer_address) {
-    quiche::QuicheWriterMutexLock lock(&mutex_);
+    absl::WriterMutexLock lock(&mutex_);
     peer_address_to_drop_ = peer_address;
   }
 
  private:
-  quiche::QuicheMutex mutex_;
+  absl::Mutex mutex_;
   QuicSocketAddress peer_address_to_drop_ ABSL_GUARDED_BY(mutex_);
 };
 
diff --git a/quiche/quic/test_tools/server_thread.cc b/quiche/quic/test_tools/server_thread.cc
index dfa1098..c80bff8 100644
--- a/quiche/quic/test_tools/server_thread.cc
+++ b/quiche/quic/test_tools/server_thread.cc
@@ -7,12 +7,13 @@
 #include <memory>
 #include <utility>
 
+#include "absl/synchronization/mutex.h"
+#include "absl/synchronization/notification.h"
 #include "quiche/quic/core/quic_default_clock.h"
 #include "quiche/quic/core/quic_dispatcher.h"
 #include "quiche/quic/test_tools/crypto_test_utils.h"
 #include "quiche/quic/test_tools/quic_dispatcher_peer.h"
 #include "quiche/quic/test_tools/quic_server_peer.h"
-#include "quiche/common/platform/api/quiche_mutex.h"
 #include "quiche/common/quiche_callbacks.h"
 
 namespace quic {
@@ -37,7 +38,7 @@
     return;
   }
 
-  quiche::QuicheWriterMutexLock lock(&port_lock_);
+  absl::WriterMutexLock lock(&port_lock_);
   port_ = server_->port();
 
   initialized_ = true;
@@ -62,20 +63,20 @@
 }
 
 int ServerThread::GetPort() {
-  quiche::QuicheReaderMutexLock lock(&port_lock_);
+  absl::ReaderMutexLock lock(&port_lock_);
   int rc = port_;
   return rc;
 }
 
 void ServerThread::Schedule(quiche::SingleUseCallback<void()> action) {
   QUICHE_DCHECK(!quit_.HasBeenNotified());
-  quiche::QuicheWriterMutexLock lock(&scheduled_actions_lock_);
+  absl::WriterMutexLock lock(&scheduled_actions_lock_);
   scheduled_actions_.push_back(std::move(action));
 }
 
 void ServerThread::ScheduleAndWaitForCompletion(
     quiche::SingleUseCallback<void()> action) {
-  quiche::QuicheNotification action_done;
+  absl::Notification action_done;
   Schedule([&] {
     std::move(action)();
     action_done.Notify();
@@ -92,7 +93,7 @@
     QuicTime::Delta timeout) {
   const QuicTime deadline = clock_->Now() + timeout;
   while (clock_->Now() < deadline) {
-    quiche::QuicheNotification done_checking;
+    absl::Notification done_checking;
     bool should_terminate = false;
     Schedule([&] {
       should_terminate = termination_predicate();
@@ -146,7 +147,7 @@
 void ServerThread::ExecuteScheduledActions() {
   quiche::QuicheCircularDeque<quiche::SingleUseCallback<void()>> actions;
   {
-    quiche::QuicheWriterMutexLock lock(&scheduled_actions_lock_);
+    absl::WriterMutexLock lock(&scheduled_actions_lock_);
     actions.swap(scheduled_actions_);
   }
   while (!actions.empty()) {
diff --git a/quiche/quic/test_tools/server_thread.h b/quiche/quic/test_tools/server_thread.h
index b3d0f8d..3b55dd9 100644
--- a/quiche/quic/test_tools/server_thread.h
+++ b/quiche/quic/test_tools/server_thread.h
@@ -7,11 +7,13 @@
 
 #include <memory>
 
+#include "absl/base/thread_annotations.h"
+#include "absl/synchronization/mutex.h"
+#include "absl/synchronization/notification.h"
 #include "quiche/quic/core/quic_config.h"
 #include "quiche/quic/platform/api/quic_socket_address.h"
 #include "quiche/quic/platform/api/quic_thread.h"
 #include "quiche/quic/tools/quic_server.h"
-#include "quiche/common/platform/api/quiche_mutex.h"
 #include "quiche/common/quiche_callbacks.h"
 
 namespace quic {
@@ -74,25 +76,24 @@
   void MaybeNotifyOfHandshakeConfirmation();
   void ExecuteScheduledActions();
 
-  quiche::QuicheNotification
-      confirmed_;  // Notified when the first handshake is confirmed.
-  quiche::QuicheNotification pause_;   // Notified when the server should pause.
-  quiche::QuicheNotification paused_;  // Notitied when the server has paused
-  quiche::QuicheNotification
-      resume_;                       // Notified when the server should resume.
-  quiche::QuicheNotification quit_;  // Notified when the server should quit.
+  absl::Notification
+      confirmed_;             // Notified when the first handshake is confirmed.
+  absl::Notification pause_;  // Notified when the server should pause.
+  absl::Notification paused_;  // Notitied when the server has paused
+  absl::Notification resume_;  // Notified when the server should resume.
+  absl::Notification quit_;    // Notified when the server should quit.
 
   std::unique_ptr<QuicServer> server_;
   QuicClock* clock_;
   QuicSocketAddress address_;
-  mutable quiche::QuicheMutex port_lock_;
-  int port_ QUICHE_GUARDED_BY(port_lock_);
+  mutable absl::Mutex port_lock_;
+  int port_ ABSL_GUARDED_BY(port_lock_);
 
   bool initialized_;
 
-  quiche::QuicheMutex scheduled_actions_lock_;
+  absl::Mutex scheduled_actions_lock_;
   quiche::QuicheCircularDeque<quiche::SingleUseCallback<void()>>
-      scheduled_actions_ QUICHE_GUARDED_BY(scheduled_actions_lock_);
+      scheduled_actions_ ABSL_GUARDED_BY(scheduled_actions_lock_);
 };
 
 }  // namespace test
diff --git a/quiche/quic/tools/quic_memory_cache_backend.cc b/quiche/quic/tools/quic_memory_cache_backend.cc
index 92c25e0..5290636 100644
--- a/quiche/quic/tools/quic_memory_cache_backend.cc
+++ b/quiche/quic/tools/quic_memory_cache_backend.cc
@@ -14,6 +14,7 @@
 #include "absl/strings/numbers.h"
 #include "absl/strings/str_cat.h"
 #include "absl/strings/string_view.h"
+#include "absl/synchronization/mutex.h"
 #include "quiche/quic/core/http/spdy_utils.h"
 #include "quiche/quic/platform/api/quic_bug_tracker.h"
 #include "quiche/quic/platform/api/quic_logging.h"
@@ -130,7 +131,7 @@
 
 const QuicBackendResponse* QuicMemoryCacheBackend::GetResponse(
     absl::string_view host, absl::string_view path) const {
-  quiche::QuicheWriterMutexLock lock(&response_mutex_);
+  absl::WriterMutexLock lock(&response_mutex_);
 
   auto it = responses_.find(GetKey(host, path));
   if (it == responses_.end()) {
@@ -166,7 +167,7 @@
 }
 
 void QuicMemoryCacheBackend::AddDefaultResponse(QuicBackendResponse* response) {
-  quiche::QuicheWriterMutexLock lock(&response_mutex_);
+  absl::WriterMutexLock lock(&response_mutex_);
   default_response_.reset(response);
 }
 
@@ -193,7 +194,7 @@
 bool QuicMemoryCacheBackend::SetResponseDelay(absl::string_view host,
                                               absl::string_view path,
                                               QuicTime::Delta delay) {
-  quiche::QuicheWriterMutexLock lock(&response_mutex_);
+  absl::WriterMutexLock lock(&response_mutex_);
   auto it = responses_.find(GetKey(host, path));
   if (it == responses_.end()) return false;
 
@@ -271,7 +272,7 @@
 }
 
 void QuicMemoryCacheBackend::GenerateDynamicResponses() {
-  quiche::QuicheWriterMutexLock lock(&response_mutex_);
+  absl::WriterMutexLock lock(&response_mutex_);
   // Add a generate bytes response.
   quiche::HttpHeaderBlock response_headers;
   response_headers[":status"] = "200";
@@ -362,7 +363,7 @@
 
 QuicMemoryCacheBackend::~QuicMemoryCacheBackend() {
   {
-    quiche::QuicheWriterMutexLock lock(&response_mutex_);
+    absl::WriterMutexLock lock(&response_mutex_);
     responses_.clear();
   }
 }
@@ -372,7 +373,7 @@
     SpecialResponseType response_type, HttpHeaderBlock response_headers,
     absl::string_view response_body, HttpHeaderBlock response_trailers,
     const std::vector<quiche::HttpHeaderBlock>& early_hints) {
-  quiche::QuicheWriterMutexLock lock(&response_mutex_);
+  absl::WriterMutexLock lock(&response_mutex_);
 
   QUICHE_DCHECK(!host.empty())
       << "Host must be populated, e.g. \"www.google.com\"";
diff --git a/quiche/quic/tools/quic_memory_cache_backend.h b/quiche/quic/tools/quic_memory_cache_backend.h
index 33c7f8a..409290b 100644
--- a/quiche/quic/tools/quic_memory_cache_backend.h
+++ b/quiche/quic/tools/quic_memory_cache_backend.h
@@ -10,14 +10,15 @@
 #include <memory>
 #include <vector>
 
+#include "absl/base/thread_annotations.h"
 #include "absl/container/flat_hash_map.h"
 #include "absl/strings/string_view.h"
+#include "absl/synchronization/mutex.h"
 #include "quiche/http2/core/spdy_framer.h"
 #include "quiche/quic/core/http/spdy_utils.h"
 #include "quiche/quic/tools/quic_backend_response.h"
 #include "quiche/quic/tools/quic_simple_server_backend.h"
 #include "quiche/common/http/http_header_block.h"
-#include "quiche/common/platform/api/quiche_mutex.h"
 
 namespace quic {
 
@@ -153,19 +154,19 @@
 
   // Cached responses.
   absl::flat_hash_map<std::string, std::unique_ptr<QuicBackendResponse>>
-      responses_ QUICHE_GUARDED_BY(response_mutex_);
+      responses_ ABSL_GUARDED_BY(response_mutex_);
 
   // The default response for cache misses, if set.
   std::unique_ptr<QuicBackendResponse> default_response_
-      QUICHE_GUARDED_BY(response_mutex_);
+      ABSL_GUARDED_BY(response_mutex_);
 
   // The generate bytes response, if set.
   std::unique_ptr<QuicBackendResponse> generate_bytes_response_
-      QUICHE_GUARDED_BY(response_mutex_);
+      ABSL_GUARDED_BY(response_mutex_);
 
   // Protects against concurrent access from test threads setting responses, and
   // server threads accessing those responses.
-  mutable quiche::QuicheMutex response_mutex_;
+  mutable absl::Mutex response_mutex_;
   bool cache_initialized_;
 
   bool enable_webtransport_ = false;