Replace (D)CHECK with QUICHE_(D)CHECK.

PiperOrigin-RevId: 355031711
Change-Id: Icf17b3b806e6040da8d6f6177408de4cfc2a263f
diff --git a/quic/core/batch_writer/quic_batch_writer_base.cc b/quic/core/batch_writer/quic_batch_writer_base.cc
index b1cd520..b2fd80c 100644
--- a/quic/core/batch_writer/quic_batch_writer_base.cc
+++ b/quic/core/batch_writer/quic_batch_writer_base.cc
@@ -141,12 +141,12 @@
 
   // Either flush_result.write_result.status is not WRITE_STATUS_OK, or it is
   // WRITE_STATUS_OK and batch_buffer is empty.
-  DCHECK(flush_result.write_result.status != WRITE_STATUS_OK ||
-         buffered_writes().empty());
+  QUICHE_DCHECK(flush_result.write_result.status != WRITE_STATUS_OK ||
+                buffered_writes().empty());
 
   // Flush should never return WRITE_STATUS_BLOCKED_DATA_BUFFERED.
-  DCHECK(flush_result.write_result.status !=
-         WRITE_STATUS_BLOCKED_DATA_BUFFERED);
+  QUICHE_DCHECK(flush_result.write_result.status !=
+                WRITE_STATUS_BLOCKED_DATA_BUFFERED);
 
   return flush_result;
 }
diff --git a/quic/core/batch_writer/quic_batch_writer_buffer.cc b/quic/core/batch_writer/quic_batch_writer_buffer.cc
index 7e30179..0de792d 100644
--- a/quic/core/batch_writer/quic_batch_writer_buffer.cc
+++ b/quic/core/batch_writer/quic_batch_writer_buffer.cc
@@ -60,8 +60,8 @@
     const QuicSocketAddress& peer_address,
     const PerPacketOptions* options,
     uint64_t release_time) {
-  DCHECK(Invariants());
-  DCHECK_LE(buf_len, kMaxOutgoingPacketSize);
+  QUICHE_DCHECK(Invariants());
+  QUICHE_DCHECK_LE(buf_len, kMaxOutgoingPacketSize);
 
   PushResult result = {/*succeeded=*/false, /*buffer_copied=*/false};
   char* next_write_location = GetNextWriteLocation();
@@ -91,7 +91,7 @@
       options ? options->Clone() : std::unique_ptr<PerPacketOptions>(),
       release_time);
 
-  DCHECK(Invariants());
+  QUICHE_DCHECK(Invariants());
 
   result.succeeded = true;
   return result;
@@ -105,9 +105,10 @@
 
 QuicBatchWriterBuffer::PopResult QuicBatchWriterBuffer::PopBufferedWrite(
     int32_t num_buffered_writes) {
-  DCHECK(Invariants());
-  DCHECK_GE(num_buffered_writes, 0);
-  DCHECK_LE(static_cast<size_t>(num_buffered_writes), buffered_writes_.size());
+  QUICHE_DCHECK(Invariants());
+  QUICHE_DCHECK_GE(num_buffered_writes, 0);
+  QUICHE_DCHECK_LE(static_cast<size_t>(num_buffered_writes),
+                   buffered_writes_.size());
 
   PopResult result = {/*num_buffers_popped=*/0,
                       /*moved_remaining_buffers=*/false};
@@ -135,9 +136,9 @@
       buffered_write.buffer -= distance_to_move;
     }
 
-    DCHECK_EQ(buffer_, buffered_writes_.front().buffer);
+    QUICHE_DCHECK_EQ(buffer_, buffered_writes_.front().buffer);
   }
-  DCHECK(Invariants());
+  QUICHE_DCHECK(Invariants());
 
   return result;
 }
diff --git a/quic/core/batch_writer/quic_gso_batch_writer.cc b/quic/core/batch_writer/quic_gso_batch_writer.cc
index 564fd84..fa26516 100644
--- a/quic/core/batch_writer/quic_gso_batch_writer.cc
+++ b/quic/core/batch_writer/quic_gso_batch_writer.cc
@@ -101,7 +101,7 @@
 
 QuicGsoBatchWriter::ReleaseTime QuicGsoBatchWriter::GetReleaseTime(
     const PerPacketOptions* options) const {
-  DCHECK(SupportsReleaseTime());
+  QUICHE_DCHECK(SupportsReleaseTime());
 
   if (options == nullptr) {
     return {0, QuicTime::Delta::Zero()};
diff --git a/quic/core/batch_writer/quic_sendmmsg_batch_writer.cc b/quic/core/batch_writer/quic_sendmmsg_batch_writer.cc
index eacb611..ec8e4ae 100644
--- a/quic/core/batch_writer/quic_sendmmsg_batch_writer.cc
+++ b/quic/core/batch_writer/quic_sendmmsg_batch_writer.cc
@@ -32,8 +32,8 @@
 QuicSendmmsgBatchWriter::FlushImplResult
 QuicSendmmsgBatchWriter::InternalFlushImpl(size_t cmsg_space,
                                            const CmsgBuilder& cmsg_builder) {
-  DCHECK(!IsWriteBlocked());
-  DCHECK(!buffered_writes().empty());
+  QUICHE_DCHECK(!IsWriteBlocked());
+  QUICHE_DCHECK(!buffered_writes().empty());
 
   FlushImplResult result = {WriteResult(WRITE_STATUS_OK, 0),
                             /*num_packets_sent=*/0, /*bytes_written=*/0};
@@ -52,7 +52,7 @@
                   << " packets. WriteResult=" << write_result;
 
     if (write_result.status != WRITE_STATUS_OK) {
-      DCHECK_EQ(0, num_packets_sent);
+      QUICHE_DCHECK_EQ(0, num_packets_sent);
       break;
     } else if (num_packets_sent == 0) {
       QUIC_BUG << "WriteMultiplePackets returned OK, but no packets were sent.";
diff --git a/quic/core/congestion_control/bbr2_drain.cc b/quic/core/congestion_control/bbr2_drain.cc
index 97fa576..69befb5 100644
--- a/quic/core/congestion_control/bbr2_drain.cc
+++ b/quic/core/congestion_control/bbr2_drain.cc
@@ -18,7 +18,7 @@
   model_->set_pacing_gain(Params().drain_pacing_gain);
 
   // Only STARTUP can transition to DRAIN, both of them use the same cwnd gain.
-  DCHECK_EQ(model_->cwnd_gain(), Params().drain_cwnd_gain);
+  QUICHE_DCHECK_EQ(model_->cwnd_gain(), Params().drain_cwnd_gain);
   model_->set_cwnd_gain(Params().drain_cwnd_gain);
 
   QuicByteCount drain_target = DrainTarget();
diff --git a/quic/core/congestion_control/bbr2_misc.cc b/quic/core/congestion_control/bbr2_misc.cc
index 4413ba3..dfb834c 100644
--- a/quic/core/congestion_control/bbr2_misc.cc
+++ b/quic/core/congestion_control/bbr2_misc.cc
@@ -16,8 +16,8 @@
 RoundTripCounter::RoundTripCounter() : round_trip_count_(0) {}
 
 void RoundTripCounter::OnPacketSent(QuicPacketNumber packet_number) {
-  DCHECK(!last_sent_packet_.IsInitialized() ||
-         last_sent_packet_ < packet_number);
+  QUICHE_DCHECK(!last_sent_packet_.IsInitialized() ||
+                last_sent_packet_ < packet_number);
   last_sent_packet_ = packet_number;
 }
 
@@ -188,7 +188,7 @@
 void Bbr2NetworkModel::AdaptLowerBounds(
     const Bbr2CongestionEvent& congestion_event) {
   if (Params().bw_lo_mode_ != Bbr2Params::DEFAULT) {
-    DCHECK(Params().bw_startup);
+    QUICHE_DCHECK(Params().bw_startup);
     if (congestion_event.bytes_lost == 0) {
       return;
     }
@@ -366,7 +366,7 @@
 }
 
 void Bbr2NetworkModel::OnNewRound() {
-  DCHECK(reset_max_bytes_delivered_);
+  QUICHE_DCHECK(reset_max_bytes_delivered_);
   bytes_lost_in_round_ = 0;
   loss_events_in_round_ = 0;
   max_bytes_delivered_in_round_ = 0;
@@ -389,8 +389,8 @@
 
 Bbr2NetworkModel::BandwidthGrowth Bbr2NetworkModel::CheckBandwidthGrowth(
     const Bbr2CongestionEvent& congestion_event) {
-  DCHECK(!full_bandwidth_reached_);
-  DCHECK(congestion_event.end_of_round_trip);
+  QUICHE_DCHECK(!full_bandwidth_reached_);
+  QUICHE_DCHECK(congestion_event.end_of_round_trip);
   if (congestion_event.last_sample_is_app_limited) {
     return APP_LIMITED;
   }
diff --git a/quic/core/congestion_control/bbr2_probe_bw.cc b/quic/core/congestion_control/bbr2_probe_bw.cc
index 031e5a1..78bd06d 100644
--- a/quic/core/congestion_control/bbr2_probe_bw.cc
+++ b/quic/core/congestion_control/bbr2_probe_bw.cc
@@ -24,8 +24,8 @@
   } else {
     // Transitioning from PROBE_RTT to PROBE_BW. Re-enter the last phase before
     // PROBE_RTT.
-    DCHECK(cycle_.phase == CyclePhase::PROBE_CRUISE ||
-           cycle_.phase == CyclePhase::PROBE_REFILL);
+    QUICHE_DCHECK(cycle_.phase == CyclePhase::PROBE_CRUISE ||
+                  cycle_.phase == CyclePhase::PROBE_REFILL);
     cycle_.cycle_start_time = now;
     if (cycle_.phase == CyclePhase::PROBE_CRUISE) {
       EnterProbeCruise(now);
@@ -41,7 +41,7 @@
     const AckedPacketVector& /*acked_packets*/,
     const LostPacketVector& /*lost_packets*/,
     const Bbr2CongestionEvent& congestion_event) {
-  DCHECK_NE(cycle_.phase, CyclePhase::PROBE_NOT_STARTED);
+  QUICHE_DCHECK_NE(cycle_.phase, CyclePhase::PROBE_NOT_STARTED);
 
   if (congestion_event.end_of_round_trip) {
     if (cycle_.cycle_start_time != event_time) {
@@ -130,7 +130,7 @@
 void Bbr2ProbeBwMode::UpdateProbeDown(
     QuicByteCount prior_in_flight,
     const Bbr2CongestionEvent& congestion_event) {
-  DCHECK_EQ(cycle_.phase, CyclePhase::PROBE_DOWN);
+  QUICHE_DCHECK_EQ(cycle_.phase, CyclePhase::PROBE_DOWN);
 
   if (cycle_.rounds_in_phase == 1 && congestion_event.end_of_round_trip) {
     cycle_.is_sample_from_probing = false;
@@ -346,7 +346,7 @@
 }
 
 void Bbr2ProbeBwMode::RaiseInflightHighSlope() {
-  DCHECK_EQ(cycle_.phase, CyclePhase::PROBE_UP);
+  QUICHE_DCHECK_EQ(cycle_.phase, CyclePhase::PROBE_UP);
   uint64_t growth_this_round = 1 << cycle_.probe_up_rounds;
   // The number 30 below means |growth_this_round| is capped at 1G and the lower
   // bound of |probe_up_bytes| is (practically) 1 mss, at this speed inflight_hi
@@ -362,7 +362,7 @@
 
 void Bbr2ProbeBwMode::ProbeInflightHighUpward(
     const Bbr2CongestionEvent& congestion_event) {
-  DCHECK_EQ(cycle_.phase, CyclePhase::PROBE_UP);
+  QUICHE_DCHECK_EQ(cycle_.phase, CyclePhase::PROBE_UP);
   if (!model_->IsCongestionWindowLimited(congestion_event)) {
     QUIC_DVLOG(3) << sender_
                   << " Raising inflight_hi early return: Not cwnd limited.";
@@ -406,9 +406,9 @@
 
 void Bbr2ProbeBwMode::UpdateProbeCruise(
     const Bbr2CongestionEvent& congestion_event) {
-  DCHECK_EQ(cycle_.phase, CyclePhase::PROBE_CRUISE);
+  QUICHE_DCHECK_EQ(cycle_.phase, CyclePhase::PROBE_CRUISE);
   MaybeAdaptUpperBounds(congestion_event);
-  DCHECK(!cycle_.is_sample_from_probing);
+  QUICHE_DCHECK(!cycle_.is_sample_from_probing);
 
   if (IsTimeToProbeBandwidth(congestion_event)) {
     EnterProbeRefill(/*probe_up_rounds=*/0, congestion_event.event_time);
@@ -418,9 +418,9 @@
 
 void Bbr2ProbeBwMode::UpdateProbeRefill(
     const Bbr2CongestionEvent& congestion_event) {
-  DCHECK_EQ(cycle_.phase, CyclePhase::PROBE_REFILL);
+  QUICHE_DCHECK_EQ(cycle_.phase, CyclePhase::PROBE_REFILL);
   MaybeAdaptUpperBounds(congestion_event);
-  DCHECK(!cycle_.is_sample_from_probing);
+  QUICHE_DCHECK(!cycle_.is_sample_from_probing);
 
   if (cycle_.rounds_in_phase > 0 && congestion_event.end_of_round_trip) {
     EnterProbeUp(congestion_event.event_time);
@@ -431,7 +431,7 @@
 void Bbr2ProbeBwMode::UpdateProbeUp(
     QuicByteCount prior_in_flight,
     const Bbr2CongestionEvent& congestion_event) {
-  DCHECK_EQ(cycle_.phase, CyclePhase::PROBE_UP);
+  QUICHE_DCHECK_EQ(cycle_.phase, CyclePhase::PROBE_UP);
   if (MaybeAdaptUpperBounds(congestion_event) == ADAPTED_PROBED_TOO_HIGH) {
     EnterProbeDown(/*probed_too_high=*/true, /*stopped_risky_probe=*/false,
                    congestion_event.event_time);
@@ -553,7 +553,7 @@
 }
 
 void Bbr2ProbeBwMode::EnterProbeUp(QuicTime now) {
-  DCHECK_EQ(cycle_.phase, CyclePhase::PROBE_REFILL);
+  QUICHE_DCHECK_EQ(cycle_.phase, CyclePhase::PROBE_REFILL);
   QUIC_DVLOG(2) << sender_ << " Phase change: " << cycle_.phase << " ==> "
                 << CyclePhase::PROBE_UP << " after "
                 << now - cycle_.phase_start_time << ", or "
@@ -568,7 +568,7 @@
 }
 
 void Bbr2ProbeBwMode::ExitProbeDown() {
-  DCHECK_EQ(cycle_.phase, CyclePhase::PROBE_DOWN);
+  QUICHE_DCHECK_EQ(cycle_.phase, CyclePhase::PROBE_DOWN);
   if (!cycle_.has_advanced_max_bw) {
     QUIC_DVLOG(2) << sender_ << " Advancing max bw filter at end of cycle.";
     model_->AdvanceMaxBandwidthFilter();
diff --git a/quic/core/congestion_control/bbr2_sender.cc b/quic/core/congestion_control/bbr2_sender.cc
index 0d6b3f1..e8ef762 100644
--- a/quic/core/congestion_control/bbr2_sender.cc
+++ b/quic/core/congestion_control/bbr2_sender.cc
@@ -90,7 +90,7 @@
   QUIC_DVLOG(2) << this << " Initializing Bbr2Sender. mode:" << mode_
                 << ", PacingRate:" << pacing_rate_ << ", Cwnd:" << cwnd_
                 << ", CwndLimits:" << cwnd_limits() << "  @ " << now;
-  DCHECK_EQ(mode_, Bbr2Mode::STARTUP);
+  QUICHE_DCHECK_EQ(mode_, Bbr2Mode::STARTUP);
 }
 
 void Bbr2Sender::SetFromConfig(const QuicConfig& config,
diff --git a/quic/core/congestion_control/bbr2_simulator_test.cc b/quic/core/congestion_control/bbr2_simulator_test.cc
index 489a958..9cd5966 100644
--- a/quic/core/congestion_control/bbr2_simulator_test.cc
+++ b/quic/core/congestion_control/bbr2_simulator_test.cc
@@ -1286,7 +1286,7 @@
   QuicBandwidth BottleneckBandwidth() const {
     // Make sure all local links have a higher bandwidth than the test link.
     for (size_t i = 0; i < local_links.size(); ++i) {
-      CHECK_GT(local_links[i].bandwidth, test_link.bandwidth);
+      QUICHE_CHECK_GT(local_links[i].bandwidth, test_link.bandwidth);
     }
     return test_link.bandwidth;
   }
diff --git a/quic/core/congestion_control/bbr2_startup.cc b/quic/core/congestion_control/bbr2_startup.cc
index 7904eb3..0f6b80f 100644
--- a/quic/core/congestion_control/bbr2_startup.cc
+++ b/quic/core/congestion_control/bbr2_startup.cc
@@ -62,8 +62,8 @@
   }
 
   if (Params().decrease_startup_pacing_at_end_of_round) {
-    DCHECK_GT(model_->pacing_gain(), 0);
-    DCHECK(Params().bw_startup);
+    QUICHE_DCHECK_GT(model_->pacing_gain(), 0);
+    QUICHE_DCHECK(Params().bw_startup);
     if (congestion_event.end_of_round_trip &&
         !congestion_event.last_sample_is_app_limited) {
       // Multiply by startup_pacing_gain, so if the bandwidth doubles,
@@ -104,7 +104,7 @@
 
 void Bbr2StartupMode::CheckExcessiveLosses(
     const Bbr2CongestionEvent& congestion_event) {
-  DCHECK(congestion_event.end_of_round_trip);
+  QUICHE_DCHECK(congestion_event.end_of_round_trip);
 
   if (model_->full_bandwidth_reached()) {
     return;
diff --git a/quic/core/congestion_control/cubic_bytes.cc b/quic/core/congestion_control/cubic_bytes.cc
index 482704e..854d6a7 100644
--- a/quic/core/congestion_control/cubic_bytes.cc
+++ b/quic/core/congestion_control/cubic_bytes.cc
@@ -153,8 +153,8 @@
                                           kCubeScale;
 
   const bool add_delta = elapsed_time > time_to_origin_point_;
-  DCHECK(add_delta ||
-         (origin_point_congestion_window_ > delta_congestion_window));
+  QUICHE_DCHECK(add_delta ||
+                (origin_point_congestion_window_ > delta_congestion_window));
   QuicByteCount target_congestion_window =
       add_delta ? origin_point_congestion_window_ + delta_congestion_window
                 : origin_point_congestion_window_ - delta_congestion_window;
@@ -163,7 +163,7 @@
       std::min(target_congestion_window,
                current_congestion_window + acked_bytes_count_ / 2);
 
-  DCHECK_LT(0u, estimated_tcp_congestion_window_);
+  QUICHE_DCHECK_LT(0u, estimated_tcp_congestion_window_);
   // Increase the window by approximately Alpha * 1 MSS of bytes every
   // time we ack an estimated tcp window of bytes.  For small
   // congestion windows (less than 25), the formula below will
diff --git a/quic/core/congestion_control/general_loss_algorithm.cc b/quic/core/congestion_control/general_loss_algorithm.cc
index 478ab7d..521aa4a 100644
--- a/quic/core/congestion_control/general_loss_algorithm.cc
+++ b/quic/core/congestion_control/general_loss_algorithm.cc
@@ -79,8 +79,8 @@
   }
   // Clear least_in_flight_.
   least_in_flight_.Clear();
-  DCHECK_EQ(packet_number_space_,
-            unacked_packets.GetPacketNumberSpace(largest_newly_acked));
+  QUICHE_DCHECK_EQ(packet_number_space_,
+                   unacked_packets.GetPacketNumberSpace(largest_newly_acked));
   for (; it != unacked_packets.end() && packet_number <= largest_newly_acked;
        ++it, ++packet_number) {
     if (unacked_packets.GetPacketNumberSpace(it->encryption_level) !=
@@ -169,7 +169,7 @@
   }
 
   if (use_adaptive_reordering_threshold_) {
-    DCHECK_LT(packet_number, previous_largest_acked);
+    QUICHE_DCHECK_LT(packet_number, previous_largest_acked);
     // Increase reordering_threshold_ such that packet_number would not have
     // been declared lost.
     reordering_threshold_ = std::max(
diff --git a/quic/core/congestion_control/pacing_sender.cc b/quic/core/congestion_control/pacing_sender.cc
index 7389a46..a43601e 100644
--- a/quic/core/congestion_control/pacing_sender.cc
+++ b/quic/core/congestion_control/pacing_sender.cc
@@ -35,7 +35,7 @@
 PacingSender::~PacingSender() {}
 
 void PacingSender::set_sender(SendAlgorithmInterface* sender) {
-  DCHECK(sender != nullptr);
+  QUICHE_DCHECK(sender != nullptr);
   sender_ = sender;
 }
 
@@ -44,7 +44,7 @@
                                      QuicTime event_time,
                                      const AckedPacketVector& acked_packets,
                                      const LostPacketVector& lost_packets) {
-  DCHECK(sender_ != nullptr);
+  QUICHE_DCHECK(sender_ != nullptr);
   if (!lost_packets.empty()) {
     // Clear any burst tokens when entering recovery.
     burst_tokens_ = 0;
@@ -59,7 +59,7 @@
     QuicPacketNumber packet_number,
     QuicByteCount bytes,
     HasRetransmittableData has_retransmittable_data) {
-  DCHECK(sender_ != nullptr);
+  QUICHE_DCHECK(sender_ != nullptr);
   sender_->OnPacketSent(sent_time, bytes_in_flight, packet_number, bytes,
                         has_retransmittable_data);
   if (has_retransmittable_data != HAS_RETRANSMITTABLE_DATA) {
@@ -130,7 +130,7 @@
 QuicTime::Delta PacingSender::TimeUntilSend(
     QuicTime now,
     QuicByteCount bytes_in_flight) const {
-  DCHECK(sender_ != nullptr);
+  QUICHE_DCHECK(sender_ != nullptr);
 
   if (!sender_->CanSend(bytes_in_flight)) {
     // The underlying sender prevents sending.
@@ -158,7 +158,7 @@
 }
 
 QuicBandwidth PacingSender::PacingRate(QuicByteCount bytes_in_flight) const {
-  DCHECK(sender_ != nullptr);
+  QUICHE_DCHECK(sender_ != nullptr);
   if (!max_pacing_rate_.IsZero()) {
     return QuicBandwidth::FromBitsPerSecond(
         std::min(max_pacing_rate_.ToBitsPerSecond(),
diff --git a/quic/core/congestion_control/rtt_stats.cc b/quic/core/congestion_control/rtt_stats.cc
index 8754966..2be6fa4 100644
--- a/quic/core/congestion_control/rtt_stats.cc
+++ b/quic/core/congestion_control/rtt_stats.cc
@@ -103,7 +103,7 @@
 }
 
 QuicTime::Delta RttStats::GetStandardOrMeanDeviation() const {
-  DCHECK(calculate_standard_deviation_);
+  QUICHE_DCHECK(calculate_standard_deviation_);
   if (!standard_deviation_calculator_.has_valid_standard_deviation) {
     return mean_deviation_;
   }
@@ -124,7 +124,7 @@
 
 QuicTime::Delta
 RttStats::StandardDeviationCaculator::CalculateStandardDeviation() const {
-  DCHECK(has_valid_standard_deviation);
+  QUICHE_DCHECK(has_valid_standard_deviation);
   return QuicTime::Delta::FromMicroseconds(sqrt(m2));
 }
 
diff --git a/quic/core/congestion_control/tcp_cubic_sender_bytes.cc b/quic/core/congestion_control/tcp_cubic_sender_bytes.cc
index 73b4c8a..77691fd 100644
--- a/quic/core/congestion_control/tcp_cubic_sender_bytes.cc
+++ b/quic/core/congestion_control/tcp_cubic_sender_bytes.cc
@@ -178,8 +178,8 @@
     // PRR is used when in recovery.
     prr_.OnPacketSent(bytes);
   }
-  DCHECK(!largest_sent_packet_number_.IsInitialized() ||
-         largest_sent_packet_number_ < packet_number);
+  QUICHE_DCHECK(!largest_sent_packet_number_.IsInitialized() ||
+                largest_sent_packet_number_ < packet_number);
   largest_sent_packet_number_ = packet_number;
   hybrid_slow_start_.OnPacketSent(packet_number);
 }
@@ -323,7 +323,7 @@
 
   // TODO(b/77268641): Separate out all of slow start into a separate class.
   if (slow_start_large_reduction_ && InSlowStart()) {
-    DCHECK_LT(kDefaultTCPMSS, congestion_window_);
+    QUICHE_DCHECK_LT(kDefaultTCPMSS, congestion_window_);
     if (congestion_window_ >= 2 * initial_tcp_congestion_window_) {
       min_slow_start_exit_window_ = congestion_window_ / 2;
     }
diff --git a/quic/core/crypto/aead_base_decrypter.cc b/quic/core/crypto/aead_base_decrypter.cc
index a40d1b5..32a2ebf 100644
--- a/quic/core/crypto/aead_base_decrypter.cc
+++ b/quic/core/crypto/aead_base_decrypter.cc
@@ -60,17 +60,17 @@
       nonce_size_(nonce_size),
       use_ietf_nonce_construction_(use_ietf_nonce_construction),
       have_preliminary_key_(false) {
-  DCHECK_GT(256u, key_size);
-  DCHECK_GT(256u, auth_tag_size);
-  DCHECK_GT(256u, nonce_size);
-  DCHECK_LE(key_size_, sizeof(key_));
-  DCHECK_LE(nonce_size_, sizeof(iv_));
+  QUICHE_DCHECK_GT(256u, key_size);
+  QUICHE_DCHECK_GT(256u, auth_tag_size);
+  QUICHE_DCHECK_GT(256u, nonce_size);
+  QUICHE_DCHECK_LE(key_size_, sizeof(key_));
+  QUICHE_DCHECK_LE(nonce_size_, sizeof(iv_));
 }
 
 AeadBaseDecrypter::~AeadBaseDecrypter() {}
 
 bool AeadBaseDecrypter::SetKey(absl::string_view key) {
-  DCHECK_EQ(key.size(), key_size_);
+  QUICHE_DCHECK_EQ(key.size(), key_size_);
   if (key.size() != key_size_) {
     return false;
   }
@@ -91,7 +91,7 @@
     QUIC_BUG << "Attempted to set nonce prefix on IETF QUIC crypter";
     return false;
   }
-  DCHECK_EQ(nonce_prefix.size(), nonce_size_ - sizeof(QuicPacketNumber));
+  QUICHE_DCHECK_EQ(nonce_prefix.size(), nonce_size_ - sizeof(QuicPacketNumber));
   if (nonce_prefix.size() != nonce_size_ - sizeof(QuicPacketNumber)) {
     return false;
   }
@@ -104,7 +104,7 @@
     QUIC_BUG << "Attempted to set IV on Google QUIC crypter";
     return false;
   }
-  DCHECK_EQ(iv.size(), nonce_size_);
+  QUICHE_DCHECK_EQ(iv.size(), nonce_size_);
   if (iv.size() != nonce_size_) {
     return false;
   }
@@ -113,7 +113,7 @@
 }
 
 bool AeadBaseDecrypter::SetPreliminaryKey(absl::string_view key) {
-  DCHECK(!have_preliminary_key_);
+  QUICHE_DCHECK(!have_preliminary_key_);
   SetKey(key);
   have_preliminary_key_ = true;
 
@@ -139,7 +139,7 @@
   if (!SetKey(key) ||
       (!use_ietf_nonce_construction_ && !SetNoncePrefix(nonce_prefix)) ||
       (use_ietf_nonce_construction_ && !SetIV(nonce_prefix))) {
-    DCHECK(false);
+    QUICHE_DCHECK(false);
     return false;
   }
 
diff --git a/quic/core/crypto/aead_base_encrypter.cc b/quic/core/crypto/aead_base_encrypter.cc
index c4a0ddd..a7100c5 100644
--- a/quic/core/crypto/aead_base_encrypter.cc
+++ b/quic/core/crypto/aead_base_encrypter.cc
@@ -51,15 +51,15 @@
       auth_tag_size_(auth_tag_size),
       nonce_size_(nonce_size),
       use_ietf_nonce_construction_(use_ietf_nonce_construction) {
-  DCHECK_LE(key_size_, sizeof(key_));
-  DCHECK_LE(nonce_size_, sizeof(iv_));
-  DCHECK_GE(kMaxNonceSize, nonce_size_);
+  QUICHE_DCHECK_LE(key_size_, sizeof(key_));
+  QUICHE_DCHECK_LE(nonce_size_, sizeof(iv_));
+  QUICHE_DCHECK_GE(kMaxNonceSize, nonce_size_);
 }
 
 AeadBaseEncrypter::~AeadBaseEncrypter() {}
 
 bool AeadBaseEncrypter::SetKey(absl::string_view key) {
-  DCHECK_EQ(key.size(), key_size_);
+  QUICHE_DCHECK_EQ(key.size(), key_size_);
   if (key.size() != key_size_) {
     return false;
   }
@@ -81,7 +81,7 @@
     QUIC_BUG << "Attempted to set nonce prefix on IETF QUIC crypter";
     return false;
   }
-  DCHECK_EQ(nonce_prefix.size(), nonce_size_ - sizeof(QuicPacketNumber));
+  QUICHE_DCHECK_EQ(nonce_prefix.size(), nonce_size_ - sizeof(QuicPacketNumber));
   if (nonce_prefix.size() != nonce_size_ - sizeof(QuicPacketNumber)) {
     return false;
   }
@@ -94,7 +94,7 @@
     QUIC_BUG << "Attempted to set IV on Google QUIC crypter";
     return false;
   }
-  DCHECK_EQ(iv.size(), nonce_size_);
+  QUICHE_DCHECK_EQ(iv.size(), nonce_size_);
   if (iv.size() != nonce_size_) {
     return false;
   }
@@ -106,7 +106,7 @@
                                 absl::string_view associated_data,
                                 absl::string_view plaintext,
                                 unsigned char* output) {
-  DCHECK_EQ(nonce.size(), nonce_size_);
+  QUICHE_DCHECK_EQ(nonce.size(), nonce_size_);
 
   size_t ciphertext_len;
   if (!EVP_AEAD_CTX_seal(
diff --git a/quic/core/crypto/cert_compressor.cc b/quic/core/crypto/cert_compressor.cc
index 5e2cf83..e2a352d 100644
--- a/quic/core/crypto/cert_compressor.cc
+++ b/quic/core/crypto/cert_compressor.cc
@@ -308,7 +308,7 @@
   zlib_dict += std::string(reinterpret_cast<const char*>(kCommonCertSubstrings),
                            sizeof(kCommonCertSubstrings));
 
-  DCHECK_EQ(zlib_dict.size(), zlib_dict_size);
+  QUICHE_DCHECK_EQ(zlib_dict.size(), zlib_dict_size);
 
   return zlib_dict;
 }
@@ -456,7 +456,7 @@
     const CommonCertSets* common_sets) {
   const std::vector<CertEntry> entries = MatchCerts(
       certs, client_common_set_hashes, client_cached_cert_hashes, common_sets);
-  DCHECK_EQ(entries.size(), certs.size());
+  QUICHE_DCHECK_EQ(entries.size(), certs.size());
 
   size_t uncompressed_size = 0;
   for (size_t i = 0; i < entries.size(); i++) {
@@ -472,7 +472,7 @@
   if (uncompressed_size > 0) {
     memset(&z, 0, sizeof(z));
     int rv = deflateInit(&z, Z_DEFAULT_COMPRESSION);
-    DCHECK_EQ(Z_OK, rv);
+    QUICHE_DCHECK_EQ(Z_OK, rv);
     if (rv != Z_OK) {
       return "";
     }
@@ -482,7 +482,7 @@
 
     rv = deflateSetDictionary(
         &z, reinterpret_cast<const uint8_t*>(&zlib_dict[0]), zlib_dict.size());
-    DCHECK_EQ(Z_OK, rv);
+    QUICHE_DCHECK_EQ(Z_OK, rv);
     if (rv != Z_OK) {
       return "";
     }
@@ -522,8 +522,8 @@
     z.next_in = reinterpret_cast<uint8_t*>(&length32);
     z.avail_in = sizeof(length32);
     rv = deflate(&z, Z_NO_FLUSH);
-    DCHECK_EQ(Z_OK, rv);
-    DCHECK_EQ(0u, z.avail_in);
+    QUICHE_DCHECK_EQ(Z_OK, rv);
+    QUICHE_DCHECK_EQ(0u, z.avail_in);
     if (rv != Z_OK || z.avail_in) {
       return "";
     }
@@ -532,8 +532,8 @@
         const_cast<uint8_t*>(reinterpret_cast<const uint8_t*>(certs[i].data()));
     z.avail_in = certs[i].size();
     rv = deflate(&z, Z_NO_FLUSH);
-    DCHECK_EQ(Z_OK, rv);
-    DCHECK_EQ(0u, z.avail_in);
+    QUICHE_DCHECK_EQ(Z_OK, rv);
+    QUICHE_DCHECK_EQ(0u, z.avail_in);
     if (rv != Z_OK || z.avail_in) {
       return "";
     }
@@ -541,7 +541,7 @@
 
   z.avail_in = 0;
   rv = deflate(&z, Z_FINISH);
-  DCHECK_EQ(Z_STREAM_END, rv);
+  QUICHE_DCHECK_EQ(Z_STREAM_END, rv);
   if (rv != Z_STREAM_END) {
     return "";
   }
@@ -560,7 +560,7 @@
   if (!ParseEntries(&in, cached_certs, common_sets, &entries, out_certs)) {
     return false;
   }
-  DCHECK_EQ(entries.size(), out_certs->size());
+  QUICHE_DCHECK_EQ(entries.size(), out_certs->size());
 
   std::unique_ptr<uint8_t[]> uncompressed_data;
   absl::string_view uncompressed;
diff --git a/quic/core/crypto/certificate_view.cc b/quic/core/crypto/certificate_view.cc
index 629373d..7a20602 100644
--- a/quic/core/crypto/certificate_view.cc
+++ b/quic/core/crypto/certificate_view.cc
@@ -196,7 +196,7 @@
   }
 
   if (tag == CBS_ASN1_UTCTIME) {
-    DCHECK_LE(year, 100u);
+    QUICHE_DCHECK_LE(year, 100u);
     year += (year >= 50) ? 1900 : 2000;
   }
 
diff --git a/quic/core/crypto/crypto_framer.cc b/quic/core/crypto/crypto_framer.cc
index 8dd3679..cf6e123 100644
--- a/quic/core/crypto/crypto_framer.cc
+++ b/quic/core/crypto/crypto_framer.cc
@@ -87,13 +87,13 @@
 }
 
 bool CryptoFramer::ProcessInput(absl::string_view input) {
-  DCHECK_EQ(QUIC_NO_ERROR, error_);
+  QUICHE_DCHECK_EQ(QUIC_NO_ERROR, error_);
   if (error_ != QUIC_NO_ERROR) {
     return false;
   }
   error_ = Process(input);
   if (error_ != QUIC_NO_ERROR) {
-    DCHECK(!error_detail_.empty());
+    QUICHE_DCHECK(!error_detail_.empty());
     visitor_->OnError(this);
     return false;
   }
@@ -160,15 +160,15 @@
   std::unique_ptr<char[]> buffer(new char[len]);
   QuicDataWriter writer(len, buffer.get(), quiche::HOST_BYTE_ORDER);
   if (!writer.WriteTag(message.tag())) {
-    DCHECK(false) << "Failed to write message tag.";
+    QUICHE_DCHECK(false) << "Failed to write message tag.";
     return nullptr;
   }
   if (!writer.WriteUInt16(static_cast<uint16_t>(num_entries))) {
-    DCHECK(false) << "Failed to write size.";
+    QUICHE_DCHECK(false) << "Failed to write size.";
     return nullptr;
   }
   if (!writer.WriteUInt16(0)) {
-    DCHECK(false) << "Failed to write padding.";
+    QUICHE_DCHECK(false) << "Failed to write padding.";
     return nullptr;
   }
 
@@ -180,7 +180,8 @@
       // Existing PAD tags are only checked when padding needs to be added
       // because parts of the code may need to reserialize received messages
       // and those messages may, legitimately include padding.
-      DCHECK(false) << "Message needed padding but already contained a PAD tag";
+      QUICHE_DCHECK(false)
+          << "Message needed padding but already contained a PAD tag";
       return nullptr;
     }
 
@@ -192,12 +193,12 @@
     }
 
     if (!writer.WriteTag(it->first)) {
-      DCHECK(false) << "Failed to write tag.";
+      QUICHE_DCHECK(false) << "Failed to write tag.";
       return nullptr;
     }
     end_offset += it->second.length();
     if (!writer.WriteUInt32(end_offset)) {
-      DCHECK(false) << "Failed to write end offset.";
+      QUICHE_DCHECK(false) << "Failed to write end offset.";
       return nullptr;
     }
   }
@@ -214,20 +215,20 @@
     if (it->first > kPAD && need_pad_value) {
       need_pad_value = false;
       if (!writer.WriteRepeatedByte('-', pad_length)) {
-        DCHECK(false) << "Failed to write padding.";
+        QUICHE_DCHECK(false) << "Failed to write padding.";
         return nullptr;
       }
     }
 
     if (!writer.WriteBytes(it->second.data(), it->second.length())) {
-      DCHECK(false) << "Failed to write value.";
+      QUICHE_DCHECK(false) << "Failed to write value.";
       return nullptr;
     }
   }
 
   if (need_pad_value) {
     if (!writer.WriteRepeatedByte('-', pad_length)) {
-      DCHECK(false) << "Failed to write padding.";
+      QUICHE_DCHECK(false) << "Failed to write padding.";
       return nullptr;
     }
   }
@@ -321,7 +322,7 @@
       for (const std::pair<QuicTag, size_t>& item : tags_and_lengths_) {
         absl::string_view value;
         if (!reader.ReadStringPiece(&value, item.second)) {
-          DCHECK(process_truncated_messages_);
+          QUICHE_DCHECK(process_truncated_messages_);
           // Store an empty value.
           message_.SetStringPiece(item.first, "");
           continue;
@@ -343,12 +344,12 @@
                                size_t pad_length,
                                uint32_t* end_offset) {
   if (!writer->WriteTag(kPAD)) {
-    DCHECK(false) << "Failed to write tag.";
+    QUICHE_DCHECK(false) << "Failed to write tag.";
     return false;
   }
   *end_offset += pad_length;
   if (!writer->WriteUInt32(*end_offset)) {
-    DCHECK(false) << "Failed to write end offset.";
+    QUICHE_DCHECK(false) << "Failed to write end offset.";
     return false;
   }
   return true;
diff --git a/quic/core/crypto/crypto_secret_boxer.cc b/quic/core/crypto/crypto_secret_boxer.cc
index 0c24c2c..1826212 100644
--- a/quic/core/crypto/crypto_secret_boxer.cc
+++ b/quic/core/crypto/crypto_secret_boxer.cc
@@ -45,12 +45,12 @@
 static const EVP_AEAD* (*const kAEAD)() = EVP_aead_aes_256_gcm_siv;
 
 void CryptoSecretBoxer::SetKeys(const std::vector<std::string>& keys) {
-  DCHECK(!keys.empty());
+  QUICHE_DCHECK(!keys.empty());
   const EVP_AEAD* const aead = kAEAD();
   std::unique_ptr<State> new_state(new State);
 
   for (const std::string& key : keys) {
-    DCHECK_EQ(kBoxKeySize, key.size());
+    QUICHE_DCHECK_EQ(kBoxKeySize, key.size());
     bssl::UniquePtr<EVP_AEAD_CTX> ctx(
         EVP_AEAD_CTX_new(aead, reinterpret_cast<const uint8_t*>(key.data()),
                          key.size(), EVP_AEAD_DEFAULT_TAG_LENGTH));
@@ -100,7 +100,7 @@
     }
   }
 
-  DCHECK_EQ(out_len, bytes_written);
+  QUICHE_DCHECK_EQ(out_len, bytes_written);
   return ret;
 }
 
diff --git a/quic/core/crypto/crypto_server_test.cc b/quic/core/crypto/crypto_server_test.cc
index a6ab228..323aec1 100644
--- a/quic/core/crypto/crypto_server_test.cc
+++ b/quic/core/crypto/crypto_server_test.cc
@@ -48,7 +48,7 @@
   void Run(bool /*ok*/,
            const std::string& /*error_details*/,
            std::unique_ptr<ProofVerifyDetails>* /*details*/) override {
-    DCHECK(false);
+    QUICHE_DCHECK(false);
   }
 };
 
@@ -129,8 +129,8 @@
         config_.AddConfig(primary_config, clock_.WallNow()));
 
     absl::string_view orbit;
-    CHECK(msg->GetStringPiece(kORBT, &orbit));
-    CHECK_EQ(sizeof(orbit_), orbit.size());
+    QUICHE_CHECK(msg->GetStringPiece(kORBT, &orbit));
+    QUICHE_CHECK_EQ(sizeof(orbit_), orbit.size());
     memcpy(orbit_, orbit.data(), orbit.size());
 
     char public_value[32];
@@ -171,7 +171,7 @@
 
     signed_config_ = QuicReferenceCountedPointer<QuicSignedServerConfig>(
         new QuicSignedServerConfig());
-    DCHECK(signed_config_->chain.get() == nullptr);
+    QUICHE_DCHECK(signed_config_->chain.get() == nullptr);
   }
 
   // Helper used to accept the result of ValidateClientHello and pass
diff --git a/quic/core/crypto/crypto_utils.cc b/quic/core/crypto/crypto_utils.cc
index ed63e3c..113d9cf 100644
--- a/quic/core/crypto/crypto_utils.cc
+++ b/quic/core/crypto/crypto_utils.cc
@@ -504,7 +504,7 @@
       break;
     }
     default:
-      DCHECK(false);
+      QUICHE_DCHECK(false);
   }
 
   if (subkey_secret != nullptr) {
@@ -552,7 +552,7 @@
     const CryptoHandshakeMessage& server_hello,
     const ParsedQuicVersionVector& negotiated_versions,
     std::string* error_details) {
-  DCHECK(error_details != nullptr);
+  QUICHE_DCHECK(error_details != nullptr);
 
   if (server_hello.tag() != kSHLO) {
     *error_details = "Bad tag";
diff --git a/quic/core/crypto/proof_source_x509_test.cc b/quic/core/crypto/proof_source_x509_test.cc
index f72e2f5..75a6099 100644
--- a/quic/core/crypto/proof_source_x509_test.cc
+++ b/quic/core/crypto/proof_source_x509_test.cc
@@ -36,8 +36,8 @@
             CertificatePrivateKey::LoadFromDer(kTestCertificatePrivateKey)),
         wildcard_key_(CertificatePrivateKey::LoadFromDer(
             kWildcardCertificatePrivateKey)) {
-    CHECK(test_key_ != nullptr);
-    CHECK(wildcard_key_ != nullptr);
+    QUICHE_CHECK(test_key_ != nullptr);
+    QUICHE_CHECK(wildcard_key_ != nullptr);
   }
 
  protected:
diff --git a/quic/core/crypto/quic_crypto_client_config.cc b/quic/core/crypto/quic_crypto_client_config.cc
index aabff94..45db92b 100644
--- a/quic/core/crypto/quic_crypto_client_config.cc
+++ b/quic/core/crypto/quic_crypto_client_config.cc
@@ -70,7 +70,7 @@
       session_cache_(std::move(session_cache)),
       ssl_ctx_(TlsClientConnection::CreateSslCtx(
           !GetQuicFlag(FLAGS_quic_disable_client_tls_zero_rtt))) {
-  DCHECK(proof_verifier_.get());
+  QUICHE_DCHECK(proof_verifier_.get());
   SetDefaults();
 }
 
@@ -98,7 +98,7 @@
   if (!scfg) {
     // Should be impossible short of cache corruption.
     RecordInchoateClientHelloReason(SERVER_CONFIG_CORRUPTED);
-    DCHECK(false);
+    QUICHE_DCHECK(false);
     return false;
   }
 
@@ -129,7 +129,7 @@
 
   if (!scfg_) {
     scfg_ = CryptoFramer::ParseMessage(server_config_);
-    DCHECK(scfg_.get());
+    QUICHE_DCHECK(scfg_.get());
   }
   return scfg_.get();
 }
@@ -266,7 +266,7 @@
     absl::string_view signature,
     QuicWallTime now,
     QuicWallTime expiration_time) {
-  DCHECK(server_config_.empty());
+  QUICHE_DCHECK(server_config_.empty());
 
   if (server_config.empty()) {
     RecordDiskCacheServerConfigState(SERVER_CONFIG_EMPTY);
@@ -347,8 +347,8 @@
 
 void QuicCryptoClientConfig::CachedState::InitializeFrom(
     const QuicCryptoClientConfig::CachedState& other) {
-  DCHECK(server_config_.empty());
-  DCHECK(!server_config_valid_);
+  QUICHE_DCHECK(server_config_.empty());
+  QUICHE_DCHECK(!server_config_valid_);
   server_config_ = other.server_config_;
   source_address_token_ = other.source_address_token_;
   certs_ = other.certs_;
@@ -494,7 +494,7 @@
     QuicReferenceCountedPointer<QuicCryptoNegotiatedParameters> out_params,
     CryptoHandshakeMessage* out,
     std::string* error_details) const {
-  DCHECK(error_details != nullptr);
+  QUICHE_DCHECK(error_details != nullptr);
   QUIC_BUG_IF(!QuicUtils::IsConnectionIdValidForVersion(
       connection_id, preferred_version.transport_version))
       << "FillClientHello: attempted to use connection ID " << connection_id
@@ -574,7 +574,7 @@
           P256KeyExchange::New(P256KeyExchange::NewPrivateKey());
       break;
     default:
-      DCHECK(false);
+      QUICHE_DCHECK(false);
       *error_details = "Configured to support an unknown key exchange";
       return QUIC_CRYPTO_INTERNAL_ERROR;
   }
@@ -639,7 +639,7 @@
     const std::vector<std::string>& cached_certs,
     CachedState* cached,
     std::string* error_details) {
-  DCHECK(error_details != nullptr);
+  QUICHE_DCHECK(error_details != nullptr);
 
   absl::string_view scfg;
   if (!message.GetStringPiece(kSCFG, &scfg)) {
@@ -711,7 +711,7 @@
     CachedState* cached,
     QuicReferenceCountedPointer<QuicCryptoNegotiatedParameters> out_params,
     std::string* error_details) {
-  DCHECK(error_details != nullptr);
+  QUICHE_DCHECK(error_details != nullptr);
 
   if (rej.tag() != kREJ) {
     *error_details = "Message is not REJ";
@@ -741,7 +741,7 @@
     CachedState* cached,
     QuicReferenceCountedPointer<QuicCryptoNegotiatedParameters> out_params,
     std::string* error_details) {
-  DCHECK(error_details != nullptr);
+  QUICHE_DCHECK(error_details != nullptr);
 
   QuicErrorCode valid = CryptoUtils::ValidateServerHello(
       server_hello, negotiated_versions, error_details);
@@ -804,7 +804,7 @@
     CachedState* cached,
     QuicReferenceCountedPointer<QuicCryptoNegotiatedParameters> out_params,
     std::string* error_details) {
-  DCHECK(error_details != nullptr);
+  QUICHE_DCHECK(error_details != nullptr);
 
   if (server_config_update.tag() != kSCUP) {
     *error_details = "ServerConfigUpdate must have kSCUP tag.";
@@ -855,7 +855,7 @@
 bool QuicCryptoClientConfig::PopulateFromCanonicalConfig(
     const QuicServerId& server_id,
     CachedState* server_state) {
-  DCHECK(server_state->IsEmpty());
+  QUICHE_DCHECK(server_state->IsEmpty());
   size_t i = 0;
   for (; i < canonical_suffixes_.size(); ++i) {
     if (absl::EndsWithIgnoreCase(server_id.host(), canonical_suffixes_[i])) {
diff --git a/quic/core/crypto/quic_crypto_server_config.cc b/quic/core/crypto/quic_crypto_server_config.cc
index 0e9bca8..da04f4f 100644
--- a/quic/core/crypto/quic_crypto_server_config.cc
+++ b/quic/core/crypto/quic_crypto_server_config.cc
@@ -255,7 +255,7 @@
       pad_shlo_(true),
       validate_chlo_size_(true),
       validate_source_address_token_(true) {
-  DCHECK(proof_source_.get());
+  QUICHE_DCHECK(proof_source_.get());
   source_address_token_boxer_.SetKeys(
       {DeriveSourceAddressTokenKey(source_address_token_secret)});
 
@@ -287,7 +287,7 @@
 
   std::string encoded_public_values;
   // First three bytes encode the length of the public value.
-  DCHECK_LT(curve25519_public_value.size(), (1U << 24));
+  QUICHE_DCHECK_LT(curve25519_public_value.size(), (1U << 24));
   encoded_public_values.push_back(
       static_cast<char>(curve25519_public_value.size()));
   encoded_public_values.push_back(
@@ -304,7 +304,7 @@
         P256KeyExchange::New(p256_private_key));
     absl::string_view p256_public_value = p256->public_value();
 
-    DCHECK_LT(p256_public_value.size(), (1U << 24));
+    QUICHE_DCHECK_LT(p256_public_value.size(), (1U << 24));
     encoded_public_values.push_back(
         static_cast<char>(p256_public_value.size()));
     encoded_public_values.push_back(
@@ -338,7 +338,7 @@
   if (options.orbit.size() == sizeof(orbit_bytes)) {
     memcpy(orbit_bytes, options.orbit.data(), sizeof(orbit_bytes));
   } else {
-    DCHECK(options.orbit.empty());
+    QUICHE_DCHECK(options.orbit.empty());
     rand->RandBytes(orbit_bytes, sizeof(orbit_bytes));
   }
   msg.SetStringPiece(kORBT,
@@ -416,9 +416,9 @@
 
     configs_[config->id] = config;
     SelectNewPrimaryConfig(now);
-    DCHECK(primary_config_.get());
-    DCHECK_EQ(configs_.find(primary_config_->id)->second.get(),
-              primary_config_.get());
+    QUICHE_DCHECK(primary_config_.get());
+    QUICHE_DCHECK_EQ(configs_.find(primary_config_->id)->second.get(),
+                     primary_config_.get());
   }
 
   return msg;
@@ -506,9 +506,9 @@
   configs_ = std::move(new_configs);
   fallback_config_ = fallback_config;
   SelectNewPrimaryConfig(now);
-  DCHECK(primary_config_.get());
-  DCHECK_EQ(configs_.find(primary_config_->id)->second.get(),
-            primary_config_.get());
+  QUICHE_DCHECK(primary_config_.get());
+  QUICHE_DCHECK_EQ(configs_.find(primary_config_->id)->second.get(),
+                   primary_config_.get());
 
   return true;
 }
@@ -672,7 +672,7 @@
     QuicByteCount total_framing_overhead,
     QuicByteCount chlo_packet_size,
     std::unique_ptr<ProcessClientHelloResultCallback> done_cb) const {
-  DCHECK(done_cb);
+  QUICHE_DCHECK(done_cb);
   auto context = std::make_unique<ProcessClientHelloContext>(
       validate_chlo_result, reject_only, connection_id, server_address,
       client_address, version, supported_versions, clock, rand,
@@ -720,7 +720,7 @@
     auto cb = std::make_unique<ProcessClientHelloCallback>(
         this, std::move(context), configs);
 
-    DCHECK(proof_source_.get());
+    QUICHE_DCHECK(proof_source_.get());
     proof_source_->GetProof(server_address, client_address, sni,
                             configs.primary->serialized, transport_version,
                             chlo_hash, std::move(cb));
@@ -862,7 +862,7 @@
   hkdf_suffix.append(client_hello_serialized.data(),
                      client_hello_serialized.length());
   hkdf_suffix.append(configs.requested->serialized);
-  DCHECK(proof_source_.get());
+  QUICHE_DCHECK(proof_source_.get());
   if (context->signed_config()->chain->certs.empty()) {
     context->Fail(QUIC_CRYPTO_INTERNAL_ERROR, "Failed to get certs");
     return;
@@ -1085,9 +1085,9 @@
     configs_lock_.ReaderUnlock();
     configs_lock_.WriterLock();
     SelectNewPrimaryConfig(now);
-    DCHECK(primary_config_.get());
-    DCHECK_EQ(configs_.find(primary_config_->id)->second.get(),
-              primary_config_.get());
+    QUICHE_DCHECK(primary_config_.get());
+    QUICHE_DCHECK_EQ(configs_.find(primary_config_->id)->second.get(),
+                     primary_config_.get());
     configs_lock_.WriterUnlock();
     configs_lock_.ReaderLock();
   }
@@ -1450,7 +1450,7 @@
   }
 
   // Send client the reject reason for debugging purposes.
-  DCHECK_LT(0u, reject_reasons.size());
+  QUICHE_DCHECK_LT(0u, reject_reasons.size());
   out->SetVector(kRREJ, reject_reasons);
 
   // The client may have requested a certificate chain.
@@ -1479,7 +1479,7 @@
       context.params()->client_common_set_hashes,
       context.params()->client_cached_cert_hashes, config.common_cert_sets);
 
-  DCHECK_GT(context.chlo_packet_size(), context.client_hello().size());
+  QUICHE_DCHECK_GT(context.chlo_packet_size(), context.client_hello().size());
   // kREJOverheadBytes is a very rough estimate of how much of a REJ
   // message is taken up by things other than the certificates.
   // STK: 56 bytes
@@ -1549,7 +1549,7 @@
     const std::string& client_cached_cert_hashes,
     const CommonCertSets* common_sets) {
   // Check whether the compressed certs is available in the cache.
-  DCHECK(compressed_certs_cache);
+  QUICHE_DCHECK(compressed_certs_cache);
   const std::string* cached_value = compressed_certs_cache->GetCompressedCert(
       chain, client_common_set_hashes, client_cached_cert_hashes);
   if (cached_value) {
diff --git a/quic/core/crypto/quic_hkdf.cc b/quic/core/crypto/quic_hkdf.cc
index 9cfac5f..8dcf104 100644
--- a/quic/core/crypto/quic_hkdf.cc
+++ b/quic/core/crypto/quic_hkdf.cc
@@ -43,7 +43,7 @@
       2 * client_key_bytes_to_generate + client_iv_bytes_to_generate +
       2 * server_key_bytes_to_generate + server_iv_bytes_to_generate +
       subkey_secret_bytes_to_generate;
-  DCHECK_LT(material_length, kMaxKeyMaterialSize);
+  QUICHE_DCHECK_LT(material_length, kMaxKeyMaterialSize);
 
   output_.resize(material_length);
   // On Windows, when the size of output_ is zero, dereference of 0'th element
diff --git a/quic/core/crypto/tls_connection.cc b/quic/core/crypto/tls_connection.cc
index 4a39a4e..9b5636c 100644
--- a/quic/core/crypto/tls_connection.cc
+++ b/quic/core/crypto/tls_connection.cc
@@ -36,7 +36,7 @@
     CRYPTO_library_init();
     ssl_ex_data_index_connection_ =
         SSL_get_ex_new_index(0, nullptr, nullptr, nullptr, nullptr);
-    CHECK_LE(0, ssl_ex_data_index_connection_);
+    QUICHE_CHECK_LE(0, ssl_ex_data_index_connection_);
   }
 
   SslIndexSingleton(const SslIndexSingleton&) = delete;
diff --git a/quic/core/crypto/transport_parameters.cc b/quic/core/crypto/transport_parameters.cc
index a948990..8cbd06e 100644
--- a/quic/core/crypto/transport_parameters.cc
+++ b/quic/core/crypto/transport_parameters.cc
@@ -179,9 +179,9 @@
       min_value_(min_value),
       max_value_(max_value),
       has_been_read_(false) {
-  DCHECK_LE(min_value, default_value);
-  DCHECK_LE(default_value, max_value);
-  DCHECK_LE(max_value, kVarInt62MaxValue);
+  QUICHE_DCHECK_LE(min_value, default_value);
+  QUICHE_DCHECK_LE(default_value, max_value);
+  QUICHE_DCHECK_LE(max_value, kVarInt62MaxValue);
 }
 
 TransportParameters::IntegerParameter::IntegerParameter(
@@ -206,7 +206,7 @@
 
 bool TransportParameters::IntegerParameter::Write(
     QuicDataWriter* writer) const {
-  DCHECK(IsValid());
+  QUICHE_DCHECK(IsValid());
   if (value_ == default_value_) {
     // Do not write if the value is default.
     return true;
@@ -532,8 +532,8 @@
 }
 
 bool TransportParameters::AreValid(std::string* error_details) const {
-  DCHECK(perspective == Perspective::IS_CLIENT ||
-         perspective == Perspective::IS_SERVER);
+  QUICHE_DCHECK(perspective == Perspective::IS_CLIENT ||
+                perspective == Perspective::IS_SERVER);
   if (perspective == Perspective::IS_CLIENT && !stateless_reset_token.empty()) {
     *error_details = "Client cannot send stateless reset token";
     return false;
@@ -693,7 +693,7 @@
 
   // original_destination_connection_id
   if (in.original_destination_connection_id.has_value()) {
-    DCHECK_EQ(Perspective::IS_SERVER, in.perspective);
+    QUICHE_DCHECK_EQ(Perspective::IS_SERVER, in.perspective);
     QuicConnectionId original_destination_connection_id =
         in.original_destination_connection_id.value();
     if (!writer.WriteVarInt62(
@@ -714,8 +714,9 @@
 
   // stateless_reset_token
   if (!in.stateless_reset_token.empty()) {
-    DCHECK_EQ(kStatelessResetTokenLength, in.stateless_reset_token.size());
-    DCHECK_EQ(Perspective::IS_SERVER, in.perspective);
+    QUICHE_DCHECK_EQ(kStatelessResetTokenLength,
+                     in.stateless_reset_token.size());
+    QUICHE_DCHECK_EQ(Perspective::IS_SERVER, in.perspective);
     if (!writer.WriteVarInt62(TransportParameters::kStatelessResetToken) ||
         !writer.WriteStringPieceVarInt62(absl::string_view(
             reinterpret_cast<const char*>(in.stateless_reset_token.data()),
@@ -804,7 +805,7 @@
 
   // retry_source_connection_id
   if (in.retry_source_connection_id.has_value()) {
-    DCHECK_EQ(Perspective::IS_SERVER, in.perspective);
+    QUICHE_DCHECK_EQ(Perspective::IS_SERVER, in.perspective);
     QuicConnectionId retry_source_connection_id =
         in.retry_source_connection_id.value();
     if (!writer.WriteVarInt62(TransportParameters::kRetrySourceConnectionId) ||
@@ -921,7 +922,7 @@
     TransportParameters::TransportParameterId grease_id =
         static_cast<TransportParameters::TransportParameterId>(grease_id64);
     const size_t grease_length = random->RandUint64() % kMaxGreaseLength;
-    DCHECK_GE(kMaxGreaseLength, grease_length);
+    QUICHE_DCHECK_GE(kMaxGreaseLength, grease_length);
     char grease_contents[kMaxGreaseLength];
     random->RandBytes(grease_contents, grease_length);
     if (!writer.WriteVarInt62(grease_id) ||
@@ -1213,7 +1214,7 @@
         break;
     }
     if (!parse_success) {
-      DCHECK(!error_details->empty());
+      QUICHE_DCHECK(!error_details->empty());
       return false;
     }
     if (!value_reader.IsDoneReading()) {
@@ -1225,7 +1226,7 @@
   }
 
   if (!out->AreValid(error_details)) {
-    DCHECK(!error_details->empty());
+    QUICHE_DCHECK(!error_details->empty());
     return false;
   }
 
diff --git a/quic/core/frames/quic_ack_frame.cc b/quic/core/frames/quic_ack_frame.cc
index 4a578b1..7c112c2 100644
--- a/quic/core/frames/quic_ack_frame.cc
+++ b/quic/core/frames/quic_ack_frame.cc
@@ -20,7 +20,7 @@
 bool IsAwaitingPacket(const QuicAckFrame& ack_frame,
                       QuicPacketNumber packet_number,
                       QuicPacketNumber peer_least_packet_awaiting_ack) {
-  DCHECK(packet_number.IsInitialized());
+  QUICHE_DCHECK(packet_number.IsInitialized());
   return (!peer_least_packet_awaiting_ack.IsInitialized() ||
           packet_number >= peer_least_packet_awaiting_ack) &&
          !ack_frame.packets.Contains(packet_number);
@@ -118,12 +118,12 @@
 }
 
 QuicPacketNumber PacketNumberQueue::Min() const {
-  DCHECK(!Empty());
+  QUICHE_DCHECK(!Empty());
   return packet_number_intervals_.begin()->min();
 }
 
 QuicPacketNumber PacketNumberQueue::Max() const {
-  DCHECK(!Empty());
+  QUICHE_DCHECK(!Empty());
   return packet_number_intervals_.rbegin()->max() - 1;
 }
 
@@ -156,7 +156,7 @@
 }
 
 QuicPacketCount PacketNumberQueue::LastIntervalLength() const {
-  DCHECK(!Empty());
+  QUICHE_DCHECK(!Empty());
   return packet_number_intervals_.rbegin()->Length();
 }
 
diff --git a/quic/core/frames/quic_frame.cc b/quic/core/frames/quic_frame.cc
index dd1163f..e54e254 100644
--- a/quic/core/frames/quic_frame.cc
+++ b/quic/core/frames/quic_frame.cc
@@ -96,7 +96,7 @@
       frame->type != STOP_WAITING_FRAME &&
       frame->type != STREAMS_BLOCKED_FRAME && frame->type != STREAM_FRAME &&
       frame->type != HANDSHAKE_DONE_FRAME) {
-    CHECK(!frame->delete_forbidden) << *frame;
+    QUICHE_CHECK(!frame->delete_forbidden) << *frame;
   }
 #endif  // QUIC_FRAME_DEBUG
   switch (frame->type) {
@@ -156,7 +156,7 @@
       delete frame->ack_frequency_frame;
       break;
     case NUM_FRAME_TYPES:
-      DCHECK(false) << "Cannot delete type: " << frame->type;
+      QUICHE_DCHECK(false) << "Cannot delete type: " << frame->type;
   }
 }
 
diff --git a/quic/core/frames/quic_new_connection_id_frame.cc b/quic/core/frames/quic_new_connection_id_frame.cc
index cea43aa..fa99dfe 100644
--- a/quic/core/frames/quic_new_connection_id_frame.cc
+++ b/quic/core/frames/quic_new_connection_id_frame.cc
@@ -17,7 +17,7 @@
       sequence_number(sequence_number),
       stateless_reset_token(stateless_reset_token),
       retire_prior_to(retire_prior_to) {
-  DCHECK(retire_prior_to <= sequence_number);
+  QUICHE_DCHECK(retire_prior_to <= sequence_number);
 }
 
 std::ostream& operator<<(std::ostream& os,
diff --git a/quic/core/http/end_to_end_test.cc b/quic/core/http/end_to_end_test.cc
index c017b16..887e0eb 100644
--- a/quic/core/http/end_to_end_test.cc
+++ b/quic/core/http/end_to_end_test.cc
@@ -4543,7 +4543,8 @@
   }
 
   void HoldNextPacket() {
-    DCHECK(packet_content_.empty()) << "There is already one packet on hold.";
+    QUICHE_DCHECK(packet_content_.empty())
+        << "There is already one packet on hold.";
     hold_next_packet_ = true;
   }
 
diff --git a/quic/core/http/http_decoder.cc b/quic/core/http/http_decoder.cc
index 1aee09c..fe33a81 100644
--- a/quic/core/http/http_decoder.cc
+++ b/quic/core/http/http_decoder.cc
@@ -34,7 +34,7 @@
       remaining_push_id_length_(0),
       error_(QUIC_NO_ERROR),
       error_detail_("") {
-  DCHECK(visitor_);
+  QUICHE_DCHECK(visitor_);
 }
 
 HttpDecoder::~HttpDecoder() {}
@@ -84,16 +84,16 @@
 }
 
 QuicByteCount HttpDecoder::ProcessInput(const char* data, QuicByteCount len) {
-  DCHECK_EQ(QUIC_NO_ERROR, error_);
-  DCHECK_NE(STATE_ERROR, state_);
+  QUICHE_DCHECK_EQ(QUIC_NO_ERROR, error_);
+  QUICHE_DCHECK_NE(STATE_ERROR, state_);
 
   QuicDataReader reader(data, len);
   bool continue_processing = true;
   while (continue_processing &&
          (reader.BytesRemaining() != 0 || state_ == STATE_FINISH_PARSING)) {
     // |continue_processing| must have been set to false upon error.
-    DCHECK_EQ(QUIC_NO_ERROR, error_);
-    DCHECK_NE(STATE_ERROR, state_);
+    QUICHE_DCHECK_EQ(QUIC_NO_ERROR, error_);
+    QUICHE_DCHECK_NE(STATE_ERROR, state_);
 
     switch (state_) {
       case STATE_READING_FRAME_TYPE:
@@ -119,11 +119,11 @@
 }
 
 bool HttpDecoder::ReadFrameType(QuicDataReader* reader) {
-  DCHECK_NE(0u, reader->BytesRemaining());
+  QUICHE_DCHECK_NE(0u, reader->BytesRemaining());
   if (current_type_field_length_ == 0) {
     // A new frame is coming.
     current_type_field_length_ = reader->PeekVarInt62Length();
-    DCHECK_NE(0u, current_type_field_length_);
+    QUICHE_DCHECK_NE(0u, current_type_field_length_);
     if (current_type_field_length_ > reader->BytesRemaining()) {
       // Buffer a new type field.
       remaining_type_field_length_ = current_type_field_length_;
@@ -132,7 +132,7 @@
     }
     // The reader has all type data needed, so no need to buffer.
     bool success = reader->ReadVarInt62(&current_frame_type_);
-    DCHECK(success);
+    QUICHE_DCHECK(success);
   } else {
     // Buffer the existing type field.
     BufferFrameType(reader);
@@ -142,7 +142,7 @@
     }
     QuicDataReader type_reader(type_buffer_.data(), current_type_field_length_);
     bool success = type_reader.ReadVarInt62(&current_frame_type_);
-    DCHECK(success);
+    QUICHE_DCHECK(success);
   }
 
   // https://tools.ietf.org/html/draft-ietf-quic-http-31#section-7.2.8
@@ -165,11 +165,11 @@
 }
 
 bool HttpDecoder::ReadFrameLength(QuicDataReader* reader) {
-  DCHECK_NE(0u, reader->BytesRemaining());
+  QUICHE_DCHECK_NE(0u, reader->BytesRemaining());
   if (current_length_field_length_ == 0) {
     // A new frame is coming.
     current_length_field_length_ = reader->PeekVarInt62Length();
-    DCHECK_NE(0u, current_length_field_length_);
+    QUICHE_DCHECK_NE(0u, current_length_field_length_);
     if (current_length_field_length_ > reader->BytesRemaining()) {
       // Buffer a new length field.
       remaining_length_field_length_ = current_length_field_length_;
@@ -178,7 +178,7 @@
     }
     // The reader has all length data needed, so no need to buffer.
     bool success = reader->ReadVarInt62(&current_frame_length_);
-    DCHECK(success);
+    QUICHE_DCHECK(success);
   } else {
     // Buffer the existing length field.
     BufferFrameLength(reader);
@@ -189,7 +189,7 @@
     QuicDataReader length_reader(length_buffer_.data(),
                                  current_length_field_length_);
     bool success = length_reader.ReadVarInt62(&current_frame_length_);
-    DCHECK(success);
+    QUICHE_DCHECK(success);
   }
 
   if (current_frame_length_ > MaxFrameLength(current_frame_type_)) {
@@ -259,8 +259,8 @@
 }
 
 bool HttpDecoder::ReadFramePayload(QuicDataReader* reader) {
-  DCHECK_NE(0u, reader->BytesRemaining());
-  DCHECK_NE(0u, remaining_frame_length_);
+  QUICHE_DCHECK_NE(0u, reader->BytesRemaining());
+  QUICHE_DCHECK_NE(0u, remaining_frame_length_);
 
   bool continue_processing = true;
 
@@ -270,8 +270,8 @@
           remaining_frame_length_, reader->BytesRemaining());
       absl::string_view payload;
       bool success = reader->ReadStringPiece(&payload, bytes_to_read);
-      DCHECK(success);
-      DCHECK(!payload.empty());
+      QUICHE_DCHECK(success);
+      QUICHE_DCHECK(!payload.empty());
       continue_processing = visitor_->OnDataFramePayload(payload);
       remaining_frame_length_ -= payload.length();
       break;
@@ -281,8 +281,8 @@
           remaining_frame_length_, reader->BytesRemaining());
       absl::string_view payload;
       bool success = reader->ReadStringPiece(&payload, bytes_to_read);
-      DCHECK(success);
-      DCHECK(!payload.empty());
+      QUICHE_DCHECK(success);
+      QUICHE_DCHECK(!payload.empty());
       continue_processing = visitor_->OnHeadersFramePayload(payload);
       remaining_frame_length_ -= payload.length();
       break;
@@ -299,7 +299,7 @@
       PushId push_id;
       if (current_frame_length_ == remaining_frame_length_) {
         // A new Push Promise frame just arrived.
-        DCHECK_EQ(0u, current_push_id_length_);
+        QUICHE_DCHECK_EQ(0u, current_push_id_length_);
         current_push_id_length_ = reader->PeekVarInt62Length();
         if (current_push_id_length_ > remaining_frame_length_) {
           RaiseError(QUIC_HTTP_FRAME_ERROR,
@@ -308,13 +308,13 @@
         }
         if (current_push_id_length_ > reader->BytesRemaining()) {
           // Not all bytes of push id is present yet, buffer push id.
-          DCHECK_EQ(0u, remaining_push_id_length_);
+          QUICHE_DCHECK_EQ(0u, remaining_push_id_length_);
           remaining_push_id_length_ = current_push_id_length_;
           BufferPushId(reader);
           break;
         }
         bool success = reader->ReadVarInt62(&push_id);
-        DCHECK(success);
+        QUICHE_DCHECK(success);
         remaining_frame_length_ -= current_push_id_length_;
         if (!visitor_->OnPushPromiseFramePushId(
                 push_id, current_push_id_length_,
@@ -334,7 +334,7 @@
                                       current_push_id_length_);
 
         bool success = push_id_reader.ReadVarInt62(&push_id);
-        DCHECK(success);
+        QUICHE_DCHECK(success);
         if (!visitor_->OnPushPromiseFramePushId(
                 push_id, current_push_id_length_,
                 current_frame_length_ - current_push_id_length_)) {
@@ -346,7 +346,7 @@
       }
 
       // Read Push Promise headers.
-      DCHECK_LT(remaining_frame_length_, current_frame_length_);
+      QUICHE_DCHECK_LT(remaining_frame_length_, current_frame_length_);
       QuicByteCount bytes_to_read = std::min<QuicByteCount>(
           remaining_frame_length_, reader->BytesRemaining());
       if (bytes_to_read == 0) {
@@ -354,8 +354,8 @@
       }
       absl::string_view payload;
       bool success = reader->ReadStringPiece(&payload, bytes_to_read);
-      DCHECK(success);
-      DCHECK(!payload.empty());
+      QUICHE_DCHECK(success);
+      QUICHE_DCHECK(!payload.empty());
       continue_processing = visitor_->OnPushPromiseFramePayload(payload);
       remaining_frame_length_ -= payload.length();
       break;
@@ -404,7 +404,7 @@
 }
 
 bool HttpDecoder::FinishParsing() {
-  DCHECK_EQ(0u, remaining_frame_length_);
+  QUICHE_DCHECK_EQ(0u, remaining_frame_length_);
 
   bool continue_processing = true;
 
@@ -528,8 +528,8 @@
       remaining_frame_length_, reader->BytesRemaining());
   absl::string_view payload;
   bool success = reader->ReadStringPiece(&payload, bytes_to_read);
-  DCHECK(success);
-  DCHECK(!payload.empty());
+  QUICHE_DCHECK(success);
+  QUICHE_DCHECK(!payload.empty());
   remaining_frame_length_ -= payload.length();
   return visitor_->OnUnknownFramePayload(payload);
 }
@@ -539,7 +539,7 @@
       remaining_frame_length_, reader->BytesRemaining());
   absl::string_view payload;
   bool success = reader->ReadStringPiece(&payload, bytes_to_read);
-  DCHECK(success);
+  QUICHE_DCHECK(success);
   remaining_frame_length_ -= payload.length();
   if (remaining_frame_length_ == 0) {
     state_ = STATE_READING_FRAME_TYPE;
@@ -558,7 +558,7 @@
   bool success = reader->ReadBytes(
       &(buffer_[0]) + current_frame_length_ - remaining_frame_length_,
       bytes_to_read);
-  DCHECK(success);
+  QUICHE_DCHECK(success);
   remaining_frame_length_ -= bytes_to_read;
 }
 
@@ -569,7 +569,7 @@
       reader->ReadBytes(length_buffer_.data() + current_length_field_length_ -
                             remaining_length_field_length_,
                         bytes_to_read);
-  DCHECK(success);
+  QUICHE_DCHECK(success);
   remaining_length_field_length_ -= bytes_to_read;
 }
 
@@ -580,19 +580,19 @@
       reader->ReadBytes(type_buffer_.data() + current_type_field_length_ -
                             remaining_type_field_length_,
                         bytes_to_read);
-  DCHECK(success);
+  QUICHE_DCHECK(success);
   remaining_type_field_length_ -= bytes_to_read;
 }
 
 void HttpDecoder::BufferPushId(QuicDataReader* reader) {
-  DCHECK_LE(remaining_push_id_length_, current_frame_length_);
+  QUICHE_DCHECK_LE(remaining_push_id_length_, current_frame_length_);
   QuicByteCount bytes_to_read = std::min<QuicByteCount>(
       reader->BytesRemaining(), remaining_push_id_length_);
   bool success =
       reader->ReadBytes(push_id_buffer_.data() + current_push_id_length_ -
                             remaining_push_id_length_,
                         bytes_to_read);
-  DCHECK(success);
+  QUICHE_DCHECK(success);
   remaining_push_id_length_ -= bytes_to_read;
   remaining_frame_length_ -= bytes_to_read;
 }
diff --git a/quic/core/http/http_decoder_test.cc b/quic/core/http/http_decoder_test.cc
index 791d43c..1be5084 100644
--- a/quic/core/http/http_decoder_test.cc
+++ b/quic/core/http/http_decoder_test.cc
@@ -177,7 +177,7 @@
     QuicByteCount processed_bytes = ProcessInput(input_with_garbage_appended);
 
     // Guaranteed by HttpDecoder::ProcessInput() contract.
-    DCHECK_LE(processed_bytes, input_with_garbage_appended.size());
+    QUICHE_DCHECK_LE(processed_bytes, input_with_garbage_appended.size());
 
     // Caller should set up visitor to pause decoding
     // before HttpDecoder would read garbage.
diff --git a/quic/core/http/http_encoder.cc b/quic/core/http/http_encoder.cc
index 573bfad..fafe3b8 100644
--- a/quic/core/http/http_encoder.cc
+++ b/quic/core/http/http_encoder.cc
@@ -37,7 +37,7 @@
 QuicByteCount HttpEncoder::SerializeDataFrameHeader(
     QuicByteCount payload_length,
     std::unique_ptr<char[]>* output) {
-  DCHECK_NE(0u, payload_length);
+  QUICHE_DCHECK_NE(0u, payload_length);
   QuicByteCount header_length = QuicDataWriter::GetVarInt62Len(payload_length) +
                                 QuicDataWriter::GetVarInt62Len(
                                     static_cast<uint64_t>(HttpFrameType::DATA));
@@ -57,7 +57,7 @@
 QuicByteCount HttpEncoder::SerializeHeadersFrameHeader(
     QuicByteCount payload_length,
     std::unique_ptr<char[]>* output) {
-  DCHECK_NE(0u, payload_length);
+  QUICHE_DCHECK_NE(0u, payload_length);
   QuicByteCount header_length =
       QuicDataWriter::GetVarInt62Len(payload_length) +
       QuicDataWriter::GetVarInt62Len(
diff --git a/quic/core/http/quic_receive_control_stream.cc b/quic/core/http/quic_receive_control_stream.cc
index c87faa2..70e7f4a 100644
--- a/quic/core/http/quic_receive_control_stream.cc
+++ b/quic/core/http/quic_receive_control_stream.cc
@@ -45,7 +45,7 @@
   iovec iov;
   while (!reading_stopped() && decoder_.error() == QUIC_NO_ERROR &&
          sequencer()->GetReadableRegion(&iov)) {
-    DCHECK(!sequencer()->IsClosed());
+    QUICHE_DCHECK(!sequencer()->IsClosed());
 
     QuicByteCount processed_bytes = decoder_.ProcessInput(
         reinterpret_cast<const char*>(iov.iov_base), iov.iov_len);
@@ -57,7 +57,7 @@
 
     // The only reason QuicReceiveControlStream pauses HttpDecoder is an error,
     // in which case the connection would have already been closed.
-    DCHECK_EQ(iov.iov_len, processed_bytes);
+    QUICHE_DCHECK_EQ(iov.iov_len, processed_bytes);
   }
 }
 
@@ -270,7 +270,7 @@
 }
 
 bool QuicReceiveControlStream::OnAcceptChFrame(const AcceptChFrame& frame) {
-  DCHECK_EQ(Perspective::IS_CLIENT, spdy_session()->perspective());
+  QUICHE_DCHECK_EQ(Perspective::IS_CLIENT, spdy_session()->perspective());
 
   if (spdy_session()->debug_visitor()) {
     spdy_session()->debug_visitor()->OnAcceptChFrameReceived(frame);
diff --git a/quic/core/http/quic_send_control_stream.cc b/quic/core/http/quic_send_control_stream.cc
index 949b2bf..8334130 100644
--- a/quic/core/http/quic_send_control_stream.cc
+++ b/quic/core/http/quic_send_control_stream.cc
@@ -104,7 +104,7 @@
 }
 
 void QuicSendControlStream::SendMaxPushIdFrame(PushId max_push_id) {
-  DCHECK_EQ(Perspective::IS_CLIENT, session()->perspective());
+  QUICHE_DCHECK_EQ(Perspective::IS_CLIENT, session()->perspective());
   QuicConnection::ScopedPacketFlusher flusher(session()->connection());
   MaybeSendSettingsFrame();
 
diff --git a/quic/core/http/quic_server_session_base_test.cc b/quic/core/http/quic_server_session_base_test.cc
index 1cb42aa..f9483fe 100644
--- a/quic/core/http/quic_server_session_base_test.cc
+++ b/quic/core/http/quic_server_session_base_test.cc
@@ -95,7 +95,7 @@
   }
 
   QuicSpdyStream* CreateOutgoingBidirectionalStream() override {
-    DCHECK(false);
+    QUICHE_DCHECK(false);
     return nullptr;
   }
 
diff --git a/quic/core/http/quic_spdy_client_session.cc b/quic/core/http/quic_spdy_client_session.cc
index e165de0..ba5b457 100644
--- a/quic/core/http/quic_spdy_client_session.cc
+++ b/quic/core/http/quic_spdy_client_session.cc
@@ -103,7 +103,7 @@
 }
 
 void QuicSpdyClientSession::CryptoConnect() {
-  DCHECK(flow_controller());
+  QUICHE_DCHECK(flow_controller());
   crypto_stream_->CryptoConnect();
 }
 
diff --git a/quic/core/http/quic_spdy_client_session_base.cc b/quic/core/http/quic_spdy_client_session_base.cc
index 996af35..49f0198 100644
--- a/quic/core/http/quic_spdy_client_session_base.cc
+++ b/quic/core/http/quic_spdy_client_session_base.cc
@@ -155,7 +155,7 @@
   promised_by_id_[promised_id] = std::move(promised_owner);
   bool result = promised->OnPromiseHeaders(headers);
   if (result) {
-    DCHECK(promised_by_id_.find(promised_id) != promised_by_id_.end());
+    QUICHE_DCHECK(promised_by_id_.find(promised_id) != promised_by_id_.end());
   }
   return result;
 }
@@ -206,7 +206,7 @@
 void QuicSpdyClientSessionBase::ResetPromised(
     QuicStreamId id,
     QuicRstStreamErrorCode error_code) {
-  DCHECK(QuicUtils::IsServerInitiatedStreamId(transport_version(), id));
+  QUICHE_DCHECK(QuicUtils::IsServerInitiatedStreamId(transport_version(), id));
   ResetStream(id, error_code);
   if (!IsOpenStream(id) && !IsClosedStream(id)) {
     MaybeIncreaseLargestPeerStreamId(id);
diff --git a/quic/core/http/quic_spdy_client_stream.cc b/quic/core/http/quic_spdy_client_stream.cc
index 0d95dd3..931bfb3 100644
--- a/quic/core/http/quic_spdy_client_stream.cc
+++ b/quic/core/http/quic_spdy_client_stream.cc
@@ -48,7 +48,7 @@
     const QuicHeaderList& header_list) {
   QuicSpdyStream::OnInitialHeadersComplete(fin, frame_len, header_list);
 
-  DCHECK(headers_decompressed());
+  QUICHE_DCHECK(headers_decompressed());
   header_bytes_read_ += frame_len;
   if (!SpdyUtils::CopyAndValidateHeaders(header_list, &content_length_,
                                          &response_headers_)) {
diff --git a/quic/core/http/quic_spdy_server_stream_base.cc b/quic/core/http/quic_spdy_server_stream_base.cc
index efe730a..d6cbddf 100644
--- a/quic/core/http/quic_spdy_server_stream_base.cc
+++ b/quic/core/http/quic_spdy_server_stream_base.cc
@@ -25,7 +25,7 @@
       !rst_sent()) {
     // Early cancel the stream if it has stopped reading before receiving FIN
     // or RST.
-    DCHECK(fin_sent() || !session()->connection()->connected());
+    QUICHE_DCHECK(fin_sent() || !session()->connection()->connected());
     // Tell the peer to stop sending further data.
     QUIC_DVLOG(1) << " Server: Send QUIC_STREAM_NO_ERROR on stream " << id();
     if (session()->split_up_send_rst()) {
@@ -41,7 +41,7 @@
 void QuicSpdyServerStreamBase::StopReading() {
   if (!fin_received() && !rst_received() && write_side_closed() &&
       !rst_sent()) {
-    DCHECK(fin_sent());
+    QUICHE_DCHECK(fin_sent());
     // Tell the peer to stop sending further data.
     QUIC_DVLOG(1) << " Server: Send QUIC_STREAM_NO_ERROR on stream " << id();
     if (session()->split_up_send_rst()) {
diff --git a/quic/core/http/quic_spdy_session.cc b/quic/core/http/quic_spdy_session.cc
index 8026ac2..5374044 100644
--- a/quic/core/http/quic_spdy_session.cc
+++ b/quic/core/http/quic_spdy_session.cc
@@ -180,12 +180,12 @@
 
   SpdyHeadersHandlerInterface* OnHeaderFrameStart(
       SpdyStreamId /* stream_id */) override {
-    DCHECK(!VersionUsesHttp3(session_->transport_version()));
+    QUICHE_DCHECK(!VersionUsesHttp3(session_->transport_version()));
     return &header_list_;
   }
 
   void OnHeaderFrameEnd(SpdyStreamId /* stream_id */) override {
-    DCHECK(!VersionUsesHttp3(session_->transport_version()));
+    QUICHE_DCHECK(!VersionUsesHttp3(session_->transport_version()));
 
     LogHeaderCompressionRatioHistogram(
         /* using_qpack = */ false,
@@ -201,7 +201,7 @@
   void OnStreamFrameData(SpdyStreamId /*stream_id*/,
                          const char* /*data*/,
                          size_t /*len*/) override {
-    DCHECK(!VersionUsesHttp3(session_->transport_version()));
+    QUICHE_DCHECK(!VersionUsesHttp3(session_->transport_version()));
     CloseConnection("SPDY DATA frame received.",
                     QUIC_INVALID_HEADERS_STREAM_DATA);
   }
@@ -290,7 +290,7 @@
   void OnDataFrameHeader(SpdyStreamId /*stream_id*/,
                          size_t /*length*/,
                          bool /*fin*/) override {
-    DCHECK(!VersionUsesHttp3(session_->transport_version()));
+    QUICHE_DCHECK(!VersionUsesHttp3(session_->transport_version()));
     CloseConnection("SPDY DATA frame received.",
                     QUIC_INVALID_HEADERS_STREAM_DATA);
   }
@@ -302,12 +302,12 @@
   }
 
   void OnSetting(SpdySettingsId id, uint32_t value) override {
-    DCHECK(!VersionUsesHttp3(session_->transport_version()));
+    QUICHE_DCHECK(!VersionUsesHttp3(session_->transport_version()));
     session_->OnSetting(id, value);
   }
 
   void OnSettingsEnd() override {
-    DCHECK(!VersionUsesHttp3(session_->transport_version()));
+    QUICHE_DCHECK(!VersionUsesHttp3(session_->transport_version()));
   }
 
   void OnPing(SpdyPingId /*unique_id*/, bool /*is_ack*/) override {
@@ -357,7 +357,7 @@
   void OnPushPromise(SpdyStreamId stream_id,
                      SpdyStreamId promised_stream_id,
                      bool /*end*/) override {
-    DCHECK(!VersionUsesHttp3(session_->transport_version()));
+    QUICHE_DCHECK(!VersionUsesHttp3(session_->transport_version()));
     if (session_->perspective() != Perspective::IS_CLIENT) {
       CloseConnection("PUSH_PROMISE not supported.",
                       QUIC_INVALID_HEADERS_STREAM_DATA);
@@ -375,7 +375,7 @@
                   SpdyStreamId /* parent_id */,
                   int weight,
                   bool /* exclusive */) override {
-    DCHECK(!VersionUsesHttp3(session_->transport_version()));
+    QUICHE_DCHECK(!VersionUsesHttp3(session_->transport_version()));
     if (!session_->IsConnected()) {
       return;
     }
@@ -507,12 +507,12 @@
           QuicUtils::GetHeadersStreamId(transport_version()));
     } else {
       QuicStreamId headers_stream_id = GetNextOutgoingBidirectionalStreamId();
-      DCHECK_EQ(headers_stream_id,
-                QuicUtils::GetHeadersStreamId(transport_version()));
+      QUICHE_DCHECK_EQ(headers_stream_id,
+                       QuicUtils::GetHeadersStreamId(transport_version()));
     }
     auto headers_stream = std::make_unique<QuicHeadersStream>((this));
-    DCHECK_EQ(QuicUtils::GetHeadersStreamId(transport_version()),
-              headers_stream->id());
+    QUICHE_DCHECK_EQ(QuicUtils::GetHeadersStreamId(transport_version()),
+                     headers_stream->id());
 
     headers_stream_ = headers_stream.get();
     ActivateStream(std::move(headers_stream));
@@ -542,7 +542,7 @@
 
 void QuicSpdySession::OnDecoderStreamError(QuicErrorCode error_code,
                                            absl::string_view error_message) {
-  DCHECK(VersionUsesHttp3(transport_version()));
+  QUICHE_DCHECK(VersionUsesHttp3(transport_version()));
 
   CloseConnectionWithDetails(
       error_code, absl::StrCat("Decoder stream error: ", error_message));
@@ -550,7 +550,7 @@
 
 void QuicSpdySession::OnEncoderStreamError(QuicErrorCode error_code,
                                            absl::string_view error_message) {
-  DCHECK(VersionUsesHttp3(transport_version()));
+  QUICHE_DCHECK(VersionUsesHttp3(transport_version()));
 
   CloseConnectionWithDetails(
       error_code, absl::StrCat("Encoder stream error: ", error_message));
@@ -690,7 +690,7 @@
     bool fin,
     const spdy::SpdyStreamPrecedence& precedence,
     QuicReferenceCountedPointer<QuicAckListenerInterface> ack_listener) {
-  DCHECK(!VersionUsesHttp3(transport_version()));
+  QUICHE_DCHECK(!VersionUsesHttp3(transport_version()));
 
   return WriteHeadersOnHeadersStreamImpl(
       id, std::move(headers), fin,
@@ -703,7 +703,7 @@
                                       QuicStreamId parent_stream_id,
                                       int weight,
                                       bool exclusive) {
-  DCHECK(!VersionUsesHttp3(transport_version()));
+  QUICHE_DCHECK(!VersionUsesHttp3(transport_version()));
   SpdyPriorityIR priority_frame(id, parent_stream_id, weight, exclusive);
   SpdySerializedFrame frame(spdy_framer_.SerializeFrame(priority_frame));
   headers_stream()->WriteOrBufferData(
@@ -713,7 +713,7 @@
 
 void QuicSpdySession::WriteHttp3PriorityUpdate(
     const PriorityUpdateFrame& priority_update) {
-  DCHECK(VersionUsesHttp3(transport_version()));
+  QUICHE_DCHECK(VersionUsesHttp3(transport_version()));
 
   send_control_stream_->WritePriorityUpdate(priority_update);
 }
@@ -765,7 +765,7 @@
   // goaway.
   if (perspective() == Perspective::IS_SERVER &&
       frame.stream_count >= QuicUtils::GetMaxStreamCount()) {
-    DCHECK_EQ(frame.stream_count, QuicUtils::GetMaxStreamCount());
+    QUICHE_DCHECK_EQ(frame.stream_count, QuicUtils::GetMaxStreamCount());
     SendHttp3GoAway(QUIC_PEER_GOING_AWAY, "stream count too large");
   }
   return true;
@@ -773,8 +773,8 @@
 
 void QuicSpdySession::SendHttp3GoAway(QuicErrorCode error_code,
                                       const std::string& reason) {
-  DCHECK_EQ(perspective(), Perspective::IS_SERVER);
-  DCHECK(VersionUsesHttp3(transport_version()));
+  QUICHE_DCHECK_EQ(perspective(), Perspective::IS_SERVER);
+  QUICHE_DCHECK(VersionUsesHttp3(transport_version()));
   if (GetQuicReloadableFlag(quic_encrypted_goaway)) {
     QUIC_RELOADABLE_FLAG_COUNT_N(quic_encrypted_goaway, 2, 2);
     if (!IsEncryptionEstablished()) {
@@ -835,8 +835,8 @@
     return;
   }
 
-  DCHECK_EQ(perspective(), Perspective::IS_SERVER);
-  DCHECK(VersionUsesHttp3(transport_version()));
+  QUICHE_DCHECK_EQ(perspective(), Perspective::IS_SERVER);
+  QUICHE_DCHECK(VersionUsesHttp3(transport_version()));
   QuicStreamCount advertised_max_incoming_bidirectional_streams =
       GetAdvertisedMaxIncomingBidirectionalStreams();
   const QuicStreamId stream_id =
@@ -915,13 +915,13 @@
 }
 
 QpackEncoder* QuicSpdySession::qpack_encoder() {
-  DCHECK(VersionUsesHttp3(transport_version()));
+  QUICHE_DCHECK(VersionUsesHttp3(transport_version()));
 
   return qpack_encoder_.get();
 }
 
 QpackDecoder* QuicSpdySession::qpack_decoder() {
-  DCHECK(VersionUsesHttp3(transport_version()));
+  QUICHE_DCHECK(VersionUsesHttp3(transport_version()));
 
   return qpack_decoder_.get();
 }
@@ -964,7 +964,8 @@
 
 // True if there are open HTTP requests.
 bool QuicSpdySession::ShouldKeepConnectionAlive() const {
-  DCHECK(VersionUsesHttp3(transport_version()) || 0u == pending_streams_size());
+  QUICHE_DCHECK(VersionUsesHttp3(transport_version()) ||
+                0u == pending_streams_size());
   return GetNumActiveStreams() + pending_streams_size() > 0;
 }
 
@@ -983,7 +984,7 @@
     int weight,
     bool exclusive,
     QuicReferenceCountedPointer<QuicAckListenerInterface> ack_listener) {
-  DCHECK(!VersionUsesHttp3(transport_version()));
+  QUICHE_DCHECK(!VersionUsesHttp3(transport_version()));
 
   const QuicByteCount uncompressed_size = headers.TotalBytesUsed();
   SpdyHeadersIR headers_frame(id, std::move(headers));
@@ -1027,8 +1028,8 @@
 }
 
 bool QuicSpdySession::ResumeApplicationState(ApplicationState* cached_state) {
-  DCHECK_EQ(perspective(), Perspective::IS_CLIENT);
-  DCHECK(VersionUsesHttp3(transport_version()));
+  QUICHE_DCHECK_EQ(perspective(), Perspective::IS_CLIENT);
+  QUICHE_DCHECK(VersionUsesHttp3(transport_version()));
 
   SettingsFrame out;
   if (!HttpDecoder::DecodeSettings(
@@ -1067,7 +1068,7 @@
 }
 
 bool QuicSpdySession::OnSettingsFrame(const SettingsFrame& frame) {
-  DCHECK(VersionUsesHttp3(transport_version()));
+  QUICHE_DCHECK(VersionUsesHttp3(transport_version()));
   if (debug_visitor_ != nullptr) {
     debug_visitor_->OnSettingsFrameReceived(frame);
   }
@@ -1251,18 +1252,20 @@
       return;
     }
   }
-  DCHECK_EQ(QuicUtils::GetInvalidStreamId(transport_version()), stream_id_);
-  DCHECK_EQ(QuicUtils::GetInvalidStreamId(transport_version()),
-            promised_stream_id_);
+  QUICHE_DCHECK_EQ(QuicUtils::GetInvalidStreamId(transport_version()),
+                   stream_id_);
+  QUICHE_DCHECK_EQ(QuicUtils::GetInvalidStreamId(transport_version()),
+                   promised_stream_id_);
   stream_id_ = stream_id;
   fin_ = fin;
 }
 
 void QuicSpdySession::OnPushPromise(SpdyStreamId stream_id,
                                     SpdyStreamId promised_stream_id) {
-  DCHECK_EQ(QuicUtils::GetInvalidStreamId(transport_version()), stream_id_);
-  DCHECK_EQ(QuicUtils::GetInvalidStreamId(transport_version()),
-            promised_stream_id_);
+  QUICHE_DCHECK_EQ(QuicUtils::GetInvalidStreamId(transport_version()),
+                   stream_id_);
+  QUICHE_DCHECK_EQ(QuicUtils::GetInvalidStreamId(transport_version()),
+                   promised_stream_id_);
   stream_id_ = stream_id;
   promised_stream_id_ = promised_stream_id;
 }
@@ -1284,8 +1287,8 @@
                 << ": " << header_list.DebugString();
   // This code path is only executed for push promise in IETF QUIC.
   if (VersionUsesHttp3(transport_version())) {
-    DCHECK(promised_stream_id_ !=
-           QuicUtils::GetInvalidStreamId(transport_version()));
+    QUICHE_DCHECK(promised_stream_id_ !=
+                  QuicUtils::GetInvalidStreamId(transport_version()));
   }
   if (promised_stream_id_ ==
       QuicUtils::GetInvalidStreamId(transport_version())) {
@@ -1330,8 +1333,8 @@
 }
 
 bool QuicSpdySession::ProcessPendingStream(PendingStream* pending) {
-  DCHECK(VersionUsesHttp3(transport_version()));
-  DCHECK(connection()->connected());
+  QUICHE_DCHECK(VersionUsesHttp3(transport_version()));
+  QUICHE_DCHECK(connection()->connected());
   struct iovec iov;
   if (!pending->sequencer()->GetReadableRegion(&iov)) {
     // The first byte hasn't been received yet.
@@ -1417,7 +1420,7 @@
 }
 
 void QuicSpdySession::MaybeInitializeHttp3UnidirectionalStreams() {
-  DCHECK(VersionUsesHttp3(transport_version()));
+  QUICHE_DCHECK(VersionUsesHttp3(transport_version()));
   if (!send_control_stream_ && CanOpenNextOutgoingUnidirectionalStream()) {
     auto send_control = std::make_unique<QuicSendControlStream>(
         GetNextOutgoingUnidirectionalStreamId(), this, settings_);
@@ -1463,7 +1466,7 @@
     return;
   }
 
-  DCHECK_EQ(perspective(), Perspective::IS_SERVER);
+  QUICHE_DCHECK_EQ(perspective(), Perspective::IS_SERVER);
 
   QUIC_CODE_COUNT(quic_send_goaway_with_connection_close);
 
@@ -1505,10 +1508,10 @@
 }
 
 void QuicSpdySession::SetMaxPushId(PushId max_push_id) {
-  DCHECK(VersionUsesHttp3(transport_version()));
-  DCHECK_EQ(Perspective::IS_CLIENT, perspective());
+  QUICHE_DCHECK(VersionUsesHttp3(transport_version()));
+  QUICHE_DCHECK_EQ(Perspective::IS_CLIENT, perspective());
   if (max_push_id_.has_value()) {
-    DCHECK_GE(max_push_id, max_push_id_.value());
+    QUICHE_DCHECK_GE(max_push_id, max_push_id_.value());
   }
 
   if (!max_push_id_.has_value() && max_push_id == 0) {
@@ -1537,8 +1540,8 @@
 }
 
 bool QuicSpdySession::OnMaxPushIdFrame(PushId max_push_id) {
-  DCHECK(VersionUsesHttp3(transport_version()));
-  DCHECK_EQ(Perspective::IS_SERVER, perspective());
+  QUICHE_DCHECK(VersionUsesHttp3(transport_version()));
+  QUICHE_DCHECK_EQ(Perspective::IS_SERVER, perspective());
 
   if (max_push_id_.has_value()) {
     QUIC_DVLOG(1) << "Setting max_push_id to:  " << max_push_id
@@ -1569,16 +1572,16 @@
 }
 
 void QuicSpdySession::SendMaxPushId() {
-  DCHECK(VersionUsesHttp3(transport_version()));
-  DCHECK_EQ(Perspective::IS_CLIENT, perspective());
+  QUICHE_DCHECK(VersionUsesHttp3(transport_version()));
+  QUICHE_DCHECK_EQ(Perspective::IS_CLIENT, perspective());
 
   send_control_stream_->SendMaxPushIdFrame(max_push_id_.value());
   http3_max_push_id_sent_ = true;
 }
 
 void QuicSpdySession::EnableServerPush() {
-  DCHECK(VersionUsesHttp3(transport_version()));
-  DCHECK_EQ(perspective(), Perspective::IS_SERVER);
+  QUICHE_DCHECK(VersionUsesHttp3(transport_version()));
+  QUICHE_DCHECK_EQ(perspective(), Perspective::IS_SERVER);
 
   ietf_server_push_enabled_ = true;
 }
@@ -1596,7 +1599,7 @@
 }
 
 bool QuicSpdySession::CanCreatePushStreamWithId(PushId push_id) {
-  DCHECK(VersionUsesHttp3(transport_version()));
+  QUICHE_DCHECK(VersionUsesHttp3(transport_version()));
 
   return ietf_server_push_enabled_ && max_push_id_.has_value() &&
          max_push_id_.value() >= push_id;
diff --git a/quic/core/http/quic_spdy_session_test.cc b/quic/core/http/quic_spdy_session_test.cc
index 89d06d4..db263b0 100644
--- a/quic/core/http/quic_spdy_session_test.cc
+++ b/quic/core/http/quic_spdy_session_test.cc
@@ -346,7 +346,7 @@
   }
 
   QuicConsumedData SendLargeFakeData(QuicStream* stream, int bytes) {
-    DCHECK(writev_consumes_all_data_);
+    QUICHE_DCHECK(writev_consumes_all_data_);
     return WritevData(stream->id(), bytes, 0, FIN, NOT_RETRANSMISSION,
                       GetEncryptionLevelToSendApplicationData());
   }
diff --git a/quic/core/http/quic_spdy_stream.cc b/quic/core/http/quic_spdy_stream.cc
index 4e84d9b..aa5f7bf 100644
--- a/quic/core/http/quic_spdy_stream.cc
+++ b/quic/core/http/quic_spdy_stream.cc
@@ -76,7 +76,7 @@
   }
 
   bool OnDataFramePayload(absl::string_view payload) override {
-    DCHECK(!payload.empty());
+    QUICHE_DCHECK(!payload.empty());
     return stream_->OnDataFramePayload(payload);
   }
 
@@ -92,7 +92,7 @@
   }
 
   bool OnHeadersFramePayload(absl::string_view payload) override {
-    DCHECK(!payload.empty());
+    QUICHE_DCHECK(!payload.empty());
     if (!VersionUsesHttp3(stream_->transport_version())) {
       CloseConnectionOnWrongFrame("Headers");
       return false;
@@ -128,7 +128,7 @@
   }
 
   bool OnPushPromiseFramePayload(absl::string_view payload) override {
-    DCHECK(!payload.empty());
+    QUICHE_DCHECK(!payload.empty());
     if (!VersionUsesHttp3(stream_->transport_version())) {
       CloseConnectionOnWrongFrame("Push Promise");
       return false;
@@ -211,10 +211,10 @@
       is_decoder_processing_input_(false),
       ack_listener_(nullptr),
       last_sent_urgency_(kDefaultUrgency) {
-  DCHECK_EQ(session()->connection(), spdy_session->connection());
-  DCHECK_EQ(transport_version(), spdy_session->transport_version());
-  DCHECK(!QuicUtils::IsCryptoStreamId(transport_version(), id));
-  DCHECK_EQ(0u, sequencer()->NumBytesConsumed());
+  QUICHE_DCHECK_EQ(session()->connection(), spdy_session->connection());
+  QUICHE_DCHECK_EQ(transport_version(), spdy_session->transport_version());
+  QUICHE_DCHECK(!QuicUtils::IsCryptoStreamId(transport_version(), id));
+  QUICHE_DCHECK_EQ(0u, sequencer()->NumBytesConsumed());
   // If headers are sent on the headers stream, then do not receive any
   // callbacks from the sequencer until headers are complete.
   if (!VersionUsesHttp3(transport_version())) {
@@ -247,9 +247,9 @@
       is_decoder_processing_input_(false),
       ack_listener_(nullptr),
       last_sent_urgency_(kDefaultUrgency) {
-  DCHECK_EQ(session()->connection(), spdy_session->connection());
-  DCHECK_EQ(transport_version(), spdy_session->transport_version());
-  DCHECK(!QuicUtils::IsCryptoStreamId(transport_version(), id()));
+  QUICHE_DCHECK_EQ(session()->connection(), spdy_session->connection());
+  QUICHE_DCHECK_EQ(transport_version(), spdy_session->transport_version());
+  QUICHE_DCHECK(!QuicUtils::IsCryptoStreamId(transport_version(), id()));
   // If headers are sent on the headers stream, then do not receive any
   // callbacks from the sequencer until headers are complete.
   if (!VersionUsesHttp3(transport_version())) {
@@ -373,7 +373,7 @@
 }
 
 void QuicSpdyStream::WritePushPromise(const PushPromiseFrame& frame) {
-  DCHECK(VersionUsesHttp3(transport_version()));
+  QUICHE_DCHECK(VersionUsesHttp3(transport_version()));
   std::unique_ptr<char[]> push_promise_frame_with_id;
   const size_t push_promise_frame_length =
       HttpEncoder::SerializePushPromiseFrameWithOnlyPushId(
@@ -453,7 +453,7 @@
 }
 
 size_t QuicSpdyStream::Readv(const struct iovec* iov, size_t iov_len) {
-  DCHECK(FinishedReadingHeaders());
+  QUICHE_DCHECK(FinishedReadingHeaders());
   if (!VersionUsesHttp3(transport_version())) {
     return sequencer()->Readv(iov, iov_len);
   }
@@ -464,7 +464,7 @@
 }
 
 int QuicSpdyStream::GetReadableRegions(iovec* iov, size_t iov_len) const {
-  DCHECK(FinishedReadingHeaders());
+  QUICHE_DCHECK(FinishedReadingHeaders());
   if (!VersionUsesHttp3(transport_version())) {
     return sequencer()->GetReadableRegions(iov, iov_len);
   }
@@ -472,7 +472,7 @@
 }
 
 void QuicSpdyStream::MarkConsumed(size_t num_bytes) {
-  DCHECK(FinishedReadingHeaders());
+  QUICHE_DCHECK(FinishedReadingHeaders());
   if (!VersionUsesHttp3(transport_version())) {
     sequencer()->MarkConsumed(num_bytes);
     return;
@@ -532,7 +532,8 @@
 
 void QuicSpdyStream::OnStreamHeadersPriority(
     const spdy::SpdyStreamPrecedence& precedence) {
-  DCHECK_EQ(Perspective::IS_SERVER, session()->connection()->perspective());
+  QUICHE_DCHECK_EQ(Perspective::IS_SERVER,
+                   session()->connection()->perspective());
   SetPriority(precedence);
 }
 
@@ -679,7 +680,7 @@
     size_t /*frame_len*/,
     const QuicHeaderList& header_list) {
   // TODO(b/134706391): remove |fin| argument.
-  DCHECK(!trailers_decompressed_);
+  QUICHE_DCHECK(!trailers_decompressed_);
   if (!VersionUsesHttp3(transport_version()) && fin_received()) {
     QUIC_DLOG(INFO) << ENDPOINT
                     << "Received Trailers after FIN, on stream: " << id();
@@ -718,7 +719,8 @@
 
 void QuicSpdyStream::OnPriorityFrame(
     const spdy::SpdyStreamPrecedence& precedence) {
-  DCHECK_EQ(Perspective::IS_SERVER, session()->connection()->perspective());
+  QUICHE_DCHECK_EQ(Perspective::IS_SERVER,
+                   session()->connection()->perspective());
   SetPriority(precedence);
 }
 
@@ -761,7 +763,7 @@
 void QuicSpdyStream::OnDataAvailable() {
   if (!VersionUsesHttp3(transport_version())) {
     // Sequencer must be blocked until headers are consumed.
-    DCHECK(FinishedReadingHeaders());
+    QUICHE_DCHECK(FinishedReadingHeaders());
   }
 
   if (!VersionUsesHttp3(transport_version())) {
@@ -781,12 +783,12 @@
   iovec iov;
   while (session()->connection()->connected() && !reading_stopped() &&
          decoder_.error() == QUIC_NO_ERROR) {
-    DCHECK_GE(sequencer_offset_, sequencer()->NumBytesConsumed());
+    QUICHE_DCHECK_GE(sequencer_offset_, sequencer()->NumBytesConsumed());
     if (!sequencer()->PeekRegion(sequencer_offset_, &iov)) {
       break;
     }
 
-    DCHECK(!sequencer()->IsClosed());
+    QUICHE_DCHECK(!sequencer()->IsClosed());
     is_decoder_processing_input_ = true;
     QuicByteCount processed_bytes = decoder_.ProcessInput(
         reinterpret_cast<const char*>(iov.iov_base), iov.iov_len);
@@ -877,7 +879,7 @@
 
 bool QuicSpdyStream::OnDataFrameStart(QuicByteCount header_length,
                                       QuicByteCount payload_length) {
-  DCHECK(VersionUsesHttp3(transport_version()));
+  QUICHE_DCHECK(VersionUsesHttp3(transport_version()));
 
   if (spdy_session_->debug_visitor()) {
     spdy_session_->debug_visitor()->OnDataFrameReceived(id(), payload_length);
@@ -896,7 +898,7 @@
 }
 
 bool QuicSpdyStream::OnDataFramePayload(absl::string_view payload) {
-  DCHECK(VersionUsesHttp3(transport_version()));
+  QUICHE_DCHECK(VersionUsesHttp3(transport_version()));
 
   body_manager_.OnBody(payload);
 
@@ -904,7 +906,7 @@
 }
 
 bool QuicSpdyStream::OnDataFrameEnd() {
-  DCHECK(VersionUsesHttp3(transport_version()));
+  QUICHE_DCHECK(VersionUsesHttp3(transport_version()));
 
   QUIC_DVLOG(1) << ENDPOINT
                 << "Reaches the end of a data frame. Total bytes received are "
@@ -924,7 +926,7 @@
 
   const QuicByteCount newly_acked_header_length =
       GetNumFrameHeadersInInterval(offset, data_length);
-  DCHECK_LE(newly_acked_header_length, *newly_acked_length);
+  QUICHE_DCHECK_LE(newly_acked_header_length, *newly_acked_length);
   unacked_frame_headers_offsets_.Difference(offset, offset + data_length);
   if (ack_listener_ != nullptr && new_data_acked) {
     ack_listener_->OnPacketAcked(
@@ -941,7 +943,7 @@
 
   const QuicByteCount retransmitted_header_length =
       GetNumFrameHeadersInInterval(offset, data_length);
-  DCHECK_LE(retransmitted_header_length, data_length);
+  QUICHE_DCHECK_LE(retransmitted_header_length, data_length);
 
   if (ack_listener_ != nullptr) {
     ack_listener_->OnPacketRetransmitted(data_length -
@@ -963,8 +965,8 @@
 
 bool QuicSpdyStream::OnHeadersFrameStart(QuicByteCount header_length,
                                          QuicByteCount payload_length) {
-  DCHECK(VersionUsesHttp3(transport_version()));
-  DCHECK(!qpack_decoded_headers_accumulator_);
+  QUICHE_DCHECK(VersionUsesHttp3(transport_version()));
+  QUICHE_DCHECK(!qpack_decoded_headers_accumulator_);
 
   if (spdy_session_->debug_visitor()) {
     spdy_session_->debug_visitor()->OnHeadersFrameReceived(id(),
@@ -991,8 +993,8 @@
 }
 
 bool QuicSpdyStream::OnHeadersFramePayload(absl::string_view payload) {
-  DCHECK(VersionUsesHttp3(transport_version()));
-  DCHECK(qpack_decoded_headers_accumulator_);
+  QUICHE_DCHECK(VersionUsesHttp3(transport_version()));
+  QUICHE_DCHECK(qpack_decoded_headers_accumulator_);
 
   qpack_decoded_headers_accumulator_->Decode(payload);
 
@@ -1006,8 +1008,8 @@
 }
 
 bool QuicSpdyStream::OnHeadersFrameEnd() {
-  DCHECK(VersionUsesHttp3(transport_version()));
-  DCHECK(qpack_decoded_headers_accumulator_);
+  QUICHE_DCHECK(VersionUsesHttp3(transport_version()));
+  QUICHE_DCHECK(qpack_decoded_headers_accumulator_);
 
   qpack_decoded_headers_accumulator_->EndHeaderBlock();
 
@@ -1022,8 +1024,8 @@
 }
 
 bool QuicSpdyStream::OnPushPromiseFrameStart(QuicByteCount header_length) {
-  DCHECK(VersionUsesHttp3(transport_version()));
-  DCHECK(!qpack_decoded_headers_accumulator_);
+  QUICHE_DCHECK(VersionUsesHttp3(transport_version()));
+  QUICHE_DCHECK(!qpack_decoded_headers_accumulator_);
 
   sequencer()->MarkConsumed(body_manager_.OnNonBody(header_length));
 
@@ -1034,8 +1036,8 @@
     PushId push_id,
     QuicByteCount push_id_length,
     QuicByteCount header_block_length) {
-  DCHECK(VersionUsesHttp3(transport_version()));
-  DCHECK(!qpack_decoded_headers_accumulator_);
+  QUICHE_DCHECK(VersionUsesHttp3(transport_version()));
+  QUICHE_DCHECK(!qpack_decoded_headers_accumulator_);
 
   if (spdy_session_->debug_visitor()) {
     spdy_session_->debug_visitor()->OnPushPromiseFrameReceived(
@@ -1060,7 +1062,7 @@
 }
 
 bool QuicSpdyStream::OnPushPromiseFrameEnd() {
-  DCHECK(VersionUsesHttp3(transport_version()));
+  QUICHE_DCHECK(VersionUsesHttp3(transport_version()));
 
   return OnHeadersFrameEnd();
 }
diff --git a/quic/core/http/quic_spdy_stream_body_manager.cc b/quic/core/http/quic_spdy_stream_body_manager.cc
index efecca5..1d40e03 100644
--- a/quic/core/http/quic_spdy_stream_body_manager.cc
+++ b/quic/core/http/quic_spdy_stream_body_manager.cc
@@ -15,7 +15,7 @@
     : total_body_bytes_received_(0) {}
 
 size_t QuicSpdyStreamBodyManager::OnNonBody(QuicByteCount length) {
-  DCHECK_NE(0u, length);
+  QUICHE_DCHECK_NE(0u, length);
 
   if (fragments_.empty()) {
     // Non-body bytes can be consumed immediately, because all previously
@@ -29,7 +29,7 @@
 }
 
 void QuicSpdyStreamBodyManager::OnBody(absl::string_view body) {
-  DCHECK(!body.empty());
+  QUICHE_DCHECK(!body.empty());
 
   fragments_.push_back({body, 0});
   total_body_bytes_received_ += body.length();
@@ -66,8 +66,8 @@
 }
 
 int QuicSpdyStreamBodyManager::PeekBody(iovec* iov, size_t iov_len) const {
-  DCHECK(iov);
-  DCHECK_GT(iov_len, 0u);
+  QUICHE_DCHECK(iov);
+  QUICHE_DCHECK_GT(iov_len, 0u);
 
   // TODO(bnc): Is this really necessary?
   if (fragments_.empty()) {
diff --git a/quic/core/http/quic_spdy_stream_body_manager_test.cc b/quic/core/http/quic_spdy_stream_body_manager_test.cc
index 096982f..90e50d4 100644
--- a/quic/core/http/quic_spdy_stream_body_manager_test.cc
+++ b/quic/core/http/quic_spdy_stream_body_manager_test.cc
@@ -260,7 +260,7 @@
       std::vector<iovec> iovecs;
       size_t offset = 0;
       for (size_t iov_length : iov_lengths[call_index]) {
-        CHECK(offset + iov_length <= buffer.size());
+        QUICHE_CHECK(offset + iov_length <= buffer.size());
         iovecs.push_back({&buffer[offset], iov_length});
         offset += iov_length;
       }
diff --git a/quic/core/http/quic_spdy_stream_test.cc b/quic/core/http/quic_spdy_stream_test.cc
index d7aa6e7..14f3eab 100644
--- a/quic/core/http/quic_spdy_stream_test.cc
+++ b/quic/core/http/quic_spdy_stream_test.cc
@@ -479,7 +479,7 @@
     // Even though integers can be encoded with different lengths,
     // QuicDataWriter is expected to produce an encoding in Write*() of length
     // promised in GetVarInt62Len().
-    DCHECK_EQ(length, writer.length());
+    QUICHE_DCHECK_EQ(length, writer.length());
 
     return frame;
   }
diff --git a/quic/core/legacy_quic_stream_id_manager.cc b/quic/core/legacy_quic_stream_id_manager.cc
index c9a0f9b..36974af 100644
--- a/quic/core/legacy_quic_stream_id_manager.cc
+++ b/quic/core/legacy_quic_stream_id_manager.cc
@@ -36,7 +36,7 @@
 LegacyQuicStreamIdManager::~LegacyQuicStreamIdManager() {}
 
 bool LegacyQuicStreamIdManager::CanOpenNextOutgoingStream() const {
-  DCHECK_LE(num_open_outgoing_streams_, max_open_outgoing_streams_);
+  QUICHE_DCHECK_LE(num_open_outgoing_streams_, max_open_outgoing_streams_);
   QUIC_DLOG_IF(INFO, num_open_outgoing_streams_ == max_open_outgoing_streams_)
       << "Failed to create a new outgoing stream. "
       << "Already " << num_open_outgoing_streams_ << " open.";
diff --git a/quic/core/qpack/fuzzer/qpack_decoder_fuzzer.cc b/quic/core/qpack/fuzzer/qpack_decoder_fuzzer.cc
index 23e0523..9c51f61 100644
--- a/quic/core/qpack/fuzzer/qpack_decoder_fuzzer.cc
+++ b/quic/core/qpack/fuzzer/qpack_decoder_fuzzer.cc
@@ -58,7 +58,7 @@
   void OnDecodingCompleted() override {
     // Will delete |this|.
     size_t result = processing_decoders_->erase(stream_id_);
-    CHECK_EQ(1u, result);
+    QUICHE_CHECK_EQ(1u, result);
   }
 
   void OnDecodingErrorDetected(absl::string_view /*error_message*/) override {
diff --git a/quic/core/qpack/fuzzer/qpack_round_trip_fuzzer.cc b/quic/core/qpack/fuzzer/qpack_round_trip_fuzzer.cc
index ab11210..4e4ebc4 100644
--- a/quic/core/qpack/fuzzer/qpack_round_trip_fuzzer.cc
+++ b/quic/core/qpack/fuzzer/qpack_round_trip_fuzzer.cc
@@ -37,8 +37,8 @@
 
   ~EncodingEndpoint() {
     // Every reference should be acknowledged.
-    CHECK_EQ(std::numeric_limits<uint64_t>::max(),
-             QpackEncoderPeer::smallest_blocking_index(&encoder_));
+    QUICHE_CHECK_EQ(std::numeric_limits<uint64_t>::max(),
+                    QpackEncoderPeer::smallest_blocking_index(&encoder_));
   }
 
   void set_qpack_stream_sender_delegate(QpackStreamSenderDelegate* delegate) {
@@ -67,7 +67,8 @@
 
     void OnDecoderStreamError(QuicErrorCode error_code,
                               absl::string_view error_message) override {
-      CHECK(false) << QuicErrorCodeToString(error_code) << " " << error_message;
+      QUICHE_CHECK(false) << QuicErrorCodeToString(error_code) << " "
+                          << error_message;
     }
   };
 
@@ -102,7 +103,7 @@
                                 QuicFuzzedDataProvider* provider)
       : visitor_(visitor), provider_(provider) {}
 
-  ~DelayedHeaderBlockTransmitter() { CHECK(header_blocks_.empty()); }
+  ~DelayedHeaderBlockTransmitter() { QUICHE_CHECK(header_blocks_.empty()); }
 
   // Enqueues |encoded_header_block| for delayed transmission.
   void SendEncodedHeaderBlock(QuicStreamId stream_id,
@@ -111,7 +112,7 @@
     if (it == header_blocks_.end() || it->first != stream_id) {
       it = header_blocks_.insert(it, {stream_id, {}});
     }
-    CHECK_EQ(stream_id, it->first);
+    QUICHE_CHECK_EQ(stream_id, it->first);
     it->second.push(HeaderBlock(std::move(encoded_header_block)));
   }
 
@@ -140,13 +141,13 @@
       visitor_->OnHeaderBlockStart(stream_id);
     }
 
-    DCHECK_NE(0u, header_block.RemainingLength());
+    QUICHE_DCHECK_NE(0u, header_block.RemainingLength());
 
     size_t length = provider_->ConsumeIntegralInRange<size_t>(
         1, header_block.RemainingLength());
     visitor_->OnHeaderBlockFragment(stream_id, header_block.Consume(length));
 
-    DCHECK_NE(0u, header_block.ConsumedLength());
+    QUICHE_DCHECK_NE(0u, header_block.ConsumedLength());
 
     if (header_block.RemainingLength() == 0) {
       visitor_->OnHeaderBlockEnd(stream_id);
@@ -170,20 +171,20 @@
       HeaderBlock& header_block = header_block_queue.front();
 
       if (header_block.ConsumedLength() == 0) {
-        CHECK(!visitor_->IsDecodingInProgressOnStream(stream_id));
+        QUICHE_CHECK(!visitor_->IsDecodingInProgressOnStream(stream_id));
         visitor_->OnHeaderBlockStart(stream_id);
       }
 
-      DCHECK_NE(0u, header_block.RemainingLength());
+      QUICHE_DCHECK_NE(0u, header_block.RemainingLength());
 
       visitor_->OnHeaderBlockFragment(stream_id,
                                       header_block.ConsumeRemaining());
 
-      DCHECK_NE(0u, header_block.ConsumedLength());
-      DCHECK_EQ(0u, header_block.RemainingLength());
+      QUICHE_DCHECK_NE(0u, header_block.ConsumedLength());
+      QUICHE_DCHECK_EQ(0u, header_block.RemainingLength());
 
       visitor_->OnHeaderBlockEnd(stream_id);
-      CHECK(!visitor_->IsDecodingInProgressOnStream(stream_id));
+      QUICHE_CHECK(!visitor_->IsDecodingInProgressOnStream(stream_id));
 
       header_block_queue.pop();
       if (header_block_queue.empty()) {
@@ -199,7 +200,7 @@
     explicit HeaderBlock(std::string data)
         : data_(std::move(data)), offset_(0) {
       // Valid QPACK header block cannot be empty.
-      DCHECK(!data_.empty());
+      QUICHE_DCHECK(!data_.empty());
     }
 
     size_t ConsumedLength() const { return offset_; }
@@ -207,8 +208,8 @@
     size_t RemainingLength() const { return data_.length() - offset_; }
 
     absl::string_view Consume(size_t length) {
-      DCHECK_NE(0u, length);
-      DCHECK_LE(length, RemainingLength());
+      QUICHE_DCHECK_NE(0u, length);
+      QUICHE_DCHECK_LE(length, RemainingLength());
 
       absl::string_view consumed = absl::string_view(&data_[offset_], length);
       offset_ += length;
@@ -270,15 +271,15 @@
   void OnHeadersDecoded(QuicHeaderList headers,
                         bool header_list_size_limit_exceeded) override {
     // Verify headers.
-    CHECK(!header_list_size_limit_exceeded);
-    CHECK(expected_header_list_ == headers);
+    QUICHE_CHECK(!header_list_size_limit_exceeded);
+    QUICHE_CHECK(expected_header_list_ == headers);
 
     // Might destroy |this|.
     visitor_->OnHeaderBlockDecoded(stream_id_);
   }
 
   void OnHeaderDecodingError(absl::string_view error_message) override {
-    CHECK(false) << error_message;
+    QUICHE_CHECK(false) << error_message;
   }
 
   void Decode(absl::string_view data) { accumulator_.Decode(data); }
@@ -306,8 +307,8 @@
 
   ~DecodingEndpoint() override {
     // All decoding must have been completed.
-    CHECK(expected_header_lists_.empty());
-    CHECK(verifying_decoders_.empty());
+    QUICHE_CHECK(expected_header_lists_.empty());
+    QUICHE_CHECK(verifying_decoders_.empty());
   }
 
   void set_qpack_stream_sender_delegate(QpackStreamSenderDelegate* delegate) {
@@ -324,14 +325,14 @@
     if (it == expected_header_lists_.end() || it->first != stream_id) {
       it = expected_header_lists_.insert(it, {stream_id, {}});
     }
-    CHECK_EQ(stream_id, it->first);
+    QUICHE_CHECK_EQ(stream_id, it->first);
     it->second.push(std::move(expected_header_list));
   }
 
   // VerifyingDecoder::Visitor implementation.
   void OnHeaderBlockDecoded(QuicStreamId stream_id) override {
     auto result = verifying_decoders_.erase(stream_id);
-    CHECK_EQ(1u, result);
+    QUICHE_CHECK_EQ(1u, result);
   }
 
   // DelayedHeaderBlockTransmitter::Visitor implementation.
@@ -340,9 +341,9 @@
   }
 
   void OnHeaderBlockStart(QuicStreamId stream_id) override {
-    CHECK(!IsDecodingInProgressOnStream(stream_id));
+    QUICHE_CHECK(!IsDecodingInProgressOnStream(stream_id));
     auto it = expected_header_lists_.find(stream_id);
-    CHECK(it != expected_header_lists_.end());
+    QUICHE_CHECK(it != expected_header_lists_.end());
 
     auto& header_list_queue = it->second;
     QuicHeaderList expected_header_list = std::move(header_list_queue.front());
@@ -356,19 +357,19 @@
         stream_id, this, &decoder_, std::move(expected_header_list));
     auto result =
         verifying_decoders_.insert({stream_id, std::move(verifying_decoder)});
-    CHECK(result.second);
+    QUICHE_CHECK(result.second);
   }
 
   void OnHeaderBlockFragment(QuicStreamId stream_id,
                              absl::string_view data) override {
     auto it = verifying_decoders_.find(stream_id);
-    CHECK(it != verifying_decoders_.end());
+    QUICHE_CHECK(it != verifying_decoders_.end());
     it->second->Decode(data);
   }
 
   void OnHeaderBlockEnd(QuicStreamId stream_id) override {
     auto it = verifying_decoders_.find(stream_id);
-    CHECK(it != verifying_decoders_.end());
+    QUICHE_CHECK(it != verifying_decoders_.end());
     it->second->EndHeaderBlock();
   }
 
@@ -381,7 +382,8 @@
 
     void OnEncoderStreamError(QuicErrorCode error_code,
                               absl::string_view error_message) override {
-      CHECK(false) << QuicErrorCodeToString(error_code) << " " << error_message;
+      QUICHE_CHECK(false) << QuicErrorCodeToString(error_code) << " "
+                          << error_message;
     }
   };
 
@@ -407,7 +409,7 @@
                                QuicFuzzedDataProvider* provider)
       : receiver_(receiver), provider_(provider) {}
 
-  ~DelayedStreamDataTransmitter() { CHECK(stream_data.empty()); }
+  ~DelayedStreamDataTransmitter() { QUICHE_CHECK(stream_data.empty()); }
 
   // QpackStreamSenderDelegate implementation.
   void WriteStreamData(absl::string_view data) override {
diff --git a/quic/core/qpack/qpack_blocking_manager.cc b/quic/core/qpack/qpack_blocking_manager.cc
index 21f604e..3b03710 100644
--- a/quic/core/qpack/qpack_blocking_manager.cc
+++ b/quic/core/qpack/qpack_blocking_manager.cc
@@ -17,10 +17,10 @@
     return false;
   }
 
-  DCHECK(!it->second.empty());
+  QUICHE_DCHECK(!it->second.empty());
 
   const IndexSet& indices = it->second.front();
-  DCHECK(!indices.empty());
+  QUICHE_DCHECK(!indices.empty());
 
   const uint64_t required_index_count = RequiredInsertCount(indices);
   if (known_received_count_ < required_index_count) {
@@ -62,7 +62,7 @@
 
 void QpackBlockingManager::OnHeaderBlockSent(QuicStreamId stream_id,
                                              IndexSet indices) {
-  DCHECK(!indices.empty());
+  QUICHE_DCHECK(!indices.empty());
 
   IncreaseReferenceCounts(indices);
   header_blocks_[stream_id].push_back(std::move(indices));
@@ -145,8 +145,8 @@
 void QpackBlockingManager::DecreaseReferenceCounts(const IndexSet& indices) {
   for (const uint64_t index : indices) {
     auto it = entry_reference_counts_.find(index);
-    DCHECK(it != entry_reference_counts_.end());
-    DCHECK_NE(0u, it->second);
+    QUICHE_DCHECK(it != entry_reference_counts_.end());
+    QUICHE_DCHECK_NE(0u, it->second);
 
     if (it->second == 1) {
       entry_reference_counts_.erase(it);
diff --git a/quic/core/qpack/qpack_decoded_headers_accumulator.cc b/quic/core/qpack/qpack_decoded_headers_accumulator.cc
index 60be426..f5ddeee 100644
--- a/quic/core/qpack/qpack_decoded_headers_accumulator.cc
+++ b/quic/core/qpack/qpack_decoded_headers_accumulator.cc
@@ -29,7 +29,7 @@
 
 void QpackDecodedHeadersAccumulator::OnHeaderDecoded(absl::string_view name,
                                                      absl::string_view value) {
-  DCHECK(!error_detected_);
+  QUICHE_DCHECK(!error_detected_);
 
   uncompressed_header_bytes_without_overhead_ += name.size() + value.size();
 
@@ -49,8 +49,8 @@
 }
 
 void QpackDecodedHeadersAccumulator::OnDecodingCompleted() {
-  DCHECK(!headers_decoded_);
-  DCHECK(!error_detected_);
+  QUICHE_DCHECK(!headers_decoded_);
+  QUICHE_DCHECK(!error_detected_);
 
   headers_decoded_ = true;
 
@@ -64,8 +64,8 @@
 
 void QpackDecodedHeadersAccumulator::OnDecodingErrorDetected(
     absl::string_view error_message) {
-  DCHECK(!error_detected_);
-  DCHECK(!headers_decoded_);
+  QUICHE_DCHECK(!error_detected_);
+  QUICHE_DCHECK(!headers_decoded_);
 
   error_detected_ = true;
   // Might destroy |this|.
@@ -73,7 +73,7 @@
 }
 
 void QpackDecodedHeadersAccumulator::Decode(absl::string_view data) {
-  DCHECK(!error_detected_);
+  QUICHE_DCHECK(!error_detected_);
 
   compressed_header_bytes_ += data.size();
   // Might destroy |this|.
@@ -81,8 +81,8 @@
 }
 
 void QpackDecodedHeadersAccumulator::EndHeaderBlock() {
-  DCHECK(!error_detected_);
-  DCHECK(!headers_decoded_);
+  QUICHE_DCHECK(!error_detected_);
+  QUICHE_DCHECK(!headers_decoded_);
 
   // Might destroy |this|.
   decoder_->EndHeaderBlock();
diff --git a/quic/core/qpack/qpack_decoder.cc b/quic/core/qpack/qpack_decoder.cc
index 35c64a0..c1ac28c 100644
--- a/quic/core/qpack/qpack_decoder.cc
+++ b/quic/core/qpack/qpack_decoder.cc
@@ -22,7 +22,7 @@
       encoder_stream_receiver_(this),
       maximum_blocked_streams_(maximum_blocked_streams),
       known_received_count_(0) {
-  DCHECK(encoder_stream_error_delegate_);
+  QUICHE_DCHECK(encoder_stream_error_delegate_);
 
   header_table_.SetMaximumDynamicTableCapacity(maximum_dynamic_table_capacity);
 }
@@ -38,13 +38,13 @@
 
 bool QpackDecoder::OnStreamBlocked(QuicStreamId stream_id) {
   auto result = blocked_streams_.insert(stream_id);
-  DCHECK(result.second);
+  QUICHE_DCHECK(result.second);
   return blocked_streams_.size() <= maximum_blocked_streams_;
 }
 
 void QpackDecoder::OnStreamUnblocked(QuicStreamId stream_id) {
   size_t result = blocked_streams_.erase(stream_id);
-  DCHECK_EQ(1u, result);
+  QUICHE_DCHECK_EQ(1u, result);
 }
 
 void QpackDecoder::OnDecodingCompleted(QuicStreamId stream_id,
diff --git a/quic/core/qpack/qpack_decoder_stream_receiver.cc b/quic/core/qpack/qpack_decoder_stream_receiver.cc
index b43d6a0..aed660e 100644
--- a/quic/core/qpack/qpack_decoder_stream_receiver.cc
+++ b/quic/core/qpack/qpack_decoder_stream_receiver.cc
@@ -15,7 +15,7 @@
     : instruction_decoder_(QpackDecoderStreamLanguage(), this),
       delegate_(delegate),
       error_detected_(false) {
-  DCHECK(delegate_);
+  QUICHE_DCHECK(delegate_);
 }
 
 void QpackDecoderStreamReceiver::Decode(absl::string_view data) {
@@ -38,7 +38,7 @@
     return true;
   }
 
-  DCHECK_EQ(instruction, StreamCancellationInstruction());
+  QUICHE_DCHECK_EQ(instruction, StreamCancellationInstruction());
   delegate_->OnStreamCancellation(instruction_decoder_.varint());
   return true;
 }
@@ -46,7 +46,7 @@
 void QpackDecoderStreamReceiver::OnInstructionDecodingError(
     QpackInstructionDecoder::ErrorCode error_code,
     absl::string_view error_message) {
-  DCHECK(!error_detected_);
+  QUICHE_DCHECK(!error_detected_);
 
   error_detected_ = true;
 
diff --git a/quic/core/qpack/qpack_encoder.cc b/quic/core/qpack/qpack_encoder.cc
index 6ad432b..8138266 100644
--- a/quic/core/qpack/qpack_encoder.cc
+++ b/quic/core/qpack/qpack_encoder.cc
@@ -38,7 +38,7 @@
       decoder_stream_receiver_(this),
       maximum_blocked_streams_(0),
       header_list_count_(0) {
-  DCHECK(decoder_stream_error_delegate_);
+  QUICHE_DCHECK(decoder_stream_error_delegate_);
 }
 
 QpackEncoder::~QpackEncoder() {}
@@ -275,8 +275,8 @@
 
   const QuicByteCount encoder_stream_buffered_byte_count =
       encoder_stream_sender_.BufferedByteCount();
-  DCHECK_GE(encoder_stream_buffered_byte_count,
-            initial_encoder_stream_buffered_byte_count);
+  QUICHE_DCHECK_GE(encoder_stream_buffered_byte_count,
+                   initial_encoder_stream_buffered_byte_count);
   if (encoder_stream_sent_byte_count) {
     *encoder_stream_sent_byte_count =
         encoder_stream_buffered_byte_count -
@@ -392,7 +392,7 @@
   // instructions are written.
 
   bool success = header_table_.SetDynamicTableCapacity(dynamic_table_capacity);
-  DCHECK(success);
+  QUICHE_DCHECK(success);
 }
 
 bool QpackEncoder::SetMaximumBlockedStreams(uint64_t maximum_blocked_streams) {
diff --git a/quic/core/qpack/qpack_encoder_stream_receiver.cc b/quic/core/qpack/qpack_encoder_stream_receiver.cc
index 3e6c21c..bf71faf 100644
--- a/quic/core/qpack/qpack_encoder_stream_receiver.cc
+++ b/quic/core/qpack/qpack_encoder_stream_receiver.cc
@@ -8,6 +8,7 @@
 #include "http2/decoder/decode_buffer.h"
 #include "http2/decoder/decode_status.h"
 #include "quic/core/qpack/qpack_instructions.h"
+#include "quic/platform/api/quic_logging.h"
 
 namespace quic {
 
@@ -15,7 +16,7 @@
     : instruction_decoder_(QpackEncoderStreamLanguage(), this),
       delegate_(delegate),
       error_detected_(false) {
-  DCHECK(delegate_);
+  QUICHE_DCHECK(delegate_);
 }
 
 void QpackEncoderStreamReceiver::Decode(absl::string_view data) {
@@ -46,7 +47,7 @@
     return true;
   }
 
-  DCHECK_EQ(instruction, SetDynamicTableCapacityInstruction());
+  QUICHE_DCHECK_EQ(instruction, SetDynamicTableCapacityInstruction());
   delegate_->OnSetDynamicTableCapacity(instruction_decoder_.varint());
   return true;
 }
@@ -54,7 +55,7 @@
 void QpackEncoderStreamReceiver::OnInstructionDecodingError(
     QpackInstructionDecoder::ErrorCode error_code,
     absl::string_view error_message) {
-  DCHECK(!error_detected_);
+  QUICHE_DCHECK(!error_detected_);
 
   error_detected_ = true;
 
diff --git a/quic/core/qpack/qpack_header_table.cc b/quic/core/qpack/qpack_header_table.cc
index 24edc98..6171d84 100644
--- a/quic/core/qpack/qpack_header_table.cc
+++ b/quic/core/qpack/qpack_header_table.cc
@@ -60,7 +60,7 @@
   // Look for exact match in static table.
   auto index_it = static_index_.find(&query);
   if (index_it != static_index_.end()) {
-    DCHECK((*index_it)->IsStatic());
+    QUICHE_DCHECK((*index_it)->IsStatic());
     *index = (*index_it)->InsertionIndex();
     *is_static = true;
     return MatchType::kNameAndValue;
@@ -69,7 +69,7 @@
   // Look for exact match in dynamic table.
   index_it = dynamic_index_.find(&query);
   if (index_it != dynamic_index_.end()) {
-    DCHECK(!(*index_it)->IsStatic());
+    QUICHE_DCHECK(!(*index_it)->IsStatic());
     *index = (*index_it)->InsertionIndex();
     *is_static = false;
     return MatchType::kNameAndValue;
@@ -78,7 +78,7 @@
   // Look for name match in static table.
   auto name_index_it = static_name_index_.find(name);
   if (name_index_it != static_name_index_.end()) {
-    DCHECK(name_index_it->second->IsStatic());
+    QUICHE_DCHECK(name_index_it->second->IsStatic());
     *index = name_index_it->second->InsertionIndex();
     *is_static = true;
     return MatchType::kName;
@@ -87,7 +87,7 @@
   // Look for name match in dynamic table.
   name_index_it = dynamic_name_index_.find(name);
   if (name_index_it != dynamic_name_index_.end()) {
-    DCHECK(!name_index_it->second->IsStatic());
+    QUICHE_DCHECK(!name_index_it->second->IsStatic());
     *index = name_index_it->second->InsertionIndex();
     *is_static = false;
     return MatchType::kName;
@@ -117,11 +117,11 @@
     // An entry with the same name and value already exists.  It needs to be
     // replaced, because |dynamic_index_| tracks the most recent entry for a
     // given name and value.
-    DCHECK_GT(new_entry->InsertionIndex(),
-              (*index_result.first)->InsertionIndex());
+    QUICHE_DCHECK_GT(new_entry->InsertionIndex(),
+                     (*index_result.first)->InsertionIndex());
     dynamic_index_.erase(index_result.first);
     auto result = dynamic_index_.insert(new_entry);
-    CHECK(result.second);
+    QUICHE_CHECK(result.second);
   }
 
   auto name_result = dynamic_name_index_.insert({new_entry->name(), new_entry});
@@ -129,11 +129,11 @@
     // An entry with the same name already exists.  It needs to be replaced,
     // because |dynamic_name_index_| tracks the most recent entry for a given
     // name.
-    DCHECK_GT(new_entry->InsertionIndex(),
-              name_result.first->second->InsertionIndex());
+    QUICHE_DCHECK_GT(new_entry->InsertionIndex(),
+                     name_result.first->second->InsertionIndex());
     dynamic_name_index_.erase(name_result.first);
     auto result = dynamic_name_index_.insert({new_entry->name(), new_entry});
-    CHECK(result.second);
+    QUICHE_CHECK(result.second);
   }
 
   // Notify and deregister observers whose threshold is met, if any.
@@ -152,7 +152,7 @@
 
 uint64_t QpackHeaderTable::MaxInsertSizeWithoutEvictingGivenEntry(
     uint64_t index) const {
-  DCHECK_LE(dropped_entry_count_, index);
+  QUICHE_DCHECK_LE(dropped_entry_count_, index);
 
   if (index > inserted_entry_count()) {
     // All entries are allowed to be evicted.
@@ -180,7 +180,7 @@
   dynamic_table_capacity_ = capacity;
   EvictDownToCurrentCapacity();
 
-  DCHECK_LE(dynamic_table_size_, dynamic_table_capacity_);
+  QUICHE_DCHECK_LE(dynamic_table_size_, dynamic_table_capacity_);
 
   return true;
 }
@@ -198,7 +198,7 @@
 
 void QpackHeaderTable::RegisterObserver(uint64_t required_insert_count,
                                         Observer* observer) {
-  DCHECK_GT(required_insert_count, 0u);
+  QUICHE_DCHECK_GT(required_insert_count, 0u);
   observers_.insert({required_insert_count, observer});
 }
 
@@ -218,8 +218,8 @@
 }
 
 uint64_t QpackHeaderTable::draining_index(float draining_fraction) const {
-  DCHECK_LE(0.0, draining_fraction);
-  DCHECK_LE(draining_fraction, 1.0);
+  QUICHE_DCHECK_LE(0.0, draining_fraction);
+  QUICHE_DCHECK_LE(draining_fraction, 1.0);
 
   const uint64_t required_space = draining_fraction * dynamic_table_capacity_;
   uint64_t space_above_draining_index =
@@ -244,12 +244,12 @@
 
 void QpackHeaderTable::EvictDownToCurrentCapacity() {
   while (dynamic_table_size_ > dynamic_table_capacity_) {
-    DCHECK(!dynamic_entries_.empty());
+    QUICHE_DCHECK(!dynamic_entries_.empty());
 
     QpackEntry* const entry = &dynamic_entries_.front();
     const uint64_t entry_size = entry->Size();
 
-    DCHECK_GE(dynamic_table_size_, entry_size);
+    QUICHE_DCHECK_GE(dynamic_table_size_, entry_size);
     dynamic_table_size_ -= entry_size;
 
     auto index_it = dynamic_index_.find(entry);
diff --git a/quic/core/qpack/qpack_index_conversions.cc b/quic/core/qpack/qpack_index_conversions.cc
index c38668f..66f2ea3 100644
--- a/quic/core/qpack/qpack_index_conversions.cc
+++ b/quic/core/qpack/qpack_index_conversions.cc
@@ -13,14 +13,14 @@
 uint64_t QpackAbsoluteIndexToEncoderStreamRelativeIndex(
     uint64_t absolute_index,
     uint64_t inserted_entry_count) {
-  DCHECK_LT(absolute_index, inserted_entry_count);
+  QUICHE_DCHECK_LT(absolute_index, inserted_entry_count);
 
   return inserted_entry_count - absolute_index - 1;
 }
 
 uint64_t QpackAbsoluteIndexToRequestStreamRelativeIndex(uint64_t absolute_index,
                                                         uint64_t base) {
-  DCHECK_LT(absolute_index, base);
+  QUICHE_DCHECK_LT(absolute_index, base);
 
   return base - absolute_index - 1;
 }
diff --git a/quic/core/qpack/qpack_instruction_decoder.cc b/quic/core/qpack/qpack_instruction_decoder.cc
index b836ff7..bf786a4 100644
--- a/quic/core/qpack/qpack_instruction_decoder.cc
+++ b/quic/core/qpack/qpack_instruction_decoder.cc
@@ -34,8 +34,8 @@
       state_(State::kStartInstruction) {}
 
 bool QpackInstructionDecoder::Decode(absl::string_view data) {
-  DCHECK(!data.empty());
-  DCHECK(!error_detected_);
+  QUICHE_DCHECK(!data.empty());
+  QUICHE_DCHECK(!error_detected_);
 
   while (true) {
     bool success = true;
@@ -73,9 +73,9 @@
     }
 
     // |success| must be false if an error is detected.
-    DCHECK(!error_detected_);
+    QUICHE_DCHECK(!error_detected_);
 
-    DCHECK_LE(bytes_consumed, data.size());
+    QUICHE_DCHECK_LE(bytes_consumed, data.size());
 
     data = absl::string_view(data.data() + bytes_consumed,
                              data.size() - bytes_consumed);
@@ -95,7 +95,7 @@
 }
 
 bool QpackInstructionDecoder::DoStartInstruction(absl::string_view data) {
-  DCHECK(!data.empty());
+  QUICHE_DCHECK(!data.empty());
 
   instruction_ = LookupOpcode(data[0]);
   field_ = instruction_->fields.begin();
@@ -133,7 +133,7 @@
 }
 
 bool QpackInstructionDecoder::DoReadBit(absl::string_view data) {
-  DCHECK(!data.empty());
+  QUICHE_DCHECK(!data.empty());
 
   switch (field_->type) {
     case QpackInstructionFieldType::kSbit: {
@@ -148,7 +148,7 @@
     case QpackInstructionFieldType::kName:
     case QpackInstructionFieldType::kValue: {
       const uint8_t prefix_length = field_->param;
-      DCHECK_GE(7, prefix_length);
+      QUICHE_DCHECK_GE(7, prefix_length);
       const uint8_t bitmask = 1 << prefix_length;
       is_huffman_encoded_ = (data[0] & bitmask) == bitmask;
 
@@ -164,11 +164,11 @@
 
 bool QpackInstructionDecoder::DoVarintStart(absl::string_view data,
                                             size_t* bytes_consumed) {
-  DCHECK(!data.empty());
-  DCHECK(field_->type == QpackInstructionFieldType::kVarint ||
-         field_->type == QpackInstructionFieldType::kVarint2 ||
-         field_->type == QpackInstructionFieldType::kName ||
-         field_->type == QpackInstructionFieldType::kValue);
+  QUICHE_DCHECK(!data.empty());
+  QUICHE_DCHECK(field_->type == QpackInstructionFieldType::kVarint ||
+                field_->type == QpackInstructionFieldType::kVarint2 ||
+                field_->type == QpackInstructionFieldType::kName ||
+                field_->type == QpackInstructionFieldType::kValue);
 
   http2::DecodeBuffer buffer(data.data() + 1, data.size() - 1);
   http2::DecodeStatus status =
@@ -193,11 +193,11 @@
 
 bool QpackInstructionDecoder::DoVarintResume(absl::string_view data,
                                              size_t* bytes_consumed) {
-  DCHECK(!data.empty());
-  DCHECK(field_->type == QpackInstructionFieldType::kVarint ||
-         field_->type == QpackInstructionFieldType::kVarint2 ||
-         field_->type == QpackInstructionFieldType::kName ||
-         field_->type == QpackInstructionFieldType::kValue);
+  QUICHE_DCHECK(!data.empty());
+  QUICHE_DCHECK(field_->type == QpackInstructionFieldType::kVarint ||
+                field_->type == QpackInstructionFieldType::kVarint2 ||
+                field_->type == QpackInstructionFieldType::kName ||
+                field_->type == QpackInstructionFieldType::kValue);
 
   http2::DecodeBuffer buffer(data);
   http2::DecodeStatus status = varint_decoder_.Resume(&buffer);
@@ -208,8 +208,8 @@
       state_ = State::kVarintDone;
       return true;
     case http2::DecodeStatus::kDecodeInProgress:
-      DCHECK_EQ(*bytes_consumed, data.size());
-      DCHECK(buffer.Empty());
+      QUICHE_DCHECK_EQ(*bytes_consumed, data.size());
+      QUICHE_DCHECK(buffer.Empty());
       return true;
     case http2::DecodeStatus::kDecodeError:
       OnError(ErrorCode::INTEGER_TOO_LARGE, "Encoded integer too large.");
@@ -221,10 +221,10 @@
 }
 
 bool QpackInstructionDecoder::DoVarintDone() {
-  DCHECK(field_->type == QpackInstructionFieldType::kVarint ||
-         field_->type == QpackInstructionFieldType::kVarint2 ||
-         field_->type == QpackInstructionFieldType::kName ||
-         field_->type == QpackInstructionFieldType::kValue);
+  QUICHE_DCHECK(field_->type == QpackInstructionFieldType::kVarint ||
+                field_->type == QpackInstructionFieldType::kVarint2 ||
+                field_->type == QpackInstructionFieldType::kName ||
+                field_->type == QpackInstructionFieldType::kValue);
 
   if (field_->type == QpackInstructionFieldType::kVarint) {
     varint_ = varint_decoder_.value();
@@ -266,18 +266,18 @@
 
 bool QpackInstructionDecoder::DoReadString(absl::string_view data,
                                            size_t* bytes_consumed) {
-  DCHECK(!data.empty());
-  DCHECK(field_->type == QpackInstructionFieldType::kName ||
-         field_->type == QpackInstructionFieldType::kValue);
+  QUICHE_DCHECK(!data.empty());
+  QUICHE_DCHECK(field_->type == QpackInstructionFieldType::kName ||
+                field_->type == QpackInstructionFieldType::kValue);
 
   std::string* const string =
       (field_->type == QpackInstructionFieldType::kName) ? &name_ : &value_;
-  DCHECK_LT(string->size(), string_length_);
+  QUICHE_DCHECK_LT(string->size(), string_length_);
 
   *bytes_consumed = std::min(string_length_ - string->size(), data.size());
   string->append(data.data(), *bytes_consumed);
 
-  DCHECK_LE(string->size(), string_length_);
+  QUICHE_DCHECK_LE(string->size(), string_length_);
   if (string->size() == string_length_) {
     state_ = State::kReadStringDone;
   }
@@ -285,12 +285,12 @@
 }
 
 bool QpackInstructionDecoder::DoReadStringDone() {
-  DCHECK(field_->type == QpackInstructionFieldType::kName ||
-         field_->type == QpackInstructionFieldType::kValue);
+  QUICHE_DCHECK(field_->type == QpackInstructionFieldType::kName ||
+                field_->type == QpackInstructionFieldType::kValue);
 
   std::string* const string =
       (field_->type == QpackInstructionFieldType::kName) ? &name_ : &value_;
-  DCHECK_EQ(string->size(), string_length_);
+  QUICHE_DCHECK_EQ(string->size(), string_length_);
 
   if (is_huffman_encoded_) {
     huffman_decoder_.Reset();
@@ -319,13 +319,13 @@
   }
   // |language_| should be defined such that instruction opcodes cover every
   // possible input.
-  DCHECK(false);
+  QUICHE_DCHECK(false);
   return nullptr;
 }
 
 void QpackInstructionDecoder::OnError(ErrorCode error_code,
                                       absl::string_view error_message) {
-  DCHECK(!error_detected_);
+  QUICHE_DCHECK(!error_detected_);
 
   error_detected_ = true;
   delegate_->OnInstructionDecodingError(error_code, error_message);
diff --git a/quic/core/qpack/qpack_instruction_encoder.cc b/quic/core/qpack/qpack_instruction_encoder.cc
index 72d92dd..527c43c 100644
--- a/quic/core/qpack/qpack_instruction_encoder.cc
+++ b/quic/core/qpack/qpack_instruction_encoder.cc
@@ -25,14 +25,14 @@
 void QpackInstructionEncoder::Encode(
     const QpackInstructionWithValues& instruction_with_values,
     std::string* output) {
-  DCHECK(instruction_with_values.instruction());
+  QUICHE_DCHECK(instruction_with_values.instruction());
 
   state_ = State::kOpcode;
   instruction_ = instruction_with_values.instruction();
   field_ = instruction_->fields.begin();
 
   // Field list must not be empty.
-  DCHECK(field_ != instruction_->fields.end());
+  QUICHE_DCHECK(field_ != instruction_->fields.end());
 
   do {
     switch (state_) {
@@ -60,11 +60,11 @@
     }
   } while (field_ != instruction_->fields.end());
 
-  DCHECK(state_ == State::kStartField);
+  QUICHE_DCHECK(state_ == State::kStartField);
 }
 
 void QpackInstructionEncoder::DoOpcode() {
-  DCHECK_EQ(0u, byte_);
+  QUICHE_DCHECK_EQ(0u, byte_);
 
   byte_ = instruction_->opcode.value;
 
@@ -88,10 +88,10 @@
 }
 
 void QpackInstructionEncoder::DoSBit(bool s_bit) {
-  DCHECK(field_->type == QpackInstructionFieldType::kSbit);
+  QUICHE_DCHECK(field_->type == QpackInstructionFieldType::kSbit);
 
   if (s_bit) {
-    DCHECK_EQ(0, byte_ & field_->param);
+    QUICHE_DCHECK_EQ(0, byte_ & field_->param);
 
     byte_ |= field_->param;
   }
@@ -103,10 +103,10 @@
 void QpackInstructionEncoder::DoVarintEncode(uint64_t varint,
                                              uint64_t varint2,
                                              std::string* output) {
-  DCHECK(field_->type == QpackInstructionFieldType::kVarint ||
-         field_->type == QpackInstructionFieldType::kVarint2 ||
-         field_->type == QpackInstructionFieldType::kName ||
-         field_->type == QpackInstructionFieldType::kValue);
+  QUICHE_DCHECK(field_->type == QpackInstructionFieldType::kVarint ||
+                field_->type == QpackInstructionFieldType::kVarint2 ||
+                field_->type == QpackInstructionFieldType::kName ||
+                field_->type == QpackInstructionFieldType::kValue);
   uint64_t integer_to_encode;
   switch (field_->type) {
     case QpackInstructionFieldType::kVarint:
@@ -136,8 +136,8 @@
 
 void QpackInstructionEncoder::DoStartString(absl::string_view name,
                                             absl::string_view value) {
-  DCHECK(field_->type == QpackInstructionFieldType::kName ||
-         field_->type == QpackInstructionFieldType::kValue);
+  QUICHE_DCHECK(field_->type == QpackInstructionFieldType::kName ||
+                field_->type == QpackInstructionFieldType::kValue);
 
   absl::string_view string_to_write =
       (field_->type == QpackInstructionFieldType::kName) ? name : value;
@@ -147,7 +147,7 @@
   use_huffman_ = encoded_size < string_length_;
 
   if (use_huffman_) {
-    DCHECK_EQ(0, byte_ & (1 << field_->param));
+    QUICHE_DCHECK_EQ(0, byte_ & (1 << field_->param));
     byte_ |= (1 << field_->param);
 
     string_length_ = encoded_size;
@@ -159,8 +159,8 @@
 void QpackInstructionEncoder::DoWriteString(absl::string_view name,
                                             absl::string_view value,
                                             std::string* output) {
-  DCHECK(field_->type == QpackInstructionFieldType::kName ||
-         field_->type == QpackInstructionFieldType::kValue);
+  QUICHE_DCHECK(field_->type == QpackInstructionFieldType::kName ||
+                field_->type == QpackInstructionFieldType::kValue);
 
   absl::string_view string_to_write =
       (field_->type == QpackInstructionFieldType::kName) ? name : value;
diff --git a/quic/core/qpack/qpack_instructions.cc b/quic/core/qpack/qpack_instructions.cc
index e3f37a7..7f95762 100644
--- a/quic/core/qpack/qpack_instructions.cc
+++ b/quic/core/qpack/qpack_instructions.cc
@@ -19,7 +19,7 @@
 void ValidateLangague(const QpackLanguage* language) {
 #ifndef NDEBUG
   for (const auto* instruction : *language) {
-    DCHECK_EQ(0, instruction->opcode.value & ~instruction->opcode.mask);
+    QUICHE_DCHECK_EQ(0, instruction->opcode.value & ~instruction->opcode.mask);
   }
 
   for (uint8_t byte = 0; byte < std::numeric_limits<uint8_t>::max(); ++byte) {
@@ -29,7 +29,7 @@
         ++match_count;
       }
     }
-    DCHECK_EQ(1u, match_count) << static_cast<int>(byte);
+    QUICHE_DCHECK_EQ(1u, match_count) << static_cast<int>(byte);
   }
 #else
   (void)language;
diff --git a/quic/core/qpack/qpack_progressive_decoder.cc b/quic/core/qpack/qpack_progressive_decoder.cc
index 87af1b7..ac07fed 100644
--- a/quic/core/qpack/qpack_progressive_decoder.cc
+++ b/quic/core/qpack/qpack_progressive_decoder.cc
@@ -47,7 +47,7 @@
 }
 
 void QpackProgressiveDecoder::Decode(absl::string_view data) {
-  DCHECK(decoding_);
+  QUICHE_DCHECK(decoding_);
 
   if (data.empty() || error_detected_) {
     return;
@@ -56,14 +56,14 @@
   // Decode prefix byte by byte until the first (and only) instruction is
   // decoded.
   while (!prefix_decoded_) {
-    DCHECK(!blocked_);
+    QUICHE_DCHECK(!blocked_);
 
     if (!prefix_decoder_->Decode(data.substr(0, 1))) {
       return;
     }
 
     // |prefix_decoder_->Decode()| must return false if an error is detected.
-    DCHECK(!error_detected_);
+    QUICHE_DCHECK(!error_detected_);
 
     data = data.substr(1);
     if (data.empty()) {
@@ -74,14 +74,14 @@
   if (blocked_) {
     buffer_.append(data.data(), data.size());
   } else {
-    DCHECK(buffer_.empty());
+    QUICHE_DCHECK(buffer_.empty());
 
     instruction_decoder_.Decode(data);
   }
 }
 
 void QpackProgressiveDecoder::EndHeaderBlock() {
-  DCHECK(decoding_);
+  QUICHE_DCHECK(decoding_);
   decoding_ = false;
 
   if (!blocked_) {
@@ -90,7 +90,7 @@
 }
 
 void QpackProgressiveDecoder::OnError(absl::string_view error_message) {
-  DCHECK(!error_detected_);
+  QUICHE_DCHECK(!error_detected_);
 
   error_detected_ = true;
   // Might destroy |this|.
@@ -103,8 +103,9 @@
     return DoPrefixInstruction();
   }
 
-  DCHECK(prefix_decoded_);
-  DCHECK_LE(required_insert_count_, header_table_->inserted_entry_count());
+  QUICHE_DCHECK(prefix_decoded_);
+  QUICHE_DCHECK_LE(required_insert_count_,
+                   header_table_->inserted_entry_count());
 
   if (instruction == QpackIndexedHeaderFieldInstruction()) {
     return DoIndexedHeaderFieldInstruction();
@@ -118,7 +119,7 @@
   if (instruction == QpackLiteralHeaderFieldPostBaseInstruction()) {
     return DoLiteralHeaderFieldPostBaseInstruction();
   }
-  DCHECK_EQ(instruction, QpackLiteralHeaderFieldInstruction());
+  QUICHE_DCHECK_EQ(instruction, QpackLiteralHeaderFieldInstruction());
   return DoLiteralHeaderFieldInstruction();
 }
 
@@ -132,7 +133,7 @@
 }
 
 void QpackProgressiveDecoder::OnInsertCountReachedThreshold() {
-  DCHECK(blocked_);
+  QUICHE_DCHECK(blocked_);
 
   // Clear |blocked_| before calling instruction_decoder_.Decode() below,
   // because that might destroy |this| and ~QpackProgressiveDecoder() needs to
@@ -172,7 +173,7 @@
       return false;
     }
 
-    DCHECK_LT(absolute_index, std::numeric_limits<uint64_t>::max());
+    QUICHE_DCHECK_LT(absolute_index, std::numeric_limits<uint64_t>::max());
     required_insert_count_so_far_ =
         std::max(required_insert_count_so_far_, absolute_index + 1);
 
@@ -212,7 +213,7 @@
     return false;
   }
 
-  DCHECK_LT(absolute_index, std::numeric_limits<uint64_t>::max());
+  QUICHE_DCHECK_LT(absolute_index, std::numeric_limits<uint64_t>::max());
   required_insert_count_so_far_ =
       std::max(required_insert_count_so_far_, absolute_index + 1);
 
@@ -242,7 +243,7 @@
       return false;
     }
 
-    DCHECK_LT(absolute_index, std::numeric_limits<uint64_t>::max());
+    QUICHE_DCHECK_LT(absolute_index, std::numeric_limits<uint64_t>::max());
     required_insert_count_so_far_ =
         std::max(required_insert_count_so_far_, absolute_index + 1);
 
@@ -282,7 +283,7 @@
     return false;
   }
 
-  DCHECK_LT(absolute_index, std::numeric_limits<uint64_t>::max());
+  QUICHE_DCHECK_LT(absolute_index, std::numeric_limits<uint64_t>::max());
   required_insert_count_so_far_ =
       std::max(required_insert_count_so_far_, absolute_index + 1);
 
@@ -306,7 +307,7 @@
 }
 
 bool QpackProgressiveDecoder::DoPrefixInstruction() {
-  DCHECK(!prefix_decoded_);
+  QUICHE_DCHECK(!prefix_decoded_);
 
   if (!QpackDecodeRequiredInsertCount(
           prefix_decoder_->varint(), header_table_->max_entries(),
@@ -337,9 +338,9 @@
 }
 
 void QpackProgressiveDecoder::FinishDecoding() {
-  DCHECK(buffer_.empty());
-  DCHECK(!blocked_);
-  DCHECK(!decoding_);
+  QUICHE_DCHECK(buffer_.empty());
+  QUICHE_DCHECK(!blocked_);
+  QUICHE_DCHECK(!decoding_);
 
   if (error_detected_) {
     return;
diff --git a/quic/core/qpack/qpack_receive_stream.cc b/quic/core/qpack/qpack_receive_stream.cc
index 00fb394..65e290f 100644
--- a/quic/core/qpack/qpack_receive_stream.cc
+++ b/quic/core/qpack/qpack_receive_stream.cc
@@ -23,7 +23,7 @@
 void QpackReceiveStream::OnDataAvailable() {
   iovec iov;
   while (!reading_stopped() && sequencer()->GetReadableRegion(&iov)) {
-    DCHECK(!sequencer()->IsClosed());
+    QUICHE_DCHECK(!sequencer()->IsClosed());
 
     receiver_->Decode(absl::string_view(
         reinterpret_cast<const char*>(iov.iov_base), iov.iov_len));
diff --git a/quic/core/qpack/qpack_required_insert_count.cc b/quic/core/qpack/qpack_required_insert_count.cc
index 841af28..6e17b24 100644
--- a/quic/core/qpack/qpack_required_insert_count.cc
+++ b/quic/core/qpack/qpack_required_insert_count.cc
@@ -30,17 +30,18 @@
 
   // |max_entries| is calculated by dividing an unsigned 64-bit integer by 32,
   // precluding all calculations in this method from overflowing.
-  DCHECK_LE(max_entries, std::numeric_limits<uint64_t>::max() / 32);
+  QUICHE_DCHECK_LE(max_entries, std::numeric_limits<uint64_t>::max() / 32);
 
   if (encoded_required_insert_count > 2 * max_entries) {
     return false;
   }
 
   *required_insert_count = encoded_required_insert_count - 1;
-  DCHECK_LT(*required_insert_count, std::numeric_limits<uint64_t>::max() / 16);
+  QUICHE_DCHECK_LT(*required_insert_count,
+                   std::numeric_limits<uint64_t>::max() / 16);
 
   uint64_t current_wrapped = total_number_of_inserts % (2 * max_entries);
-  DCHECK_LT(current_wrapped, std::numeric_limits<uint64_t>::max() / 16);
+  QUICHE_DCHECK_LT(current_wrapped, std::numeric_limits<uint64_t>::max() / 16);
 
   if (current_wrapped >= *required_insert_count + max_entries) {
     // Required Insert Count wrapped around 1 extra time.
diff --git a/quic/core/qpack/qpack_static_table.cc b/quic/core/qpack/qpack_static_table.cc
index 8a65b07..869d09c 100644
--- a/quic/core/qpack/qpack_static_table.cc
+++ b/quic/core/qpack/qpack_static_table.cc
@@ -130,7 +130,7 @@
     auto* table = new QpackStaticTable();
     table->Initialize(QpackStaticTableVector().data(),
                       QpackStaticTableVector().size());
-    CHECK(table->IsInitialized());
+    QUICHE_CHECK(table->IsInitialized());
     return table;
   }();
   return *shared_static_table;
diff --git a/quic/core/qpack/value_splitting_header_list.cc b/quic/core/qpack/value_splitting_header_list.cc
index 80d7dac..9d4231d 100644
--- a/quic/core/qpack/value_splitting_header_list.cc
+++ b/quic/core/qpack/value_splitting_header_list.cc
@@ -3,7 +3,9 @@
 // found in the LICENSE file.
 
 #include "quic/core/qpack/value_splitting_header_list.h"
+
 #include "absl/strings/string_view.h"
+#include "quic/platform/api/quic_logging.h"
 
 namespace quic {
 namespace {
@@ -61,7 +63,7 @@
 }
 
 void ValueSplittingHeaderList::const_iterator::UpdateHeaderField() {
-  DCHECK(value_start_ != absl::string_view::npos);
+  QUICHE_DCHECK(value_start_ != absl::string_view::npos);
 
   if (header_list_iterator_ == header_list_->end()) {
     return;
@@ -91,7 +93,7 @@
 ValueSplittingHeaderList::ValueSplittingHeaderList(
     const spdy::Http2HeaderBlock* header_list)
     : header_list_(header_list) {
-  DCHECK(header_list_);
+  QUICHE_DCHECK(header_list_);
 }
 
 ValueSplittingHeaderList::const_iterator ValueSplittingHeaderList::begin()
diff --git a/quic/core/quic_alarm.cc b/quic/core/quic_alarm.cc
index cdbe9bf..bfef316 100644
--- a/quic/core/quic_alarm.cc
+++ b/quic/core/quic_alarm.cc
@@ -12,8 +12,8 @@
 QuicAlarm::~QuicAlarm() {}
 
 void QuicAlarm::Set(QuicTime new_deadline) {
-  DCHECK(!IsSet());
-  DCHECK(new_deadline.IsInitialized());
+  QUICHE_DCHECK(!IsSet());
+  QUICHE_DCHECK(new_deadline.IsInitialized());
   deadline_ = new_deadline;
   SetImpl();
 }
diff --git a/quic/core/quic_alarm_test.cc b/quic/core/quic_alarm_test.cc
index 29ff974..8f7296c 100644
--- a/quic/core/quic_alarm_test.cc
+++ b/quic/core/quic_alarm_test.cc
@@ -24,7 +24,7 @@
   void set_alarm(QuicAlarm* alarm) { alarm_ = alarm; }
 
   void OnAlarm() override {
-    DCHECK(alarm_);
+    QUICHE_DCHECK(alarm_);
     delete alarm_;
   }
 
@@ -46,12 +46,12 @@
 
  protected:
   void SetImpl() override {
-    DCHECK(deadline().IsInitialized());
+    QUICHE_DCHECK(deadline().IsInitialized());
     scheduled_ = true;
   }
 
   void CancelImpl() override {
-    DCHECK(!deadline().IsInitialized());
+    QUICHE_DCHECK(!deadline().IsInitialized());
     scheduled_ = false;
   }
 
diff --git a/quic/core/quic_arena_scoped_ptr_test.cc b/quic/core/quic_arena_scoped_ptr_test.cc
index 45bc142..6388cf3 100644
--- a/quic/core/quic_arena_scoped_ptr_test.cc
+++ b/quic/core/quic_arena_scoped_ptr_test.cc
@@ -29,7 +29,7 @@
     case TestParam::kFromArena:
       return "arena";
   }
-  DCHECK(false);
+  QUICHE_DCHECK(false);
   return "?";
 }
 
@@ -40,11 +40,11 @@
     switch (GetParam()) {
       case TestParam::kFromHeap:
         ptr = QuicArenaScopedPtr<TestObject>(new TestObject(value));
-        CHECK(!ptr.is_from_arena());
+        QUICHE_CHECK(!ptr.is_from_arena());
         break;
       case TestParam::kFromArena:
         ptr = arena_.New<TestObject>(value);
-        CHECK(ptr.is_from_arena());
+        QUICHE_CHECK(ptr.is_from_arena());
         break;
     }
     return ptr;
diff --git a/quic/core/quic_buffered_packet_store.cc b/quic/core/quic_buffered_packet_store.cc
index 893fc82..b9e3d10 100644
--- a/quic/core/quic_buffered_packet_store.cc
+++ b/quic/core/quic_buffered_packet_store.cc
@@ -110,7 +110,7 @@
     undecryptable_packets_.back().second.ietf_quic = ietf_quic;
     undecryptable_packets_.back().second.version = version;
   }
-  CHECK(QuicContainsKey(undecryptable_packets_, connection_id));
+  QUICHE_CHECK(QuicContainsKey(undecryptable_packets_, connection_id));
   BufferedPacketList& queue =
       undecryptable_packets_.find(connection_id)->second;
 
@@ -243,7 +243,7 @@
   connections_with_chlo_.pop_front();
 
   BufferedPacketList packets = DeliverPackets(*connection_id);
-  DCHECK(!packets.buffered_packets.empty())
+  QUICHE_DCHECK(!packets.buffered_packets.empty())
       << "Try to deliver connectons without CHLO";
   return packets;
 }
@@ -258,8 +258,8 @@
     const ParsedQuicVersion& version,
     const QuicReceivedPacket& packet,
     std::vector<std::string>* out_alpns) {
-  DCHECK_NE(out_alpns, nullptr);
-  DCHECK_EQ(version.handshake_protocol, PROTOCOL_TLS1_3);
+  QUICHE_DCHECK_NE(out_alpns, nullptr);
+  QUICHE_DCHECK_EQ(version.handshake_protocol, PROTOCOL_TLS1_3);
   auto it = undecryptable_packets_.find(connection_id);
   if (it == undecryptable_packets_.end()) {
     QUIC_BUG << "Cannot ingest packet for unknown connection ID "
diff --git a/quic/core/quic_clock.cc b/quic/core/quic_clock.cc
index f057b40..4d865b5 100644
--- a/quic/core/quic_clock.cc
+++ b/quic/core/quic_clock.cc
@@ -38,7 +38,7 @@
 }
 
 void QuicClock::SetCalibrationOffset(QuicTime::Delta offset) {
-  DCHECK(!is_calibrated_) << "A clock should only be calibrated once";
+  QUICHE_DCHECK(!is_calibrated_) << "A clock should only be calibrated once";
   calibration_offset_ = offset;
   is_calibrated_ = true;
 }
diff --git a/quic/core/quic_coalesced_packet.cc b/quic/core/quic_coalesced_packet.cc
index 47aa93b..2ae9b41 100644
--- a/quic/core/quic_coalesced_packet.cc
+++ b/quic/core/quic_coalesced_packet.cc
@@ -30,10 +30,10 @@
   if (length_ == 0) {
 #ifndef NDEBUG
     for (const auto& buffer : encrypted_buffers_) {
-      DCHECK(buffer.empty());
+      QUICHE_DCHECK(buffer.empty());
     }
 #endif
-    DCHECK(initial_packet_ == nullptr);
+    QUICHE_DCHECK(initial_packet_ == nullptr);
     // This is the first packet, set max_packet_length and self/peer
     // addresses.
     max_packet_length_ = current_max_packet_length;
diff --git a/quic/core/quic_config.cc b/quic/core/quic_config.cc
index 725b513..893d822 100644
--- a/quic/core/quic_config.cc
+++ b/quic/core/quic_config.cc
@@ -37,7 +37,7 @@
                          uint32_t default_value,
                          uint32_t* out,
                          std::string* error_details) {
-  DCHECK(error_details != nullptr);
+  QUICHE_DCHECK(error_details != nullptr);
   QuicErrorCode error = msg.GetUint32(tag, out);
   switch (error) {
     case QUIC_CRYPTO_MESSAGE_PARAMETER_NOT_FOUND:
@@ -112,7 +112,7 @@
     const CryptoHandshakeMessage& peer_hello,
     HelloType /*hello_type*/,
     std::string* error_details) {
-  DCHECK(error_details != nullptr);
+  QUICHE_DCHECK(error_details != nullptr);
   if (tag_ == 0) {
     *error_details =
         "This parameter does not support reading from CryptoHandshakeMessage";
@@ -201,7 +201,7 @@
     const CryptoHandshakeMessage& peer_hello,
     HelloType /*hello_type*/,
     std::string* error_details) {
-  DCHECK(error_details != nullptr);
+  QUICHE_DCHECK(error_details != nullptr);
   uint32_t receive_value32;
   QuicErrorCode error = peer_hello.GetUint32(tag_, &receive_value32);
   // GetUint32 is guaranteed to always initialize receive_value32.
@@ -269,7 +269,7 @@
     const CryptoHandshakeMessage& peer_hello,
     HelloType /*hello_type*/,
     std::string* error_details) {
-  DCHECK(error_details != nullptr);
+  QUICHE_DCHECK(error_details != nullptr);
   QuicErrorCode error = peer_hello.GetUint128(tag_, &receive_value_);
   switch (error) {
     case QUIC_CRYPTO_MESSAGE_PARAMETER_NOT_FOUND:
@@ -339,7 +339,7 @@
     const CryptoHandshakeMessage& peer_hello,
     HelloType /*hello_type*/,
     std::string* error_details) {
-  DCHECK(error_details != nullptr);
+  QUICHE_DCHECK(error_details != nullptr);
   QuicTagVector values;
   QuicErrorCode error = peer_hello.GetTaglist(tag_, &values);
   switch (error) {
@@ -942,7 +942,7 @@
 
 const std::pair<QuicConnectionId, QuicUint128>&
 QuicConfig::ReceivedPreferredAddressConnectionIdAndToken() const {
-  DCHECK(HasReceivedPreferredAddressConnectionIdAndToken());
+  QUICHE_DCHECK(HasReceivedPreferredAddressConnectionIdAndToken());
   return *preferred_address_connection_id_and_token_;
 }
 
@@ -1092,7 +1092,7 @@
     const CryptoHandshakeMessage& peer_hello,
     HelloType hello_type,
     std::string* error_details) {
-  DCHECK(error_details != nullptr);
+  QUICHE_DCHECK(error_details != nullptr);
 
   QuicErrorCode error = QUIC_NO_ERROR;
   if (error == QUIC_NO_ERROR) {
diff --git a/quic/core/quic_connection.cc b/quic/core/quic_connection.cc
index 5c14542..df09b23 100644
--- a/quic/core/quic_connection.cc
+++ b/quic/core/quic_connection.cc
@@ -69,8 +69,8 @@
   AckAlarmDelegate& operator=(const AckAlarmDelegate&) = delete;
 
   void OnAlarm() override {
-    DCHECK(connection_->ack_frame_updated());
-    DCHECK(connection_->connected());
+    QUICHE_DCHECK(connection_->ack_frame_updated());
+    QUICHE_DCHECK(connection_->connected());
     QuicConnection::ScopedPacketFlusher flusher(connection_);
     if (connection_->SupportsMultiplePacketNumberSpaces()) {
       connection_->SendAllPendingAcks();
@@ -95,7 +95,7 @@
       delete;
 
   void OnAlarm() override {
-    DCHECK(connection_->connected());
+    QUICHE_DCHECK(connection_->connected());
     connection_->OnRetransmissionTimeout();
   }
 
@@ -113,7 +113,7 @@
   SendAlarmDelegate& operator=(const SendAlarmDelegate&) = delete;
 
   void OnAlarm() override {
-    DCHECK(connection_->connected());
+    QUICHE_DCHECK(connection_->connected());
     connection_->WriteAndBundleAcksIfNotBlocked();
   }
 
@@ -129,7 +129,7 @@
   PingAlarmDelegate& operator=(const PingAlarmDelegate&) = delete;
 
   void OnAlarm() override {
-    DCHECK(connection_->connected());
+    QUICHE_DCHECK(connection_->connected());
     connection_->OnPingTimeout();
   }
 
@@ -146,7 +146,7 @@
       delete;
 
   void OnAlarm() override {
-    DCHECK(connection_->connected());
+    QUICHE_DCHECK(connection_->connected());
     connection_->DiscoverMtu();
   }
 
@@ -164,7 +164,7 @@
       const ProcessUndecryptablePacketsAlarmDelegate&) = delete;
 
   void OnAlarm() override {
-    DCHECK(connection_->connected());
+    QUICHE_DCHECK(connection_->connected());
     QuicConnection::ScopedPacketFlusher flusher(connection_);
     connection_->MaybeProcessUndecryptablePackets();
   }
@@ -183,7 +183,7 @@
       const DiscardPreviousOneRttKeysAlarmDelegate&) = delete;
 
   void OnAlarm() override {
-    DCHECK(connection_->connected());
+    QUICHE_DCHECK(connection_->connected());
     connection_->DiscardPreviousOneRttKeys();
   }
 
@@ -201,7 +201,7 @@
       const DiscardZeroRttDecryptionKeysAlarmDelegate&) = delete;
 
   void OnAlarm() override {
-    DCHECK(connection_->connected());
+    QUICHE_DCHECK(connection_->connected());
     QUIC_DLOG(INFO) << "0-RTT discard alarm fired";
     connection_->RemoveDecrypter(ENCRYPTION_ZERO_RTT);
   }
@@ -375,8 +375,8 @@
       most_recent_frame_type_(NUM_FRAME_TYPES) {
   QUIC_BUG_IF(!start_peer_migration_earlier_ && send_path_response_);
 
-  DCHECK(perspective_ == Perspective::IS_CLIENT ||
-         self_address_.IsInitialized());
+  QUICHE_DCHECK(perspective_ == Perspective::IS_CLIENT ||
+                self_address_.IsInitialized());
 
   if (use_encryption_level_context_) {
     QUIC_RELOADABLE_FLAG_COUNT(quic_use_encryption_level_context);
@@ -406,8 +406,8 @@
                          : kDefaultMaxPacketSize);
   uber_received_packet_manager_.set_max_ack_ranges(255);
   MaybeEnableMultiplePacketNumberSpacesSupport();
-  DCHECK(perspective_ == Perspective::IS_CLIENT ||
-         supported_versions.size() == 1);
+  QUICHE_DCHECK(perspective_ == Perspective::IS_CLIENT ||
+                supported_versions.size() == 1);
   InstallInitialCrypters(server_connection_id_);
 
   // On the server side, version negotiation has been done by the dispatcher,
@@ -461,7 +461,7 @@
 }
 
 bool QuicConnection::ValidateConfigConnectionIds(const QuicConfig& config) {
-  DCHECK(config.negotiated());
+  QUICHE_DCHECK(config.negotiated());
   if (!version().UsesTls()) {
     // QUIC+TLS is required to transmit connection ID transport parameters.
     return true;
@@ -837,9 +837,9 @@
   // Check that any public reset packet with a different connection ID that was
   // routed to this QuicConnection has been redirected before control reaches
   // here.  (Check for a bug regression.)
-  DCHECK_EQ(server_connection_id_, packet.connection_id);
-  DCHECK_EQ(perspective_, Perspective::IS_CLIENT);
-  DCHECK(!version().HasIetfInvariantHeader());
+  QUICHE_DCHECK_EQ(server_connection_id_, packet.connection_id);
+  QUICHE_DCHECK_EQ(perspective_, Perspective::IS_CLIENT);
+  QUICHE_DCHECK(!version().HasIetfInvariantHeader());
   if (debug_visitor_ != nullptr) {
     debug_visitor_->OnPublicResetPacket(packet);
   }
@@ -875,7 +875,7 @@
   // Check that any public reset packet with a different connection ID that was
   // routed to this QuicConnection has been redirected before control reaches
   // here.  (Check for a bug regression.)
-  DCHECK_EQ(server_connection_id_, packet.connection_id);
+  QUICHE_DCHECK_EQ(server_connection_id_, packet.connection_id);
   if (perspective_ == Perspective::IS_SERVER) {
     const std::string error_details =
         "Server received version negotiation packet.";
@@ -924,7 +924,7 @@
                                    absl::string_view retry_token,
                                    absl::string_view retry_integrity_tag,
                                    absl::string_view retry_without_tag) {
-  DCHECK_EQ(Perspective::IS_CLIENT, perspective_);
+  QUICHE_DCHECK_EQ(Perspective::IS_CLIENT, perspective_);
   if (version().UsesTls()) {
     if (!CryptoUtils::ValidateRetryIntegrityTag(
             version(), server_connection_id_, retry_without_tag,
@@ -949,7 +949,7 @@
   if (!original_destination_connection_id_.has_value()) {
     original_destination_connection_id_ = server_connection_id_;
   }
-  DCHECK(!retry_source_connection_id_.has_value())
+  QUICHE_DCHECK(!retry_source_connection_id_.has_value())
       << retry_source_connection_id_.value();
   retry_source_connection_id_ = new_connection_id;
   server_connection_id_ = new_connection_id;
@@ -980,12 +980,12 @@
                   << original_destination_connection_id
                   << " on connection with server_connection_id "
                   << server_connection_id_;
-  DCHECK_NE(original_destination_connection_id, server_connection_id_);
+  QUICHE_DCHECK_NE(original_destination_connection_id, server_connection_id_);
   if (!HasIncomingConnectionId(original_destination_connection_id)) {
     incoming_connection_ids_.push_back(original_destination_connection_id);
   }
   InstallInitialCrypters(original_destination_connection_id);
-  DCHECK(!original_destination_connection_id_.has_value())
+  QUICHE_DCHECK(!original_destination_connection_id_.has_value())
       << original_destination_connection_id_.value();
   original_destination_connection_id_ = original_destination_connection_id;
 }
@@ -1027,7 +1027,7 @@
     // If this is a server, the dispatcher routes each packet to the
     // QuicConnection responsible for the packet's connection ID.  So if control
     // arrives here and this is a server, the dispatcher must be malfunctioning.
-    DCHECK_NE(Perspective::IS_SERVER, perspective_);
+    QUICHE_DCHECK_NE(Perspective::IS_SERVER, perspective_);
     return false;
   }
 
@@ -1066,11 +1066,11 @@
   // Check that any public reset packet with a different connection ID that was
   // routed to this QuicConnection has been redirected before control reaches
   // here.
-  DCHECK(GetServerConnectionIdAsRecipient(header, perspective_) ==
-             server_connection_id_ ||
-         HasIncomingConnectionId(
-             GetServerConnectionIdAsRecipient(header, perspective_)) ||
-         PacketCanReplaceConnectionId(header, perspective_));
+  QUICHE_DCHECK(GetServerConnectionIdAsRecipient(header, perspective_) ==
+                    server_connection_id_ ||
+                HasIncomingConnectionId(
+                    GetServerConnectionIdAsRecipient(header, perspective_)) ||
+                PacketCanReplaceConnectionId(header, perspective_));
 
   if (packet_creator_.HasPendingFrames()) {
     // Incoming packets may change a queued ACK frame.
@@ -1094,7 +1094,7 @@
 }
 
 void QuicConnection::OnSuccessfulMigration() {
-  DCHECK_EQ(perspective_, Perspective::IS_CLIENT);
+  QUICHE_DCHECK_EQ(perspective_, Perspective::IS_CLIENT);
   if (IsPathDegrading()) {
     // If path was previously degrading, and migration is successful after
     // probing, restart the path degrading and blackhole detection.
@@ -1252,7 +1252,7 @@
       stats_.address_validated_via_token = true;
     }
   }
-  DCHECK(connected_);
+  QUICHE_DCHECK(connected_);
   return true;
 }
 
@@ -1606,7 +1606,7 @@
                               "is closed. Last frame: "
                            << most_recent_frame_type_;
   if (has_path_challenge_in_current_packet_) {
-    DCHECK(send_path_response_);
+    QUICHE_DCHECK(send_path_response_);
     QUIC_RELOADABLE_FLAG_COUNT_N(quic_send_path_response, 2, 5);
     // Only respond to the 1st PATH_CHALLENGE.
     return true;
@@ -1960,7 +1960,7 @@
   }
 
   if (IsCurrentPacketConnectivityProbing()) {
-    DCHECK(!version().HasIetfQuicFrames());
+    QUICHE_DCHECK(!version().HasIetfQuicFrames());
     ++stats_.num_connectivity_probing_received;
   }
 
@@ -2065,8 +2065,8 @@
     const QuicIetfStatelessResetPacket& /*packet*/) {
   // TODO(fayang): Add OnAuthenticatedIetfStatelessResetPacket to
   // debug_visitor_.
-  DCHECK(version().HasIetfInvariantHeader());
-  DCHECK_EQ(perspective_, Perspective::IS_CLIENT);
+  QUICHE_DCHECK(version().HasIetfInvariantHeader());
+  QUICHE_DCHECK_EQ(perspective_, Perspective::IS_CLIENT);
 
   if (use_path_validator_) {
     if (!IsDefaultPath(last_packet_destination_address_,
@@ -2097,7 +2097,7 @@
 }
 
 void QuicConnection::OnKeyUpdate(KeyUpdateReason reason) {
-  DCHECK(support_key_update_for_connection_);
+  QUICHE_DCHECK(support_key_update_for_connection_);
   QUIC_DLOG(INFO) << ENDPOINT << "Key phase updated for " << reason;
 
   lowest_packet_sent_in_current_key_phase_.Clear();
@@ -2171,7 +2171,7 @@
 }
 
 const QuicFrame QuicConnection::GetUpdatedAckFrame() {
-  DCHECK(!uber_received_packet_manager_.IsAckFrameEmpty(
+  QUICHE_DCHECK(!uber_received_packet_manager_.IsAckFrameEmpty(
       QuicUtils::GetPacketNumberSpace(encryption_level_)))
       << "Try to retrieve an empty ACK frame";
   return uber_received_packet_manager_.GetUpdatedAckFrame(
@@ -2222,7 +2222,7 @@
   if (!legacy_version_encapsulation_enabled_) {
     return;
   }
-  DCHECK(!legacy_version_encapsulation_in_progress_);
+  QUICHE_DCHECK(!legacy_version_encapsulation_in_progress_);
   QUIC_BUG_IF(!packet_creator_.CanSetMaxPacketLength())
       << "Cannot activate Legacy Version Encapsulation mid-packet";
   QUIC_BUG_IF(coalesced_packet_.length() != 0u)
@@ -2236,7 +2236,7 @@
   }
   // Flush any remaining packet before disactivating encapsulation.
   packet_creator_.FlushCurrentPacket();
-  DCHECK(legacy_version_encapsulation_enabled_);
+  QUICHE_DCHECK(legacy_version_encapsulation_enabled_);
   legacy_version_encapsulation_in_progress_ = false;
   MaybeUpdatePacketCreatorMaxPacketLengthAndPadding();
 }
@@ -2373,7 +2373,7 @@
                 << decryption_level
                 << " while connection is at encryption level "
                 << encryption_level_;
-  DCHECK(EncryptionLevelIsValid(decryption_level));
+  QUICHE_DCHECK(EncryptionLevelIsValid(decryption_level));
   if (encryption_level_ != ENCRYPTION_FORWARD_SECURE) {
     ++stats_.undecryptable_packets_received_before_handshake_complete;
   }
@@ -2393,7 +2393,7 @@
     stats_.num_failed_authentication_packets_received++;
     if (version().UsesTls()) {
       // Should always be non-null if has_decryption_key is true.
-      DCHECK(framer_.GetDecrypter(decryption_level));
+      QUICHE_DCHECK(framer_.GetDecrypter(decryption_level));
       const QuicPacketCount integrity_limit =
           framer_.GetDecrypter(decryption_level)->GetIntegrityLimit();
       QUIC_DVLOG(2) << ENDPOINT << "Checking AEAD integrity limits:"
@@ -2464,7 +2464,7 @@
 void QuicConnection::MaybeUpdatePacketCreatorMaxPacketLengthAndPadding() {
   QuicByteCount max_packet_length = GetLimitedMaxPacketSize(long_term_mtu_);
   if (legacy_version_encapsulation_in_progress_) {
-    DCHECK(legacy_version_encapsulation_enabled_);
+    QUICHE_DCHECK(legacy_version_encapsulation_enabled_);
     const QuicByteCount minimum_overhead =
         QuicLegacyVersionEncapsulator::GetMinimumOverhead(
             legacy_version_encapsulation_sni_);
@@ -2713,7 +2713,7 @@
 
   if (!version_negotiated_) {
     if (perspective_ == Perspective::IS_CLIENT) {
-      DCHECK(!header.version_flag || header.form != GOOGLE_QUIC_PACKET);
+      QUICHE_DCHECK(!header.version_flag || header.form != GOOGLE_QUIC_PACKET);
       if (!version().HasIetfInvariantHeader()) {
         // If the client gets a packet without the version flag from the server
         // it should stop sending version since the version negotiation is done.
@@ -2758,7 +2758,7 @@
 }
 
 void QuicConnection::WriteQueuedPackets() {
-  DCHECK(!writer_->IsWriteBlocked());
+  QUICHE_DCHECK(!writer_->IsWriteBlocked());
 
   QUIC_CLIENT_HISTOGRAM_COUNTS("QuicSession.NumQueuedPacketsBeforeWrite",
                                buffered_packets_.size(), 1, 1000, 50, "");
@@ -2838,8 +2838,8 @@
 bool QuicConnection::ShouldGeneratePacket(
     HasRetransmittableData retransmittable,
     IsHandshake handshake) {
-  DCHECK(handshake != IS_HANDSHAKE ||
-         QuicVersionUsesCryptoFrames(transport_version()))
+  QUICHE_DCHECK(handshake != IS_HANDSHAKE ||
+                QuicVersionUsesCryptoFrames(transport_version()))
       << ENDPOINT
       << "Handshake in STREAM frames should not check ShouldGeneratePacket";
   if (!count_bytes_on_alternative_path_separately_) {
@@ -3002,7 +3002,7 @@
     termination_packets_->emplace_back(
         new QuicEncryptedPacket(buffer_copy, encrypted_length, true));
     if (error_code == QUIC_SILENT_IDLE_TIMEOUT) {
-      DCHECK_EQ(Perspective::IS_SERVER, perspective_);
+      QUICHE_DCHECK_EQ(Perspective::IS_SERVER, perspective_);
       // TODO(fayang): populate histogram indicating the time elapsed from this
       // connection gets closed to following client packets get received.
       QUIC_DVLOG(1) << ENDPOINT
@@ -3013,9 +3013,9 @@
     }
   }
 
-  DCHECK_LE(encrypted_length, kMaxOutgoingPacketSize);
-  DCHECK(is_mtu_discovery ||
-         encrypted_length <= packet_creator_.max_packet_length())
+  QUICHE_DCHECK_LE(encrypted_length, kMaxOutgoingPacketSize);
+  QUICHE_DCHECK(is_mtu_discovery ||
+                encrypted_length <= packet_creator_.max_packet_length())
       << " encrypted_length=" << encrypted_length
       << " > packet_creator max_packet_length="
       << packet_creator_.max_packet_length();
@@ -3106,11 +3106,11 @@
       }
       break;
     case LEGACY_VERSION_ENCAPSULATE: {
-      DCHECK(!is_mtu_discovery);
-      DCHECK_EQ(perspective_, Perspective::IS_CLIENT);
-      DCHECK_EQ(packet->encryption_level, ENCRYPTION_INITIAL);
-      DCHECK(legacy_version_encapsulation_enabled_);
-      DCHECK(legacy_version_encapsulation_in_progress_);
+      QUICHE_DCHECK(!is_mtu_discovery);
+      QUICHE_DCHECK_EQ(perspective_, Perspective::IS_CLIENT);
+      QUICHE_DCHECK_EQ(packet->encryption_level, ENCRYPTION_INITIAL);
+      QUICHE_DCHECK(legacy_version_encapsulation_enabled_);
+      QUICHE_DCHECK(legacy_version_encapsulation_in_progress_);
       QuicPacketLength encapsulated_length =
           QuicLegacyVersionEncapsulator::Encapsulate(
               legacy_version_encapsulation_sni_,
@@ -3149,7 +3149,7 @@
       }
     } break;
     default:
-      DCHECK(false);
+      QUICHE_DCHECK(false);
       break;
   }
 
@@ -3161,7 +3161,7 @@
   if (IsWriteBlockedStatus(result.status)) {
     // Ensure the writer is still write blocked, otherwise QUIC may continue
     // trying to write when it will not be able to.
-    DCHECK(writer_->IsWriteBlocked());
+    QUICHE_DCHECK(writer_->IsWriteBlocked());
     visitor_->OnWriteBlocked();
     // If the socket buffers the data, then the packet should not
     // be queued and sent again, which would result in an unnecessary
@@ -3453,7 +3453,7 @@
                       "QuicConnection::FlushPackets.");
 
   if (HandleWriteBlocked()) {
-    DCHECK_EQ(WRITE_STATUS_BLOCKED, result.status)
+    QUICHE_DCHECK_EQ(WRITE_STATUS_BLOCKED, result.status)
         << "Unexpected flush result:" << result;
     QUIC_DLOG(INFO) << ENDPOINT << "Write blocked in FlushPackets.";
     return;
@@ -3671,7 +3671,7 @@
 }
 
 void QuicConnection::SendAck() {
-  DCHECK(!SupportsMultiplePacketNumberSpaces());
+  QUICHE_DCHECK(!SupportsMultiplePacketNumberSpaces());
   QUIC_DVLOG(1) << ENDPOINT << "Sending an ACK proactively";
   QuicFrames frames;
   frames.push_back(GetUpdatedAckFrame());
@@ -3700,8 +3700,8 @@
 void QuicConnection::OnRetransmissionTimeout() {
 #ifndef NDEBUG
   if (sent_packet_manager_.unacked_packets().empty()) {
-    DCHECK(sent_packet_manager_.handshake_mode_disabled());
-    DCHECK(!IsHandshakeComplete());
+    QUICHE_DCHECK(sent_packet_manager_.handshake_mode_disabled());
+    QUICHE_DCHECK(!IsHandshakeComplete());
   }
 #endif
   if (!connected_) {
@@ -3732,7 +3732,7 @@
       !sent_packet_manager_.HasInFlightPackets() &&
       blackhole_detector_.IsDetectionInProgress()) {
     // Stop detection in quiescence.
-    DCHECK_EQ(QuicSentPacketManager::LOSS_MODE, retransmission_mode);
+    QUICHE_DCHECK_EQ(QuicSentPacketManager::LOSS_MODE, retransmission_mode);
     blackhole_detector_.StopDetection();
   }
   WriteIfNotBlocked();
@@ -3762,7 +3762,8 @@
     QUIC_DLOG(INFO) << ENDPOINT
                     << "No packet gets sent when timer fires in mode "
                     << retransmission_mode << ", send PING";
-    DCHECK_LT(0u, sent_packet_manager_.pending_timer_transmission_count());
+    QUICHE_DCHECK_LT(0u,
+                     sent_packet_manager_.pending_timer_transmission_count());
     EncryptionLevel level = encryption_level_;
     PacketNumberSpace packet_number_space = NUM_PACKET_NUMBER_SPACES;
     if (SupportsMultiplePacketNumberSpaces() &&
@@ -3813,7 +3814,7 @@
 
 void QuicConnection::SetDiversificationNonce(
     const DiversificationNonce& nonce) {
-  DCHECK_EQ(Perspective::IS_SERVER, perspective_);
+  QUICHE_DCHECK_EQ(Perspective::IS_SERVER, perspective_);
   packet_creator_.SetDiversificationNonce(nonce);
 }
 
@@ -4043,7 +4044,7 @@
     QuicIetfTransportErrorCodes ietf_error,
     const std::string& error_details,
     ConnectionCloseBehavior connection_close_behavior) {
-  DCHECK(!error_details.empty());
+  QUICHE_DCHECK(!error_details.empty());
   if (!connected_) {
     QUIC_DLOG(INFO) << "Connection is already closed.";
     return;
@@ -4195,7 +4196,7 @@
   // If we are using a batch writer, flush packets queued in it, if any.
   FlushPackets();
   connected_ = false;
-  DCHECK(visitor_ != nullptr);
+  QUICHE_DCHECK(visitor_ != nullptr);
   visitor_->OnConnectionClosed(frame, source);
   // LossDetectionTunerInterface::Finish() may be called from
   // sent_packet_manager_.OnConnectionClosed. Which may require the session to
@@ -4285,12 +4286,12 @@
     }
     return;
   }
-  DCHECK_LT(initial_retransmittable_on_wire_timeout_, ping_timeout_);
+  QUICHE_DCHECK_LT(initial_retransmittable_on_wire_timeout_, ping_timeout_);
   QuicTime::Delta retransmittable_on_wire_timeout =
       initial_retransmittable_on_wire_timeout_;
   int max_aggressive_retransmittable_on_wire_ping_count =
       GetQuicFlag(FLAGS_quic_max_aggressive_retransmittable_on_wire_ping_count);
-  DCHECK_LE(0, max_aggressive_retransmittable_on_wire_ping_count);
+  QUICHE_DCHECK_LE(0, max_aggressive_retransmittable_on_wire_ping_count);
   if (consecutive_retransmittable_on_wire_ping_count_ >
       max_aggressive_retransmittable_on_wire_ping_count) {
     // Exponentially back off the timeout if the number of consecutive
@@ -4444,8 +4445,8 @@
       connection_->pending_retransmission_alarm_ = false;
     }
   }
-  DCHECK_EQ(flush_and_set_pending_retransmission_alarm_on_delete_,
-            !connection_->packet_creator_.PacketFlusherAttached());
+  QUICHE_DCHECK_EQ(flush_and_set_pending_retransmission_alarm_on_delete_,
+                   !connection_->packet_creator_.PacketFlusherAttached());
 }
 
 QuicConnection::ScopedEncryptionLevelContext::ScopedEncryptionLevelContext(
@@ -4544,7 +4545,7 @@
 
 void QuicConnection::SendMtuDiscoveryPacket(QuicByteCount target_mtu) {
   // Currently, this limit is ensured by the caller.
-  DCHECK_EQ(target_mtu, GetLimitedMaxPacketSize(target_mtu));
+  QUICHE_DCHECK_EQ(target_mtu, GetLimitedMaxPacketSize(target_mtu));
 
   // Send the probe.
   packet_creator_.GenerateMtuDiscoveryPacket(target_mtu);
@@ -4570,7 +4571,7 @@
     QuicPacketWriter* probing_writer,
     const QuicSocketAddress& peer_address,
     bool is_response) {
-  DCHECK(peer_address.IsInitialized());
+  QUICHE_DCHECK(peer_address.IsInitialized());
   if (!connected_) {
     QUIC_BUG << "Not sending connectivity probing packet as connection is "
              << "disconnected.";
@@ -4580,7 +4581,7 @@
     // Server can use default packet writer to write packet.
     probing_writer = writer_;
   }
-  DCHECK(probing_writer);
+  QUICHE_DCHECK(probing_writer);
 
   if (probing_writer->IsWriteBlocked()) {
     QUIC_DLOG(INFO)
@@ -4604,7 +4605,7 @@
     // request or a response.
     probing_packet = packet_creator_.SerializeConnectivityProbingPacket();
   } else if (is_response) {
-    DCHECK(!send_path_response_);
+    QUICHE_DCHECK(!send_path_response_);
     // IETF QUIC path response.
     // Respond to path probe request using IETF QUIC PATH_RESPONSE frame.
     probing_packet =
@@ -4626,7 +4627,7 @@
       transmitted_connectivity_probe_payload_ = nullptr;
     }
   }
-  DCHECK_EQ(IsRetransmittable(*probing_packet), NO_RETRANSMITTABLE_DATA);
+  QUICHE_DCHECK_EQ(IsRetransmittable(*probing_packet), NO_RETRANSMITTABLE_DATA);
   return WritePacketUsingWriter(std::move(probing_packet), probing_writer,
                                 self_address(), peer_address,
                                 /*measure_rtt=*/true);
@@ -4702,7 +4703,7 @@
 }
 
 void QuicConnection::DiscoverMtu() {
-  DCHECK(!mtu_discovery_alarm_->IsSet());
+  QUICHE_DCHECK(!mtu_discovery_alarm_->IsSet());
 
   const QuicPacketNumber largest_sent_packet =
       sent_packet_manager_.GetLargestSentPacket();
@@ -4711,7 +4712,7 @@
     SendMtuDiscoveryPacket(
         mtu_discoverer_.GetUpdatedMtuProbeSize(largest_sent_packet));
   }
-  DCHECK(!mtu_discovery_alarm_->IsSet());
+  QUICHE_DCHECK(!mtu_discovery_alarm_->IsSet());
 }
 
 void QuicConnection::OnEffectivePeerMigrationValidated() {
@@ -4802,7 +4803,7 @@
 }
 
 void QuicConnection::MaybeSendProbingRetransmissions() {
-  DCHECK(fill_up_link_during_probing_);
+  QUICHE_DCHECK(fill_up_link_during_probing_);
 
   // Don't send probing retransmissions until the handshake has completed.
   if (!IsHandshakeComplete() ||
@@ -4938,7 +4939,7 @@
 }
 
 void QuicConnection::MaybeStartIetfPeerMigration() {
-  DCHECK(version().HasIetfQuicFrames());
+  QUICHE_DCHECK(version().HasIetfQuicFrames());
   if (!start_peer_migration_earlier_) {
     return;
   }
@@ -5021,7 +5022,7 @@
 }
 
 void QuicConnection::UpdateReleaseTimeIntoFuture() {
-  DCHECK(supports_release_time_);
+  QUICHE_DCHECK(supports_release_time_);
 
   const QuicTime::Delta prior_max_release_time = release_time_into_future_;
   release_time_into_future_ = std::max(
@@ -5100,7 +5101,7 @@
 }
 
 void QuicConnection::MaybeBundleCryptoDataWithAcks() {
-  DCHECK(SupportsMultiplePacketNumberSpaces());
+  QUICHE_DCHECK(SupportsMultiplePacketNumberSpaces());
   if (IsHandshakeConfirmed()) {
     return;
   }
@@ -5136,7 +5137,7 @@
 }
 
 void QuicConnection::SendAllPendingAcks() {
-  DCHECK(SupportsMultiplePacketNumberSpaces());
+  QUICHE_DCHECK(SupportsMultiplePacketNumberSpaces());
   QUIC_DVLOG(1) << ENDPOINT << "Trying to send all pending ACKs";
   ack_alarm_->Cancel();
   QuicTime earliest_ack_timeout =
@@ -5444,7 +5445,7 @@
     return DISCARD;
   }
   if (legacy_version_encapsulation_in_progress_) {
-    DCHECK(!is_mtu_discovery);
+    QUICHE_DCHECK(!is_mtu_discovery);
     return LEGACY_VERSION_ENCAPSULATE;
   }
   if (version().CanSendCoalescedPackets() && !coalescing_done_ &&
@@ -5471,7 +5472,7 @@
 }
 
 bool QuicConnection::IsHandshakeConfirmed() const {
-  DCHECK_EQ(PROTOCOL_TLS1_3, version().handshake_protocol);
+  QUICHE_DCHECK_EQ(PROTOCOL_TLS1_3, version().handshake_protocol);
   return visitor_->GetHandshakeState() == HANDSHAKE_CONFIRMED;
 }
 
@@ -5616,7 +5617,7 @@
   if (!ShouldDetectBlackhole()) {
     return QuicTime::Zero();
   }
-  DCHECK_LT(0u, num_rtos_for_blackhole_detection_);
+  QUICHE_DCHECK_LT(0u, num_rtos_for_blackhole_detection_);
   return clock_->ApproximateNow() +
          sent_packet_manager_.GetNetworkBlackholeDelay(
              num_rtos_for_blackhole_detection_);
@@ -5674,8 +5675,8 @@
   std::unique_ptr<SerializedPacket> probing_packet =
       packet_creator_.SerializePathChallengeConnectivityProbingPacket(
           data_buffer);
-  DCHECK_EQ(IsRetransmittable(*probing_packet), NO_RETRANSMITTABLE_DATA);
-  DCHECK_EQ(self_address, most_recent_alternative_path_.self_address);
+  QUICHE_DCHECK_EQ(IsRetransmittable(*probing_packet), NO_RETRANSMITTABLE_DATA);
+  QUICHE_DCHECK_EQ(self_address, most_recent_alternative_path_.self_address);
   WritePacketUsingWriter(std::move(probing_packet), writer, self_address,
                          peer_address, /*measure_rtt=*/false);
   return true;
@@ -5694,7 +5695,7 @@
 void QuicConnection::ValidatePath(
     std::unique_ptr<QuicPathValidationContext> context,
     std::unique_ptr<QuicPathValidator::ResultDelegate> result_delegate) {
-  DCHECK(use_path_validator_);
+  QUICHE_DCHECK(use_path_validator_);
   if (perspective_ == Perspective::IS_CLIENT &&
       !IsDefaultPath(context->self_address(), context->peer_address())) {
     most_recent_alternative_path_ =
@@ -5722,7 +5723,7 @@
     return packet_creator_.AddPathResponseFrame(data_buffer);
   }
 
-  DCHECK_EQ(Perspective::IS_CLIENT, perspective_);
+  QUICHE_DCHECK_EQ(Perspective::IS_CLIENT, perspective_);
   // This PATH_CHALLENGE is received on an alternative socket which should be
   // used to send PATH_RESPONSE.
   if (!path_validator_.HasPendingPathValidation() ||
@@ -5736,7 +5737,7 @@
   std::unique_ptr<SerializedPacket> probing_packet =
       packet_creator_.SerializePathResponseConnectivityProbingPacket(
           {data_buffer}, /*is_padded=*/true);
-  DCHECK_EQ(IsRetransmittable(*probing_packet), NO_RETRANSMITTABLE_DATA);
+  QUICHE_DCHECK_EQ(IsRetransmittable(*probing_packet), NO_RETRANSMITTABLE_DATA);
   QUIC_DVLOG(1) << ENDPOINT
                 << "Send PATH_RESPONSE from alternative socket with address "
                 << last_packet_destination_address_;
@@ -5760,17 +5761,17 @@
 }
 
 bool QuicConnection::HasPendingPathValidation() const {
-  DCHECK(use_path_validator_);
+  QUICHE_DCHECK(use_path_validator_);
   return path_validator_.HasPendingPathValidation();
 }
 
 QuicPathValidationContext* QuicConnection::GetPathValidationContext() const {
-  DCHECK(use_path_validator_);
+  QUICHE_DCHECK(use_path_validator_);
   return path_validator_.GetContext();
 }
 
 void QuicConnection::CancelPathValidation() {
-  DCHECK(use_path_validator_);
+  QUICHE_DCHECK(use_path_validator_);
   path_validator_.CancelPathValidation();
 }
 
@@ -5798,7 +5799,7 @@
 }
 
 void QuicConnection::SetSourceAddressTokenToSend(absl::string_view token) {
-  DCHECK_EQ(perspective_, Perspective::IS_CLIENT);
+  QUICHE_DCHECK_EQ(perspective_, Perspective::IS_CLIENT);
   if (!packet_creator_.HasRetryToken()) {
     // Ignore received tokens (via NEW_TOKEN frame) from previous connections
     // when a RETRY token has been received.
@@ -5813,7 +5814,7 @@
       perspective_ != Perspective::IS_SERVER) {
     return;
   }
-  DCHECK(!IsDefaultPath(self_address_, peer_address));
+  QUICHE_DCHECK(!IsDefaultPath(self_address_, peer_address));
   if (!IsMostRecentAlternativePath(self_address_, peer_address)) {
     QUIC_DLOG(INFO) << "Wrote to uninteresting peer address: " << peer_address
                     << " default direct_peer_address_ " << direct_peer_address_
@@ -5853,8 +5854,8 @@
   }
   // Only update bytes received if this probing frame is received on the most
   // recent alternative path.
-  DCHECK(!IsDefaultPath(last_packet_destination_address_,
-                        GetEffectivePeerAddressFromCurrentPacket()));
+  QUICHE_DCHECK(!IsDefaultPath(last_packet_destination_address_,
+                               GetEffectivePeerAddressFromCurrentPacket()));
   if (!most_recent_alternative_path_.validated) {
     most_recent_alternative_path_.bytes_received_before_address_validation +=
         received_packet_size;
diff --git a/quic/core/quic_connection_id.cc b/quic/core/quic_connection_id.cc
index ea8b936..303db8f 100644
--- a/quic/core/quic_connection_id.cc
+++ b/quic/core/quic_connection_id.cc
@@ -68,7 +68,7 @@
     return;
   }
   data_long_ = reinterpret_cast<char*>(malloc(length_));
-  CHECK_NE(nullptr, data_long_);
+  QUICHE_CHECK_NE(nullptr, data_long_);
   memcpy(data_long_, data, length_);
 }
 
@@ -113,13 +113,13 @@
       // Copy data from data_short_ to data_long_.
       memcpy(temporary_data, data_short_, length_);
       data_long_ = reinterpret_cast<char*>(malloc(length));
-      CHECK_NE(nullptr, data_long_);
+      QUICHE_CHECK_NE(nullptr, data_long_);
       memcpy(data_long_, temporary_data, length_);
     } else {
       // Resize data_long_.
       char* realloc_result =
           reinterpret_cast<char*>(realloc(data_long_, length));
-      CHECK_NE(nullptr, realloc_result);
+      QUICHE_CHECK_NE(nullptr, realloc_result);
       data_long_ = realloc_result;
     }
   } else if (length_ > sizeof(data_short_)) {
diff --git a/quic/core/quic_connection_id_manager.cc b/quic/core/quic_connection_id_manager.cc
index a4166ef..adf8eba 100644
--- a/quic/core/quic_connection_id_manager.cc
+++ b/quic/core/quic_connection_id_manager.cc
@@ -69,8 +69,8 @@
       clock_(clock),
       retire_connection_id_alarm_(alarm_factory->CreateAlarm(
           new RetirePeerIssuedConnectionIdAlarm(visitor))) {
-  DCHECK_GE(active_connection_id_limit_, 2u);
-  DCHECK(!initial_peer_issued_connection_id.IsEmpty());
+  QUICHE_DCHECK_GE(active_connection_id_limit_, 2u);
+  QUICHE_DCHECK(!initial_peer_issued_connection_id.IsEmpty());
   active_connection_id_data_.emplace_back(initial_peer_issued_connection_id,
                                           /*sequence_number=*/0u,
                                           QuicUint128());
@@ -294,7 +294,7 @@
 QuicNewConnectionIdFrame
 QuicSelfIssuedConnectionIdManager::IssueNewConnectionIdForPreferredAddress() {
   QuicNewConnectionIdFrame frame = IssueNewConnectionId();
-  DCHECK_EQ(frame.sequence_number, 1u);
+  QUICHE_DCHECK_EQ(frame.sequence_number, 1u);
   return frame;
 }
 
@@ -302,7 +302,7 @@
     const QuicRetireConnectionIdFrame& frame,
     QuicTime::Delta pto_delay,
     std::string* error_detail) {
-  DCHECK(!active_connection_ids_.empty());
+  QUICHE_DCHECK(!active_connection_ids_.empty());
   if (frame.sequence_number > active_connection_ids_.back().second) {
     *error_detail = "To be retired connecton ID is never issued.";
     return IETF_QUIC_PROTOCOL_VIOLATION;
diff --git a/quic/core/quic_connection_test.cc b/quic/core/quic_connection_test.cc
index a32d9e4..b3a3d13 100644
--- a/quic/core/quic_connection_test.cc
+++ b/quic/core/quic_connection_test.cc
@@ -105,10 +105,10 @@
     case ENCRYPTION_ZERO_RTT:
       return ZERO_RTT_PROTECTED;
     case ENCRYPTION_FORWARD_SECURE:
-      DCHECK(false);
+      QUICHE_DCHECK(false);
       return INVALID_PACKET_TYPE;
     default:
-      DCHECK(false);
+      QUICHE_DCHECK(false);
       return INVALID_PACKET_TYPE;
   }
 }
@@ -295,7 +295,7 @@
                                               QuicStreamOffset offset,
                                               StreamSendingState state) {
     ScopedPacketFlusher flusher(this);
-    DCHECK(encryption_level >= ENCRYPTION_ZERO_RTT);
+    QUICHE_DCHECK(encryption_level >= ENCRYPTION_ZERO_RTT);
     SetEncrypter(encryption_level, std::make_unique<TaggingEncrypter>(0x01));
     SetDefaultEncryptionLevel(encryption_level);
     struct iovec iov;
@@ -474,7 +474,7 @@
   }
 
   void PathDegradingTimeout() {
-    DCHECK(PathDegradingDetectionInProgress());
+    QUICHE_DCHECK(PathDegradingDetectionInProgress());
     GetBlackholeDetectorAlarm()->Fire();
   }
 
@@ -511,8 +511,8 @@
     if (QuicConnectionPeer::GetSentPacketManager(this)->pto_enabled()) {
       // PTO mode is default enabled for T099. And TLP/RTO related tests are
       // stale.
-      DCHECK(PROTOCOL_TLS1_3 == version().handshake_protocol ||
-             GetQuicReloadableFlag(quic_default_on_pto));
+      QUICHE_DCHECK(PROTOCOL_TLS1_3 == version().handshake_protocol ||
+                    GetQuicReloadableFlag(quic_default_on_pto));
       return true;
     }
     return false;
@@ -799,7 +799,7 @@
                                         QuicSocketAddress self_address,
                                         QuicSocketAddress peer_address,
                                         EncryptionLevel level) {
-    DCHECK(peer_framer_.HasEncrypterOfEncryptionLevel(level));
+    QUICHE_DCHECK(peer_framer_.HasEncrypterOfEncryptionLevel(level));
     peer_creator_.set_encryption_level(level);
     QuicPacketCreatorPeer::SetSendVersionInPacket(
         &peer_creator_,
@@ -835,14 +835,14 @@
     size_t length = peer_framer_.BuildDataPacket(
         header, frames, encrypted_buffer, kMaxOutgoingPacketSize,
         ENCRYPTION_INITIAL);
-    DCHECK_GT(length, 0u);
+    QUICHE_DCHECK_GT(length, 0u);
 
     const size_t encrypted_length = peer_framer_.EncryptInPlace(
         ENCRYPTION_INITIAL, header.packet_number,
         GetStartOfEncryptedData(peer_framer_.version().transport_version,
                                 header),
         length, kMaxOutgoingPacketSize, encrypted_buffer);
-    DCHECK_GT(encrypted_length, 0u);
+    QUICHE_DCHECK_GT(encrypted_length, 0u);
 
     connection_.ProcessUdpPacket(
         kSelfAddress, kPeerAddress,
@@ -941,7 +941,8 @@
       size_t encrypted_length = peer_framer_.EncryptPayload(
           packet.level, QuicPacketNumber(packet.packet_number),
           *constructed_packet, buffer, kMaxOutgoingPacketSize);
-      DCHECK_LE(coalesced_size + encrypted_length, kMaxOutgoingPacketSize);
+      QUICHE_DCHECK_LE(coalesced_size + encrypted_length,
+                       kMaxOutgoingPacketSize);
       memcpy(coalesced_buffer + coalesced_size, buffer, encrypted_length);
       coalesced_size += encrypted_length;
     }
diff --git a/quic/core/quic_control_frame_manager.cc b/quic/core/quic_control_frame_manager.cc
index 31d67c3..64e5f5d 100644
--- a/quic/core/quic_control_frame_manager.cc
+++ b/quic/core/quic_control_frame_manager.cc
@@ -270,8 +270,8 @@
 
 bool QuicControlFrameManager::RetransmitControlFrame(const QuicFrame& frame,
                                                      TransmissionType type) {
-  DCHECK(type == PTO_RETRANSMISSION || type == RTO_RETRANSMISSION ||
-         type == TLP_RETRANSMISSION || type == PROBING_RETRANSMISSION);
+  QUICHE_DCHECK(type == PTO_RETRANSMISSION || type == RTO_RETRANSMISSION ||
+                type == TLP_RETRANSMISSION || type == PROBING_RETRANSMISSION);
   QuicControlFrameId id = GetControlFrameId(frame);
   if (id == kInvalidControlFrameId) {
     // Frame does not have a valid control frame ID, ignore it. Returns true
diff --git a/quic/core/quic_crypto_client_handshaker.cc b/quic/core/quic_crypto_client_handshaker.cc
index cebbc94..29a4367 100644
--- a/quic/core/quic_crypto_client_handshaker.cc
+++ b/quic/core/quic_crypto_client_handshaker.cc
@@ -167,12 +167,12 @@
 }
 
 void QuicCryptoClientHandshaker::OnHandshakeDoneReceived() {
-  DCHECK(false);
+  QUICHE_DCHECK(false);
 }
 
 void QuicCryptoClientHandshaker::OnNewTokenReceived(
     absl::string_view /*token*/) {
-  DCHECK(false);
+  QUICHE_DCHECK(false);
 }
 
 size_t QuicCryptoClientHandshaker::BufferSizeLimitForLevel(
@@ -187,14 +187,14 @@
 std::unique_ptr<QuicDecrypter>
 QuicCryptoClientHandshaker::AdvanceKeysAndCreateCurrentOneRttDecrypter() {
   // Key update is only defined in QUIC+TLS.
-  DCHECK(false);
+  QUICHE_DCHECK(false);
   return nullptr;
 }
 
 std::unique_ptr<QuicEncrypter>
 QuicCryptoClientHandshaker::CreateCurrentOneRttEncrypter() {
   // Key update is only defined in QUIC+TLS.
-  DCHECK(false);
+  QUICHE_DCHECK(false);
   return nullptr;
 }
 
@@ -206,7 +206,7 @@
 
 void QuicCryptoClientHandshaker::HandleServerConfigUpdateMessage(
     const CryptoHandshakeMessage& server_config_update) {
-  DCHECK(server_config_update.tag() == kSCUP);
+  QUICHE_DCHECK(server_config_update.tag() == kSCUP);
   std::string error_details;
   QuicCryptoClientConfig::CachedState* cached =
       crypto_config_->LookupOrCreate(server_id_);
@@ -221,7 +221,7 @@
     return;
   }
 
-  DCHECK(one_rtt_keys_available());
+  QUICHE_DCHECK(one_rtt_keys_available());
   if (proof_verify_callback_) {
     proof_verify_callback_->Cancel();
   }
@@ -236,7 +236,7 @@
 
   QuicAsyncStatus rv = QUIC_SUCCESS;
   do {
-    CHECK_NE(STATE_NONE, next_state_);
+    QUICHE_CHECK_NE(STATE_NONE, next_state_);
     const State state = next_state_;
     next_state_ = STATE_IDLE;
     rv = QUIC_SUCCESS;
@@ -284,7 +284,7 @@
     // This allows us to respond to CA trust changes or certificate
     // expiration because it may have been a while since we last verified
     // the proof.
-    DCHECK(crypto_config_->proof_verifier());
+    QUICHE_DCHECK(crypto_config_->proof_verifier());
     // Track proof verification time when cached server config is used.
     proof_verify_start_time_ = session()->connection()->clock()->Now();
     chlo_hash_ = cached->chlo_hash();
@@ -310,8 +310,8 @@
   num_client_hellos_++;
 
   CryptoHandshakeMessage out;
-  DCHECK(session() != nullptr);
-  DCHECK(session()->config() != nullptr);
+  QUICHE_DCHECK(session() != nullptr);
+  QUICHE_DCHECK(session()->config() != nullptr);
   // Send all the options, regardless of whether we're sending an
   // inchoate or subsequent hello.
   session()->config()->ToHandshakeMessage(&out, session()->transport_version());
@@ -463,7 +463,7 @@
 QuicAsyncStatus QuicCryptoClientHandshaker::DoVerifyProof(
     QuicCryptoClientConfig::CachedState* cached) {
   ProofVerifier* verifier = crypto_config_->proof_verifier();
-  DCHECK(verifier);
+  QUICHE_DCHECK(verifier);
   next_state_ = STATE_VERIFY_PROOF_COMPLETE;
   generation_counter_ = cached->generation_counter();
 
@@ -614,7 +614,7 @@
   bool update_ignored = false;
   if (!cached->IsEmpty() && !cached->signature().empty()) {
     // Note that we verify the proof even if the cached proof is valid.
-    DCHECK(crypto_config_->proof_verifier());
+    QUICHE_DCHECK(crypto_config_->proof_verifier());
     next_state_ = STATE_VERIFY_PROOF;
   } else {
     update_ignored = true;
diff --git a/quic/core/quic_crypto_client_stream.cc b/quic/core/quic_crypto_client_stream.cc
index 46af89a..3160f58 100644
--- a/quic/core/quic_crypto_client_stream.cc
+++ b/quic/core/quic_crypto_client_stream.cc
@@ -35,7 +35,8 @@
     ProofHandler* proof_handler,
     bool has_application_state)
     : QuicCryptoClientStreamBase(session) {
-  DCHECK_EQ(Perspective::IS_CLIENT, session->connection()->perspective());
+  QUICHE_DCHECK_EQ(Perspective::IS_CLIENT,
+                   session->connection()->perspective());
   switch (session->connection()->version().handshake_protocol) {
     case PROTOCOL_QUIC_CRYPTO:
       handshaker_ = std::make_unique<QuicCryptoClientHandshaker>(
@@ -149,13 +150,13 @@
 }
 
 std::string QuicCryptoClientStream::GetAddressToken() const {
-  DCHECK(false);
+  QUICHE_DCHECK(false);
   return "";
 }
 
 bool QuicCryptoClientStream::ValidateAddressToken(
     absl::string_view /*token*/) const {
-  DCHECK(false);
+  QUICHE_DCHECK(false);
   return false;
 }
 
diff --git a/quic/core/quic_crypto_server_stream.cc b/quic/core/quic_crypto_server_stream.cc
index acf28b7..fc9be17 100644
--- a/quic/core/quic_crypto_server_stream.cc
+++ b/quic/core/quic_crypto_server_stream.cc
@@ -126,8 +126,8 @@
       CryptoUtils::HashHandshakeMessage(message, Perspective::IS_SERVER);
 
   std::unique_ptr<ValidateCallback> cb(new ValidateCallback(this));
-  DCHECK(validate_client_hello_cb_ == nullptr);
-  DCHECK(process_client_hello_cb_ == nullptr);
+  QUICHE_DCHECK(validate_client_hello_cb_ == nullptr);
+  QUICHE_DCHECK(process_client_hello_cb_ == nullptr);
   validate_client_hello_cb_ = cb.get();
   crypto_config_->ValidateClientHello(
       message, GetClientAddress(), session()->connection()->self_address(),
@@ -140,8 +140,8 @@
         result,
     std::unique_ptr<ProofSource::Details> details) {
   // Clear the callback that got us here.
-  DCHECK(validate_client_hello_cb_ != nullptr);
-  DCHECK(process_client_hello_cb_ == nullptr);
+  QUICHE_DCHECK(validate_client_hello_cb_ != nullptr);
+  QUICHE_DCHECK(process_client_hello_cb_ == nullptr);
   validate_client_hello_cb_ = nullptr;
 
   std::unique_ptr<ProcessClientHelloCallback> cb(
@@ -159,8 +159,8 @@
         std::unique_ptr<DiversificationNonce> diversification_nonce,
         std::unique_ptr<ProofSource::Details> proof_source_details) {
   // Clear the callback that got us here.
-  DCHECK(process_client_hello_cb_ != nullptr);
-  DCHECK(validate_client_hello_cb_ == nullptr);
+  QUICHE_DCHECK(process_client_hello_cb_ != nullptr);
+  QUICHE_DCHECK(validate_client_hello_cb_ == nullptr);
   process_client_hello_cb_ = nullptr;
   proof_source_details_ = std::move(proof_source_details);
 
@@ -276,7 +276,7 @@
     bool ok,
     const CryptoHandshakeMessage& message) {
   // Clear the callback that got us here.
-  DCHECK(send_server_config_update_cb_ != nullptr);
+  QUICHE_DCHECK(send_server_config_update_cb_ != nullptr);
   send_server_config_update_cb_ = nullptr;
 
   if (!ok) {
@@ -337,21 +337,21 @@
 }
 
 void QuicCryptoServerStream::OnHandshakeDoneReceived() {
-  DCHECK(false);
+  QUICHE_DCHECK(false);
 }
 
 void QuicCryptoServerStream::OnNewTokenReceived(absl::string_view /*token*/) {
-  DCHECK(false);
+  QUICHE_DCHECK(false);
 }
 
 std::string QuicCryptoServerStream::GetAddressToken() const {
-  DCHECK(false);
+  QUICHE_DCHECK(false);
   return "";
 }
 
 bool QuicCryptoServerStream::ValidateAddressToken(
     absl::string_view /*token*/) const {
-  DCHECK(false);
+  QUICHE_DCHECK(false);
   return false;
 }
 
@@ -428,14 +428,14 @@
 std::unique_ptr<QuicDecrypter>
 QuicCryptoServerStream::AdvanceKeysAndCreateCurrentOneRttDecrypter() {
   // Key update is only defined in QUIC+TLS.
-  DCHECK(false);
+  QUICHE_DCHECK(false);
   return nullptr;
 }
 
 std::unique_ptr<QuicEncrypter>
 QuicCryptoServerStream::CreateCurrentOneRttEncrypter() {
   // Key update is only defined in QUIC+TLS.
-  DCHECK(false);
+  QUICHE_DCHECK(false);
   return nullptr;
 }
 
diff --git a/quic/core/quic_crypto_server_stream_test.cc b/quic/core/quic_crypto_server_stream_test.cc
index 1d5ff65..88fdda9 100644
--- a/quic/core/quic_crypto_server_stream_test.cc
+++ b/quic/core/quic_crypto_server_stream_test.cc
@@ -90,7 +90,7 @@
         helpers_.back().get(), alarm_factories_.back().get(),
         &server_crypto_config_, &server_compressed_certs_cache_,
         &server_connection_, &server_session);
-    CHECK(server_session);
+    QUICHE_CHECK(server_session);
     server_session_.reset(server_session);
     EXPECT_CALL(*server_session_->helper(), CanAcceptClientHello(_, _, _, _, _))
         .Times(testing::AnyNumber());
@@ -124,13 +124,13 @@
         server_id_, QuicTime::Delta::FromSeconds(100000), supported_versions_,
         helpers_.back().get(), alarm_factories_.back().get(),
         &client_crypto_config_, &client_connection_, &client_session);
-    CHECK(client_session);
+    QUICHE_CHECK(client_session);
     client_session_.reset(client_session);
   }
 
   int CompleteCryptoHandshake() {
-    CHECK(server_connection_);
-    CHECK(server_session_ != nullptr);
+    QUICHE_CHECK(server_connection_);
+    QUICHE_CHECK(server_session_ != nullptr);
 
     return crypto_test_utils::HandshakeWithFakeClient(
         helpers_.back().get(), alarm_factories_.back().get(),
@@ -141,8 +141,8 @@
   // Performs a single round of handshake message-exchange between the
   // client and server.
   void AdvanceHandshakeWithFakeClient() {
-    CHECK(server_connection_);
-    CHECK(client_session_ != nullptr);
+    QUICHE_CHECK(server_connection_);
+    QUICHE_CHECK(client_session_ != nullptr);
 
     EXPECT_CALL(*client_session_, OnProofValid(_)).Times(testing::AnyNumber());
     EXPECT_CALL(*client_session_, OnProofVerifyDetailsAvailable(_))
diff --git a/quic/core/quic_crypto_stream.cc b/quic/core/quic_crypto_stream.cc
index eccf4a3..1b2f6db 100644
--- a/quic/core/quic_crypto_stream.cc
+++ b/quic/core/quic_crypto_stream.cc
@@ -49,7 +49,8 @@
 QuicByteCount QuicCryptoStream::CryptoMessageFramingOverhead(
     QuicTransportVersion version,
     QuicConnectionId connection_id) {
-  DCHECK(QuicUtils::IsConnectionIdValidForVersion(connection_id, version));
+  QUICHE_DCHECK(
+      QuicUtils::IsConnectionIdValidForVersion(connection_id, version));
   QuicVariableLengthIntegerLength retry_token_length_length =
       VARIABLE_LENGTH_INTEGER_LENGTH_1;
   QuicVariableLengthIntegerLength length_length =
@@ -312,7 +313,7 @@
                                             QuicByteCount data_length,
                                             bool /*fin*/,
                                             TransmissionType type) {
-  DCHECK(type == HANDSHAKE_RETRANSMISSION || type == PTO_RETRANSMISSION);
+  QUICHE_DCHECK(type == HANDSHAKE_RETRANSMISSION || type == PTO_RETRANSMISSION);
   QuicIntervalSet<QuicStreamOffset> retransmission(offset,
                                                    offset + data_length);
   // Determine the encryption level to send data. This only needs to be once as
@@ -345,7 +346,7 @@
     QuicByteCount retransmission_length,
     EncryptionLevel encryption_level,
     TransmissionType type) {
-  DCHECK(type == HANDSHAKE_RETRANSMISSION || type == PTO_RETRANSMISSION);
+  QUICHE_DCHECK(type == HANDSHAKE_RETRANSMISSION || type == PTO_RETRANSMISSION);
   const auto consumed = stream_delegate()->WritevData(
       id(), retransmission_length, retransmission_offset, NO_FIN, type,
       encryption_level);
@@ -446,7 +447,8 @@
       << "Versions less than 47 don't use CRYPTO frames";
   for (EncryptionLevel level : AllEncryptionLevels()) {
     const QuicStreamSendBuffer& send_buffer = substreams_[level].send_buffer;
-    DCHECK_GE(send_buffer.stream_offset(), send_buffer.stream_bytes_written());
+    QUICHE_DCHECK_GE(send_buffer.stream_offset(),
+                     send_buffer.stream_bytes_written());
     if (send_buffer.stream_offset() > send_buffer.stream_bytes_written()) {
       return true;
     }
diff --git a/quic/core/quic_data_reader.cc b/quic/core/quic_data_reader.cc
index 761b92c..d15dd6e 100644
--- a/quic/core/quic_data_reader.cc
+++ b/quic/core/quic_data_reader.cc
@@ -45,16 +45,16 @@
   // After the fast pass, the exponent is at least one (offset by one).
   // Un-offset the exponent.
   --exponent;
-  DCHECK_GE(exponent, 1);
-  DCHECK_LE(exponent, kUFloat16MaxExponent);
+  QUICHE_DCHECK_GE(exponent, 1);
+  QUICHE_DCHECK_LE(exponent, kUFloat16MaxExponent);
   // Here we need to clear the exponent and set the hidden bit. We have already
   // decremented the exponent, so when we subtract it, it leaves behind the
   // hidden bit.
   *result -= exponent << kUFloat16MantissaBits;
   *result <<= exponent;
-  DCHECK_GE(*result,
-            static_cast<uint64_t>(1 << kUFloat16MantissaEffectiveBits));
-  DCHECK_LE(*result, kUFloat16MaxValue);
+  QUICHE_DCHECK_GE(*result,
+                   static_cast<uint64_t>(1 << kUFloat16MantissaEffectiveBits));
+  QUICHE_DCHECK_LE(*result, kUFloat16MaxValue);
   return true;
 }
 
@@ -72,7 +72,7 @@
   connection_id->set_length(length);
   const bool ok =
       ReadBytes(connection_id->mutable_data(), connection_id->length());
-  DCHECK(ok);
+  QUICHE_DCHECK(ok);
   return ok;
 }
 
@@ -86,7 +86,7 @@
 }
 
 QuicVariableLengthIntegerLength QuicDataReader::PeekVarInt62Length() {
-  DCHECK_EQ(endianness(), quiche::NETWORK_BYTE_ORDER);
+  QUICHE_DCHECK_EQ(endianness(), quiche::NETWORK_BYTE_ORDER);
   const unsigned char* next =
       reinterpret_cast<const unsigned char*>(data() + pos());
   if (BytesRemaining() == 0) {
@@ -113,7 +113,7 @@
 // Low-level optimization is useful here because this function will be
 // called frequently, leading to outsize benefits.
 bool QuicDataReader::ReadVarInt62(uint64_t* result) {
-  DCHECK_EQ(endianness(), quiche::NETWORK_BYTE_ORDER);
+  QUICHE_DCHECK_EQ(endianness(), quiche::NETWORK_BYTE_ORDER);
 
   size_t remaining = BytesRemaining();
   const unsigned char* next =
diff --git a/quic/core/quic_data_writer.cc b/quic/core/quic_data_writer.cc
index 78db03f..39cbc5a 100644
--- a/quic/core/quic_data_writer.cc
+++ b/quic/core/quic_data_writer.cc
@@ -52,10 +52,10 @@
       }
     }
 
-    DCHECK_GE(exponent, 1);
-    DCHECK_LE(exponent, kUFloat16MaxExponent);
-    DCHECK_GE(value, UINT64_C(1) << kUFloat16MantissaBits);
-    DCHECK_LT(value, UINT64_C(1) << kUFloat16MantissaEffectiveBits);
+    QUICHE_DCHECK_GE(exponent, 1);
+    QUICHE_DCHECK_LE(exponent, kUFloat16MaxExponent);
+    QUICHE_DCHECK_GE(value, UINT64_C(1) << kUFloat16MantissaBits);
+    QUICHE_DCHECK_LT(value, UINT64_C(1) << kUFloat16MantissaEffectiveBits);
 
     // Hidden bit (position 11) is set. We should remove it and increment the
     // exponent. Equivalently, we just add it to the exponent.
@@ -111,7 +111,7 @@
 // Low-level optimization is useful here because this function will be
 // called frequently, leading to outsize benefits.
 bool QuicDataWriter::WriteVarInt62(uint64_t value) {
-  DCHECK_EQ(endianness(), quiche::NETWORK_BYTE_ORDER);
+  QUICHE_DCHECK_EQ(endianness(), quiche::NETWORK_BYTE_ORDER);
 
   size_t remaining_bytes = remaining();
   char* next = buffer() + length();
@@ -182,7 +182,7 @@
 bool QuicDataWriter::WriteVarInt62(
     uint64_t value,
     QuicVariableLengthIntegerLength write_length) {
-  DCHECK_EQ(endianness(), quiche::NETWORK_BYTE_ORDER);
+  QUICHE_DCHECK_EQ(endianness(), quiche::NETWORK_BYTE_ORDER);
 
   size_t remaining_bytes = remaining();
   if (remaining_bytes < write_length) {
diff --git a/quic/core/quic_default_packet_writer.cc b/quic/core/quic_default_packet_writer.cc
index fe230d0..e71169a 100644
--- a/quic/core/quic_default_packet_writer.cc
+++ b/quic/core/quic_default_packet_writer.cc
@@ -19,8 +19,8 @@
     const QuicIpAddress& self_address,
     const QuicSocketAddress& peer_address,
     PerPacketOptions* options) {
-  DCHECK(!write_blocked_);
-  DCHECK(nullptr == options)
+  QUICHE_DCHECK(!write_blocked_);
+  QUICHE_DCHECK(nullptr == options)
       << "QuicDefaultPacketWriter does not accept any options.";
   QuicUdpPacketInfo packet_info;
   packet_info.SetPeerAddress(peer_address);
diff --git a/quic/core/quic_dispatcher.cc b/quic/core/quic_dispatcher.cc
index 75f665a..d0d44b6 100644
--- a/quic/core/quic_dispatcher.cc
+++ b/quic/core/quic_dispatcher.cc
@@ -82,12 +82,12 @@
 
   bool ShouldGeneratePacket(HasRetransmittableData /*retransmittable*/,
                             IsHandshake /*handshake*/) override {
-    DCHECK(false);
+    QUICHE_DCHECK(false);
     return true;
   }
 
   const QuicFrames MaybeBundleAckOpportunistically() override {
-    DCHECK(false);
+    QUICHE_DCHECK(false);
     return {};
   }
 
@@ -181,7 +181,7 @@
       return;
     }
     creator_.FlushCurrentPacket();
-    DCHECK_EQ(1u, collector_.packets()->size());
+    QUICHE_DCHECK_EQ(1u, collector_.packets()->size());
   }
 
   QuicConnectionId server_connection_id_;
@@ -347,7 +347,7 @@
 }
 
 void QuicDispatcher::InitializeWithWriter(QuicPacketWriter* writer) {
-  DCHECK(writer_ == nullptr);
+  QUICHE_DCHECK(writer_ == nullptr);
   writer_.reset(writer);
   time_wait_list_manager_.reset(CreateQuicTimeWaitListManager());
 }
@@ -424,24 +424,27 @@
   if (server_connection_id_length == expected_server_connection_id_length_) {
     return server_connection_id;
   }
-  DCHECK(version.AllowsVariableLengthConnectionIds());
+  QUICHE_DCHECK(version.AllowsVariableLengthConnectionIds());
   QuicConnectionId new_connection_id;
   if (server_connection_id_length < expected_server_connection_id_length_) {
     new_connection_id = ReplaceShortServerConnectionId(
         version, server_connection_id, expected_server_connection_id_length_);
     // Verify that ReplaceShortServerConnectionId is deterministic.
-    DCHECK_EQ(new_connection_id, ReplaceShortServerConnectionId(
-                                     version, server_connection_id,
-                                     expected_server_connection_id_length_));
+    QUICHE_DCHECK_EQ(
+        new_connection_id,
+        ReplaceShortServerConnectionId(version, server_connection_id,
+                                       expected_server_connection_id_length_));
   } else {
     new_connection_id = ReplaceLongServerConnectionId(
         version, server_connection_id, expected_server_connection_id_length_);
     // Verify that ReplaceLongServerConnectionId is deterministic.
-    DCHECK_EQ(new_connection_id, ReplaceLongServerConnectionId(
-                                     version, server_connection_id,
-                                     expected_server_connection_id_length_));
+    QUICHE_DCHECK_EQ(
+        new_connection_id,
+        ReplaceLongServerConnectionId(version, server_connection_id,
+                                      expected_server_connection_id_length_));
   }
-  DCHECK_EQ(expected_server_connection_id_length_, new_connection_id.length());
+  QUICHE_DCHECK_EQ(expected_server_connection_id_length_,
+                   new_connection_id.length());
 
   QUIC_DLOG(INFO) << "Replacing incoming connection ID " << server_connection_id
                   << " with " << new_connection_id;
@@ -452,8 +455,8 @@
     const ParsedQuicVersion& /*version*/,
     const QuicConnectionId& server_connection_id,
     uint8_t expected_server_connection_id_length) const {
-  DCHECK_LT(server_connection_id.length(),
-            expected_server_connection_id_length);
+  QUICHE_DCHECK_LT(server_connection_id.length(),
+                   expected_server_connection_id_length);
   return QuicUtils::CreateReplacementConnectionId(
       server_connection_id, expected_server_connection_id_length);
 }
@@ -462,8 +465,8 @@
     const ParsedQuicVersion& /*version*/,
     const QuicConnectionId& server_connection_id,
     uint8_t expected_server_connection_id_length) const {
-  DCHECK_GT(server_connection_id.length(),
-            expected_server_connection_id_length);
+  QUICHE_DCHECK_GT(server_connection_id.length(),
+                   expected_server_connection_id_length);
   return QuicUtils::CreateReplacementConnectionId(
       server_connection_id, expected_server_connection_id_length);
 }
@@ -490,8 +493,8 @@
       server_connection_id.length() < kQuicMinimumInitialConnectionIdLength &&
       server_connection_id.length() < expected_server_connection_id_length_ &&
       !allow_short_initial_server_connection_ids_) {
-    DCHECK(packet_info.version_flag);
-    DCHECK(packet_info.version.AllowsVariableLengthConnectionIds());
+    QUICHE_DCHECK(packet_info.version_flag);
+    QUICHE_DCHECK(packet_info.version.AllowsVariableLengthConnectionIds());
     QUIC_DLOG(INFO) << "Packet with short destination connection ID "
                     << server_connection_id << " expected "
                     << static_cast<int>(expected_server_connection_id_length_);
@@ -505,7 +508,8 @@
   if (use_reference_counted_session_map_) {
     auto it = reference_counted_session_map_.find(server_connection_id);
     if (it != reference_counted_session_map_.end()) {
-      DCHECK(!buffered_packets_.HasBufferedPackets(server_connection_id));
+      QUICHE_DCHECK(
+          !buffered_packets_.HasBufferedPackets(server_connection_id));
       if (packet_info.version_flag &&
           packet_info.version != it->second->version() &&
           packet_info.version == LegacyVersionForEncapsulation()) {
@@ -530,7 +534,8 @@
   } else {
     auto it = session_map_.find(server_connection_id);
     if (it != session_map_.end()) {
-      DCHECK(!buffered_packets_.HasBufferedPackets(server_connection_id));
+      QUICHE_DCHECK(
+          !buffered_packets_.HasBufferedPackets(server_connection_id));
       if (packet_info.version_flag &&
           packet_info.version != it->second->version() &&
           packet_info.version == LegacyVersionForEncapsulation()) {
@@ -567,7 +572,8 @@
         // Search for the replacement.
         auto it2 = reference_counted_session_map_.find(replaced_connection_id);
         if (it2 != reference_counted_session_map_.end()) {
-          DCHECK(!buffered_packets_.HasBufferedPackets(replaced_connection_id));
+          QUICHE_DCHECK(
+              !buffered_packets_.HasBufferedPackets(replaced_connection_id));
           it2->second->ProcessUdpPacket(packet_info.self_address,
                                         packet_info.peer_address,
                                         packet_info.packet);
@@ -577,7 +583,8 @@
         // Search for the replacement.
         auto it2 = session_map_.find(replaced_connection_id);
         if (it2 != session_map_.end()) {
-          DCHECK(!buffered_packets_.HasBufferedPackets(replaced_connection_id));
+          QUICHE_DCHECK(
+              !buffered_packets_.HasBufferedPackets(replaced_connection_id));
           it2->second->ProcessUdpPacket(packet_info.self_address,
                                         packet_info.peer_address,
                                         packet_info.packet);
@@ -748,7 +755,7 @@
           QUIC_HANDSHAKE_FAILED, "Reject connection",
           quic::QuicTimeWaitListManager::SEND_STATELESS_RESET);
 
-      DCHECK(time_wait_list_manager_->IsConnectionIdInTimeWait(
+      QUICHE_DCHECK(time_wait_list_manager_->IsConnectionIdInTimeWait(
           server_connection_id));
       time_wait_list_manager_->ProcessPacket(
           packet_info->self_address, packet_info->peer_address,
@@ -884,7 +891,7 @@
 // Get a snapshot of all sessions.
 std::vector<std::shared_ptr<QuicSession>> QuicDispatcher::GetSessionsSnapshot()
     const {
-  DCHECK(use_reference_counted_session_map_);
+  QUICHE_DCHECK(use_reference_counted_session_map_);
   std::vector<std::shared_ptr<QuicSession>> snapshot;
   snapshot.reserve(reference_counted_session_map_.size());
   absl::flat_hash_set<QuicSession*> visited_session;
@@ -937,7 +944,7 @@
   const size_t num_blocked_writers_before = write_blocked_list_.size();
   WriteBlockedList temp_list;
   temp_list.swap(write_blocked_list_);
-  DCHECK(write_blocked_list_.empty());
+  QUICHE_DCHECK(write_blocked_list_.empty());
 
   // Give each blocked writer a chance to write what they indended to write.
   // If they are blocked again, they will call |OnWriteBlocked| to add
@@ -970,8 +977,9 @@
           QUIC_PEER_GOING_AWAY, "Server shutdown imminent",
           ConnectionCloseBehavior::SEND_CONNECTION_CLOSE_PACKET);
       // Validate that the session removes itself from the session map on close.
-      DCHECK(reference_counted_session_map_.empty() ||
-             reference_counted_session_map_.begin()->second.get() != session);
+      QUICHE_DCHECK(reference_counted_session_map_.empty() ||
+                    reference_counted_session_map_.begin()->second.get() !=
+                        session);
     }
   } else {
     while (!session_map_.empty()) {
@@ -980,8 +988,8 @@
           QUIC_PEER_GOING_AWAY, "Server shutdown imminent",
           ConnectionCloseBehavior::SEND_CONNECTION_CLOSE_PACKET);
       // Validate that the session removes itself from the session map on close.
-      DCHECK(session_map_.empty() ||
-             session_map_.begin()->second.get() != session);
+      QUICHE_DCHECK(session_map_.empty() ||
+                    session_map_.begin()->second.get() != session);
     }
   }
   DeleteSessions();
@@ -1062,7 +1070,7 @@
     QuicBlockedWriterInterface* blocked_writer) {
   if (!blocked_writer->IsWriterBlocked()) {
     // It is a programming error if this ever happens. When we are sure it is
-    // not happening, replace it with a DCHECK.
+    // not happening, replace it with a QUICHE_DCHECK.
     QUIC_BUG
         << "Tried to add writer into blocked list when it shouldn't be added";
     // Return without adding the connection to the blocked list, to avoid
@@ -1081,7 +1089,7 @@
 void QuicDispatcher::OnNewConnectionIdSent(
     const QuicConnectionId& server_connection_id,
     const QuicConnectionId& new_connection_id) {
-  DCHECK(support_multiple_cid_per_connection_);
+  QUICHE_DCHECK(support_multiple_cid_per_connection_);
   auto it = reference_counted_session_map_.find(server_connection_id);
   if (it == reference_counted_session_map_.end()) {
     QUIC_BUG << "Couldn't locate the session that issues the connection ID in "
@@ -1092,12 +1100,12 @@
   }
   auto insertion_result = reference_counted_session_map_.insert(
       std::make_pair(new_connection_id, it->second));
-  DCHECK(insertion_result.second);
+  QUICHE_DCHECK(insertion_result.second);
 }
 
 void QuicDispatcher::OnConnectionIdRetired(
     const QuicConnectionId& server_connection_id) {
-  DCHECK(support_multiple_cid_per_connection_);
+  QUICHE_DCHECK(support_multiple_cid_per_connection_);
   reference_counted_session_map_.erase(server_connection_id);
 }
 
@@ -1405,7 +1413,7 @@
 
 void QuicDispatcher::MaybeResetPacketsWithNoVersion(
     const ReceivedPacketInfo& packet_info) {
-  DCHECK(!packet_info.version_flag);
+  QUICHE_DCHECK(!packet_info.version_flag);
   const size_t MinValidPacketLength =
       kPacketHeaderTypeSize + expected_server_connection_id_length_ +
       PACKET_1BYTE_PACKET_NUMBER + /*payload size=*/1 + /*tag size=*/12;
diff --git a/quic/core/quic_dispatcher_test.cc b/quic/core/quic_dispatcher_test.cc
index ba2c6ea..26742d7 100644
--- a/quic/core/quic_dispatcher_test.cc
+++ b/quic/core/quic_dispatcher_test.cc
@@ -198,7 +198,7 @@
   void RetireConnectionId(QuicConnectionId id) {
     auto it = std::find(active_connection_ids_.begin(),
                         active_connection_ids_.end(), id);
-    DCHECK(it != active_connection_ids_.end());
+    QUICHE_DCHECK(it != active_connection_ids_.end());
     dispatcher_->OnConnectionIdRetired(id);
     active_connection_ids_.erase(it);
   }
@@ -800,9 +800,9 @@
   std::string chlo = SerializeCHLO() + std::string(1200, 'a');
   // Truncate to 1100 bytes of payload which results in a packet just
   // under 1200 bytes after framing, packet, and encryption overhead.
-  DCHECK_LE(1200u, chlo.length());
+  QUICHE_DCHECK_LE(1200u, chlo.length());
   std::string truncated_chlo = chlo.substr(0, 1100);
-  DCHECK_EQ(1100u, truncated_chlo.length());
+  QUICHE_DCHECK_EQ(1100u, truncated_chlo.length());
   ProcessPacket(client_address, TestConnectionId(1), true,
                 QuicVersionReservedForNegotiation(), truncated_chlo, false,
                 CONNECTION_ID_PRESENT, PACKET_4BYTE_PACKET_NUMBER, 1);
@@ -824,9 +824,9 @@
   std::string chlo = SerializeCHLO() + std::string(1200, 'a');
   // Truncate to 1100 bytes of payload which results in a packet just
   // under 1200 bytes after framing, packet, and encryption overhead.
-  DCHECK_LE(1200u, chlo.length());
+  QUICHE_DCHECK_LE(1200u, chlo.length());
   std::string truncated_chlo = chlo.substr(0, 1100);
-  DCHECK_EQ(1100u, truncated_chlo.length());
+  QUICHE_DCHECK_EQ(1100u, truncated_chlo.length());
   ProcessPacket(client_address, TestConnectionId(1), true,
                 QuicVersionReservedForNegotiation(), truncated_chlo, true,
                 CONNECTION_ID_PRESENT, PACKET_4BYTE_PACKET_NUMBER, 1);
diff --git a/quic/core/quic_epoll_alarm_factory.cc b/quic/core/quic_epoll_alarm_factory.cc
index 9f39f82..2a08868 100644
--- a/quic/core/quic_epoll_alarm_factory.cc
+++ b/quic/core/quic_epoll_alarm_factory.cc
@@ -21,18 +21,18 @@
 
  protected:
   void SetImpl() override {
-    DCHECK(deadline().IsInitialized());
+    QUICHE_DCHECK(deadline().IsInitialized());
     epoll_server_->RegisterAlarm(
         (deadline() - QuicTime::Zero()).ToMicroseconds(), &epoll_alarm_impl_);
   }
 
   void CancelImpl() override {
-    DCHECK(!deadline().IsInitialized());
+    QUICHE_DCHECK(!deadline().IsInitialized());
     epoll_alarm_impl_.UnregisterIfRegistered();
   }
 
   void UpdateImpl() override {
-    DCHECK(deadline().IsInitialized());
+    QUICHE_DCHECK(deadline().IsInitialized());
     int64_t epoll_deadline = (deadline() - QuicTime::Zero()).ToMicroseconds();
     if (epoll_alarm_impl_.registered()) {
       epoll_alarm_impl_.ReregisterAlarm(epoll_deadline);
diff --git a/quic/core/quic_epoll_connection_helper.cc b/quic/core/quic_epoll_connection_helper.cc
index f44566f..8f53256 100644
--- a/quic/core/quic_epoll_connection_helper.cc
+++ b/quic/core/quic_epoll_connection_helper.cc
@@ -32,7 +32,7 @@
   if (allocator_type_ == QuicAllocator::BUFFER_POOL) {
     return &stream_buffer_allocator_;
   } else {
-    DCHECK(allocator_type_ == QuicAllocator::SIMPLE);
+    QUICHE_DCHECK(allocator_type_ == QuicAllocator::SIMPLE);
     return &simple_buffer_allocator_;
   }
 }
diff --git a/quic/core/quic_error_codes.cc b/quic/core/quic_error_codes.cc
index cc050dd..dd8be33 100644
--- a/quic/core/quic_error_codes.cc
+++ b/quic/core/quic_error_codes.cc
@@ -313,7 +313,7 @@
     // change behavior and are only here to make the compiler happy.
     case CRYPTO_ERROR_FIRST:
     case CRYPTO_ERROR_LAST:
-      DCHECK(false) << "Unexpected error " << static_cast<uint64_t>(c);
+      QUICHE_DCHECK(false) << "Unexpected error " << static_cast<uint64_t>(c);
       break;
   }
 
diff --git a/quic/core/quic_flow_controller.cc b/quic/core/quic_flow_controller.cc
index b8bbda2..01fb72c 100644
--- a/quic/core/quic_flow_controller.cc
+++ b/quic/core/quic_flow_controller.cc
@@ -53,8 +53,8 @@
       session_flow_controller_(session_flow_controller),
       last_blocked_send_window_offset_(0),
       prev_window_update_time_(QuicTime::Zero()) {
-  DCHECK_LE(receive_window_size_, receive_window_size_limit_);
-  DCHECK_EQ(
+  QUICHE_DCHECK_LE(receive_window_size_, receive_window_size_limit_);
+  QUICHE_DCHECK_EQ(
       is_connection_flow_controller_,
       QuicUtils::GetInvalidStreamId(session_->transport_version()) == id_);
 
@@ -198,7 +198,7 @@
   // Send WindowUpdate to increase receive window if
   // (receive window offset - consumed bytes) < (max window / 2).
   // This is behaviour copied from SPDY.
-  DCHECK_LE(bytes_consumed_, receive_window_offset_);
+  QUICHE_DCHECK_LE(bytes_consumed_, receive_window_offset_);
   QuicStreamOffset available_window = receive_window_offset_ - bytes_consumed_;
   QuicByteCount threshold = WindowUpdateThreshold();
 
@@ -294,7 +294,7 @@
 }
 
 void QuicFlowController::UpdateReceiveWindowSize(QuicStreamOffset size) {
-  DCHECK_LE(size, receive_window_size_limit_);
+  QUICHE_DCHECK_LE(size, receive_window_size_limit_);
   QUIC_DVLOG(1) << ENDPOINT << "UpdateReceiveWindowSize for " << LogLabel()
                 << ": " << size;
   if (receive_window_size_ != receive_window_offset_) {
diff --git a/quic/core/quic_framer.cc b/quic/core/quic_framer.cc
index af85f12..60f069c 100644
--- a/quic/core/quic_framer.cc
+++ b/quic/core/quic_framer.cc
@@ -194,7 +194,7 @@
 }
 
 QuicPacketNumberLength GetShortHeaderPacketNumberLength(uint8_t type) {
-  DCHECK(!(type & FLAGS_LONG_HEADER));
+  QUICHE_DCHECK(!(type & FLAGS_LONG_HEADER));
   return static_cast<QuicPacketNumberLength>((type & 0x03) + 1);
 }
 
@@ -217,7 +217,7 @@
 }
 
 bool GetLongHeaderType(uint8_t type, QuicLongHeaderType* long_header_type) {
-  DCHECK((type & FLAGS_LONG_HEADER));
+  QUICHE_DCHECK((type & FLAGS_LONG_HEADER));
   switch ((type & 0x30) >> 4) {
     case 0:
       *long_header_type = INITIAL;
@@ -429,9 +429,9 @@
       peer_ack_delay_exponent_(kDefaultAckDelayExponent),
       local_ack_delay_exponent_(kDefaultAckDelayExponent),
       current_received_frame_type_(0) {
-  DCHECK(!supported_versions.empty());
+  QUICHE_DCHECK(!supported_versions.empty());
   version_ = supported_versions_[0];
-  DCHECK(version_.IsKnown())
+  QUICHE_DCHECK(version_.IsKnown())
       << ParsedQuicVersionVectorToString(supported_versions_);
 }
 
@@ -704,12 +704,12 @@
     case MESSAGE_FRAME:
     case CRYPTO_FRAME:
     case NUM_FRAME_TYPES:
-      DCHECK(false);
+      QUICHE_DCHECK(false);
       return 0;
   }
 
   // Not reachable, but some Chrome compilers can't figure that out.  *sigh*
-  DCHECK(false);
+  QUICHE_DCHECK(false);
   return 0;
 }
 
@@ -1310,7 +1310,7 @@
     const ParsedQuicVersionVector& versions) {
   QUIC_CODE_COUNT(quic_build_version_negotiation);
   if (use_length_prefix) {
-    DCHECK(ietf_quic);
+    QUICHE_DCHECK(ietf_quic);
     QUIC_CODE_COUNT(quic_build_version_negotiation_ietf);
   } else if (ietf_quic) {
     QUIC_CODE_COUNT(quic_build_version_negotiation_old_ietf);
@@ -1346,11 +1346,11 @@
   }
 
   // The GQUIC encoding does not support encoding client connection IDs.
-  DCHECK(client_connection_id.IsEmpty());
+  QUICHE_DCHECK(client_connection_id.IsEmpty());
   // The GQUIC encoding does not support length-prefixed connection IDs.
-  DCHECK(!use_length_prefix);
+  QUICHE_DCHECK(!use_length_prefix);
 
-  DCHECK(!wire_versions.empty());
+  QUICHE_DCHECK(!wire_versions.empty());
   size_t len = kPublicFlagsSize + server_connection_id.length() +
                wire_versions.size() * kQuicVersionSize;
   std::unique_ptr<char[]> buffer(new char[len]);
@@ -1389,7 +1389,7 @@
                 << server_connection_id << " client_connection_id "
                 << client_connection_id << " versions "
                 << ParsedQuicVersionVectorToString(versions);
-  DCHECK(!versions.empty());
+  QUICHE_DCHECK(!versions.empty());
   size_t len = kPacketHeaderTypeSize + kConnectionIdLengthSize +
                client_connection_id.length() + server_connection_id.length() +
                (versions.size() + 1) * kQuicVersionSize;
@@ -1450,10 +1450,10 @@
 
   QuicPacketHeader header;
   if (!ProcessPublicHeader(&reader, packet_has_ietf_packet_header, &header)) {
-    DCHECK_NE("", detailed_error_);
+    QUICHE_DCHECK_NE("", detailed_error_);
     QUIC_DVLOG(1) << ENDPOINT << "Unable to process public header. Error: "
                   << detailed_error_;
-    DCHECK_NE("", detailed_error_);
+    QUICHE_DCHECK_NE("", detailed_error_);
     RecordDroppedPacketReason(DroppedPacketReason::INVALID_PUBLIC_HEADER);
     return RaiseError(QUIC_INVALID_PACKET_HEADER);
   }
@@ -1526,7 +1526,7 @@
 bool QuicFramer::ProcessVersionNegotiationPacket(
     QuicDataReader* reader,
     const QuicPacketHeader& header) {
-  DCHECK_EQ(Perspective::IS_CLIENT, perspective_);
+  QUICHE_DCHECK_EQ(Perspective::IS_CLIENT, perspective_);
 
   QuicVersionNegotiationPacket packet(
       GetServerConnectionIdAsRecipient(header, perspective_));
@@ -1554,14 +1554,14 @@
 
 bool QuicFramer::ProcessRetryPacket(QuicDataReader* reader,
                                     const QuicPacketHeader& header) {
-  DCHECK_EQ(Perspective::IS_CLIENT, perspective_);
+  QUICHE_DCHECK_EQ(Perspective::IS_CLIENT, perspective_);
   if (drop_incoming_retry_packets_) {
     QUIC_DLOG(INFO) << "Ignoring received RETRY packet";
     return true;
   }
 
   if (version_.UsesTls()) {
-    DCHECK(version_.HasLengthPrefixedConnectionIds()) << version_;
+    QUICHE_DCHECK(version_.HasLengthPrefixedConnectionIds()) << version_;
     const size_t bytes_remaining = reader->BytesRemaining();
     if (bytes_remaining <= kRetryIntegrityTagLength) {
       set_detailed_error("Retry packet too short to parse integrity tag.");
@@ -1569,7 +1569,7 @@
     }
     const size_t retry_token_length =
         bytes_remaining - kRetryIntegrityTagLength;
-    DCHECK_GT(retry_token_length, 0u);
+    QUICHE_DCHECK_GT(retry_token_length, 0u);
     absl::string_view retry_token;
     if (!reader->ReadStringPiece(&retry_token, retry_token_length)) {
       set_detailed_error("Failed to read retry token.");
@@ -1577,7 +1577,7 @@
     }
     absl::string_view retry_without_tag = reader->PreviouslyReadPayload();
     absl::string_view integrity_tag = reader->ReadRemainingPayload();
-    DCHECK_EQ(integrity_tag.length(), kRetryIntegrityTagLength);
+    QUICHE_DCHECK_EQ(integrity_tag.length(), kRetryIntegrityTagLength);
     visitor_->OnRetryPacket(EmptyQuicConnectionId(),
                             header.source_connection_id, retry_token,
                             integrity_tag, retry_without_tag);
@@ -1634,7 +1634,7 @@
   }
 
   absl::string_view remaining_data = encrypted_reader.PeekRemainingPayload();
-  DCHECK_EQ(remaining_data.length(), remaining_bytes_length);
+  QUICHE_DCHECK_EQ(remaining_data.length(), remaining_bytes_length);
 
   const char* coalesced_data =
       remaining_data.data() + header.remaining_packet_length;
@@ -1708,8 +1708,8 @@
                                        const QuicEncryptedPacket& packet,
                                        char* decrypted_buffer,
                                        size_t buffer_length) {
-  DCHECK_NE(GOOGLE_QUIC_PACKET, header->form);
-  DCHECK(!header->has_possible_stateless_reset_token);
+  QUICHE_DCHECK_NE(GOOGLE_QUIC_PACKET, header->form);
+  QUICHE_DCHECK(!header->has_possible_stateless_reset_token);
   header->length_length = VARIABLE_LENGTH_INTEGER_LENGTH_0;
   header->remaining_packet_length = 0;
   if (header->form == IETF_QUIC_SHORT_HEADER_PACKET &&
@@ -1735,10 +1735,10 @@
   QuicPacketNumber base_packet_number;
   if (header->form == IETF_QUIC_SHORT_HEADER_PACKET ||
       header->long_packet_type != VERSION_NEGOTIATION) {
-    DCHECK(header->form == IETF_QUIC_SHORT_HEADER_PACKET ||
-           header->long_packet_type == INITIAL ||
-           header->long_packet_type == HANDSHAKE ||
-           header->long_packet_type == ZERO_RTT_PROTECTED);
+    QUICHE_DCHECK(header->form == IETF_QUIC_SHORT_HEADER_PACKET ||
+                  header->long_packet_type == INITIAL ||
+                  header->long_packet_type == HANDSHAKE ||
+                  header->long_packet_type == ZERO_RTT_PROTECTED);
     // Process packet number.
     if (supports_multiple_packet_number_spaces_) {
       PacketNumberSpace pn_space = GetPacketNumberSpace(*header);
@@ -1889,8 +1889,9 @@
     current_received_frame_type_ = 0;
     if (!ProcessIetfFrameData(&reader, *header)) {
       current_received_frame_type_ = 0;
-      DCHECK_NE(QUIC_NO_ERROR, error_);  // ProcessIetfFrameData sets the error.
-      DCHECK_NE("", detailed_error_);
+      QUICHE_DCHECK_NE(QUIC_NO_ERROR,
+                       error_);  // ProcessIetfFrameData sets the error.
+      QUICHE_DCHECK_NE("", detailed_error_);
       QUIC_DLOG(WARNING) << ENDPOINT << "Unable to process frame data. Error: "
                          << detailed_error_;
       return false;
@@ -1898,8 +1899,9 @@
     current_received_frame_type_ = 0;
   } else {
     if (!ProcessFrameData(&reader, *header)) {
-      DCHECK_NE(QUIC_NO_ERROR, error_);  // ProcessFrameData sets the error.
-      DCHECK_NE("", detailed_error_);
+      QUICHE_DCHECK_NE(QUIC_NO_ERROR,
+                       error_);  // ProcessFrameData sets the error.
+      QUICHE_DCHECK_NE("", detailed_error_);
       QUIC_DLOG(WARNING) << ENDPOINT << "Unable to process frame data. Error: "
                          << detailed_error_;
       return false;
@@ -1916,7 +1918,7 @@
                                    char* decrypted_buffer,
                                    size_t buffer_length) {
   if (!ProcessUnauthenticatedHeader(encrypted_reader, header)) {
-    DCHECK_NE("", detailed_error_);
+    QUICHE_DCHECK_NE("", detailed_error_);
     QUIC_DVLOG(1)
         << ENDPOINT
         << "Unable to process packet header. Stopping parsing. Error: "
@@ -1977,8 +1979,9 @@
 
   // Handle the payload.
   if (!ProcessFrameData(&reader, *header)) {
-    DCHECK_NE(QUIC_NO_ERROR, error_);  // ProcessFrameData sets the error.
-    DCHECK_NE("", detailed_error_);
+    QUICHE_DCHECK_NE(QUIC_NO_ERROR,
+                     error_);  // ProcessFrameData sets the error.
+    QUICHE_DCHECK_NE("", detailed_error_);
     QUIC_DLOG(WARNING) << ENDPOINT << "Unable to process frame data. Error: "
                        << detailed_error_;
     return false;
@@ -2079,7 +2082,7 @@
   if (HasEncrypterOfEncryptionLevel(ENCRYPTION_FORWARD_SECURE)) {
     return ENCRYPTION_FORWARD_SECURE;
   }
-  DCHECK(HasEncrypterOfEncryptionLevel(ENCRYPTION_ZERO_RTT));
+  QUICHE_DCHECK(HasEncrypterOfEncryptionLevel(ENCRYPTION_ZERO_RTT));
   return ENCRYPTION_ZERO_RTT;
 }
 
@@ -2102,7 +2105,7 @@
                   << kPublicHeaderSequenceNumberShift;
 
   if (header.nonce != nullptr) {
-    DCHECK_EQ(Perspective::IS_SERVER, perspective_);
+    QUICHE_DCHECK_EQ(Perspective::IS_SERVER, perspective_);
     public_flags |= PACKET_PUBLIC_FLAGS_NONCE;
   }
 
@@ -2110,8 +2113,8 @@
       GetServerConnectionIdAsSender(header, perspective_);
   QuicConnectionIdIncluded server_connection_id_included =
       GetServerConnectionIdIncludedAsSender(header, perspective_);
-  DCHECK_EQ(CONNECTION_ID_ABSENT,
-            GetClientConnectionIdIncludedAsSender(header, perspective_))
+  QUICHE_DCHECK_EQ(CONNECTION_ID_ABSENT,
+                   GetClientConnectionIdIncludedAsSender(header, perspective_))
       << ENDPOINT << ParsedQuicVersionToString(version_)
       << " invalid header: " << header;
 
@@ -2142,7 +2145,7 @@
   last_serialized_server_connection_id_ = server_connection_id;
 
   if (header.version_flag) {
-    DCHECK_EQ(Perspective::IS_CLIENT, perspective_);
+    QUICHE_DCHECK_EQ(Perspective::IS_CLIENT, perspective_);
     QuicVersionLabel version_label = CreateQuicVersionLabel(version_);
     if (!writer->WriteUInt32(version_label)) {
       return false;
@@ -2196,7 +2199,7 @@
   }
 
   if (header.version_flag) {
-    DCHECK_NE(VERSION_NEGOTIATION, header.long_packet_type)
+    QUICHE_DCHECK_NE(VERSION_NEGOTIATION, header.long_packet_type)
         << "QuicFramer::AppendIetfPacketHeader does not support sending "
            "version negotiation packets, use "
            "QuicFramer::BuildVersionNegotiationPacket instead "
@@ -2234,8 +2237,8 @@
   if (QuicVersionHasLongHeaderLengths(transport_version()) &&
       header.version_flag) {
     if (header.long_packet_type == INITIAL) {
-      DCHECK_NE(VARIABLE_LENGTH_INTEGER_LENGTH_0,
-                header.retry_token_length_length)
+      QUICHE_DCHECK_NE(VARIABLE_LENGTH_INTEGER_LENGTH_0,
+                       header.retry_token_length_length)
           << ENDPOINT << ParsedQuicVersionToString(version_)
           << " bad retry token length length in header: " << header;
       // Write retry token length.
@@ -2270,9 +2273,9 @@
   }
 
   if (header.nonce != nullptr) {
-    DCHECK(header.version_flag);
-    DCHECK_EQ(ZERO_RTT_PROTECTED, header.long_packet_type);
-    DCHECK_EQ(Perspective::IS_SERVER, perspective_);
+    QUICHE_DCHECK(header.version_flag);
+    QUICHE_DCHECK_EQ(ZERO_RTT_PROTECTED, header.long_packet_type);
+    QUICHE_DCHECK_EQ(Perspective::IS_SERVER, perspective_);
     if (!writer->WriteBytes(header.nonce, kDiversificationNonceSize)) {
       return false;
     }
@@ -2424,7 +2427,7 @@
 // static
 QuicPacketNumberLength QuicFramer::GetMinPacketNumberLength(
     QuicPacketNumber packet_number) {
-  DCHECK(packet_number.IsInitialized());
+  QUICHE_DCHECK(packet_number.IsInitialized());
   if (packet_number < QuicPacketNumber(1 << (PACKET_1BYTE_PACKET_NUMBER * 8))) {
     return PACKET_1BYTE_PACKET_NUMBER;
   } else if (packet_number <
@@ -2729,7 +2732,7 @@
     header->source_connection_id_included =
         header->version_flag ? CONNECTION_ID_PRESENT : CONNECTION_ID_ABSENT;
     if (header->source_connection_id_included == CONNECTION_ID_ABSENT) {
-      DCHECK(header->source_connection_id.IsEmpty());
+      QUICHE_DCHECK(header->source_connection_id.IsEmpty());
       if (perspective_ == Perspective::IS_CLIENT) {
         header->source_connection_id = last_serialized_server_connection_id_;
       } else {
@@ -2819,7 +2822,7 @@
 
   if (header->source_connection_id_included == CONNECTION_ID_ABSENT) {
     if (!header->source_connection_id.IsEmpty()) {
-      DCHECK(!version_.SupportsClientConnectionIds());
+      QUICHE_DCHECK(!version_.SupportsClientConnectionIds());
       set_detailed_error("Client connection ID not supported in this version.");
       return false;
     }
@@ -2852,7 +2855,7 @@
 
 bool QuicFramer::ProcessFrameData(QuicDataReader* reader,
                                   const QuicPacketHeader& header) {
-  DCHECK(!VersionHasIetfQuicFrames(version_.transport_version))
+  QUICHE_DCHECK(!VersionHasIetfQuicFrames(version_.transport_version))
       << "IETF QUIC Framing negotiated but attempting to process frames as "
          "non-IETF QUIC.";
   if (reader->IsDoneReading()) {
@@ -3085,7 +3088,7 @@
 
 bool QuicFramer::ProcessIetfFrameData(QuicDataReader* reader,
                                       const QuicPacketHeader& header) {
-  DCHECK(VersionHasIetfQuicFrames(version_.transport_version))
+  QUICHE_DCHECK(VersionHasIetfQuicFrames(version_.transport_version))
       << "Attempt to process frames as IETF frames but version ("
       << version_.transport_version << ") does not support IETF Framing.";
 
@@ -3458,7 +3461,7 @@
 
 // Set |num_bits|, offset by |offset| to |val| in |flags|.
 void SetBits(uint8_t* flags, uint8_t val, uint8_t num_bits, uint8_t offset) {
-  DCHECK_LE(val, GetMaskFromNumBits(num_bits));
+  QUICHE_DCHECK_LE(val, GetMaskFromNumBits(num_bits));
   *flags |= val << offset;
 }
 
@@ -3576,7 +3579,7 @@
     return false;
   }
   frame->data_buffer = data.data();
-  DCHECK_EQ(frame->data_length, data.length());
+  QUICHE_DCHECK_EQ(frame->data_length, data.length());
 
   return true;
 }
@@ -4144,7 +4147,7 @@
 
 bool QuicFramer::ProcessBlockedFrame(QuicDataReader* reader,
                                      QuicBlockedFrame* frame) {
-  DCHECK(!VersionHasIetfQuicFrames(version_.transport_version))
+  QUICHE_DCHECK(!VersionHasIetfQuicFrames(version_.transport_version))
       << "Attempt to process non-IETF QUIC frames in an IETF QUIC version.";
 
   if (!reader->ReadUInt32(&frame->stream_id)) {
@@ -4162,7 +4165,7 @@
   uint8_t next_byte;
   while (!reader->IsDoneReading() && reader->PeekByte() == 0x00) {
     reader->ReadBytes(&next_byte, 1);
-    DCHECK_EQ(0x00, next_byte);
+    QUICHE_DCHECK_EQ(0x00, next_byte);
     ++frame->num_padding_bytes;
   }
 }
@@ -4219,9 +4222,9 @@
 
 void QuicFramer::SetDecrypter(EncryptionLevel level,
                               std::unique_ptr<QuicDecrypter> decrypter) {
-  DCHECK_EQ(alternative_decrypter_level_, NUM_ENCRYPTION_LEVELS);
-  DCHECK_GE(level, decrypter_level_);
-  DCHECK(!version_.KnowsWhichDecrypterToUse());
+  QUICHE_DCHECK_EQ(alternative_decrypter_level_, NUM_ENCRYPTION_LEVELS);
+  QUICHE_DCHECK_GE(level, decrypter_level_);
+  QUICHE_DCHECK(!version_.KnowsWhichDecrypterToUse());
   QUIC_DVLOG(1) << ENDPOINT << "Setting decrypter from level "
                 << decrypter_level_ << " to " << level;
   decrypter_[decrypter_level_] = nullptr;
@@ -4233,8 +4236,8 @@
     EncryptionLevel level,
     std::unique_ptr<QuicDecrypter> decrypter,
     bool latch_once_used) {
-  DCHECK_NE(level, decrypter_level_);
-  DCHECK(!version_.KnowsWhichDecrypterToUse());
+  QUICHE_DCHECK_NE(level, decrypter_level_);
+  QUICHE_DCHECK(!version_.KnowsWhichDecrypterToUse());
   QUIC_DVLOG(1) << ENDPOINT << "Setting alternative decrypter from level "
                 << alternative_decrypter_level_ << " to " << level;
   if (alternative_decrypter_level_ != NUM_ENCRYPTION_LEVELS) {
@@ -4247,13 +4250,13 @@
 
 void QuicFramer::InstallDecrypter(EncryptionLevel level,
                                   std::unique_ptr<QuicDecrypter> decrypter) {
-  DCHECK(version_.KnowsWhichDecrypterToUse());
+  QUICHE_DCHECK(version_.KnowsWhichDecrypterToUse());
   QUIC_DVLOG(1) << ENDPOINT << "Installing decrypter at level " << level;
   decrypter_[level] = std::move(decrypter);
 }
 
 void QuicFramer::RemoveDecrypter(EncryptionLevel level) {
-  DCHECK(version_.KnowsWhichDecrypterToUse());
+  QUICHE_DCHECK(version_.KnowsWhichDecrypterToUse());
   QUIC_DVLOG(1) << ENDPOINT << "Removing decrypter at level " << level;
   decrypter_[level] = nullptr;
 }
@@ -4264,13 +4267,13 @@
 }
 
 void QuicFramer::DiscardPreviousOneRttKeys() {
-  DCHECK(support_key_update_for_connection_);
+  QUICHE_DCHECK(support_key_update_for_connection_);
   QUIC_DVLOG(1) << ENDPOINT << "Discarding previous set of 1-RTT keys";
   previous_decrypter_ = nullptr;
 }
 
 bool QuicFramer::DoKeyUpdate(KeyUpdateReason reason) {
-  DCHECK(support_key_update_for_connection_);
+  QUICHE_DCHECK(support_key_update_for_connection_);
   if (!next_decrypter_) {
     // If key update is locally initiated, next decrypter might not be created
     // yet.
@@ -4298,7 +4301,7 @@
 }
 
 const QuicDecrypter* QuicFramer::GetDecrypter(EncryptionLevel level) const {
-  DCHECK(version_.KnowsWhichDecrypterToUse());
+  QUICHE_DCHECK(version_.KnowsWhichDecrypterToUse());
   return decrypter_[level].get();
 }
 
@@ -4315,8 +4318,8 @@
 
 void QuicFramer::SetEncrypter(EncryptionLevel level,
                               std::unique_ptr<QuicEncrypter> encrypter) {
-  DCHECK_GE(level, 0);
-  DCHECK_LT(level, NUM_ENCRYPTION_LEVELS);
+  QUICHE_DCHECK_GE(level, 0);
+  QUICHE_DCHECK_LT(level, NUM_ENCRYPTION_LEVELS);
   QUIC_DVLOG(1) << ENDPOINT << "Setting encrypter at level " << level;
   encrypter_[level] = std::move(encrypter);
 }
@@ -4340,7 +4343,7 @@
                                   size_t total_len,
                                   size_t buffer_len,
                                   char* buffer) {
-  DCHECK(packet_number.IsInitialized());
+  QUICHE_DCHECK(packet_number.IsInitialized());
   if (encrypter_[level] == nullptr) {
     QUIC_BUG << ENDPOINT
              << "Attempted to encrypt in place without encrypter at level "
@@ -4595,7 +4598,7 @@
                                   const QuicPacket& packet,
                                   char* buffer,
                                   size_t buffer_len) {
-  DCHECK(packet_number.IsInitialized());
+  QUICHE_DCHECK(packet_number.IsInitialized());
   if (encrypter_[level] == nullptr) {
     QUIC_BUG << ENDPOINT << "Attempted to encrypt without encrypter at level "
              << level;
@@ -4711,8 +4714,8 @@
     }
     if (support_key_update_for_connection_ &&
         header.form == IETF_QUIC_SHORT_HEADER_PACKET) {
-      DCHECK(version().UsesTls());
-      DCHECK_EQ(level, ENCRYPTION_FORWARD_SECURE);
+      QUICHE_DCHECK(version().UsesTls());
+      QUICHE_DCHECK_EQ(level, ENCRYPTION_FORWARD_SECURE);
       key_phase = (header.type_byte & FLAGS_KEY_PHASE_BIT) != 0;
       key_phase_parsed = true;
       QUIC_DVLOG(1) << ENDPOINT << "packet " << header.packet_number
@@ -4791,7 +4794,7 @@
         set_detailed_error("Key update failed due to internal error");
         return RaiseError(QUIC_INTERNAL_ERROR);
       }
-      DCHECK_EQ(current_key_phase_bit_, key_phase);
+      QUICHE_DCHECK_EQ(current_key_phase_bit_, key_phase);
     }
     if (key_phase_parsed &&
         !current_key_phase_first_received_packet_number_.IsInitialized() &&
@@ -4809,7 +4812,7 @@
     }
   } else if (alternative_decrypter != nullptr) {
     if (header.nonce != nullptr) {
-      DCHECK_EQ(perspective_, Perspective::IS_CLIENT);
+      QUICHE_DCHECK_EQ(perspective_, Perspective::IS_CLIENT);
       alternative_decrypter->SetDiversificationNonce(*header.nonce);
     }
     bool try_alternative_decryption = true;
@@ -4820,7 +4823,7 @@
           try_alternative_decryption = false;
         }
       } else {
-        DCHECK(header.nonce == nullptr);
+        QUICHE_DCHECK(header.nonce == nullptr);
       }
     }
 
@@ -4909,7 +4912,7 @@
 size_t QuicFramer::GetAckFrameSize(
     const QuicAckFrame& ack,
     QuicPacketNumberLength /*packet_number_length*/) {
-  DCHECK(!ack.packets.Empty());
+  QUICHE_DCHECK(!ack.packets.Empty());
   size_t ack_size = 0;
 
   if (VersionHasIetfQuicFrames(version_.transport_version)) {
@@ -4975,7 +4978,7 @@
                                  last_frame_in_packet,
                                  frame.message_frame->message_length);
     case PADDING_FRAME:
-      DCHECK(false);
+      QUICHE_DCHECK(false);
       return 0;
     default:
       return GetRetransmittableControlFrameSize(version_.transport_version,
@@ -5165,7 +5168,7 @@
 bool QuicFramer::AppendPacketNumber(QuicPacketNumberLength packet_number_length,
                                     QuicPacketNumber packet_number,
                                     QuicDataWriter* writer) {
-  DCHECK(packet_number.IsInitialized());
+  QUICHE_DCHECK(packet_number.IsInitialized());
   if (!IsValidPacketNumberLength(packet_number_length)) {
     QUIC_BUG << "Invalid packet_number_length: " << packet_number_length;
     return false;
@@ -5243,7 +5246,7 @@
   }
 
   if (data_producer_ != nullptr) {
-    DCHECK_EQ(nullptr, frame.data_buffer);
+    QUICHE_DCHECK_EQ(nullptr, frame.data_buffer);
     if (frame.data_length == 0) {
       return true;
     }
@@ -5332,7 +5335,7 @@
       return false;
     }
   } else {
-    DCHECK_EQ(nullptr, frame.data_buffer);
+    QUICHE_DCHECK_EQ(nullptr, frame.data_buffer);
 
     if (data_producer_->WriteStreamData(frame.stream_id, frame.offset,
                                         frame.data_length,
@@ -5361,7 +5364,7 @@
       return false;
     }
   } else {
-    DCHECK_EQ(nullptr, frame.data_buffer);
+    QUICHE_DCHECK_EQ(nullptr, frame.data_buffer);
     if (!data_producer_->WriteCryptoData(frame.level, frame.offset,
                                          frame.data_length, writer)) {
       return false;
@@ -5394,7 +5397,8 @@
 }
 
 void QuicFramer::set_version(const ParsedQuicVersion version) {
-  DCHECK(IsSupportedVersion(version)) << ParsedQuicVersionToString(version);
+  QUICHE_DCHECK(IsSupportedVersion(version))
+      << ParsedQuicVersionToString(version);
   version_ = version;
 }
 
@@ -5416,7 +5420,7 @@
       GetMinAckFrameSize(version_.transport_version, frame,
                          local_ack_delay_exponent_) -
       (new_ack_info.num_ack_blocks != 0 ? kNumberOfAckBlocksSize : 0);
-  DCHECK_LE(0, available_timestamp_and_ack_block_bytes);
+  QUICHE_DCHECK_LE(0, available_timestamp_and_ack_block_bytes);
 
   uint8_t type_byte = 0;
   SetBit(&type_byte, new_ack_info.num_ack_blocks != 0,
@@ -5452,7 +5456,7 @@
   // Largest acked delta time.
   uint64_t ack_delay_time_us = kUFloat16MaxValue;
   if (!frame.ack_delay_time.IsInfinite()) {
-    DCHECK_LE(0u, frame.ack_delay_time.ToMicroseconds());
+    QUICHE_DCHECK_LE(0u, frame.ack_delay_time.ToMicroseconds());
     ack_delay_time_us = frame.ack_delay_time.ToMicroseconds();
   }
   if (!writer->WriteUFloat16(ack_delay_time_us)) {
@@ -5524,7 +5528,7 @@
       }
       ++num_ack_blocks_written;
     }
-    DCHECK_EQ(num_ack_blocks, num_ack_blocks_written);
+    QUICHE_DCHECK_EQ(num_ack_blocks, num_ack_blocks_written);
   }
   // Timestamps.
   // If we don't process timestamps or if we don't have enough available space
@@ -5546,8 +5550,8 @@
 
 bool QuicFramer::AppendTimestampsToAckFrame(const QuicAckFrame& frame,
                                             QuicDataWriter* writer) {
-  DCHECK_GE(std::numeric_limits<uint8_t>::max(),
-            frame.received_packet_times.size());
+  QUICHE_DCHECK_GE(std::numeric_limits<uint8_t>::max(),
+                   frame.received_packet_times.size());
   // num_received_packets is only 1 byte.
   if (frame.received_packet_times.size() >
       std::numeric_limits<uint8_t>::max()) {
@@ -5566,7 +5570,8 @@
   QuicPacketNumber packet_number = it->first;
   uint64_t delta_from_largest_observed = LargestAcked(frame) - packet_number;
 
-  DCHECK_GE(std::numeric_limits<uint8_t>::max(), delta_from_largest_observed);
+  QUICHE_DCHECK_GE(std::numeric_limits<uint8_t>::max(),
+                   delta_from_largest_observed);
   if (delta_from_largest_observed > std::numeric_limits<uint8_t>::max()) {
     return false;
   }
@@ -5610,9 +5615,9 @@
 bool QuicFramer::AppendStopWaitingFrame(const QuicPacketHeader& header,
                                         const QuicStopWaitingFrame& frame,
                                         QuicDataWriter* writer) {
-  DCHECK(!version_.HasIetfInvariantHeader());
-  DCHECK(frame.least_unacked.IsInitialized());
-  DCHECK_GE(header.packet_number, frame.least_unacked);
+  QUICHE_DCHECK(!version_.HasIetfInvariantHeader());
+  QUICHE_DCHECK(frame.least_unacked.IsInitialized());
+  QUICHE_DCHECK_GE(header.packet_number, frame.least_unacked);
   const uint64_t least_unacked_delta =
       header.packet_number - frame.least_unacked;
   const uint64_t length_shift = header.packet_number_length * 8;
@@ -5664,7 +5669,7 @@
 
   uint64_t ack_delay_time_us = kVarInt62MaxValue;
   if (!frame.ack_delay_time.IsInfinite()) {
-    DCHECK_LE(0u, frame.ack_delay_time.ToMicroseconds());
+    QUICHE_DCHECK_LE(0u, frame.ack_delay_time.ToMicroseconds());
     ack_delay_time_us = frame.ack_delay_time.ToMicroseconds();
     ack_delay_time_us = ack_delay_time_us >> local_ack_delay_exponent_;
   }
@@ -5710,7 +5715,7 @@
     }
     const bool success =
         writer->WriteVarInt62(gap) && writer->WriteVarInt62(ack_range);
-    DCHECK(success);
+    QUICHE_DCHECK(success);
     previous_smallest = iter->min();
     ++appended_ack_blocks;
   }
@@ -6365,7 +6370,7 @@
 uint8_t QuicFramer::GetIetfStreamFrameTypeByte(
     const QuicStreamFrame& frame,
     bool last_frame_in_packet) const {
-  DCHECK(VersionHasIetfQuicFrames(version_.transport_version));
+  QUICHE_DCHECK(VersionHasIetfQuicFrames(version_.transport_version));
   uint8_t type_byte = IETF_STREAM;
   if (!last_frame_in_packet) {
     type_byte |= IETF_STREAM_FRAME_LEN_BIT;
@@ -6382,8 +6387,8 @@
 void QuicFramer::InferPacketHeaderTypeFromVersion() {
   // This function should only be called when server connection negotiates the
   // version.
-  DCHECK_EQ(perspective_, Perspective::IS_SERVER);
-  DCHECK(!infer_packet_header_type_from_version_);
+  QUICHE_DCHECK_EQ(perspective_, Perspective::IS_SERVER);
+  QUICHE_DCHECK(!infer_packet_header_type_from_version_);
   infer_packet_header_type_from_version_ = true;
 }
 
@@ -6620,7 +6625,7 @@
     return QUIC_NO_ERROR;
   }
 
-  DCHECK_EQ(IETF_QUIC_LONG_HEADER_PACKET, *format);
+  QUICHE_DCHECK_EQ(IETF_QUIC_LONG_HEADER_PACKET, *format);
   *version_present = true;
   if (!ProcessVersionLabel(reader, version_label)) {
     *detailed_error = "Unable to read protocol version.";
@@ -6751,7 +6756,7 @@
   }
   // Fill the rest of the packet with zeroes.
   writer.WritePadding();
-  DCHECK_EQ(0u, writer.remaining());
+  QUICHE_DCHECK_EQ(0u, writer.remaining());
   return true;
 }
 
diff --git a/quic/core/quic_framer_test.cc b/quic/core/quic_framer_test.cc
index 4859ad6..12b779a 100644
--- a/quic/core/quic_framer_test.cc
+++ b/quic/core/quic_framer_test.cc
@@ -364,7 +364,7 @@
   }
 
   bool OnAckRange(QuicPacketNumber start, QuicPacketNumber end) override {
-    DCHECK(!ack_frames_.empty());
+    QUICHE_DCHECK(!ack_frames_.empty());
     ack_frames_[ack_frames_.size() - 1]->packets.AddRange(start, end);
     if (VersionHasIetfQuicFrames(transport_version_)) {
       EXPECT_TRUE(IETF_ACK == framer_->current_received_frame_type() ||
@@ -433,7 +433,7 @@
     ++frame_count_;
     handshake_done_frames_.push_back(
         std::make_unique<QuicHandshakeDoneFrame>(frame));
-    DCHECK(VersionHasIetfQuicFrames(transport_version_));
+    QUICHE_DCHECK(VersionHasIetfQuicFrames(transport_version_));
     EXPECT_EQ(IETF_HANDSHAKE_DONE, framer_->current_received_frame_type());
     return true;
   }
@@ -442,7 +442,7 @@
     ++frame_count_;
     ack_frequency_frames_.emplace_back(
         std::make_unique<QuicAckFrequencyFrame>(frame));
-    DCHECK(VersionHasIetfQuicFrames(transport_version_));
+    QUICHE_DCHECK(VersionHasIetfQuicFrames(transport_version_));
     EXPECT_EQ(IETF_ACK_FREQUENCY, framer_->current_received_frame_type());
     return true;
   }
@@ -2762,7 +2762,7 @@
   // If IETF frames are in use then we must also have the IETF
   // header invariants.
   if (VersionHasIetfQuicFrames(framer_.transport_version())) {
-    DCHECK(framer_.version().HasIetfInvariantHeader());
+    QUICHE_DCHECK(framer_.version().HasIetfInvariantHeader());
   }
 
   SetDecrypterLevel(ENCRYPTION_ZERO_RTT);
diff --git a/quic/core/quic_idle_network_detector.cc b/quic/core/quic_idle_network_detector.cc
index e310f69..8046e44 100644
--- a/quic/core/quic_idle_network_detector.cc
+++ b/quic/core/quic_idle_network_detector.cc
@@ -112,7 +112,7 @@
 
 void QuicIdleNetworkDetector::MaybeSetAlarmOnSentPacket(
     QuicTime::Delta pto_delay) {
-  DCHECK(shorter_idle_timeout_on_sent_packet_);
+  QUICHE_DCHECK(shorter_idle_timeout_on_sent_packet_);
   if (!handshake_timeout_.IsInfinite() || !alarm_->IsSet()) {
     SetAlarm();
     return;
diff --git a/quic/core/quic_legacy_version_encapsulator.cc b/quic/core/quic_legacy_version_encapsulator.cc
index b9fd693..bfe2df2 100644
--- a/quic/core/quic_legacy_version_encapsulator.cc
+++ b/quic/core/quic_legacy_version_encapsulator.cc
@@ -99,8 +99,8 @@
   outer_chlo.SetStringPiece(kSNI, sni);
   outer_chlo.SetStringPiece(kQLVE, inner_packet);
   const QuicData& serialized_outer_chlo = outer_chlo.GetSerialized();
-  DCHECK(!LegacyVersionForEncapsulation().UsesCryptoFrames());
-  DCHECK(LegacyVersionForEncapsulation().UsesQuicCrypto());
+  QUICHE_DCHECK(!LegacyVersionForEncapsulation().UsesCryptoFrames());
+  QUICHE_DCHECK(LegacyVersionForEncapsulation().UsesQuicCrypto());
   QuicStreamFrame outer_stream_frame(
       QuicUtils::GetCryptoStreamId(
           LegacyVersionForEncapsulation().transport_version),
diff --git a/quic/core/quic_linux_socket_utils.cc b/quic/core/quic_linux_socket_utils.cc
index ecb691e..c2931af 100644
--- a/quic/core/quic_linux_socket_utils.cc
+++ b/quic/core/quic_linux_socket_utils.cc
@@ -25,7 +25,7 @@
       cbuf_size_(cbuf_size),
       cmsg_(nullptr) {
   // Only support unconnected sockets.
-  DCHECK(peer_address.IsInitialized());
+  QUICHE_DCHECK(peer_address.IsInitialized());
 
   raw_peer_address_ = peer_address.generic_address();
   hdr_.msg_name = &raw_peer_address_;
@@ -61,19 +61,19 @@
   // msg_controllen needs to be increased first, otherwise CMSG_NXTHDR will
   // return nullptr.
   hdr_.msg_controllen += CMSG_SPACE(data_size);
-  DCHECK_LE(hdr_.msg_controllen, cbuf_size_);
+  QUICHE_DCHECK_LE(hdr_.msg_controllen, cbuf_size_);
 
   if (cmsg_ == nullptr) {
-    DCHECK_EQ(nullptr, hdr_.msg_control);
+    QUICHE_DCHECK_EQ(nullptr, hdr_.msg_control);
     memset(cbuf_, 0, cbuf_size_);
     hdr_.msg_control = cbuf_;
     cmsg_ = CMSG_FIRSTHDR(&hdr_);
   } else {
-    DCHECK_NE(nullptr, hdr_.msg_control);
+    QUICHE_DCHECK_NE(nullptr, hdr_.msg_control);
     cmsg_ = CMSG_NXTHDR(&hdr_, cmsg_);
   }
 
-  DCHECK_NE(nullptr, cmsg_) << "Insufficient control buffer space";
+  QUICHE_DCHECK_NE(nullptr, cmsg_) << "Insufficient control buffer space";
 
   cmsg_->cmsg_len = CMSG_LEN(data_size);
   cmsg_->cmsg_level = cmsg_level;
@@ -95,7 +95,7 @@
   hdr->msg_controllen = 0;
 
   // Only support unconnected sockets.
-  DCHECK(buffered_write.peer_address.IsInitialized());
+  QUICHE_DCHECK(buffered_write.peer_address.IsInitialized());
 
   sockaddr_storage* peer_address_storage = GetPeerAddressStorage(i);
   *peer_address_storage = buffered_write.peer_address.generic_address();
@@ -131,18 +131,18 @@
   // msg_controllen needs to be increased first, otherwise CMSG_NXTHDR will
   // return nullptr.
   hdr->msg_controllen += CMSG_SPACE(data_size);
-  DCHECK_LE(hdr->msg_controllen, cbuf_size_);
+  QUICHE_DCHECK_LE(hdr->msg_controllen, cbuf_size_);
 
   if (cmsg == nullptr) {
-    DCHECK_EQ(nullptr, hdr->msg_control);
+    QUICHE_DCHECK_EQ(nullptr, hdr->msg_control);
     hdr->msg_control = GetCbuf(i);
     cmsg = CMSG_FIRSTHDR(hdr);
   } else {
-    DCHECK_NE(nullptr, hdr->msg_control);
+    QUICHE_DCHECK_NE(nullptr, hdr->msg_control);
     cmsg = CMSG_NXTHDR(hdr, cmsg);
   }
 
-  DCHECK_NE(nullptr, cmsg) << "Insufficient control buffer space";
+  QUICHE_DCHECK_NE(nullptr, cmsg) << "Insufficient control buffer space";
 
   cmsg->cmsg_len = CMSG_LEN(data_size);
   cmsg->cmsg_level = cmsg_level;
@@ -152,8 +152,8 @@
 }
 
 int QuicMMsgHdr::num_bytes_sent(int num_packets_sent) {
-  DCHECK_LE(0, num_packets_sent);
-  DCHECK_LE(num_packets_sent, num_msgs_);
+  QUICHE_DCHECK_LE(0, num_packets_sent);
+  QUICHE_DCHECK_LE(num_packets_sent, num_msgs_);
 
   int bytes_sent = 0;
   iovec* iov = GetIov(0);
@@ -219,7 +219,7 @@
 void QuicLinuxSocketUtils::SetIpInfoInCmsgData(
     const QuicIpAddress& self_address,
     void* cmsg_data) {
-  DCHECK(self_address.IsInitialized());
+  QUICHE_DCHECK(self_address.IsInitialized());
   const std::string& address_str = self_address.ToPackedString();
   if (self_address.IsIPv4()) {
     in_pktinfo* pktinfo = static_cast<in_pktinfo*>(cmsg_data);
diff --git a/quic/core/quic_mtu_discovery.cc b/quic/core/quic_mtu_discovery.cc
index 400efda..056a4bd 100644
--- a/quic/core/quic_mtu_discovery.cc
+++ b/quic/core/quic_mtu_discovery.cc
@@ -17,7 +17,7 @@
 void QuicConnectionMtuDiscoverer::Enable(
     QuicByteCount max_packet_length,
     QuicByteCount target_max_packet_length) {
-  DCHECK(!IsEnabled());
+  QUICHE_DCHECK(!IsEnabled());
 
   if (target_max_packet_length <= max_packet_length) {
     QUIC_DVLOG(1) << "MtuDiscoverer not enabled. target_max_packet_length:"
@@ -28,7 +28,7 @@
 
   min_probe_length_ = max_packet_length;
   max_probe_length_ = target_max_packet_length;
-  DCHECK(IsEnabled());
+  QUICHE_DCHECK(IsEnabled());
 
   QUIC_DVLOG(1) << "MtuDiscoverer enabled. min:" << min_probe_length_
                 << ", max:" << max_probe_length_
@@ -70,7 +70,7 @@
 
 QuicPacketLength QuicConnectionMtuDiscoverer::GetUpdatedMtuProbeSize(
     QuicPacketNumber largest_sent_packet) {
-  DCHECK(ShouldProbeMtu(largest_sent_packet));
+  QUICHE_DCHECK(ShouldProbeMtu(largest_sent_packet));
 
   QuicPacketLength probe_packet_length = next_probe_packet_length();
   if (probe_packet_length == last_probe_length_) {
@@ -78,7 +78,7 @@
     // previous one exceeded MTU, we need to decrease the probe packet length.
     max_probe_length_ = probe_packet_length;
   } else {
-    DCHECK_GT(probe_packet_length, last_probe_length_);
+    QUICHE_DCHECK_GT(probe_packet_length, last_probe_length_);
   }
   last_probe_length_ = next_probe_packet_length();
 
@@ -93,14 +93,14 @@
                 << ", New packets_between_probes_:" << packets_between_probes_
                 << ", next_probe_at_:" << next_probe_at_
                 << ", remaining_probe_count_:" << remaining_probe_count_;
-  DCHECK(!ShouldProbeMtu(largest_sent_packet));
+  QUICHE_DCHECK(!ShouldProbeMtu(largest_sent_packet));
   return last_probe_length_;
 }
 
 QuicPacketLength QuicConnectionMtuDiscoverer::next_probe_packet_length() const {
-  DCHECK_NE(min_probe_length_, 0);
-  DCHECK_NE(max_probe_length_, 0);
-  DCHECK_GE(max_probe_length_, min_probe_length_);
+  QUICHE_DCHECK_NE(min_probe_length_, 0);
+  QUICHE_DCHECK_NE(max_probe_length_, 0);
+  QUICHE_DCHECK_GE(max_probe_length_, min_probe_length_);
 
   const QuicPacketLength normal_next_probe_length =
       (min_probe_length_ + max_probe_length_ + 1) / 2;
@@ -121,7 +121,7 @@
     return;
   }
 
-  DCHECK_EQ(old_value, min_probe_length_);
+  QUICHE_DCHECK_EQ(old_value, min_probe_length_);
   min_probe_length_ = new_value;
 }
 
diff --git a/quic/core/quic_packet_creator.cc b/quic/core/quic_packet_creator.cc
index 7dbe37a..9dabd3a 100644
--- a/quic/core/quic_packet_creator.cc
+++ b/quic/core/quic_packet_creator.cc
@@ -159,7 +159,7 @@
 }
 
 void QuicPacketCreator::SetMaxPacketLength(QuicByteCount length) {
-  DCHECK(CanSetMaxPacketLength());
+  QUICHE_DCHECK(CanSetMaxPacketLength());
 
   // Avoid recomputing |max_plaintext_size_| if the length does not actually
   // change.
@@ -192,7 +192,7 @@
 }
 
 void QuicPacketCreator::SetSoftMaxPacketLength(QuicByteCount length) {
-  DCHECK(CanSetMaxPacketLength());
+  QUICHE_DCHECK(CanSetMaxPacketLength());
   if (length > max_packet_length_) {
     QUIC_BUG << ENDPOINT
              << "Try to increase max_packet_length_ in "
@@ -217,18 +217,18 @@
 // A packet that is already open might send kQuicVersionSize bytes less than the
 // maximum packet size if we stop sending version before it is serialized.
 void QuicPacketCreator::StopSendingVersion() {
-  DCHECK(send_version_in_packet_);
-  DCHECK(!version().HasIetfInvariantHeader());
+  QUICHE_DCHECK(send_version_in_packet_);
+  QUICHE_DCHECK(!version().HasIetfInvariantHeader());
   send_version_in_packet_ = false;
   if (packet_size_ > 0) {
-    DCHECK_LT(kQuicVersionSize, packet_size_);
+    QUICHE_DCHECK_LT(kQuicVersionSize, packet_size_);
     packet_size_ -= kQuicVersionSize;
   }
 }
 
 void QuicPacketCreator::SetDiversificationNonce(
     const DiversificationNonce& nonce) {
-  DCHECK(!have_diversification_nonce_);
+  QUICHE_DCHECK(!have_diversification_nonce_);
   have_diversification_nonce_ = true;
   diversification_nonce_ = nonce;
 }
@@ -246,7 +246,7 @@
   }
 
   const QuicPacketNumber next_packet_number = NextSendingPacketNumber();
-  DCHECK_LE(least_packet_awaited_by_peer, next_packet_number);
+  QUICHE_DCHECK_LE(least_packet_awaited_by_peer, next_packet_number);
   const uint64_t current_delta =
       next_packet_number - least_packet_awaited_by_peer;
   const uint64_t delta = std::max(current_delta, max_packets_in_flight);
@@ -414,14 +414,14 @@
                                           QuicFrame* frame) {
   // Make sure max_packet_length_ is greater than the largest possible overhead
   // or max_packet_length_ is set to the soft limit.
-  DCHECK(max_packet_length_ >
-             StreamFramePacketOverhead(
-                 framer_->transport_version(),
-                 GetDestinationConnectionIdLength(),
-                 GetSourceConnectionIdLength(), kIncludeVersion,
-                 IncludeNonceInPublicHeader(), PACKET_6BYTE_PACKET_NUMBER,
-                 GetRetryTokenLengthLength(), GetLengthLength(), offset) ||
-         latched_hard_max_packet_length_ > 0);
+  QUICHE_DCHECK(
+      max_packet_length_ >
+          StreamFramePacketOverhead(
+              framer_->transport_version(), GetDestinationConnectionIdLength(),
+              GetSourceConnectionIdLength(), kIncludeVersion,
+              IncludeNonceInPublicHeader(), PACKET_6BYTE_PACKET_NUMBER,
+              GetRetryTokenLengthLength(), GetLengthLength(), offset) ||
+      latched_hard_max_packet_length_ > 0);
 
   QUIC_BUG_IF(!HasRoomForStreamFrame(id, offset, data_size))
       << "No room for Stream frame, BytesFree: " << BytesFree()
@@ -471,7 +471,7 @@
     external_buffer.release_buffer = nullptr;
   }
 
-  DCHECK_EQ(nullptr, packet_.encrypted_buffer);
+  QUICHE_DCHECK_EQ(nullptr, packet_.encrypted_buffer);
   if (!SerializePacket(std::move(external_buffer), kMaxOutgoingPacketSize)) {
     return;
   }
@@ -500,8 +500,8 @@
   QUIC_BUG_IF(packet_.release_encrypted_buffer != nullptr)
       << "packet_.release_encrypted_buffer should be empty";
   packet_.release_encrypted_buffer = nullptr;
-  DCHECK(packet_.retransmittable_frames.empty());
-  DCHECK(packet_.nonretransmittable_frames.empty());
+  QUICHE_DCHECK(packet_.retransmittable_frames.empty());
+  QUICHE_DCHECK(packet_.nonretransmittable_frames.empty());
   packet_.largest_acked.Clear();
   needs_full_padding_ = false;
 }
@@ -564,8 +564,8 @@
     TransmissionType transmission_type,
     size_t* num_bytes_consumed) {
   // TODO(b/167222597): consider using ScopedSerializationFailureHandler.
-  DCHECK(queued_frames_.empty());
-  DCHECK(!QuicUtils::IsCryptoStreamId(transport_version(), id));
+  QUICHE_DCHECK(queued_frames_.empty());
+  QUICHE_DCHECK(!QuicUtils::IsCryptoStreamId(transport_version(), id));
   // Write out the packet header
   QuicPacketHeader header;
   FillPacketHeader(&header);
@@ -651,8 +651,8 @@
 
   packet_.transmission_type = transmission_type;
 
-  DCHECK(packet_.encryption_level == ENCRYPTION_FORWARD_SECURE ||
-         packet_.encryption_level == ENCRYPTION_ZERO_RTT)
+  QUICHE_DCHECK(packet_.encryption_level == ENCRYPTION_FORWARD_SECURE ||
+                packet_.encryption_level == ENCRYPTION_ZERO_RTT)
       << packet_.encryption_level;
   size_t encrypted_length = framer_->EncryptInPlace(
       packet_.encryption_level, packet_.packet_number,
@@ -721,7 +721,7 @@
 }
 
 size_t QuicPacketCreator::BytesFree() const {
-  DCHECK_GE(max_plaintext_size_, PacketSize());
+  QUICHE_DCHECK_GE(max_plaintext_size_, PacketSize());
   return max_plaintext_size_ -
          std::min(max_plaintext_size_, PacketSize() + ExpansionOnNewFrame());
 }
@@ -752,7 +752,7 @@
   }
   ScopedSerializationFailureHandler handler(this);
 
-  DCHECK_LT(0u, encrypted_buffer_len);
+  QUICHE_DCHECK_LT(0u, encrypted_buffer_len);
   QUIC_BUG_IF(queued_frames_.empty() && pending_padding_bytes_ == 0)
       << "Attempt to serialize empty packet";
   QuicPacketHeader header;
@@ -785,7 +785,7 @@
     return false;
   }
 
-  DCHECK_GE(max_plaintext_size_, packet_size_);
+  QUICHE_DCHECK_GE(max_plaintext_size_, packet_size_);
   // Use the packet_size_ instead of the buffer size to ensure smaller
   // packet sizes are properly used.
   size_t length =
@@ -813,7 +813,7 @@
   // Because of possible truncation, we can't be confident that our
   // packet size calculation worked correctly.
   if (!possibly_truncated_by_length) {
-    DCHECK_EQ(packet_size_, length);
+    QUICHE_DCHECK_EQ(packet_size_, length);
   }
   const size_t encrypted_length = framer_->EncryptInPlace(
       packet_.encryption_level, packet_.packet_number,
@@ -848,14 +848,14 @@
   std::unique_ptr<char[]> buffer(new char[kMaxOutgoingPacketSize]);
   size_t length = BuildConnectivityProbingPacket(
       header, buffer.get(), max_plaintext_size_, packet_.encryption_level);
-  DCHECK(length);
+  QUICHE_DCHECK(length);
 
-  DCHECK_EQ(packet_.encryption_level, ENCRYPTION_FORWARD_SECURE);
+  QUICHE_DCHECK_EQ(packet_.encryption_level, ENCRYPTION_FORWARD_SECURE);
   const size_t encrypted_length = framer_->EncryptInPlace(
       packet_.encryption_level, packet_.packet_number,
       GetStartOfEncryptedData(framer_->transport_version(), header), length,
       kMaxOutgoingPacketSize, buffer.get());
-  DCHECK(encrypted_length);
+  QUICHE_DCHECK(encrypted_length);
 
   std::unique_ptr<SerializedPacket> serialize_packet(new SerializedPacket(
       header.packet_number, header.packet_number_length, buffer.release(),
@@ -888,14 +888,14 @@
   size_t length =
       BuildPaddedPathChallengePacket(header, buffer.get(), max_plaintext_size_,
                                      payload, packet_.encryption_level);
-  DCHECK(length);
+  QUICHE_DCHECK(length);
 
-  DCHECK_EQ(packet_.encryption_level, ENCRYPTION_FORWARD_SECURE);
+  QUICHE_DCHECK_EQ(packet_.encryption_level, ENCRYPTION_FORWARD_SECURE);
   const size_t encrypted_length = framer_->EncryptInPlace(
       packet_.encryption_level, packet_.packet_number,
       GetStartOfEncryptedData(framer_->transport_version(), header), length,
       kMaxOutgoingPacketSize, buffer.get());
-  DCHECK(encrypted_length);
+  QUICHE_DCHECK(encrypted_length);
 
   std::unique_ptr<SerializedPacket> serialize_packet(
       new SerializedPacket(header.packet_number, header.packet_number_length,
@@ -930,14 +930,14 @@
   size_t length =
       BuildPathResponsePacket(header, buffer.get(), max_plaintext_size_,
                               payloads, is_padded, packet_.encryption_level);
-  DCHECK(length);
+  QUICHE_DCHECK(length);
 
-  DCHECK_EQ(packet_.encryption_level, ENCRYPTION_FORWARD_SECURE);
+  QUICHE_DCHECK_EQ(packet_.encryption_level, ENCRYPTION_FORWARD_SECURE);
   const size_t encrypted_length = framer_->EncryptInPlace(
       packet_.encryption_level, packet_.packet_number,
       GetStartOfEncryptedData(framer_->transport_version(), header), length,
       kMaxOutgoingPacketSize, buffer.get());
-  DCHECK(encrypted_length);
+  QUICHE_DCHECK(encrypted_length);
 
   std::unique_ptr<SerializedPacket> serialize_packet(
       new SerializedPacket(header.packet_number, header.packet_number_length,
@@ -959,7 +959,7 @@
     size_t packet_length,
     const QuicPathFrameBuffer& payload,
     EncryptionLevel level) {
-  DCHECK(VersionHasIetfQuicFrames(framer_->transport_version()));
+  QUICHE_DCHECK(VersionHasIetfQuicFrames(framer_->transport_version()));
   QuicFrames frames;
 
   // Write a PATH_CHALLENGE frame, which has a random 8-byte payload
@@ -990,7 +990,7 @@
         << "Attempt to generate connectivity response with no request payloads";
     return 0;
   }
-  DCHECK(VersionHasIetfQuicFrames(framer_->transport_version()));
+  QUICHE_DCHECK(VersionHasIetfQuicFrames(framer_->transport_version()));
 
   std::vector<std::unique_ptr<QuicPathResponseFrame>> path_response_frames;
   for (const QuicPathFrameBuffer& payload : payloads) {
@@ -1129,8 +1129,8 @@
 
 QuicConnectionIdLength QuicPacketCreator::GetDestinationConnectionIdLength()
     const {
-  DCHECK(QuicUtils::IsConnectionIdValidForVersion(server_connection_id_,
-                                                  transport_version()));
+  QUICHE_DCHECK(QuicUtils::IsConnectionIdValidForVersion(server_connection_id_,
+                                                         transport_version()));
   return GetDestinationConnectionIdIncluded() == CONNECTION_ID_PRESENT
              ? static_cast<QuicConnectionIdLength>(
                    GetDestinationConnectionId().length())
@@ -1138,8 +1138,8 @@
 }
 
 QuicConnectionIdLength QuicPacketCreator::GetSourceConnectionIdLength() const {
-  DCHECK(QuicUtils::IsConnectionIdValidForVersion(server_connection_id_,
-                                                  transport_version()));
+  QUICHE_DCHECK(QuicUtils::IsConnectionIdValidForVersion(server_connection_id_,
+                                                         transport_version()));
   return GetSourceConnectionIdIncluded() == CONNECTION_ID_PRESENT
              ? static_cast<QuicConnectionIdLength>(
                    GetSourceConnectionId().length())
@@ -1190,7 +1190,7 @@
   QUIC_BUG_IF(IsControlFrame(frame.type) && !GetControlFrameId(frame) &&
               frame.type != PING_FRAME)
       << "Adding a control frame with no control frame id: " << frame;
-  DCHECK(QuicUtils::IsRetransmittableFrame(frame.type)) << frame;
+  QUICHE_DCHECK(QuicUtils::IsRetransmittableFrame(frame.type)) << frame;
   MaybeBundleAckOpportunistically();
   if (HasPendingFrames()) {
     if (AddFrame(frame, next_transmission_type_)) {
@@ -1198,7 +1198,7 @@
       return true;
     }
   }
-  DCHECK(!HasPendingFrames());
+  QUICHE_DCHECK(!HasPendingFrames());
   if (frame.type != PING_FRAME && frame.type != CONNECTION_CLOSE_FRAME &&
       !delegate_->ShouldGeneratePacket(HAS_RETRANSMITTABLE_DATA,
                                        NOT_HANDSHAKE)) {
@@ -1270,8 +1270,8 @@
     if (fin_consumed && state == FIN_AND_PADDING) {
       AddRandomPadding();
     }
-    DCHECK(total_bytes_consumed == write_length ||
-           (bytes_consumed > 0 && HasPendingFrames()));
+    QUICHE_DCHECK(total_bytes_consumed == write_length ||
+                  (bytes_consumed > 0 && HasPendingFrames()));
 
     if (total_bytes_consumed == write_length) {
       // We're done writing the data. Exit the loop.
@@ -1306,7 +1306,7 @@
     QuicStreamOffset offset,
     bool fin,
     size_t total_bytes_consumed) {
-  DCHECK(!QuicUtils::IsCryptoStreamId(transport_version(), id));
+  QUICHE_DCHECK(!QuicUtils::IsCryptoStreamId(transport_version(), id));
   if (AttemptingToSendUnencryptedStreamData()) {
     return QuicConsumedData(total_bytes_consumed,
                             fin && (total_bytes_consumed == write_length));
@@ -1429,14 +1429,14 @@
               !frames.empty() && has_ack())
       << "Trying to flush " << frames << " when there is ACK queued";
   for (const auto& frame : frames) {
-    DCHECK(frame.type == ACK_FRAME || frame.type == STOP_WAITING_FRAME);
+    QUICHE_DCHECK(frame.type == ACK_FRAME || frame.type == STOP_WAITING_FRAME);
     if (HasPendingFrames()) {
       if (AddFrame(frame, next_transmission_type_)) {
         // There is pending frames and current frame fits.
         continue;
       }
     }
-    DCHECK(!HasPendingFrames());
+    QUICHE_DCHECK(!HasPendingFrames());
     // There is no pending frames, consult the delegate whether a packet can be
     // generated.
     if (!delegate_->ShouldGeneratePacket(NO_RETRANSMITTABLE_DATA,
@@ -1541,7 +1541,7 @@
   header->reset_flag = false;
   header->version_flag = IncludeVersionInHeader();
   if (IncludeNonceInPublicHeader()) {
-    DCHECK_EQ(Perspective::IS_SERVER, framer_->perspective());
+    QUICHE_DCHECK_EQ(Perspective::IS_SERVER, framer_->perspective());
     header->nonce = &diversification_nonce_;
   } else {
     header->nonce = nullptr;
@@ -1615,9 +1615,9 @@
 
   // If this is an ACK frame, validate that it is non-empty and that
   // largest_acked matches the max packet number.
-  DCHECK(frame.type != ACK_FRAME ||
-         (!frame.ack_frame->packets.Empty() &&
-          frame.ack_frame->packets.Max() == frame.ack_frame->largest_acked))
+  QUICHE_DCHECK(frame.type != ACK_FRAME || (!frame.ack_frame->packets.Empty() &&
+                                            frame.ack_frame->packets.Max() ==
+                                                frame.ack_frame->largest_acked))
       << "Invalid ACK frame: " << frame;
 
   size_t frame_len = GetSerializedFrameLength(frame);
@@ -1634,7 +1634,7 @@
   if (queued_frames_.empty()) {
     packet_size_ = PacketHeaderSize();
   }
-  DCHECK_LT(0u, packet_size_);
+  QUICHE_DCHECK_LT(0u, packet_size_);
 
   packet_size_ += ExpansionOnNewFrame() + frame_len;
 
@@ -1711,12 +1711,12 @@
 
   // The back of retransmittable frames must be the same as the original
   // queued frames' back.
-  DCHECK_EQ(packet_.retransmittable_frames.back().type, STREAM_FRAME);
+  QUICHE_DCHECK_EQ(packet_.retransmittable_frames.back().type, STREAM_FRAME);
   QuicStreamFrame* retransmittable =
       &packet_.retransmittable_frames.back().stream_frame;
-  DCHECK_EQ(retransmittable->stream_id, frame.stream_id);
-  DCHECK_EQ(retransmittable->offset + retransmittable->data_length,
-            frame.offset);
+  QUICHE_DCHECK_EQ(retransmittable->stream_id, frame.stream_id);
+  QUICHE_DCHECK_EQ(retransmittable->offset + retransmittable->data_length,
+                   frame.offset);
   retransmittable->data_length = candidate->data_length;
   retransmittable->fin = candidate->fin;
   packet_size_ += frame.data_length;
@@ -1808,10 +1808,10 @@
 
 void QuicPacketCreator::SetServerConnectionIdIncluded(
     QuicConnectionIdIncluded server_connection_id_included) {
-  DCHECK(server_connection_id_included == CONNECTION_ID_PRESENT ||
-         server_connection_id_included == CONNECTION_ID_ABSENT);
-  DCHECK(framer_->perspective() == Perspective::IS_SERVER ||
-         server_connection_id_included != CONNECTION_ID_ABSENT);
+  QUICHE_DCHECK(server_connection_id_included == CONNECTION_ID_PRESENT ||
+                server_connection_id_included == CONNECTION_ID_ABSENT);
+  QUICHE_DCHECK(framer_->perspective() == Perspective::IS_SERVER ||
+                server_connection_id_included != CONNECTION_ID_ABSENT);
   server_connection_id_included_ = server_connection_id_included;
 }
 
@@ -1822,8 +1822,8 @@
 
 void QuicPacketCreator::SetClientConnectionId(
     QuicConnectionId client_connection_id) {
-  DCHECK(client_connection_id.IsEmpty() ||
-         framer_->version().SupportsClientConnectionIds());
+  QUICHE_DCHECK(client_connection_id.IsEmpty() ||
+                framer_->version().SupportsClientConnectionIds());
   client_connection_id_ = client_connection_id;
 }
 
@@ -1889,7 +1889,7 @@
   const QuicPacketLength largest_payload =
       largest_frame - std::min(largest_frame, kQuicFrameTypeSize);
   // This must always be less than or equal to GetCurrentLargestMessagePayload.
-  DCHECK_LE(largest_payload, GetCurrentLargestMessagePayload());
+  QUICHE_DCHECK_LE(largest_payload, GetCurrentLargestMessagePayload());
   return largest_payload;
 }
 
@@ -2001,7 +2001,7 @@
 }
 
 void QuicPacketCreator::set_encryption_level(EncryptionLevel level) {
-  DCHECK(level == packet_.encryption_level || !HasPendingFrames())
+  QUICHE_DCHECK(level == packet_.encryption_level || !HasPendingFrames())
       << "Cannot update encryption level from " << packet_.encryption_level
       << " to " << level << " when we already have pending frames: "
       << QuicFramesToString(queued_frames_);
@@ -2048,7 +2048,7 @@
     }
   }
   // Frame was not queued but queued frames were flushed.
-  DCHECK(!HasPendingFrames());
+  QUICHE_DCHECK(!HasPendingFrames());
   if (!delegate_->ShouldGeneratePacket(NO_RETRANSMITTABLE_DATA,
                                        NOT_HANDSHAKE)) {
     return false;
diff --git a/quic/core/quic_packet_creator_test.cc b/quic/core/quic_packet_creator_test.cc
index da0c6b2..8ff44c1 100644
--- a/quic/core/quic_packet_creator_test.cc
+++ b/quic/core/quic_packet_creator_test.cc
@@ -2442,7 +2442,7 @@
   ~QuicPacketCreatorMultiplePacketsTest() override {}
 
   void SavePacket(SerializedPacket packet) {
-    DCHECK(packet.release_encrypted_buffer == nullptr);
+    QUICHE_DCHECK(packet.release_encrypted_buffer == nullptr);
     packet.encrypted_buffer = CopyBuffer(packet);
     packet.release_encrypted_buffer = [](const char* p) { delete[] p; };
     packets_.push_back(std::move(packet));
diff --git a/quic/core/quic_packet_number.cc b/quic/core/quic_packet_number.cc
index d326434..ba1c509 100644
--- a/quic/core/quic_packet_number.cc
+++ b/quic/core/quic_packet_number.cc
@@ -25,12 +25,12 @@
 }
 
 uint64_t QuicPacketNumber::Hash() const {
-  DCHECK(IsInitialized());
+  QUICHE_DCHECK(IsInitialized());
   return packet_number_;
 }
 
 uint64_t QuicPacketNumber::ToUint64() const {
-  DCHECK(IsInitialized());
+  QUICHE_DCHECK(IsInitialized());
   return packet_number_;
 }
 
@@ -40,8 +40,8 @@
 
 QuicPacketNumber& QuicPacketNumber::operator++() {
 #ifndef NDEBUG
-  DCHECK(IsInitialized());
-  DCHECK_LT(ToUint64(), std::numeric_limits<uint64_t>::max() - 1);
+  QUICHE_DCHECK(IsInitialized());
+  QUICHE_DCHECK_LT(ToUint64(), std::numeric_limits<uint64_t>::max() - 1);
 #endif
   packet_number_++;
   return *this;
@@ -49,8 +49,8 @@
 
 QuicPacketNumber QuicPacketNumber::operator++(int) {
 #ifndef NDEBUG
-  DCHECK(IsInitialized());
-  DCHECK_LT(ToUint64(), std::numeric_limits<uint64_t>::max() - 1);
+  QUICHE_DCHECK(IsInitialized());
+  QUICHE_DCHECK_LT(ToUint64(), std::numeric_limits<uint64_t>::max() - 1);
 #endif
   QuicPacketNumber previous(*this);
   packet_number_++;
@@ -59,8 +59,8 @@
 
 QuicPacketNumber& QuicPacketNumber::operator--() {
 #ifndef NDEBUG
-  DCHECK(IsInitialized());
-  DCHECK_GE(ToUint64(), 1UL);
+  QUICHE_DCHECK(IsInitialized());
+  QUICHE_DCHECK_GE(ToUint64(), 1UL);
 #endif
   packet_number_--;
   return *this;
@@ -68,8 +68,8 @@
 
 QuicPacketNumber QuicPacketNumber::operator--(int) {
 #ifndef NDEBUG
-  DCHECK(IsInitialized());
-  DCHECK_GE(ToUint64(), 1UL);
+  QUICHE_DCHECK(IsInitialized());
+  QUICHE_DCHECK_GE(ToUint64(), 1UL);
 #endif
   QuicPacketNumber previous(*this);
   packet_number_--;
@@ -78,8 +78,8 @@
 
 QuicPacketNumber& QuicPacketNumber::operator+=(uint64_t delta) {
 #ifndef NDEBUG
-  DCHECK(IsInitialized());
-  DCHECK_GT(std::numeric_limits<uint64_t>::max() - ToUint64(), delta);
+  QUICHE_DCHECK(IsInitialized());
+  QUICHE_DCHECK_GT(std::numeric_limits<uint64_t>::max() - ToUint64(), delta);
 #endif
   packet_number_ += delta;
   return *this;
@@ -87,8 +87,8 @@
 
 QuicPacketNumber& QuicPacketNumber::operator-=(uint64_t delta) {
 #ifndef NDEBUG
-  DCHECK(IsInitialized());
-  DCHECK_GE(ToUint64(), delta);
+  QUICHE_DCHECK(IsInitialized());
+  QUICHE_DCHECK_GE(ToUint64(), delta);
 #endif
   packet_number_ -= delta;
   return *this;
diff --git a/quic/core/quic_packet_reader.cc b/quic/core/quic_packet_reader.cc
index 7b03762..4b0eb4b 100644
--- a/quic/core/quic_packet_reader.cc
+++ b/quic/core/quic_packet_reader.cc
@@ -20,7 +20,7 @@
 QuicPacketReader::QuicPacketReader()
     : read_buffers_(kNumPacketsPerReadMmsgCall),
       read_results_(kNumPacketsPerReadMmsgCall) {
-  DCHECK_EQ(read_buffers_.size(), read_results_.size());
+  QUICHE_DCHECK_EQ(read_buffers_.size(), read_results_.size());
   for (size_t i = 0; i < read_results_.size(); ++i) {
     read_results_[i].packet_buffer.buffer = read_buffers_[i].packet_buffer;
     read_results_[i].packet_buffer.buffer_len =
diff --git a/quic/core/quic_packets.cc b/quic/core/quic_packets.cc
index 51946aa..5f3e5a2 100644
--- a/quic/core/quic_packets.cc
+++ b/quic/core/quic_packets.cc
@@ -74,8 +74,8 @@
 QuicConnectionIdLength GetIncludedConnectionIdLength(
     QuicConnectionId connection_id,
     QuicConnectionIdIncluded connection_id_included) {
-  DCHECK(connection_id_included == CONNECTION_ID_PRESENT ||
-         connection_id_included == CONNECTION_ID_ABSENT);
+  QUICHE_DCHECK(connection_id_included == CONNECTION_ID_PRESENT ||
+                connection_id_included == CONNECTION_ID_ABSENT);
   return connection_id_included == CONNECTION_ID_PRESENT
              ? static_cast<QuicConnectionIdLength>(connection_id.length())
              : PACKET_0BYTE_CONNECTION_ID;
@@ -127,9 +127,9 @@
       if (VersionHasLengthPrefixedConnectionIds(version)) {
         size += kConnectionIdLengthSize;
       }
-      DCHECK(QuicVersionHasLongHeaderLengths(version) ||
-             retry_token_length_length + retry_token_length + length_length ==
-                 0);
+      QUICHE_DCHECK(
+          QuicVersionHasLongHeaderLengths(version) ||
+          retry_token_length_length + retry_token_length + length_length == 0);
       if (QuicVersionHasLongHeaderLengths(version)) {
         size += retry_token_length_length + retry_token_length + length_length;
       }
@@ -140,8 +140,8 @@
            packet_number_length;
   }
   // Google QUIC versions <= 43 can only carry one connection ID.
-  DCHECK(destination_connection_id_length == 0 ||
-         source_connection_id_length == 0);
+  QUICHE_DCHECK(destination_connection_id_length == 0 ||
+                source_connection_id_length == 0);
   return kPublicFlagsSize + destination_connection_id_length +
          source_connection_id_length +
          (include_version ? kQuicVersionSize : 0) + packet_number_length +
@@ -534,7 +534,7 @@
   // Copy underlying frames.
   copy->retransmittable_frames =
       CopyQuicFrames(allocator, serialized.retransmittable_frames);
-  DCHECK(copy->nonretransmittable_frames.empty());
+  QUICHE_DCHECK(copy->nonretransmittable_frames.empty());
   for (const auto& frame : serialized.nonretransmittable_frames) {
     if (frame.type == ACK_FRAME) {
       copy->has_ack_frame_copy = true;
diff --git a/quic/core/quic_path_validator.cc b/quic/core/quic_path_validator.cc
index 0cc387f..ac4f3ed 100644
--- a/quic/core/quic_path_validator.cc
+++ b/quic/core/quic_path_validator.cc
@@ -68,7 +68,7 @@
 void QuicPathValidator::StartPathValidation(
     std::unique_ptr<QuicPathValidationContext> context,
     std::unique_ptr<ResultDelegate> result_delegate) {
-  DCHECK(context);
+  QUICHE_DCHECK(context);
   QUIC_DLOG(INFO) << "Start validating path " << *context
                   << " via writer: " << context->WriterToUse();
   if (path_context_ != nullptr) {
diff --git a/quic/core/quic_received_packet_manager.cc b/quic/core/quic_received_packet_manager.cc
index 4546399..2b43442 100644
--- a/quic/core/quic_received_packet_manager.cc
+++ b/quic/core/quic_received_packet_manager.cc
@@ -72,7 +72,8 @@
     const QuicPacketHeader& header,
     QuicTime receipt_time) {
   const QuicPacketNumber packet_number = header.packet_number;
-  DCHECK(IsAwaitingPacket(packet_number)) << " packet_number:" << packet_number;
+  QUICHE_DCHECK(IsAwaitingPacket(packet_number))
+      << " packet_number:" << packet_number;
   was_last_packet_missing_ = IsMissing(packet_number);
   if (!ack_frame_updated_) {
     ack_frame_.received_packet_times.clear();
@@ -174,8 +175,8 @@
     return;
   }
   // ValidateAck() should fail if peer_least_packet_awaiting_ack shrinks.
-  DCHECK(!peer_least_packet_awaiting_ack_.IsInitialized() ||
-         peer_least_packet_awaiting_ack_ <= least_unacked);
+  QUICHE_DCHECK(!peer_least_packet_awaiting_ack_.IsInitialized() ||
+                peer_least_packet_awaiting_ack_ <= least_unacked);
   if (!peer_least_packet_awaiting_ack_.IsInitialized() ||
       least_unacked > peer_least_packet_awaiting_ack_) {
     peer_least_packet_awaiting_ack_ = least_unacked;
@@ -186,9 +187,9 @@
       ack_frame_updated_ = true;
     }
   }
-  DCHECK(ack_frame_.packets.Empty() ||
-         !peer_least_packet_awaiting_ack_.IsInitialized() ||
-         ack_frame_.packets.Min() >= peer_least_packet_awaiting_ack_);
+  QUICHE_DCHECK(ack_frame_.packets.Empty() ||
+                !peer_least_packet_awaiting_ack_.IsInitialized() ||
+                ack_frame_.packets.Min() >= peer_least_packet_awaiting_ack_);
 }
 
 QuicTime::Delta QuicReceivedPacketManager::GetMaxAckDelay(
diff --git a/quic/core/quic_received_packet_manager_test.cc b/quic/core/quic_received_packet_manager_test.cc
index 4935b2a..3cfa0ce 100644
--- a/quic/core/quic_received_packet_manager_test.cc
+++ b/quic/core/quic_received_packet_manager_test.cc
@@ -72,12 +72,12 @@
   }
 
   void CheckAckTimeout(QuicTime time) {
-    DCHECK(HasPendingAck());
-    DCHECK_EQ(received_manager_.ack_timeout(), time);
+    QUICHE_DCHECK(HasPendingAck());
+    QUICHE_DCHECK_EQ(received_manager_.ack_timeout(), time);
     if (time <= clock_.ApproximateNow()) {
       // ACK timeout expires, send an ACK.
       received_manager_.ResetAckStates();
-      DCHECK(!HasPendingAck());
+      QUICHE_DCHECK(!HasPendingAck());
     }
   }
 
diff --git a/quic/core/quic_sent_packet_manager.cc b/quic/core/quic_sent_packet_manager.cc
index 4f2b200..61d680c 100644
--- a/quic/core/quic_sent_packet_manager.cc
+++ b/quic/core/quic_sent_packet_manager.cc
@@ -594,7 +594,7 @@
 
 bool QuicSentPacketManager::ShouldAddMaxAckDelay(
     PacketNumberSpace space) const {
-  DCHECK(pto_enabled_);
+  QUICHE_DCHECK(pto_enabled_);
   if (supports_multiple_packet_number_spaces() && space != APPLICATION_DATA) {
     // When the PTO is armed for Initial or Handshake packet number spaces,
     // the max_ack_delay is 0.
@@ -631,7 +631,7 @@
 
 QuicTime QuicSentPacketManager::GetEarliestPacketSentTimeForPto(
     PacketNumberSpace* packet_number_space) const {
-  DCHECK(supports_multiple_packet_number_spaces());
+  QUICHE_DCHECK(supports_multiple_packet_number_spaces());
   QuicTime earliest_sent_time = QuicTime::Zero();
   for (int8_t i = 0; i < NUM_PACKET_NUMBER_SPACES; ++i) {
     const QuicTime sent_time = unacked_packets_.GetLastInFlightPacketSentTime(
@@ -665,8 +665,8 @@
       << " transmission_type: " << transmission_type << " transmission_info "
       << transmission_info->DebugString();
   // Handshake packets should never be sent as probing retransmissions.
-  DCHECK(!transmission_info->has_crypto_handshake ||
-         transmission_type != PROBING_RETRANSMISSION);
+  QUICHE_DCHECK(!transmission_info->has_crypto_handshake ||
+                transmission_type != PROBING_RETRANSMISSION);
 
   HandleRetransmission(transmission_type, transmission_info);
 
@@ -826,8 +826,8 @@
     bool measure_rtt) {
   const SerializedPacket& packet = *mutable_packet;
   QuicPacketNumber packet_number = packet.packet_number;
-  DCHECK_LE(FirstSendingPacketNumber(), packet_number);
-  DCHECK(!unacked_packets_.IsUnacked(packet_number));
+  QUICHE_DCHECK_LE(FirstSendingPacketNumber(), packet_number);
+  QUICHE_DCHECK(!unacked_packets_.IsUnacked(packet_number));
   QUIC_BUG_IF(packet.encrypted_length == 0) << "Cannot send empty packets.";
   if (pending_timer_transmission_count_ > 0) {
     --pending_timer_transmission_count_;
@@ -876,9 +876,9 @@
 
 QuicSentPacketManager::RetransmissionTimeoutMode
 QuicSentPacketManager::OnRetransmissionTimeout() {
-  DCHECK(unacked_packets_.HasInFlightPackets() ||
-         (handshake_mode_disabled_ && !handshake_finished_));
-  DCHECK_EQ(0u, pending_timer_transmission_count_);
+  QUICHE_DCHECK(unacked_packets_.HasInFlightPackets() ||
+                (handshake_mode_disabled_ && !handshake_finished_));
+  QUICHE_DCHECK_EQ(0u, pending_timer_transmission_count_);
   // Handshake retransmission, timer based loss detection, TLP, and RTO are
   // implemented with a single alarm. The handshake alarm is set when the
   // handshake has not completed, the loss alarm is set when the loss detection
@@ -886,7 +886,7 @@
   // The TLP alarm is always set to run for under an RTO.
   switch (GetRetransmissionMode()) {
     case HANDSHAKE_MODE:
-      DCHECK(!handshake_mode_disabled_);
+      QUICHE_DCHECK(!handshake_mode_disabled_);
       ++stats_->crypto_retransmit_count;
       RetransmitCryptoPackets();
       return HANDSHAKE_MODE;
@@ -924,7 +924,7 @@
 }
 
 void QuicSentPacketManager::RetransmitCryptoPackets() {
-  DCHECK_EQ(HANDSHAKE_MODE, GetRetransmissionMode());
+  QUICHE_DCHECK_EQ(HANDSHAKE_MODE, GetRetransmissionMode());
   ++consecutive_crypto_retransmission_count_;
   bool packet_retransmitted = false;
   std::vector<QuicPacketNumber> crypto_retransmissions;
@@ -965,14 +965,15 @@
       ++pending_timer_transmission_count_;
     }
   }
-  DCHECK(packet_retransmitted) << "No crypto packets found to retransmit.";
+  QUICHE_DCHECK(packet_retransmitted)
+      << "No crypto packets found to retransmit.";
   for (QuicPacketNumber retransmission : crypto_retransmissions) {
     MarkForRetransmission(retransmission, HANDSHAKE_RETRANSMISSION);
   }
 }
 
 bool QuicSentPacketManager::MaybeRetransmitTailLossProbe() {
-  DCHECK(!pto_enabled_);
+  QUICHE_DCHECK(!pto_enabled_);
   if (pending_timer_transmission_count_ == 0) {
     return false;
   }
@@ -1022,7 +1023,7 @@
 }
 
 void QuicSentPacketManager::RetransmitRtoPackets() {
-  DCHECK(!pto_enabled_);
+  QUICHE_DCHECK(!pto_enabled_);
   QUIC_BUG_IF(pending_timer_transmission_count_ > 0)
       << "Retransmissions already queued:" << pending_timer_transmission_count_;
   // Mark two packets for retransmission.
@@ -1038,7 +1039,7 @@
         if (transmission_info->state == OUTSTANDING &&
             unacked_packets_.HasRetransmittableFrames(*transmission_info) &&
             pending_timer_transmission_count_ < max_rto_packets_) {
-          DCHECK(transmission_info->in_flight);
+          QUICHE_DCHECK(transmission_info->in_flight);
           retransmissions.push_back(packet_number);
           ++pending_timer_transmission_count_;
         }
@@ -1051,7 +1052,7 @@
       if (it->state == OUTSTANDING &&
           unacked_packets_.HasRetransmittableFrames(*it) &&
           pending_timer_transmission_count_ < max_rto_packets_) {
-        DCHECK(it->in_flight);
+        QUICHE_DCHECK(it->in_flight);
         retransmissions.push_back(packet_number);
         ++pending_timer_transmission_count_;
       }
@@ -1104,7 +1105,7 @@
             (!supports_multiple_packet_number_spaces() ||
              unacked_packets_.GetPacketNumberSpace(
                  transmission_info->encryption_level) == packet_number_space)) {
-          DCHECK(transmission_info->in_flight);
+          QUICHE_DCHECK(transmission_info->in_flight);
           probing_packets.push_back(packet_number);
           if (probing_packets.size() == pending_timer_transmission_count_) {
             break;
@@ -1121,7 +1122,7 @@
           (!supports_multiple_packet_number_spaces() ||
            unacked_packets_.GetPacketNumberSpace(it->encryption_level) ==
                packet_number_space)) {
-        DCHECK(it->in_flight);
+        QUICHE_DCHECK(it->in_flight);
         probing_packets.push_back(packet_number);
         if (probing_packets.size() == pending_timer_transmission_count_) {
           break;
@@ -1173,7 +1174,7 @@
 
 void QuicSentPacketManager::RetransmitDataOfSpaceIfAny(
     PacketNumberSpace space) {
-  DCHECK(supports_multiple_packet_number_spaces());
+  QUICHE_DCHECK(supports_multiple_packet_number_spaces());
   if (!unacked_packets_.GetLastInFlightPacketSentTime(space).IsInitialized()) {
     // No in flight data of space.
     return;
@@ -1192,7 +1193,7 @@
           unacked_packets_.HasRetransmittableFrames(*transmission_info) &&
           unacked_packets_.GetPacketNumberSpace(
               transmission_info->encryption_level) == space) {
-        DCHECK(transmission_info->in_flight);
+        QUICHE_DCHECK(transmission_info->in_flight);
         if (pending_timer_transmission_count_ == 0) {
           pending_timer_transmission_count_ = 1;
         }
@@ -1208,7 +1209,7 @@
           unacked_packets_.HasRetransmittableFrames(*it) &&
           unacked_packets_.GetPacketNumberSpace(it->encryption_level) ==
               space) {
-        DCHECK(it->in_flight);
+        QUICHE_DCHECK(it->in_flight);
         if (pending_timer_transmission_count_ == 0) {
           pending_timer_transmission_count_ = 1;
         }
@@ -1221,8 +1222,8 @@
 
 QuicSentPacketManager::RetransmissionTimeoutMode
 QuicSentPacketManager::GetRetransmissionMode() const {
-  DCHECK(unacked_packets_.HasInFlightPackets() ||
-         (handshake_mode_disabled_ && !handshake_finished_));
+  QUICHE_DCHECK(unacked_packets_.HasInFlightPackets() ||
+                (handshake_mode_disabled_ && !handshake_finished_));
   if (!handshake_mode_disabled_ && !handshake_finished_ &&
       unacked_packets_.HasPendingCryptoPackets()) {
     return HANDSHAKE_MODE;
@@ -1243,8 +1244,8 @@
 
 void QuicSentPacketManager::InvokeLossDetection(QuicTime time) {
   if (!packets_acked_.empty()) {
-    DCHECK_LE(packets_acked_.front().packet_number,
-              packets_acked_.back().packet_number);
+    QUICHE_DCHECK_LE(packets_acked_.front().packet_number,
+                     packets_acked_.back().packet_number);
     largest_newly_acked_ = packets_acked_.back().packet_number;
   }
   LossDetectionInterface::DetectionStats detection_stats =
@@ -1357,7 +1358,7 @@
     case LOSS_MODE:
       return loss_algorithm_->GetLossTimeout();
     case TLP_MODE: {
-      DCHECK(!pto_enabled_);
+      QUICHE_DCHECK(!pto_enabled_);
       // TODO(ianswett): When CWND is available, it would be preferable to
       // set the timer based on the earliest retransmittable packet.
       // Base the updated timer on the send time of the last packet.
@@ -1368,7 +1369,7 @@
       return std::max(clock_->ApproximateNow(), tlp_time);
     }
     case RTO_MODE: {
-      DCHECK(!pto_enabled_);
+      QUICHE_DCHECK(!pto_enabled_);
       // The RTO is based on the first outstanding packet.
       const QuicTime sent_time =
           unacked_packets_.GetLastInFlightPacketSentTime();
@@ -1433,7 +1434,7 @@
           earliest_right_edge + GetProbeTimeoutDelay(packet_number_space));
     }
   }
-  DCHECK(false);
+  QUICHE_DCHECK(false);
   return QuicTime::Zero();
 }
 
@@ -1519,7 +1520,7 @@
 
 const QuicTime::Delta QuicSentPacketManager::GetProbeTimeoutDelay(
     PacketNumberSpace space) const {
-  DCHECK(pto_enabled_);
+  QUICHE_DCHECK(pto_enabled_);
   if (rtt_stats_.smoothed_rtt().IsZero()) {
     // Respect kMinHandshakeTimeoutMs to avoid a potential amplification attack.
     QUIC_BUG_IF(rtt_stats_.initial_rtt().IsZero());
@@ -1614,7 +1615,7 @@
       // them as useless, thus not contributing to RTT stats.
       if (unacked_packets_.HasRetransmittableFrames(packet_number)) {
         MarkForRetransmission(packet_number, PATH_RETRANSMISSION);
-        DCHECK_EQ(it->state, NOT_CONTRIBUTING_RTT);
+        QUICHE_DCHECK_EQ(it->state, NOT_CONTRIBUTING_RTT);
       }
     }
     it->state = NOT_CONTRIBUTING_RTT;
@@ -1625,8 +1626,8 @@
 void QuicSentPacketManager::OnAckFrameStart(QuicPacketNumber largest_acked,
                                             QuicTime::Delta ack_delay_time,
                                             QuicTime ack_receive_time) {
-  DCHECK(packets_acked_.empty());
-  DCHECK_LE(largest_acked, unacked_packets_.largest_sent_packet());
+  QUICHE_DCHECK(packets_acked_.empty());
+  QUICHE_DCHECK_LE(largest_acked, unacked_packets_.largest_sent_packet());
   if (ack_delay_time > peer_max_ack_delay()) {
     ack_delay_time = peer_max_ack_delay();
   }
@@ -1799,7 +1800,7 @@
 
 QuicPacketNumber QuicSentPacketManager::GetLargestAckedPacket(
     EncryptionLevel decrypted_packet_level) const {
-  DCHECK(supports_multiple_packet_number_spaces());
+  QUICHE_DCHECK(supports_multiple_packet_number_spaces());
   return unacked_packets_.GetLargestAckedOfPacketNumberSpace(
       QuicUtils::GetPacketNumberSpace(decrypted_packet_level));
 }
@@ -1827,7 +1828,7 @@
 
 QuicPacketNumber QuicSentPacketManager::GetLargestPacketPeerKnowsIsAcked(
     EncryptionLevel decrypted_packet_level) const {
-  DCHECK(supports_multiple_packet_number_spaces());
+  QUICHE_DCHECK(supports_multiple_packet_number_spaces());
   return largest_packets_peer_knows_is_acked_[QuicUtils::GetPacketNumberSpace(
       decrypted_packet_level)];
 }
diff --git a/quic/core/quic_session.cc b/quic/core/quic_session.cc
index 5c308f0..5112cde 100644
--- a/quic/core/quic_session.cc
+++ b/quic/core/quic_session.cc
@@ -155,14 +155,14 @@
     return;
   }
 
-  DCHECK_EQ(QuicUtils::GetCryptoStreamId(transport_version()),
-            GetMutableCryptoStream()->id());
+  QUICHE_DCHECK_EQ(QuicUtils::GetCryptoStreamId(transport_version()),
+                   GetMutableCryptoStream()->id());
 }
 
 QuicSession::~QuicSession() {}
 
 void QuicSession::PendingStreamOnStreamFrame(const QuicStreamFrame& frame) {
-  DCHECK(VersionUsesHttp3(transport_version()));
+  QUICHE_DCHECK(VersionUsesHttp3(transport_version()));
   QuicStreamId stream_id = frame.stream_id;
 
   PendingStream* pending = GetOrCreatePendingStream(stream_id);
@@ -181,7 +181,7 @@
   }
   if (ProcessPendingStream(pending)) {
     // The pending stream should now be in the scope of normal streams.
-    DCHECK(IsClosedStream(stream_id) || IsOpenStream(stream_id))
+    QUICHE_DCHECK(IsClosedStream(stream_id) || IsOpenStream(stream_id))
         << "Stream " << stream_id << " not created";
     pending_stream_map_.erase(stream_id);
     return;
@@ -230,13 +230,13 @@
 
 void QuicSession::OnStopSendingFrame(const QuicStopSendingFrame& frame) {
   // STOP_SENDING is in IETF QUIC only.
-  DCHECK(VersionHasIetfQuicFrames(transport_version()));
-  DCHECK(QuicVersionUsesCryptoFrames(transport_version()));
+  QUICHE_DCHECK(VersionHasIetfQuicFrames(transport_version()));
+  QUICHE_DCHECK(QuicVersionUsesCryptoFrames(transport_version()));
 
   QuicStreamId stream_id = frame.stream_id;
   // If Stream ID is invalid then close the connection.
   // TODO(ianswett): This check is redundant to checks for IsClosedStream,
-  // but removing it requires removing multiple DCHECKs.
+  // but removing it requires removing multiple QUICHE_DCHECKs.
   // TODO(ianswett): Multiple QUIC_DVLOGs could be QUIC_PEER_BUGs.
   if (stream_id == QuicUtils::GetInvalidStreamId(transport_version())) {
     QUIC_DVLOG(1) << ENDPOINT
@@ -300,7 +300,7 @@
 }
 
 void QuicSession::PendingStreamOnRstStream(const QuicRstStreamFrame& frame) {
-  DCHECK(VersionUsesHttp3(transport_version()));
+  QUICHE_DCHECK(VersionUsesHttp3(transport_version()));
   QuicStreamId stream_id = frame.stream_id;
 
   PendingStream* pending = GetOrCreatePendingStream(stream_id);
@@ -312,9 +312,10 @@
 
   pending->OnRstStreamFrame(frame);
   // Pending stream is currently read only. We can safely close the stream.
-  DCHECK_EQ(READ_UNIDIRECTIONAL,
-            QuicUtils::GetStreamType(pending->id(), perspective(),
-                                     /*peer_initiated = */ true, version()));
+  QUICHE_DCHECK_EQ(
+      READ_UNIDIRECTIONAL,
+      QuicUtils::GetStreamType(pending->id(), perspective(),
+                               /*peer_initiated = */ true, version()));
   ClosePendingStream(stream_id);
 }
 
@@ -377,7 +378,7 @@
 }
 
 void QuicSession::OnNewTokenReceived(absl::string_view token) {
-  DCHECK_EQ(perspective_, Perspective::IS_CLIENT);
+  QUICHE_DCHECK_EQ(perspective_, Perspective::IS_CLIENT);
   GetMutableCryptoStream()->OnNewTokenReceived(token);
 }
 
@@ -399,7 +400,7 @@
 
 void QuicSession::OnConnectionClosed(const QuicConnectionCloseFrame& frame,
                                      ConnectionCloseSource source) {
-  DCHECK(!connection_->connected());
+  QUICHE_DCHECK(!connection_->connected());
   if (perspective() == Perspective::IS_SERVER) {
     RecordConnectionCloseAtServer(frame.quic_error_code, source);
   }
@@ -637,9 +638,9 @@
                     << " bytes_written " << previous_bytes_written << " fin "
                     << previous_fin_sent;
       stream->OnCanWrite();
-      DCHECK(CheckStreamWriteBlocked(stream));
-      DCHECK(CheckStreamNotBusyLooping(stream, previous_bytes_written,
-                                       previous_fin_sent));
+      QUICHE_DCHECK(CheckStreamWriteBlocked(stream));
+      QUICHE_DCHECK(CheckStreamNotBusyLooping(stream, previous_bytes_written,
+                                              previous_fin_sent));
     }
     currently_writing_stream_id_ = 0;
   }
@@ -739,15 +740,16 @@
     StreamSendingState state,
     TransmissionType type,
     absl::optional<EncryptionLevel> level) {
-  DCHECK(connection_->connected())
+  QUICHE_DCHECK(connection_->connected())
       << ENDPOINT << "Try to write stream data when connection is closed.";
-  DCHECK(!use_write_or_buffer_data_at_level_ || level.has_value());
+  QUICHE_DCHECK(!use_write_or_buffer_data_at_level_ || level.has_value());
   if (!IsEncryptionEstablished() &&
       !QuicUtils::IsCryptoStreamId(transport_version(), id)) {
     // Do not let streams write without encryption. The calling stream will end
     // up write blocked until OnCanWrite is next called.
     if (was_zero_rtt_rejected_ && !OneRttKeysAvailable()) {
-      DCHECK(version().UsesTls() && perspective() == Perspective::IS_CLIENT);
+      QUICHE_DCHECK(version().UsesTls() &&
+                    perspective() == Perspective::IS_CLIENT);
       QUIC_BUG_IF(type == NOT_RETRANSMISSION)
           << ENDPOINT << "Try to send new data on stream " << id
           << "before 1-RTT keys are available while 0-RTT is rejected.";
@@ -791,7 +793,7 @@
                                    size_t write_length,
                                    QuicStreamOffset offset,
                                    TransmissionType type) {
-  DCHECK(QuicVersionUsesCryptoFrames(transport_version()));
+  QUICHE_DCHECK(QuicVersionUsesCryptoFrames(transport_version()));
   if (!connection()->framer().HasEncrypterOfEncryptionLevel(level)) {
     const std::string error_details = absl::StrCat(
         "Try to send crypto data with missing keys of encryption level: ",
@@ -827,7 +829,7 @@
 
 bool QuicSession::WriteControlFrame(const QuicFrame& frame,
                                     TransmissionType type) {
-  DCHECK(connection()->connected())
+  QUICHE_DCHECK(connection()->connected())
       << ENDPOINT << "Try to write control frames when connection is closed.";
   if (connection_->encrypted_control_frames()) {
     QUIC_RELOADABLE_FLAG_COUNT(quic_encrypted_control_frames);
@@ -849,7 +851,7 @@
                                 QuicRstStreamErrorCode error,
                                 QuicStreamOffset bytes_written,
                                 bool send_rst_only) {
-  DCHECK(!split_up_send_rst());
+  QUICHE_DCHECK(!split_up_send_rst());
   if (!connection()->connected()) {
     return;
   }
@@ -897,7 +899,7 @@
 void QuicSession::MaybeSendRstStreamFrame(QuicStreamId id,
                                           QuicRstStreamErrorCode error,
                                           QuicStreamOffset bytes_written) {
-  DCHECK(split_up_send_rst());
+  QUICHE_DCHECK(split_up_send_rst());
   if (!connection()->connected()) {
     return;
   }
@@ -912,7 +914,7 @@
 
 void QuicSession::MaybeSendStopSendingFrame(QuicStreamId id,
                                             QuicRstStreamErrorCode error) {
-  DCHECK(split_up_send_rst());
+  QUICHE_DCHECK(split_up_send_rst());
   if (!connection()->connected()) {
     return;
   }
@@ -926,7 +928,7 @@
 void QuicSession::SendGoAway(QuicErrorCode error_code,
                              const std::string& reason) {
   // GOAWAY frame is not supported in IETF QUIC.
-  DCHECK(!VersionHasIetfQuicFrames(transport_version()));
+  QUICHE_DCHECK(!VersionHasIetfQuicFrames(transport_version()));
   if (GetQuicReloadableFlag(quic_encrypted_goaway)) {
     QUIC_RELOADABLE_FLAG_COUNT_N(quic_encrypted_goaway, 1, 2);
     if (!IsEncryptionEstablished()) {
@@ -942,7 +944,7 @@
   }
   transport_goaway_sent_ = true;
   if (GetQuicReloadableFlag(quic_goaway_with_max_stream_id)) {
-    DCHECK_EQ(perspective(), Perspective::IS_SERVER);
+    QUICHE_DCHECK_EQ(perspective(), Perspective::IS_SERVER);
     QUIC_RELOADABLE_FLAG_COUNT_N(quic_goaway_with_max_stream_id, 2, 2);
     control_frame_manager_.WriteOrBufferGoAway(
         error_code,
@@ -1026,7 +1028,7 @@
     // received, for accurate connection level flow control accounting.
     // If this is an outgoing stream, it is technically open from peer's
     // perspective. Do not inform stream Id manager yet.
-    DCHECK(!stream->was_draining());
+    QUICHE_DCHECK(!stream->was_draining());
     InsertLocallyClosedStreamsHighestOffset(
         stream_id, stream->highest_received_byte_offset());
     return;
@@ -1066,7 +1068,7 @@
 
 void QuicSession::ClosePendingStream(QuicStreamId stream_id) {
   QUIC_DVLOG(1) << ENDPOINT << "Closing stream " << stream_id;
-  DCHECK(VersionHasIetfQuicFrames(transport_version()));
+  QUICHE_DCHECK(VersionHasIetfQuicFrames(transport_version()));
   pending_stream_map_.erase(stream_id);
   if (connection_->connected()) {
     ietf_streamid_manager_.OnStreamClosed(stream_id);
@@ -1367,7 +1369,7 @@
 
 void QuicSession::HandleFrameOnNonexistentOutgoingStream(
     QuicStreamId stream_id) {
-  DCHECK(!IsClosedStream(stream_id));
+  QUICHE_DCHECK(!IsClosedStream(stream_id));
   // Received a frame for a locally-created stream that is not currently
   // active. This is an error.
   if (VersionHasIetfQuicFrames(transport_version())) {
@@ -1394,7 +1396,7 @@
 }
 
 void QuicSession::OnNewStreamFlowControlWindow(QuicStreamOffset new_window) {
-  DCHECK(version().UsesQuicCrypto());
+  QUICHE_DCHECK(version().UsesQuicCrypto());
   QUIC_DVLOG(1) << ENDPOINT << "OnNewStreamFlowControlWindow " << new_window;
   if (new_window < kMinimumFlowControlSendWindow) {
     QUIC_LOG_FIRST_N(ERROR, 1)
@@ -1427,7 +1429,7 @@
 
 void QuicSession::OnNewStreamUnidirectionalFlowControlWindow(
     QuicStreamOffset new_window) {
-  DCHECK_EQ(connection_->version().handshake_protocol, PROTOCOL_TLS1_3);
+  QUICHE_DCHECK_EQ(connection_->version().handshake_protocol, PROTOCOL_TLS1_3);
   QUIC_DVLOG(1) << ENDPOINT << "OnNewStreamUnidirectionalFlowControlWindow "
                 << new_window;
   // Inform all existing outgoing unidirectional streams about the new window.
@@ -1457,7 +1459,7 @@
 
 void QuicSession::OnNewStreamOutgoingBidirectionalFlowControlWindow(
     QuicStreamOffset new_window) {
-  DCHECK_EQ(connection_->version().handshake_protocol, PROTOCOL_TLS1_3);
+  QUICHE_DCHECK_EQ(connection_->version().handshake_protocol, PROTOCOL_TLS1_3);
   QUIC_DVLOG(1) << ENDPOINT
                 << "OnNewStreamOutgoingBidirectionalFlowControlWindow "
                 << new_window;
@@ -1488,7 +1490,7 @@
 
 void QuicSession::OnNewStreamIncomingBidirectionalFlowControlWindow(
     QuicStreamOffset new_window) {
-  DCHECK_EQ(connection_->version().handshake_protocol, PROTOCOL_TLS1_3);
+  QUICHE_DCHECK_EQ(connection_->version().handshake_protocol, PROTOCOL_TLS1_3);
   QUIC_DVLOG(1) << ENDPOINT
                 << "OnNewStreamIncomingBidirectionalFlowControlWindow "
                 << new_window;
@@ -1619,7 +1621,8 @@
 }
 
 void QuicSession::SetDefaultEncryptionLevel(EncryptionLevel level) {
-  DCHECK_EQ(PROTOCOL_QUIC_CRYPTO, connection_->version().handshake_protocol);
+  QUICHE_DCHECK_EQ(PROTOCOL_QUIC_CRYPTO,
+                   connection_->version().handshake_protocol);
   QUIC_DVLOG(1) << ENDPOINT << "Set default encryption level to " << level;
   connection()->SetDefaultEncryptionLevel(level);
 
@@ -1649,7 +1652,7 @@
 }
 
 void QuicSession::OnTlsHandshakeComplete() {
-  DCHECK_EQ(PROTOCOL_TLS1_3, connection_->version().handshake_protocol);
+  QUICHE_DCHECK_EQ(PROTOCOL_TLS1_3, connection_->version().handshake_protocol);
   QUIC_BUG_IF(!GetCryptoStream()->crypto_negotiated_params().cipher_suite)
       << ENDPOINT << "Handshake completes without cipher suite negotiation.";
   QUIC_BUG_IF(!config_.negotiated())
@@ -1671,8 +1674,8 @@
 }
 
 void QuicSession::MaybeSendAddressToken() {
-  DCHECK(perspective_ == Perspective::IS_SERVER &&
-         connection()->version().HasIetfQuicFrames());
+  QUICHE_DCHECK(perspective_ == Perspective::IS_SERVER &&
+                connection()->version().HasIetfQuicFrames());
   std::string address_token = GetCryptoStream()->GetAddressToken();
   if (address_token.empty()) {
     return;
@@ -1799,7 +1802,7 @@
   bool is_static = stream->is_static();
   QUIC_DVLOG(1) << ENDPOINT << "num_streams: " << stream_map_.size()
                 << ". activating stream " << stream_id;
-  DCHECK(!QuicContainsKey(stream_map_, stream_id));
+  QUICHE_DCHECK(!QuicContainsKey(stream_map_, stream_id));
   stream_map_[stream_id] = std::move(stream);
   if (is_static) {
     ++num_static_streams_;
@@ -1828,7 +1831,7 @@
 
 bool QuicSession::CanOpenNextOutgoingBidirectionalStream() {
   if (liveness_testing_in_progress_) {
-    DCHECK_EQ(Perspective::IS_CLIENT, perspective());
+    QUICHE_DCHECK_EQ(Perspective::IS_CLIENT, perspective());
     return false;
   }
   if (!VersionHasIetfQuicFrames(transport_version())) {
@@ -1874,12 +1877,12 @@
 
 QuicStreamCount QuicSession::GetAdvertisedMaxIncomingBidirectionalStreams()
     const {
-  DCHECK(VersionHasIetfQuicFrames(transport_version()));
+  QUICHE_DCHECK(VersionHasIetfQuicFrames(transport_version()));
   return ietf_streamid_manager_.advertised_max_incoming_bidirectional_streams();
 }
 
 QuicStream* QuicSession::GetOrCreateStream(const QuicStreamId stream_id) {
-  DCHECK(!QuicContainsKey(pending_stream_map_, stream_id));
+  QUICHE_DCHECK(!QuicContainsKey(pending_stream_map_, stream_id));
   if (QuicUtils::IsCryptoStreamId(transport_version(), stream_id)) {
     return GetMutableCryptoStream();
   }
@@ -1918,7 +1921,7 @@
 }
 
 void QuicSession::StreamDraining(QuicStreamId stream_id, bool unidirectional) {
-  DCHECK(QuicContainsKey(stream_map_, stream_id));
+  QUICHE_DCHECK(QuicContainsKey(stream_map_, stream_id));
   QUIC_DVLOG(1) << ENDPOINT << "Stream " << stream_id << " is draining";
   if (VersionHasIetfQuicFrames(transport_version())) {
     ietf_streamid_manager_.OnStreamClosed(stream_id);
@@ -1983,7 +1986,7 @@
 
 void QuicSession::set_largest_peer_created_stream_id(
     QuicStreamId largest_peer_created_stream_id) {
-  DCHECK(!VersionHasIetfQuicFrames(transport_version()));
+  QUICHE_DCHECK(!VersionHasIetfQuicFrames(transport_version()));
   stream_id_manager_.set_largest_peer_created_stream_id(
       largest_peer_created_stream_id);
 }
@@ -1991,7 +1994,7 @@
 QuicStreamId QuicSession::GetLargestPeerCreatedStreamId(
     bool unidirectional) const {
   // This method is only used in IETF QUIC.
-  DCHECK(VersionHasIetfQuicFrames(transport_version()));
+  QUICHE_DCHECK(VersionHasIetfQuicFrames(transport_version()));
   return ietf_streamid_manager_.GetLargestPeerCreatedStreamId(unidirectional);
 }
 
@@ -2015,7 +2018,7 @@
 }
 
 bool QuicSession::IsClosedStream(QuicStreamId id) {
-  DCHECK_NE(QuicUtils::GetInvalidStreamId(transport_version()), id);
+  QUICHE_DCHECK_NE(QuicUtils::GetInvalidStreamId(transport_version()), id);
   if (IsOpenStream(id)) {
     // Stream is active
     return false;
@@ -2029,7 +2032,7 @@
 }
 
 bool QuicSession::IsOpenStream(QuicStreamId id) {
-  DCHECK_NE(QuicUtils::GetInvalidStreamId(transport_version()), id);
+  QUICHE_DCHECK_NE(QuicUtils::GetInvalidStreamId(transport_version()), id);
   const StreamMap::iterator it = stream_map_.find(id);
   if (it != stream_map_.end()) {
     return !it->second->IsZombie();
@@ -2051,8 +2054,9 @@
 }
 
 size_t QuicSession::GetNumActiveStreams() const {
-  DCHECK_GE(static_cast<QuicStreamCount>(stream_map_.size()),
-            num_static_streams_ + num_draining_streams_ + num_zombie_streams_);
+  QUICHE_DCHECK_GE(
+      static_cast<QuicStreamCount>(stream_map_.size()),
+      num_static_streams_ + num_draining_streams_ + num_zombie_streams_);
   return stream_map_.size() - num_draining_streams_ - num_static_streams_ -
          num_zombie_streams_;
 }
@@ -2355,7 +2359,7 @@
     QuicStream* crypto_stream =
         GetStream(QuicUtils::GetCryptoStreamId(transport_version()));
     crypto_stream->OnCanWrite();
-    DCHECK(CheckStreamWriteBlocked(crypto_stream));
+    QUICHE_DCHECK(CheckStreamWriteBlocked(crypto_stream));
     if (crypto_stream->HasPendingRetransmission()) {
       // Connection is write blocked.
       return false;
@@ -2379,7 +2383,7 @@
     QuicStream* stream = GetStream(id);
     if (stream != nullptr) {
       stream->OnCanWrite();
-      DCHECK(CheckStreamWriteBlocked(stream));
+      QUICHE_DCHECK(CheckStreamWriteBlocked(stream));
       if (stream->HasPendingRetransmission()) {
         // Connection is write blocked.
         break;
@@ -2419,7 +2423,7 @@
 }
 
 MessageResult QuicSession::SendMessage(QuicMemSliceSpan message, bool flush) {
-  DCHECK(connection_->connected())
+  QUICHE_DCHECK(connection_->connected())
       << ENDPOINT << "Try to write messages when connection is closed.";
   if (!IsEncryptionEstablished()) {
     return {MESSAGE_STATUS_ENCRYPTION_NOT_ESTABLISHED, 0};
@@ -2580,7 +2584,7 @@
 }
 
 bool QuicSession::ValidateToken(absl::string_view token) const {
-  DCHECK_EQ(perspective_, Perspective::IS_SERVER);
+  QUICHE_DCHECK_EQ(perspective_, Perspective::IS_SERVER);
   if (token.empty() || token[0] != 0) {
     // Validate the prefix for token received in NEW_TOKEN frame.
     return false;
diff --git a/quic/core/quic_session_test.cc b/quic/core/quic_session_test.cc
index 7c5d9bb..7daec2b 100644
--- a/quic/core/quic_session_test.cc
+++ b/quic/core/quic_session_test.cc
@@ -367,7 +367,7 @@
   }
 
   QuicConsumedData SendLargeFakeData(QuicStream* stream, int bytes) {
-    DCHECK(writev_consumes_all_data_);
+    QUICHE_DCHECK(writev_consumes_all_data_);
     return WritevData(stream->id(), bytes, 0, FIN, NOT_RETRANSMISSION,
                       GetEncryptionLevelToSendApplicationData());
   }
diff --git a/quic/core/quic_stream.cc b/quic/core/quic_stream.cc
index b5cdd31..0649428 100644
--- a/quic/core/quic_stream.cc
+++ b/quic/core/quic_stream.cc
@@ -134,7 +134,7 @@
 }
 
 void PendingStream::OnFinRead() {
-  DCHECK(sequencer_.IsClosed());
+  QUICHE_DCHECK(sequencer_.IsClosed());
 }
 
 void PendingStream::AddBytesConsumed(QuicByteCount bytes) {
@@ -169,7 +169,7 @@
 }
 
 void PendingStream::OnStreamFrame(const QuicStreamFrame& frame) {
-  DCHECK_EQ(frame.stream_id, id_);
+  QUICHE_DCHECK_EQ(frame.stream_id, id_);
 
   bool is_stream_too_long =
       (frame.offset > kMaxStreamLength) ||
@@ -220,7 +220,7 @@
 }
 
 void PendingStream::OnRstStreamFrame(const QuicRstStreamFrame& frame) {
-  DCHECK_EQ(frame.stream_id, id_);
+  QUICHE_DCHECK_EQ(frame.stream_id, id_);
 
   if (frame.byte_offset > kMaxStreamLength) {
     // Peer are not suppose to write bytes more than maxium allowed.
@@ -403,9 +403,9 @@
 }
 
 void QuicStream::OnStreamFrame(const QuicStreamFrame& frame) {
-  DCHECK_EQ(frame.stream_id, id_);
+  QUICHE_DCHECK_EQ(frame.stream_id, id_);
 
-  DCHECK(!(read_side_closed_ && write_side_closed_));
+  QUICHE_DCHECK(!(read_side_closed_ && write_side_closed_));
 
   if (frame.fin && is_static_) {
     OnUnrecoverableError(QUIC_INVALID_STREAM_ID,
@@ -449,7 +449,7 @@
   if (frame.fin && !fin_received_) {
     fin_received_ = true;
     if (fin_sent_) {
-      DCHECK(!was_draining_);
+      QUICHE_DCHECK(!was_draining_);
       session_->StreamDraining(id_,
                                /*unidirectional=*/type_ != BIDIRECTIONAL);
       was_draining_ = true;
@@ -585,7 +585,7 @@
 }
 
 void QuicStream::OnFinRead() {
-  DCHECK(sequencer_.IsClosed());
+  QUICHE_DCHECK(sequencer_.IsClosed());
   // OnFinRead can be called due to a FIN flag in a headers block, so there may
   // have been no OnStreamFrame call with a FIN in the frame.
   fin_received_ = true;
@@ -596,7 +596,7 @@
 }
 
 void QuicStream::SetFinSent() {
-  DCHECK(!VersionUsesHttp3(transport_version()));
+  QUICHE_DCHECK(!VersionUsesHttp3(transport_version()));
   fin_sent_ = true;
 }
 
@@ -714,7 +714,7 @@
     bool fin,
     EncryptionLevel level,
     QuicReferenceCountedPointer<QuicAckListenerInterface> ack_listener) {
-  DCHECK(session()->use_write_or_buffer_data_at_level());
+  QUICHE_DCHECK(session()->use_write_or_buffer_data_at_level());
   QUIC_RELOADABLE_FLAG_COUNT(quic_use_write_or_buffer_data_at_level);
   return WriteOrBufferDataInner(data, fin, level, ack_listener);
 }
@@ -872,7 +872,7 @@
 }
 
 void QuicStream::MaybeSendStopSending(QuicRstStreamErrorCode error) {
-  DCHECK(session()->split_up_send_rst());
+  QUICHE_DCHECK(session()->split_up_send_rst());
   if (stop_sending_sent_) {
     return;
   }
@@ -885,7 +885,7 @@
   if (session()->version().UsesHttp3()) {
     session()->MaybeSendStopSendingFrame(id(), error);
   } else {
-    DCHECK_EQ(QUIC_STREAM_NO_ERROR, error);
+    QUICHE_DCHECK_EQ(QUIC_STREAM_NO_ERROR, error);
     session()->MaybeSendRstStreamFrame(id(), QUIC_STREAM_NO_ERROR,
                                        stream_bytes_written());
   }
@@ -894,7 +894,7 @@
 }
 
 void QuicStream::MaybeSendRstStream(QuicRstStreamErrorCode error) {
-  DCHECK(session()->split_up_send_rst());
+  QUICHE_DCHECK(session()->split_up_send_rst());
   if (rst_sent_) {
     return;
   }
@@ -910,7 +910,7 @@
 }
 
 bool QuicStream::HasBufferedData() const {
-  DCHECK_GE(send_buffer_.stream_offset(), stream_bytes_written());
+  QUICHE_DCHECK_GE(send_buffer_.stream_offset(), stream_bytes_written());
   return send_buffer_.stream_offset() > stream_bytes_written();
 }
 
@@ -932,7 +932,7 @@
 }
 
 void QuicStream::OnClose() {
-  DCHECK(read_side_closed_ && write_side_closed_);
+  QUICHE_DCHECK(read_side_closed_ && write_side_closed_);
 
   if (!fin_sent_ && !rst_sent_) {
     if (!session()->split_up_send_rst()) {
@@ -1061,7 +1061,7 @@
 
   // The validation code below is for QUIC with TLS only.
   if (new_offset < flow_controller_->send_window_offset()) {
-    DCHECK(session()->version().UsesTls());
+    QUICHE_DCHECK(session()->version().UsesTls());
     if (was_zero_rtt_rejected && new_offset < flow_controller_->bytes_sent()) {
       // The client is given flow control window lower than what's written in
       // 0-RTT. This QUIC implementation is unable to retransmit them.
@@ -1162,8 +1162,8 @@
                                       QuicByteCount data_length,
                                       bool fin,
                                       TransmissionType type) {
-  DCHECK(type == PTO_RETRANSMISSION || type == RTO_RETRANSMISSION ||
-         type == TLP_RETRANSMISSION || type == PROBING_RETRANSMISSION);
+  QUICHE_DCHECK(type == PTO_RETRANSMISSION || type == RTO_RETRANSMISSION ||
+                type == TLP_RETRANSMISSION || type == PROBING_RETRANSMISSION);
   if (HasDeadlinePassed()) {
     OnDeadlinePassed();
     return true;
@@ -1230,14 +1230,14 @@
 bool QuicStream::WriteStreamData(QuicStreamOffset offset,
                                  QuicByteCount data_length,
                                  QuicDataWriter* writer) {
-  DCHECK_LT(0u, data_length);
+  QUICHE_DCHECK_LT(0u, data_length);
   QUIC_DVLOG(2) << ENDPOINT << "Write stream " << id_ << " data from offset "
                 << offset << " length " << data_length;
   return send_buffer_.WriteStreamData(offset, data_length, writer);
 }
 
 void QuicStream::WriteBufferedData(absl::optional<EncryptionLevel> level) {
-  DCHECK(!write_side_closed_ && (HasBufferedData() || fin_buffered_));
+  QUICHE_DCHECK(!write_side_closed_ && (HasBufferedData() || fin_buffered_));
 
   if (session_->ShouldYield(id())) {
     session_->MarkConnectionLevelWriteBlocked(id());
@@ -1310,11 +1310,11 @@
       MaybeSendBlocked();
     }
     if (fin && consumed_data.fin_consumed) {
-      DCHECK(!fin_sent_);
+      QUICHE_DCHECK(!fin_sent_);
       fin_sent_ = true;
       fin_outstanding_ = true;
       if (fin_received_) {
-        DCHECK(!was_draining_);
+        QUICHE_DCHECK(!was_draining_);
         session_->StreamDraining(id_,
                                  /*unidirectional=*/type_ != BIDIRECTIONAL);
         was_draining_ = true;
@@ -1332,7 +1332,7 @@
 }
 
 uint64_t QuicStream::BufferedDataBytes() const {
-  DCHECK_GE(send_buffer_.stream_offset(), stream_bytes_written());
+  QUICHE_DCHECK_GE(send_buffer_.stream_offset(), stream_bytes_written());
   return send_buffer_.stream_offset() - stream_bytes_written();
 }
 
diff --git a/quic/core/quic_stream_id_manager.cc b/quic/core/quic_stream_id_manager.cc
index a6e3518..397eb71 100644
--- a/quic/core/quic_stream_id_manager.cc
+++ b/quic/core/quic_stream_id_manager.cc
@@ -47,7 +47,7 @@
 bool QuicStreamIdManager::OnStreamsBlockedFrame(
     const QuicStreamsBlockedFrame& frame,
     std::string* error_details) {
-  DCHECK_EQ(frame.unidirectional, unidirectional_);
+  QUICHE_DCHECK_EQ(frame.unidirectional, unidirectional_);
   if (frame.stream_count > incoming_advertised_max_streams_) {
     // Peer thinks it can send more streams that we've told it.
     *error_details = absl::StrCat(
@@ -55,7 +55,8 @@
         " exceeds incoming max stream ", incoming_advertised_max_streams_);
     return false;
   }
-  DCHECK_LE(incoming_advertised_max_streams_, incoming_actual_max_streams_);
+  QUICHE_DCHECK_LE(incoming_advertised_max_streams_,
+                   incoming_actual_max_streams_);
   if (incoming_advertised_max_streams_ == incoming_actual_max_streams_) {
     // We have told peer about current max.
     return true;
@@ -118,8 +119,8 @@
 }
 
 void QuicStreamIdManager::OnStreamClosed(QuicStreamId stream_id) {
-  DCHECK_NE(QuicUtils::IsBidirectionalStreamId(stream_id, version_),
-            unidirectional_);
+  QUICHE_DCHECK_NE(QuicUtils::IsBidirectionalStreamId(stream_id, version_),
+                   unidirectional_);
   if (QuicUtils::IsOutgoingStreamId(version_, stream_id, perspective_)) {
     // Nothing to do for outgoing streams.
     return;
@@ -149,7 +150,7 @@
 }
 
 bool QuicStreamIdManager::CanOpenNextOutgoingStream() const {
-  DCHECK(VersionHasIetfQuicFrames(version_.transport_version));
+  QUICHE_DCHECK(VersionHasIetfQuicFrames(version_.transport_version));
   return outgoing_stream_count_ < outgoing_max_streams_;
 }
 
@@ -157,11 +158,11 @@
     const QuicStreamId stream_id,
     std::string* error_details) {
   // |stream_id| must be an incoming stream of the right directionality.
-  DCHECK_NE(QuicUtils::IsBidirectionalStreamId(stream_id, version_),
-            unidirectional_);
-  DCHECK_NE(QuicUtils::IsServerInitiatedStreamId(version_.transport_version,
-                                                 stream_id),
-            perspective_ == Perspective::IS_SERVER);
+  QUICHE_DCHECK_NE(QuicUtils::IsBidirectionalStreamId(stream_id, version_),
+                   unidirectional_);
+  QUICHE_DCHECK_NE(QuicUtils::IsServerInitiatedStreamId(
+                       version_.transport_version, stream_id),
+                   perspective_ == Perspective::IS_SERVER);
   if (available_streams_.erase(stream_id) == 1) {
     // stream_id is available.
     return true;
@@ -169,7 +170,7 @@
 
   if (largest_peer_created_stream_id_ !=
       QuicUtils::GetInvalidStreamId(version_.transport_version)) {
-    DCHECK_GT(stream_id, largest_peer_created_stream_id_);
+    QUICHE_DCHECK_GT(stream_id, largest_peer_created_stream_id_);
   }
 
   // Calculate increment of incoming_stream_count_ by creating stream_id.
@@ -204,7 +205,8 @@
 }
 
 bool QuicStreamIdManager::IsAvailableStream(QuicStreamId id) const {
-  DCHECK_NE(QuicUtils::IsBidirectionalStreamId(id, version_), unidirectional_);
+  QUICHE_DCHECK_NE(QuicUtils::IsBidirectionalStreamId(id, version_),
+                   unidirectional_);
   if (QuicUtils::IsOutgoingStreamId(version_, id, perspective_)) {
     // Stream IDs under next_ougoing_stream_id_ are either open or previously
     // open but now closed.
diff --git a/quic/core/quic_stream_id_manager_test.cc b/quic/core/quic_stream_id_manager_test.cc
index 98905ee..47ba76f 100644
--- a/quic/core/quic_stream_id_manager_test.cc
+++ b/quic/core/quic_stream_id_manager_test.cc
@@ -76,7 +76,7 @@
                            GetParam().version,
                            0,
                            kDefaultMaxStreamsPerConnection) {
-    DCHECK(VersionHasIetfQuicFrames(transport_version()));
+    QUICHE_DCHECK(VersionHasIetfQuicFrames(transport_version()));
   }
 
   QuicTransportVersion transport_version() const {
diff --git a/quic/core/quic_stream_send_buffer.cc b/quic/core/quic_stream_send_buffer.cc
index f942229..219eacd 100644
--- a/quic/core/quic_stream_send_buffer.cc
+++ b/quic/core/quic_stream_send_buffer.cc
@@ -58,7 +58,7 @@
                                           int iov_count,
                                           size_t iov_offset,
                                           QuicByteCount data_length) {
-  DCHECK_LT(0u, data_length);
+  QUICHE_DCHECK_LT(0u, data_length);
   // Latch the maximum data slice size.
   const QuicByteCount max_data_slice_size =
       GetQuicFlag(FLAGS_quic_send_buffer_max_data_slice_size);
diff --git a/quic/core/quic_stream_sequencer.cc b/quic/core/quic_stream_sequencer.cc
index ae96229..e702f71 100644
--- a/quic/core/quic_stream_sequencer.cc
+++ b/quic/core/quic_stream_sequencer.cc
@@ -47,7 +47,7 @@
 }
 
 void QuicStreamSequencer::OnStreamFrame(const QuicStreamFrame& frame) {
-  DCHECK_LE(frame.offset + frame.data_length, close_offset_);
+  QUICHE_DCHECK_LE(frame.offset + frame.data_length, close_offset_);
   ++num_frames_received_;
   const QuicStreamOffset byte_offset = frame.offset;
   const size_t data_len = frame.data_length;
@@ -59,7 +59,7 @@
   if (GetQuicReloadableFlag(quic_accept_empty_stream_frame_with_no_fin)) {
     QUIC_RELOADABLE_FLAG_COUNT(quic_accept_empty_stream_frame_with_no_fin);
     if (stream_->version().HasIetfQuicFrames() && data_len == 0) {
-      DCHECK(!frame.fin);
+      QUICHE_DCHECK(!frame.fin);
       // Ignore empty frame with no fin.
       return;
     }
@@ -178,23 +178,23 @@
 }
 
 int QuicStreamSequencer::GetReadableRegions(iovec* iov, size_t iov_len) const {
-  DCHECK(!blocked_);
+  QUICHE_DCHECK(!blocked_);
   return buffered_frames_.GetReadableRegions(iov, iov_len);
 }
 
 bool QuicStreamSequencer::GetReadableRegion(iovec* iov) const {
-  DCHECK(!blocked_);
+  QUICHE_DCHECK(!blocked_);
   return buffered_frames_.GetReadableRegion(iov);
 }
 
 bool QuicStreamSequencer::PeekRegion(QuicStreamOffset offset,
                                      iovec* iov) const {
-  DCHECK(!blocked_);
+  QUICHE_DCHECK(!blocked_);
   return buffered_frames_.PeekRegion(offset, iov);
 }
 
 void QuicStreamSequencer::Read(std::string* buffer) {
-  DCHECK(!blocked_);
+  QUICHE_DCHECK(!blocked_);
   buffer->resize(buffer->size() + ReadableBytes());
   iovec iov;
   iov.iov_len = ReadableBytes();
@@ -203,7 +203,7 @@
 }
 
 size_t QuicStreamSequencer::Readv(const struct iovec* iov, size_t iov_len) {
-  DCHECK(!blocked_);
+  QUICHE_DCHECK(!blocked_);
   std::string error_details;
   size_t bytes_read;
   QuicErrorCode read_error =
@@ -232,7 +232,7 @@
 }
 
 void QuicStreamSequencer::MarkConsumed(size_t num_bytes_consumed) {
-  DCHECK(!blocked_);
+  QUICHE_DCHECK(!blocked_);
   bool result = buffered_frames_.MarkConsumed(num_bytes_consumed);
   if (!result) {
     QUIC_BUG << "Invalid argument to MarkConsumed."
@@ -274,7 +274,7 @@
 }
 
 void QuicStreamSequencer::FlushBufferedFrames() {
-  DCHECK(ignore_read_data_);
+  QUICHE_DCHECK(ignore_read_data_);
   size_t bytes_flushed = buffered_frames_.FlushBufferedFrames();
   QUIC_DVLOG(1) << "Flushing buffered data at offset "
                 << buffered_frames_.BytesConsumed() << " length "
diff --git a/quic/core/quic_stream_sequencer_buffer.cc b/quic/core/quic_stream_sequencer_buffer.cc
index f1be32c..5c85a6e 100644
--- a/quic/core/quic_stream_sequencer_buffer.cc
+++ b/quic/core/quic_stream_sequencer_buffer.cc
@@ -47,7 +47,7 @@
       total_bytes_read_(0),
       blocks_(nullptr) {
   if (allocate_blocks_on_demand_) {
-    DCHECK_GE(max_blocks_count_, kInitialBlockCount);
+    QUICHE_DCHECK_GE(max_blocks_count_, kInitialBlockCount);
   }
   Clear();
 }
@@ -204,7 +204,7 @@
     const size_t write_block_offset = GetInBlockOffset(offset);
     size_t current_blocks_count =
         allocate_blocks_on_demand_ ? current_blocks_count_ : max_blocks_count_;
-    DCHECK_GT(current_blocks_count, write_block_num);
+    QUICHE_DCHECK_GT(current_blocks_count, write_block_num);
 
     size_t block_capacity = GetBlockCapacity(write_block_num);
     size_t bytes_avail = block_capacity - write_block_offset;
@@ -275,7 +275,7 @@
   *bytes_read = 0;
   for (size_t i = 0; i < dest_count && ReadableBytes() > 0; ++i) {
     char* dest = reinterpret_cast<char*>(dest_iov[i].iov_base);
-    DCHECK(dest != nullptr);
+    QUICHE_DCHECK(dest != nullptr);
     size_t dest_remaining = dest_iov[i].iov_len;
     while (dest_remaining > 0 && ReadableBytes() > 0) {
       size_t block_idx = NextBlockToRead();
@@ -285,7 +285,7 @@
           ReadableBytes(), block_capacity - start_offset_in_block);
       size_t bytes_to_copy =
           std::min<size_t>(bytes_available_in_block, dest_remaining);
-      DCHECK_GT(bytes_to_copy, 0u);
+      QUICHE_DCHECK_GT(bytes_to_copy, 0u);
       if (blocks_[block_idx] == nullptr || dest == nullptr) {
         *error_details = absl::StrCat(
             "QuicStreamSequencerBuffer error:"
@@ -328,8 +328,8 @@
 
 int QuicStreamSequencerBuffer::GetReadableRegions(struct iovec* iov,
                                                   int iov_len) const {
-  DCHECK(iov != nullptr);
-  DCHECK_GT(iov_len, 0);
+  QUICHE_DCHECK(iov != nullptr);
+  QUICHE_DCHECK_GT(iov_len, 0);
 
   if (ReadableBytes() == 0) {
     iov[0].iov_base = nullptr;
@@ -339,7 +339,7 @@
 
   size_t start_block_idx = NextBlockToRead();
   QuicStreamOffset readable_offset_end = FirstMissingByte() - 1;
-  DCHECK_GE(readable_offset_end + 1, total_bytes_read_);
+  QUICHE_DCHECK_GE(readable_offset_end + 1, total_bytes_read_);
   size_t end_block_offset = GetInBlockOffset(readable_offset_end);
   size_t end_block_idx = GetBlockIndex(readable_offset_end);
 
@@ -356,7 +356,7 @@
   iov[0].iov_len = GetBlockCapacity(start_block_idx) - ReadOffset();
   QUIC_DVLOG(1) << "Got first block " << start_block_idx << " with len "
                 << iov[0].iov_len;
-  DCHECK_GT(readable_offset_end + 1, total_bytes_read_ + iov[0].iov_len)
+  QUICHE_DCHECK_GT(readable_offset_end + 1, total_bytes_read_ + iov[0].iov_len)
       << "there should be more available data";
 
   // Get readable regions of the rest blocks till either 2nd to last block
@@ -365,7 +365,7 @@
   int iov_used = 1;
   size_t block_idx = (start_block_idx + iov_used) % max_blocks_count_;
   while (block_idx != end_block_idx && iov_used < iov_len) {
-    DCHECK(nullptr != blocks_[block_idx]);
+    QUICHE_DCHECK(nullptr != blocks_[block_idx]);
     iov[iov_used].iov_base = blocks_[block_idx]->buffer;
     iov[iov_used].iov_len = GetBlockCapacity(block_idx);
     QUIC_DVLOG(1) << "Got block with index: " << block_idx;
@@ -375,7 +375,7 @@
 
   // Deal with last block if |iov| can hold more.
   if (iov_used < iov_len) {
-    DCHECK(nullptr != blocks_[block_idx]);
+    QUICHE_DCHECK(nullptr != blocks_[block_idx]);
     iov[iov_used].iov_base = blocks_[end_block_idx]->buffer;
     iov[iov_used].iov_len = end_block_offset + 1;
     QUIC_DVLOG(1) << "Got last block with index: " << end_block_idx;
@@ -390,7 +390,7 @@
 
 bool QuicStreamSequencerBuffer::PeekRegion(QuicStreamOffset offset,
                                            iovec* iov) const {
-  DCHECK(iov);
+  QUICHE_DCHECK(iov);
 
   if (offset < total_bytes_read_) {
     // Data at |offset| has already been consumed.
@@ -491,7 +491,8 @@
 }
 
 bool QuicStreamSequencerBuffer::RetireBlockIfEmpty(size_t block_index) {
-  DCHECK(ReadableBytes() == 0 || GetInBlockOffset(total_bytes_read_) == 0)
+  QUICHE_DCHECK(ReadableBytes() == 0 ||
+                GetInBlockOffset(total_bytes_read_) == 0)
       << "RetireBlockIfEmpty() should only be called when advancing to next "
       << "block or a gap has been reached.";
   // If the whole buffer becomes empty, the last piece of data has been read.
diff --git a/quic/core/quic_stream_sequencer_buffer_test.cc b/quic/core/quic_stream_sequencer_buffer_test.cc
index 3c46c41..dc21a09 100644
--- a/quic/core/quic_stream_sequencer_buffer_test.cc
+++ b/quic/core/quic_stream_sequencer_buffer_test.cc
@@ -900,7 +900,7 @@
       start_chopping_offset += chunk_size;
       ++iterations;
     }
-    DCHECK(start_chopping_offset == bytes_to_buffer_);
+    QUICHE_DCHECK(start_chopping_offset == bytes_to_buffer_);
     size_t chunk_num = iterations;
 
     // Randomly change the sequence of in-ordered OffsetSizePairs to make a
diff --git a/quic/core/quic_time_wait_list_manager.cc b/quic/core/quic_time_wait_list_manager.cc
index 7725eb9..641f5c9 100644
--- a/quic/core/quic_time_wait_list_manager.cc
+++ b/quic/core/quic_time_wait_list_manager.cc
@@ -135,13 +135,13 @@
     QuicConnectionId connection_id,
     TimeWaitAction action,
     TimeWaitConnectionInfo info) {
-  DCHECK(!info.active_connection_ids.empty());
+  QUICHE_DCHECK(!info.active_connection_ids.empty());
   const QuicConnectionId& canonical_connection_id =
       use_indirect_connection_id_map_ ? info.active_connection_ids.front()
                                       : connection_id;
-  DCHECK(action != SEND_TERMINATION_PACKETS ||
-         !info.termination_packets.empty());
-  DCHECK(action != DO_NOTHING || info.ietf_quic);
+  QUICHE_DCHECK(action != SEND_TERMINATION_PACKETS ||
+                !info.termination_packets.empty());
+  QUICHE_DCHECK(action != DO_NOTHING || info.ietf_quic);
   int num_packets = 0;
   auto it = FindConnectionIdDataInMap(canonical_connection_id);
   const bool new_connection_id = it == connection_id_map_.end();
@@ -152,8 +152,8 @@
   TrimTimeWaitListIfNeeded();
   int64_t max_connections =
       GetQuicFlag(FLAGS_quic_time_wait_list_max_connections);
-  DCHECK(connection_id_map_.empty() ||
-         num_connections() < static_cast<size_t>(max_connections));
+  QUICHE_DCHECK(connection_id_map_.empty() ||
+                num_connections() < static_cast<size_t>(max_connections));
   if (use_indirect_connection_id_map_ && new_connection_id) {
     QUIC_RESTART_FLAG_COUNT_N(quic_time_wait_list_support_multiple_cid_v2, 3,
                               3);
@@ -193,11 +193,11 @@
     QuicConnectionId connection_id,
     PacketHeaderFormat header_format,
     std::unique_ptr<QuicPerPacketContext> packet_context) {
-  DCHECK(IsConnectionIdInTimeWait(connection_id));
+  QUICHE_DCHECK(IsConnectionIdInTimeWait(connection_id));
   // TODO(satyamshekhar): Think about handling packets from different peer
   // addresses.
   auto it = FindConnectionIdDataInMap(connection_id);
-  DCHECK(it != connection_id_map_.end());
+  QUICHE_DCHECK(it != connection_id_map_.end());
   // Increment the received packet count.
   ConnectionIdData* connection_data = &it->second;
   ++(connection_data->num_packets);
@@ -278,7 +278,7 @@
       return;
     case DO_NOTHING:
       QUIC_CODE_COUNT(quic_time_wait_list_do_nothing);
-      DCHECK(connection_data->info.ietf_quic);
+      QUICHE_DCHECK(connection_data->info.ietf_quic);
   }
 }
 
@@ -402,7 +402,7 @@
 
   if (IsWriteBlockedStatus(result.status)) {
     // If blocked and unbuffered, return false to retry sending.
-    DCHECK(writer_->IsWriteBlocked());
+    QUICHE_DCHECK(writer_->IsWriteBlocked());
     visitor_->OnWriteBlocked(this);
     return result.status == WRITE_STATUS_BLOCKED_DATA_BUFFERED;
   } else if (IsWriteError(result.status)) {
diff --git a/quic/core/quic_trace_visitor_test.cc b/quic/core/quic_trace_visitor_test.cc
index 0371982..5ebaea8 100644
--- a/quic/core/quic_trace_visitor_test.cc
+++ b/quic/core/quic_trace_visitor_test.cc
@@ -48,11 +48,11 @@
     client.AddBytesToTransfer(kTransferSize);
     bool simulator_result = simulator.RunUntilOrTimeout(
         [&]() { return server.bytes_received() >= kTransferSize; }, kDeadline);
-    CHECK(simulator_result);
+    QUICHE_CHECK(simulator_result);
 
     // Save the trace and ensure some loss was observed.
     trace_.Swap(visitor.trace());
-    CHECK_NE(0u, client.connection()->GetStats().packets_retransmitted);
+    QUICHE_CHECK_NE(0u, client.connection()->GetStats().packets_retransmitted);
     packets_sent_ = client.connection()->GetStats().packets_sent;
   }
 
diff --git a/quic/core/quic_udp_socket_posix.cc b/quic/core/quic_udp_socket_posix.cc
index 8b3060d..e410635 100644
--- a/quic/core/quic_udp_socket_posix.cc
+++ b/quic/core/quic_udp_socket_posix.cc
@@ -102,7 +102,7 @@
 
 void SetV4SelfIpInControlMessage(const QuicIpAddress& self_address,
                                  cmsghdr* cmsg) {
-  DCHECK(self_address.IsIPv4());
+  QUICHE_DCHECK(self_address.IsIPv4());
   in_pktinfo* pktinfo = reinterpret_cast<in_pktinfo*>(CMSG_DATA(cmsg));
   memset(pktinfo, 0, sizeof(in_pktinfo));
   pktinfo->ipi_ifindex = 0;
@@ -113,7 +113,7 @@
 
 void SetV6SelfIpInControlMessage(const QuicIpAddress& self_address,
                                  cmsghdr* cmsg) {
-  DCHECK(self_address.IsIPv6());
+  QUICHE_DCHECK(self_address.IsIPv6());
   in6_pktinfo* pktinfo = reinterpret_cast<in6_pktinfo*>(CMSG_DATA(cmsg));
   memset(pktinfo, 0, sizeof(in6_pktinfo));
   std::string address_string = self_address.ToPackedString();
@@ -212,12 +212,12 @@
   }
 
   if ((*cmsg) == nullptr) {
-    DCHECK_EQ(nullptr, hdr->msg_control);
+    QUICHE_DCHECK_EQ(nullptr, hdr->msg_control);
     memset(control_buffer, 0, control_buffer_len);
     hdr->msg_control = control_buffer;
     (*cmsg) = CMSG_FIRSTHDR(hdr);
   } else {
-    DCHECK_NE(nullptr, hdr->msg_control);
+    QUICHE_DCHECK_NE(nullptr, hdr->msg_control);
     (*cmsg) = CMSG_NXTHDR(hdr, (*cmsg));
   }
 
@@ -237,10 +237,10 @@
                                          int receive_buffer_size,
                                          int send_buffer_size,
                                          bool ipv6_only) {
-  // DCHECK here so the program exits early(before reading packets) in debug
-  // mode. This should have been a static_assert, however it can't be done on
-  // ios/osx because CMSG_SPACE isn't a constant expression there.
-  DCHECK_GE(kDefaultUdpPacketControlBufferSize, kMinCmsgSpaceForRead);
+  // QUICHE_DCHECK here so the program exits early(before reading packets) in
+  // debug mode. This should have been a static_assert, however it can't be done
+  // on ios/osx because CMSG_SPACE isn't a constant expression there.
+  QUICHE_DCHECK_GE(kDefaultUdpPacketControlBufferSize, kMinCmsgSpaceForRead);
   QuicUdpSocketFd fd = CreateNonblockingSocket(address_family);
 
   if (fd == kQuicInvalidSocketFd) {
@@ -383,7 +383,7 @@
   BufferSpan& control_buffer = result->control_buffer;
   QuicUdpPacketInfo* packet_info = &result->packet_info;
 
-  DCHECK_GE(control_buffer.buffer_len, kMinCmsgSpaceForRead);
+  QUICHE_DCHECK_GE(control_buffer.buffer_len, kMinCmsgSpaceForRead);
 
   struct iovec iov = {packet_buffer.buffer, packet_buffer.buffer_len};
   struct sockaddr_storage raw_peer_address;
@@ -488,7 +488,7 @@
     hdr->msg_control = (*results)[i].control_buffer.buffer;
     hdr->msg_controllen = (*results)[i].control_buffer.buffer_len;
 
-    DCHECK_GE(hdr->msg_controllen, kMinCmsgSpaceForRead);
+    QUICHE_DCHECK_GE(hdr->msg_controllen, kMinCmsgSpaceForRead);
   }
   // If MSG_TRUNC is set on Linux, recvmmsg will return the real packet size in
   // |hdrs[i].msg_len| even if packet buffer is too small to receive it.
diff --git a/quic/core/quic_unacked_packet_map.cc b/quic/core/quic_unacked_packet_map.cc
index acb30d5..b6872ff 100644
--- a/quic/core/quic_unacked_packet_map.cc
+++ b/quic/core/quic_unacked_packet_map.cc
@@ -153,7 +153,7 @@
               largest_sent_packet_ >= packet_number)
       << "largest_sent_packet_: " << largest_sent_packet_
       << ", packet_number: " << packet_number;
-  DCHECK_GE(packet_number, least_unacked_ + unacked_packets_size());
+  QUICHE_DCHECK_GE(packet_number, least_unacked_ + unacked_packets_size());
   while (least_unacked_ + unacked_packets_size() < packet_number) {
     unacked_packets_push_back(QuicTransmissionInfo());
     unacked_packets_back().state = NEVER_SENT;
@@ -207,8 +207,8 @@
 
 bool QuicUnackedPacketMap::HasRetransmittableFrames(
     QuicPacketNumber packet_number) const {
-  DCHECK_GE(packet_number, least_unacked_);
-  DCHECK_LT(packet_number, least_unacked_ + unacked_packets_size());
+  QUICHE_DCHECK_GE(packet_number, least_unacked_);
+  QUICHE_DCHECK_LT(packet_number, least_unacked_ + unacked_packets_size());
   return HasRetransmittableFrames(
       unacked_packets_at(packet_number - least_unacked_));
 }
@@ -235,8 +235,8 @@
 
 void QuicUnackedPacketMap::RemoveRetransmittability(
     QuicPacketNumber packet_number) {
-  DCHECK_GE(packet_number, least_unacked_);
-  DCHECK_LT(packet_number, least_unacked_ + unacked_packets_size());
+  QUICHE_DCHECK_GE(packet_number, least_unacked_);
+  QUICHE_DCHECK_LT(packet_number, least_unacked_ + unacked_packets_size());
   QuicTransmissionInfo* info =
       &unacked_packets_at(packet_number - least_unacked_);
   RemoveRetransmittability(info);
@@ -244,7 +244,8 @@
 
 void QuicUnackedPacketMap::IncreaseLargestAcked(
     QuicPacketNumber largest_acked) {
-  DCHECK(!largest_acked_.IsInitialized() || largest_acked_ <= largest_acked);
+  QUICHE_DCHECK(!largest_acked_.IsInitialized() ||
+                largest_acked_ <= largest_acked);
   largest_acked_ = largest_acked;
 }
 
@@ -325,8 +326,8 @@
 }
 
 void QuicUnackedPacketMap::RemoveFromInFlight(QuicPacketNumber packet_number) {
-  DCHECK_GE(packet_number, least_unacked_);
-  DCHECK_LT(packet_number, least_unacked_ + unacked_packets_size());
+  QUICHE_DCHECK_GE(packet_number, least_unacked_);
+  QUICHE_DCHECK_LT(packet_number, least_unacked_ + unacked_packets_size());
   QuicTransmissionInfo* info =
       &unacked_packets_at(packet_number - least_unacked_);
   RemoveFromInFlight(info);
@@ -351,11 +352,12 @@
       // send algorithm).
       // TODO(b/148868195): use NotifyFramesNeutered.
       NotifyFramesAcked(*it, QuicTime::Delta::Zero(), QuicTime::Zero());
-      DCHECK(!HasRetransmittableFrames(*it));
+      QUICHE_DCHECK(!HasRetransmittableFrames(*it));
     }
   }
-  DCHECK(!supports_multiple_packet_number_spaces_ ||
-         last_inflight_packets_sent_time_[INITIAL_DATA] == QuicTime::Zero());
+  QUICHE_DCHECK(!supports_multiple_packet_number_spaces_ ||
+                last_inflight_packets_sent_time_[INITIAL_DATA] ==
+                    QuicTime::Zero());
   return neutered_packets;
 }
 
@@ -377,8 +379,9 @@
       NotifyFramesAcked(*it, QuicTime::Delta::Zero(), QuicTime::Zero());
     }
   }
-  DCHECK(!supports_multiple_packet_number_spaces() ||
-         last_inflight_packets_sent_time_[HANDSHAKE_DATA] == QuicTime::Zero());
+  QUICHE_DCHECK(!supports_multiple_packet_number_spaces() ||
+                last_inflight_packets_sent_time_[HANDSHAKE_DATA] ==
+                    QuicTime::Zero());
   return neutered_packets;
 }
 
@@ -593,13 +596,13 @@
 
 const QuicTransmissionInfo*
 QuicUnackedPacketMap::GetFirstInFlightTransmissionInfo() const {
-  DCHECK(HasInFlightPackets());
+  QUICHE_DCHECK(HasInFlightPackets());
   for (auto it = begin(); it != end(); ++it) {
     if (it->in_flight) {
       return &(*it);
     }
   }
-  DCHECK(false);
+  QUICHE_DCHECK(false);
   return nullptr;
 }
 
diff --git a/quic/core/quic_unacked_packet_map_test.cc b/quic/core/quic_unacked_packet_map_test.cc
index a024fe8..eb6b0a6 100644
--- a/quic/core/quic_unacked_packet_map_test.cc
+++ b/quic/core/quic_unacked_packet_map_test.cc
@@ -136,7 +136,7 @@
   void RetransmitAndSendPacket(uint64_t old_packet_number,
                                uint64_t new_packet_number,
                                TransmissionType transmission_type) {
-    DCHECK(unacked_packets_.HasRetransmittableFrames(
+    QUICHE_DCHECK(unacked_packets_.HasRetransmittableFrames(
         QuicPacketNumber(old_packet_number)));
     QuicTransmissionInfo* info = unacked_packets_.GetMutableTransmissionInfo(
         QuicPacketNumber(old_packet_number));
diff --git a/quic/core/quic_utils.cc b/quic/core/quic_utils.cc
index f044cef..7eff759 100644
--- a/quic/core/quic_utils.cc
+++ b/quic/core/quic_utils.cc
@@ -244,8 +244,8 @@
     iov_offset -= iov[iovnum].iov_len;
     ++iovnum;
   }
-  DCHECK_LE(iovnum, iov_count);
-  DCHECK_LE(iov_offset, iov[iovnum].iov_len);
+  QUICHE_DCHECK_LE(iovnum, iov_count);
+  QUICHE_DCHECK_LE(iov_offset, iov[iovnum].iov_len);
   if (iovnum >= iov_count || buffer_length == 0) {
     return;
   }
@@ -397,7 +397,7 @@
 
 // static
 QuicStreamId QuicUtils::GetHeadersStreamId(QuicTransportVersion version) {
-  DCHECK(!VersionUsesHttp3(version));
+  QUICHE_DCHECK(!VersionUsesHttp3(version));
   return GetFirstBidirectionalStreamId(version, Perspective::IS_CLIENT);
 }
 
@@ -435,7 +435,7 @@
 // static
 bool QuicUtils::IsBidirectionalStreamId(QuicStreamId id,
                                         ParsedQuicVersion version) {
-  DCHECK(version.HasIetfQuicFrames());
+  QUICHE_DCHECK(version.HasIetfQuicFrames());
   return id % 4 < 2;
 }
 
@@ -444,26 +444,26 @@
                                     Perspective perspective,
                                     bool peer_initiated,
                                     ParsedQuicVersion version) {
-  DCHECK(version.HasIetfQuicFrames());
+  QUICHE_DCHECK(version.HasIetfQuicFrames());
   if (IsBidirectionalStreamId(id, version)) {
     return BIDIRECTIONAL;
   }
 
   if (peer_initiated) {
     if (perspective == Perspective::IS_SERVER) {
-      DCHECK_EQ(2u, id % 4);
+      QUICHE_DCHECK_EQ(2u, id % 4);
     } else {
-      DCHECK_EQ(Perspective::IS_CLIENT, perspective);
-      DCHECK_EQ(3u, id % 4);
+      QUICHE_DCHECK_EQ(Perspective::IS_CLIENT, perspective);
+      QUICHE_DCHECK_EQ(3u, id % 4);
     }
     return READ_UNIDIRECTIONAL;
   }
 
   if (perspective == Perspective::IS_SERVER) {
-    DCHECK_EQ(3u, id % 4);
+    QUICHE_DCHECK_EQ(3u, id % 4);
   } else {
-    DCHECK_EQ(Perspective::IS_CLIENT, perspective);
-    DCHECK_EQ(2u, id % 4);
+    QUICHE_DCHECK_EQ(Perspective::IS_CLIENT, perspective);
+    QUICHE_DCHECK_EQ(2u, id % 4);
   }
   return WRITE_UNIDIRECTIONAL;
 }
@@ -665,7 +665,7 @@
     case APPLICATION_DATA:
       return ENCRYPTION_FORWARD_SECURE;
     default:
-      DCHECK(false);
+      QUICHE_DCHECK(false);
       return NUM_ENCRYPTION_LEVELS;
   }
 }
diff --git a/quic/core/quic_utils_test.cc b/quic/core/quic_utils_test.cc
index 9b61f0f..a5249d7 100644
--- a/quic/core/quic_utils_test.cc
+++ b/quic/core/quic_utils_test.cc
@@ -141,7 +141,7 @@
     } else if (i == ALL_INITIAL_RETRANSMISSION) {
       EXPECT_EQ(UNACKABLE, state);
     } else {
-      DCHECK(false)
+      QUICHE_DCHECK(false)
           << "No corresponding packet state according to transmission type: "
           << i;
     }
diff --git a/quic/core/quic_versions.cc b/quic/core/quic_versions.cc
index 5dee155..5320dd9 100644
--- a/quic/core/quic_versions.cc
+++ b/quic/core/quic_versions.cc
@@ -65,121 +65,121 @@
 }  // namespace
 
 bool ParsedQuicVersion::IsKnown() const {
-  DCHECK(ParsedQuicVersionIsValid(handshake_protocol, transport_version))
+  QUICHE_DCHECK(ParsedQuicVersionIsValid(handshake_protocol, transport_version))
       << QuicVersionToString(transport_version) << " "
       << HandshakeProtocolToString(handshake_protocol);
   return transport_version != QUIC_VERSION_UNSUPPORTED;
 }
 
 bool ParsedQuicVersion::KnowsWhichDecrypterToUse() const {
-  DCHECK(IsKnown());
+  QUICHE_DCHECK(IsKnown());
   return transport_version > QUIC_VERSION_46;
 }
 
 bool ParsedQuicVersion::UsesInitialObfuscators() const {
-  DCHECK(IsKnown());
+  QUICHE_DCHECK(IsKnown());
   // Initial obfuscators were added in version 50.
   return transport_version > QUIC_VERSION_46;
 }
 
 bool ParsedQuicVersion::AllowsLowFlowControlLimits() const {
-  DCHECK(IsKnown());
+  QUICHE_DCHECK(IsKnown());
   // Low flow-control limits are used for all IETF versions.
   return UsesHttp3();
 }
 
 bool ParsedQuicVersion::HasHeaderProtection() const {
-  DCHECK(IsKnown());
+  QUICHE_DCHECK(IsKnown());
   // Header protection was added in version 50.
   return transport_version > QUIC_VERSION_46;
 }
 
 bool ParsedQuicVersion::SupportsRetry() const {
-  DCHECK(IsKnown());
+  QUICHE_DCHECK(IsKnown());
   // Retry was added in version 47.
   return transport_version > QUIC_VERSION_46;
 }
 
 bool ParsedQuicVersion::SendsVariableLengthPacketNumberInLongHeader() const {
-  DCHECK(IsKnown());
+  QUICHE_DCHECK(IsKnown());
   return transport_version > QUIC_VERSION_46;
 }
 
 bool ParsedQuicVersion::AllowsVariableLengthConnectionIds() const {
-  DCHECK(IsKnown());
+  QUICHE_DCHECK(IsKnown());
   return VersionAllowsVariableLengthConnectionIds(transport_version);
 }
 
 bool ParsedQuicVersion::SupportsClientConnectionIds() const {
-  DCHECK(IsKnown());
+  QUICHE_DCHECK(IsKnown());
   // Client connection IDs were added in version 49.
   return transport_version > QUIC_VERSION_46;
 }
 
 bool ParsedQuicVersion::HasLengthPrefixedConnectionIds() const {
-  DCHECK(IsKnown());
+  QUICHE_DCHECK(IsKnown());
   return VersionHasLengthPrefixedConnectionIds(transport_version);
 }
 
 bool ParsedQuicVersion::SupportsAntiAmplificationLimit() const {
-  DCHECK(IsKnown());
+  QUICHE_DCHECK(IsKnown());
   // The anti-amplification limit is used for all IETF versions.
   return UsesHttp3();
 }
 
 bool ParsedQuicVersion::CanSendCoalescedPackets() const {
-  DCHECK(IsKnown());
+  QUICHE_DCHECK(IsKnown());
   return HasLongHeaderLengths() && UsesTls();
 }
 
 bool ParsedQuicVersion::SupportsGoogleAltSvcFormat() const {
-  DCHECK(IsKnown());
+  QUICHE_DCHECK(IsKnown());
   return VersionSupportsGoogleAltSvcFormat(transport_version);
 }
 
 bool ParsedQuicVersion::HasIetfInvariantHeader() const {
-  DCHECK(IsKnown());
+  QUICHE_DCHECK(IsKnown());
   return VersionHasIetfInvariantHeader(transport_version);
 }
 
 bool ParsedQuicVersion::SupportsMessageFrames() const {
-  DCHECK(IsKnown());
+  QUICHE_DCHECK(IsKnown());
   return VersionSupportsMessageFrames(transport_version);
 }
 
 bool ParsedQuicVersion::UsesHttp3() const {
-  DCHECK(IsKnown());
+  QUICHE_DCHECK(IsKnown());
   return VersionUsesHttp3(transport_version);
 }
 
 bool ParsedQuicVersion::HasLongHeaderLengths() const {
-  DCHECK(IsKnown());
+  QUICHE_DCHECK(IsKnown());
   return QuicVersionHasLongHeaderLengths(transport_version);
 }
 
 bool ParsedQuicVersion::UsesCryptoFrames() const {
-  DCHECK(IsKnown());
+  QUICHE_DCHECK(IsKnown());
   return QuicVersionUsesCryptoFrames(transport_version);
 }
 
 bool ParsedQuicVersion::HasIetfQuicFrames() const {
-  DCHECK(IsKnown());
+  QUICHE_DCHECK(IsKnown());
   return VersionHasIetfQuicFrames(transport_version);
 }
 
 bool ParsedQuicVersion::UsesTls() const {
-  DCHECK(IsKnown());
+  QUICHE_DCHECK(IsKnown());
   return handshake_protocol == PROTOCOL_TLS1_3;
 }
 
 bool ParsedQuicVersion::UsesQuicCrypto() const {
-  DCHECK(IsKnown());
+  QUICHE_DCHECK(IsKnown());
   return handshake_protocol == PROTOCOL_QUIC_CRYPTO;
 }
 
 bool VersionHasLengthPrefixedConnectionIds(
     QuicTransportVersion transport_version) {
-  DCHECK(transport_version != QUIC_VERSION_UNSUPPORTED);
+  QUICHE_DCHECK(transport_version != QUIC_VERSION_UNSUPPORTED);
   // Length-prefixed connection IDs were added in version 49.
   return transport_version > QUIC_VERSION_46;
 }
@@ -479,7 +479,7 @@
     return "0";
   }
   if (version == ParsedQuicVersion::Draft29()) {
-    DCHECK(version.UsesHttp3());
+    QUICHE_DCHECK(version.UsesHttp3());
     return "draft29";
   }
 
@@ -522,7 +522,7 @@
 
 bool VersionAllowsVariableLengthConnectionIds(
     QuicTransportVersion transport_version) {
-  DCHECK_NE(transport_version, QUIC_VERSION_UNSUPPORTED);
+  QUICHE_DCHECK_NE(transport_version, QUIC_VERSION_UNSUPPORTED);
   return transport_version > QUIC_VERSION_46;
 }
 
diff --git a/quic/core/quic_write_blocked_list.cc b/quic/core/quic_write_blocked_list.cc
index 02b72e3..084241d 100644
--- a/quic/core/quic_write_blocked_list.cc
+++ b/quic/core/quic_write_blocked_list.cc
@@ -66,9 +66,9 @@
     QuicStreamId stream_id,
     bool is_static_stream,
     const spdy::SpdyStreamPrecedence& precedence) {
-  DCHECK(!priority_write_scheduler_.StreamRegistered(stream_id))
+  QUICHE_DCHECK(!priority_write_scheduler_.StreamRegistered(stream_id))
       << "stream " << stream_id << " already registered";
-  DCHECK(precedence.is_spdy3_priority());
+  QUICHE_DCHECK(precedence.is_spdy3_priority());
   if (is_static_stream) {
     static_stream_collection_.Register(stream_id);
     return;
@@ -89,8 +89,8 @@
 void QuicWriteBlockedList::UpdateStreamPriority(
     QuicStreamId stream_id,
     const spdy::SpdyStreamPrecedence& new_precedence) {
-  DCHECK(!static_stream_collection_.IsRegistered(stream_id));
-  DCHECK(new_precedence.is_spdy3_priority());
+  QUICHE_DCHECK(!static_stream_collection_.IsRegistered(stream_id));
+  QUICHE_DCHECK(new_precedence.is_spdy3_priority());
   priority_write_scheduler_.UpdateStreamPrecedence(stream_id, new_precedence);
 }
 
@@ -126,7 +126,7 @@
 }
 
 void QuicWriteBlockedList::StaticStreamCollection::Register(QuicStreamId id) {
-  DCHECK(!IsRegistered(id));
+  QUICHE_DCHECK(!IsRegistered(id));
   streams_.push_back({id, false});
 }
 
@@ -150,7 +150,7 @@
       return;
     }
   }
-  DCHECK(false) << "Erasing a non-exist stream with id " << id;
+  QUICHE_DCHECK(false) << "Erasing a non-exist stream with id " << id;
 }
 
 bool QuicWriteBlockedList::StaticStreamCollection::SetBlocked(QuicStreamId id) {
diff --git a/quic/core/tls_chlo_extractor.cc b/quic/core/tls_chlo_extractor.cc
index 89aaea8..e03d7db 100644
--- a/quic/core/tls_chlo_extractor.cc
+++ b/quic/core/tls_chlo_extractor.cc
@@ -43,7 +43,7 @@
     std::pair<SSL_CTX*, int> shared_handles = GetSharedSslHandles();
     int ex_data_index = shared_handles.second;
     const int rv = SSL_set_ex_data(ssl_.get(), ex_data_index, this);
-    CHECK_EQ(rv, 1) << "Internal allocation failure in SSL_set_ex_data";
+    QUICHE_CHECK_EQ(rv, 1) << "Internal allocation failure in SSL_set_ex_data";
   }
   state_ = other.state_;
   error_details_ = std::move(other.error_details_);
@@ -355,7 +355,7 @@
 
   ssl_ = bssl::UniquePtr<SSL>(SSL_new(ssl_ctx));
   const int rv = SSL_set_ex_data(ssl_.get(), ex_data_index, this);
-  CHECK_EQ(rv, 1) << "Internal allocation failure in SSL_set_ex_data";
+  QUICHE_CHECK_EQ(rv, 1) << "Internal allocation failure in SSL_set_ex_data";
   SSL_set_accept_state(ssl_.get());
 }
 
diff --git a/quic/core/tls_client_handshaker.cc b/quic/core/tls_client_handshaker.cc
index e82e94d..b878ab8 100644
--- a/quic/core/tls_client_handshaker.cc
+++ b/quic/core/tls_client_handshaker.cc
@@ -223,7 +223,7 @@
           session()->connection()->version(), Perspective::IS_SERVER,
           param_bytes, param_bytes_len, received_transport_params_.get(),
           &parse_error_details)) {
-    DCHECK(!parse_error_details.empty());
+    QUICHE_DCHECK(!parse_error_details.empty());
     *error_details =
         "Unable to parse server's transport parameters: " + parse_error_details;
     return false;
@@ -256,7 +256,7 @@
       handshaker_delegate()->ProcessTransportParameters(
           *received_transport_params_, /* is_resumption = */ false,
           error_details) != QUIC_NO_ERROR) {
-    DCHECK(!error_details->empty());
+    QUICHE_DCHECK(!error_details->empty());
     return false;
   }
 
@@ -395,7 +395,7 @@
 }
 
 void TlsClientHandshaker::OnHandshakeConfirmed() {
-  DCHECK(one_rtt_keys_available());
+  QUICHE_DCHECK(one_rtt_keys_available());
   if (state_ >= HANDSHAKE_CONFIRMED) {
     return;
   }
@@ -457,7 +457,7 @@
 
   std::string error_details;
   if (!ProcessTransportParameters(&error_details)) {
-    DCHECK(!error_details.empty());
+    QUICHE_DCHECK(!error_details.empty());
     CloseConnection(QUIC_HANDSHAKE_FAILED, error_details);
     return;
   }
@@ -528,7 +528,7 @@
 
 void TlsClientHandshaker::HandleZeroRttReject() {
   QUIC_LOG(INFO) << "0-RTT handshake attempted but was rejected by the server";
-  DCHECK(session_cache_);
+  QUICHE_DCHECK(session_cache_);
   // Disable encrytion to block outgoing data until 1-RTT keys are available.
   encryption_established_ = false;
   handshaker_delegate()->OnZeroRttRejected(EarlyDataReason());
@@ -569,7 +569,7 @@
 
 void TlsClientHandshaker::SetServerApplicationStateForResumption(
     std::unique_ptr<ApplicationState> application_state) {
-  DCHECK(one_rtt_keys_available());
+  QUICHE_DCHECK(one_rtt_keys_available());
   received_application_state_ = std::move(application_state);
   // At least one tls session is cached before application state is received. So
   // insert now.
diff --git a/quic/core/tls_handshaker.cc b/quic/core/tls_handshaker.cc
index d0079c5..133c85c 100644
--- a/quic/core/tls_handshaker.cc
+++ b/quic/core/tls_handshaker.cc
@@ -114,7 +114,7 @@
 
 void TlsHandshaker::CloseConnection(QuicErrorCode error,
                                     const std::string& reason_phrase) {
-  DCHECK(!reason_phrase.empty());
+  QUICHE_DCHECK(!reason_phrase.empty());
   stream()->OnUnrecoverableError(error, reason_phrase);
   is_connection_closed_ = true;
 }
@@ -122,7 +122,7 @@
 void TlsHandshaker::CloseConnection(QuicErrorCode error,
                                     QuicIetfTransportErrorCodes ietf_error,
                                     const std::string& reason_phrase) {
-  DCHECK(!reason_phrase.empty());
+  QUICHE_DCHECK(!reason_phrase.empty());
   stream()->OnUnrecoverableError(error, ietf_error, reason_phrase);
   is_connection_closed_ = true;
 }
@@ -212,7 +212,7 @@
       absl::string_view(reinterpret_cast<char*>(header_protection_key.data()),
                         header_protection_key.size()));
   if (level == ENCRYPTION_FORWARD_SECURE) {
-    DCHECK(latest_write_secret_.empty());
+    QUICHE_DCHECK(latest_write_secret_.empty());
     latest_write_secret_ = write_secret;
     one_rtt_write_header_protection_key_ = header_protection_key;
   }
@@ -235,7 +235,7 @@
       absl::string_view(reinterpret_cast<char*>(header_protection_key.data()),
                         header_protection_key.size()));
   if (level == ENCRYPTION_FORWARD_SECURE) {
-    DCHECK(latest_read_secret_.empty());
+    QUICHE_DCHECK(latest_read_secret_.empty());
     latest_read_secret_ = read_secret;
     one_rtt_read_header_protection_key_ = header_protection_key;
   }
diff --git a/quic/core/tls_server_handshaker.cc b/quic/core/tls_server_handshaker.cc
index 48710c1..02fceed 100644
--- a/quic/core/tls_server_handshaker.cc
+++ b/quic/core/tls_server_handshaker.cc
@@ -111,7 +111,7 @@
 TlsServerHandshaker::SignatureCallback::SignatureCallback(
     TlsServerHandshaker* handshaker)
     : handshaker_(handshaker) {
-  DCHECK(!handshaker_->use_proof_source_handle_);
+  QUICHE_DCHECK(!handshaker_->use_proof_source_handle_);
 }
 
 void TlsServerHandshaker::SignatureCallback::Run(
@@ -169,7 +169,7 @@
 }
 
 void TlsServerHandshaker::DecryptCallback::Cancel() {
-  DCHECK(handshaker_);
+  QUICHE_DCHECK(handshaker_);
   handshaker_ = nullptr;
 }
 
@@ -183,8 +183,8 @@
       crypto_negotiated_params_(new QuicCryptoNegotiatedParameters),
       tls_connection_(crypto_config->ssl_ctx(), this),
       crypto_config_(crypto_config) {
-  DCHECK_EQ(PROTOCOL_TLS1_3,
-            session->connection()->version().handshake_protocol);
+  QUICHE_DCHECK_EQ(PROTOCOL_TLS1_3,
+                   session->connection()->version().handshake_protocol);
 
   // Configure the SSL to be a server.
   SSL_set_accept_state(ssl());
@@ -214,7 +214,7 @@
 
 std::unique_ptr<ProofSourceHandle>
 TlsServerHandshaker::MaybeCreateProofSourceHandle() {
-  DCHECK(use_proof_source_handle_);
+  QUICHE_DCHECK(use_proof_source_handle_);
   return std::make_unique<DefaultProofSourceHandle>(this, proof_source_);
 }
 
@@ -263,11 +263,11 @@
 }
 
 void TlsServerHandshaker::OnHandshakeDoneReceived() {
-  DCHECK(false);
+  QUICHE_DCHECK(false);
 }
 
 void TlsServerHandshaker::OnNewTokenReceived(absl::string_view /*token*/) {
-  DCHECK(false);
+  QUICHE_DCHECK(false);
 }
 
 std::string TlsServerHandshaker::GetAddressToken() const {
@@ -388,7 +388,7 @@
       params_bytes_len = 0;
     }
   } else {
-    DCHECK_EQ(client_hello, nullptr);
+    QUICHE_DCHECK_EQ(client_hello, nullptr);
     SSL_get_peer_quic_transport_params(ssl(), &client_params_bytes,
                                        &params_bytes_len);
   }
@@ -402,7 +402,7 @@
                                 Perspective::IS_CLIENT, client_params_bytes,
                                 params_bytes_len, &client_params,
                                 &parse_error_details)) {
-    DCHECK(!parse_error_details.empty());
+    QUICHE_DCHECK(!parse_error_details.empty());
     *error_details =
         "Unable to parse client's transport parameters: " + parse_error_details;
     return false;
@@ -451,7 +451,7 @@
 TlsServerHandshaker::SetTransportParametersResult
 TlsServerHandshaker::SetTransportParameters() {
   SetTransportParametersResult result;
-  DCHECK(!result.success);
+  QUICHE_DCHECK(!result.success);
 
   TransportParameters server_params;
   server_params.perspective = Perspective::IS_SERVER;
@@ -580,7 +580,7 @@
     size_t max_out,
     uint16_t sig_alg,
     absl::string_view in) {
-  DCHECK_EQ(expected_ssl_error(), SSL_ERROR_WANT_READ);
+  QUICHE_DCHECK_EQ(expected_ssl_error(), SSL_ERROR_WANT_READ);
   if (use_proof_source_handle_) {
     QUIC_RELOADABLE_FLAG_COUNT_N(quic_tls_use_per_handshaker_proof_source, 2,
                                  3);
@@ -631,7 +631,7 @@
   QUIC_DVLOG(1) << "OnComputeSignatureDone. ok:" << ok
                 << ", is_sync:" << is_sync
                 << ", len(signature):" << signature.size();
-  DCHECK(use_proof_source_handle_);
+  QUICHE_DCHECK(use_proof_source_handle_);
   if (ok) {
     cert_verify_sig_ = std::move(signature);
     proof_source_details_ = std::move(details);
@@ -639,7 +639,8 @@
   const int last_expected_ssl_error = expected_ssl_error();
   set_expected_ssl_error(SSL_ERROR_WANT_READ);
   if (!is_sync) {
-    DCHECK_EQ(last_expected_ssl_error, SSL_ERROR_WANT_PRIVATE_KEY_OPERATION);
+    QUICHE_DCHECK_EQ(last_expected_ssl_error,
+                     SSL_ERROR_WANT_PRIVATE_KEY_OPERATION);
     AdvanceHandshakeFromCallback();
   }
 }
@@ -650,7 +651,7 @@
 }
 
 size_t TlsServerHandshaker::SessionTicketMaxOverhead() {
-  DCHECK(proof_source_->GetTicketCrypter());
+  QUICHE_DCHECK(proof_source_->GetTicketCrypter());
   return proof_source_->GetTicketCrypter()->MaxOverhead();
 }
 
@@ -658,7 +659,7 @@
                                            size_t* out_len,
                                            size_t max_out_len,
                                            absl::string_view in) {
-  DCHECK(proof_source_->GetTicketCrypter());
+  QUICHE_DCHECK(proof_source_->GetTicketCrypter());
   std::vector<uint8_t> ticket = proof_source_->GetTicketCrypter()->Encrypt(in);
   if (max_out_len < ticket.size()) {
     QUIC_BUG
@@ -677,7 +678,7 @@
     size_t* out_len,
     size_t max_out_len,
     absl::string_view in) {
-  DCHECK(proof_source_->GetTicketCrypter());
+  QUICHE_DCHECK(proof_source_->GetTicketCrypter());
 
   if (!ticket_decryption_callback_) {
     ticket_received_ = true;
@@ -788,7 +789,7 @@
         set_transport_params_result.quic_transport_params,
         set_transport_params_result.early_data_context);
 
-    DCHECK_EQ(status, select_cert_status().value());
+    QUICHE_DCHECK_EQ(status, select_cert_status().value());
 
     if (status == QUIC_PENDING) {
       set_expected_ssl_error(SSL_ERROR_PENDING_CERTIFICATE);
@@ -838,7 +839,7 @@
     const ProofSource::Chain* chain) {
   QUIC_DVLOG(1) << "OnSelectCertificateDone. ok:" << ok
                 << ", is_sync:" << is_sync;
-  DCHECK(use_proof_source_handle_);
+  QUICHE_DCHECK(use_proof_source_handle_);
 
   select_cert_status_ = QUIC_FAILURE;
   if (ok) {
@@ -852,7 +853,7 @@
   const int last_expected_ssl_error = expected_ssl_error();
   set_expected_ssl_error(SSL_ERROR_WANT_READ);
   if (!is_sync) {
-    DCHECK_EQ(last_expected_ssl_error, SSL_ERROR_PENDING_CERTIFICATE);
+    QUICHE_DCHECK_EQ(last_expected_ssl_error, SSL_ERROR_PENDING_CERTIFICATE);
     AdvanceHandshakeFromCallback();
   }
 }
diff --git a/quic/core/tls_server_handshaker_test.cc b/quic/core/tls_server_handshaker_test.cc
index e2cb745..cf1bbc0 100644
--- a/quic/core/tls_server_handshaker_test.cc
+++ b/quic/core/tls_server_handshaker_test.cc
@@ -125,8 +125,8 @@
                                                                  crypto_config);
     }
 
-    CHECK(false) << "Unsupported handshake protocol: "
-                 << connection()->version().handshake_protocol;
+    QUICHE_CHECK(false) << "Unsupported handshake protocol: "
+                        << connection()->version().handshake_protocol;
     return nullptr;
   }
 };
@@ -191,7 +191,7 @@
     // strike register worries that we've just overflowed a uint32_t time.
     server_connection_->AdvanceTime(QuicTime::Delta::FromSeconds(100000));
 
-    CHECK(server_session);
+    QUICHE_CHECK(server_session);
     server_session_.reset(server_session);
   }
 
@@ -226,7 +226,7 @@
         helpers_.back().get(), alarm_factories_.back().get(),
         server_crypto_config_.get(), &server_compressed_certs_cache_,
         &server_connection_, &server_session);
-    CHECK(server_session);
+    QUICHE_CHECK(server_session);
     server_session_.reset(server_session);
     server_handshaker_ = nullptr;
     EXPECT_CALL(*server_session_->helper(), CanAcceptClientHello(_, _, _, _, _))
@@ -264,7 +264,7 @@
         AlpnForVersion(client_connection_->version());
     ON_CALL(*client_session, GetAlpnsToOffer())
         .WillByDefault(Return(std::vector<std::string>({default_alpn})));
-    CHECK(client_session);
+    QUICHE_CHECK(client_session);
     client_session_.reset(client_session);
     moved_messages_counts_ = {0, 0};
   }
@@ -282,8 +282,8 @@
   // Performs a single round of handshake message-exchange between the
   // client and server.
   void AdvanceHandshakeWithFakeClient() {
-    CHECK(server_connection_);
-    CHECK(client_session_ != nullptr);
+    QUICHE_CHECK(server_connection_);
+    QUICHE_CHECK(client_session_ != nullptr);
 
     EXPECT_CALL(*client_session_, OnProofValid(_)).Times(testing::AnyNumber());
     EXPECT_CALL(*client_session_, OnProofVerifyDetailsAvailable(_))
diff --git a/quic/core/uber_received_packet_manager.cc b/quic/core/uber_received_packet_manager.cc
index 432c357..7235edf 100644
--- a/quic/core/uber_received_packet_manager.cc
+++ b/quic/core/uber_received_packet_manager.cc
@@ -189,7 +189,7 @@
 
 QuicPacketNumber UberReceivedPacketManager::peer_least_packet_awaiting_ack()
     const {
-  DCHECK(!supports_multiple_packet_number_spaces_);
+  QUICHE_DCHECK(!supports_multiple_packet_number_spaces_);
   return received_packet_managers_[0].peer_least_packet_awaiting_ack();
 }
 
@@ -211,13 +211,13 @@
 }
 
 const QuicAckFrame& UberReceivedPacketManager::ack_frame() const {
-  DCHECK(!supports_multiple_packet_number_spaces_);
+  QUICHE_DCHECK(!supports_multiple_packet_number_spaces_);
   return received_packet_managers_[0].ack_frame();
 }
 
 const QuicAckFrame& UberReceivedPacketManager::GetAckFrame(
     PacketNumberSpace packet_number_space) const {
-  DCHECK(supports_multiple_packet_number_spaces_);
+  QUICHE_DCHECK(supports_multiple_packet_number_spaces_);
   return received_packet_managers_[packet_number_space].ack_frame();
 }
 
diff --git a/quic/core/uber_received_packet_manager_test.cc b/quic/core/uber_received_packet_manager_test.cc
index 0f8959a..05e4a33 100644
--- a/quic/core/uber_received_packet_manager_test.cc
+++ b/quic/core/uber_received_packet_manager_test.cc
@@ -89,17 +89,17 @@
   }
 
   void CheckAckTimeout(QuicTime time) {
-    DCHECK(HasPendingAck());
+    QUICHE_DCHECK(HasPendingAck());
     if (!manager_->supports_multiple_packet_number_spaces()) {
-      DCHECK(manager_->GetAckTimeout(APPLICATION_DATA) == time);
+      QUICHE_DCHECK(manager_->GetAckTimeout(APPLICATION_DATA) == time);
       if (time <= clock_.ApproximateNow()) {
         // ACK timeout expires, send an ACK.
         manager_->ResetAckStates(ENCRYPTION_FORWARD_SECURE);
-        DCHECK(!HasPendingAck());
+        QUICHE_DCHECK(!HasPendingAck());
       }
       return;
     }
-    DCHECK(manager_->GetEarliestAckTimeout() == time);
+    QUICHE_DCHECK(manager_->GetEarliestAckTimeout() == time);
     // Send all expired ACKs.
     for (int8_t i = INITIAL_DATA; i < NUM_PACKET_NUMBER_SPACES; ++i) {
       const QuicTime ack_timeout =
diff --git a/quic/masque/masque_client_session.cc b/quic/masque/masque_client_session.cc
index cb56346..eeedccf 100644
--- a/quic/masque/masque_client_session.cc
+++ b/quic/masque/masque_client_session.cc
@@ -74,10 +74,11 @@
     EncapsulatedClientSession* encapsulated_client_session) {
   QUIC_DLOG(INFO) << "Registering " << client_connection_id
                   << " to encapsulated client";
-  DCHECK(client_connection_id_registrations_.find(client_connection_id) ==
-             client_connection_id_registrations_.end() ||
-         client_connection_id_registrations_[client_connection_id] ==
-             encapsulated_client_session);
+  QUICHE_DCHECK(
+      client_connection_id_registrations_.find(client_connection_id) ==
+          client_connection_id_registrations_.end() ||
+      client_connection_id_registrations_[client_connection_id] ==
+          encapsulated_client_session);
   client_connection_id_registrations_[client_connection_id] =
       encapsulated_client_session;
 }
diff --git a/quic/masque/masque_compression_engine.cc b/quic/masque/masque_compression_engine.cc
index abf0636..af6758a 100644
--- a/quic/masque/masque_compression_engine.cc
+++ b/quic/masque/masque_compression_engine.cc
@@ -63,7 +63,7 @@
     }
 
     flow_id = kv.first;
-    DCHECK_NE(flow_id, kFlowId0);
+    QUICHE_DCHECK_NE(flow_id, kFlowId0);
     *validated = context.validated;
     QUIC_DVLOG(1) << "Compressing using " << (*validated ? "" : "un")
                   << "validated flow_id " << flow_id << " to "
@@ -133,9 +133,9 @@
       return false;
     }
     QuicIpAddress peer_ip = server_address.host();
-    DCHECK(peer_ip.IsInitialized());
+    QUICHE_DCHECK(peer_ip.IsInitialized());
     std::string peer_ip_bytes = peer_ip.ToPackedString();
-    DCHECK(!peer_ip_bytes.empty());
+    QUICHE_DCHECK(!peer_ip_bytes.empty());
     uint8_t address_id;
     if (peer_ip.address_family() == IpAddressFamily::IP_V6) {
       address_id = MasqueAddressFamilyIPv6;
@@ -229,7 +229,7 @@
   QUIC_DVLOG(2) << "Compressing client " << client_connection_id << " server "
                 << server_connection_id << "\n"
                 << quiche::QuicheTextUtils::HexDump(packet);
-  DCHECK(server_address.IsInitialized());
+  QUICHE_DCHECK(server_address.IsInitialized());
   if (packet.empty()) {
     QUIC_BUG << "Tried to send empty packet";
     return;
diff --git a/quic/masque/masque_encapsulated_epoll_client.cc b/quic/masque/masque_encapsulated_epoll_client.cc
index 1b1723c..8fb938d 100644
--- a/quic/masque/masque_encapsulated_epoll_client.cc
+++ b/quic/masque/masque_encapsulated_epoll_client.cc
@@ -24,7 +24,7 @@
                           const QuicIpAddress& /*self_address*/,
                           const QuicSocketAddress& peer_address,
                           PerPacketOptions* /*options*/) override {
-    DCHECK(peer_address.IsInitialized());
+    QUICHE_DCHECK(peer_address.IsInitialized());
     QUIC_DVLOG(1) << "MasquePacketWriter trying to write " << buf_len
                   << " bytes to " << peer_address;
     absl::string_view packet(buffer, buf_len);
diff --git a/quic/masque/masque_utils.cc b/quic/masque/masque_utils.cc
index f8a7a39..f4f77f5 100644
--- a/quic/masque/masque_utils.cc
+++ b/quic/masque/masque_utils.cc
@@ -16,7 +16,7 @@
       break;
     }
   }
-  CHECK(version.IsKnown());
+  QUICHE_CHECK(version.IsKnown());
   QuicEnableVersion(version);
   return {version};
 }
diff --git a/quic/platform/api/quic_ip_address.cc b/quic/platform/api/quic_ip_address.cc
index 42f528f..95877f4 100644
--- a/quic/platform/api/quic_ip_address.cc
+++ b/quic/platform/api/quic_ip_address.cc
@@ -10,6 +10,7 @@
 #include <string>
 
 #include "quic/platform/api/quic_bug_tracker.h"
+#include "quic/platform/api/quic_logging.h"
 
 namespace quic {
 
@@ -217,18 +218,18 @@
   if (bits_to_check == 0) {
     return true;
   }
-  DCHECK_LT(static_cast<size_t>(bytes_to_check), sizeof(address_.bytes));
+  QUICHE_DCHECK_LT(static_cast<size_t>(bytes_to_check), sizeof(address_.bytes));
   int mask = (~0u) << (8u - bits_to_check);
   return (lhs[bytes_to_check] & mask) == (rhs[bytes_to_check] & mask);
 }
 
 in_addr QuicIpAddress::GetIPv4() const {
-  DCHECK(IsIPv4());
+  QUICHE_DCHECK(IsIPv4());
   return address_.v4;
 }
 
 in6_addr QuicIpAddress::GetIPv6() const {
-  DCHECK(IsIPv6());
+  QUICHE_DCHECK(IsIPv6());
   return address_.v6;
 }
 
diff --git a/quic/qbone/bonnet/icmp_reachable_test.cc b/quic/qbone/bonnet/icmp_reachable_test.cc
index 693018d..ae246b7 100644
--- a/quic/qbone/bonnet/icmp_reachable_test.cc
+++ b/quic/qbone/bonnet/icmp_reachable_test.cc
@@ -27,7 +27,7 @@
 constexpr int kFakeWriteFd = 0;
 
 icmp6_hdr GetHeaderFromPacket(const void* buf, size_t len) {
-  CHECK_GE(len, sizeof(ip6_hdr) + sizeof(icmp6_hdr));
+  QUICHE_CHECK_GE(len, sizeof(ip6_hdr) + sizeof(icmp6_hdr));
 
   auto* buffer = reinterpret_cast<const char*>(buf);
   return *reinterpret_cast<const icmp6_hdr*>(&buffer[sizeof(ip6_hdr)]);
@@ -80,11 +80,11 @@
 class IcmpReachableTest : public QuicTest {
  public:
   IcmpReachableTest() {
-    CHECK(source_.FromString(kSourceAddress));
-    CHECK(destination_.FromString(kDestinationAddress));
+    QUICHE_CHECK(source_.FromString(kSourceAddress));
+    QUICHE_CHECK(destination_.FromString(kDestinationAddress));
 
     int pipe_fds[2];
-    CHECK(pipe(pipe_fds) >= 0) << "pipe() failed";
+    QUICHE_CHECK(pipe(pipe_fds) >= 0) << "pipe() failed";
 
     read_fd_ = pipe_fds[0];
     read_src_fd_ = pipe_fds[1];
diff --git a/quic/qbone/platform/netlink_test.cc b/quic/qbone/platform/netlink_test.cc
index adb329c..084532f 100644
--- a/quic/qbone/platform/netlink_test.cc
+++ b/quic/qbone/platform/netlink_test.cc
@@ -74,7 +74,7 @@
             send_callback(buf.c_str(), buf.size());
           }
 
-          CHECK_EQ(seq, -1);
+          QUICHE_CHECK_EQ(seq, -1);
           seq = netlink_message->nlmsg_seq;
           return buf.size();
         }));
@@ -90,7 +90,7 @@
           nl_addr->nl_groups = 0;  // no multicast
 
           int ret = recv_callback(reply_packet_, sizeof(reply_packet_), seq);
-          CHECK_LE(ret, sizeof(reply_packet_));
+          QUICHE_CHECK_LE(ret, sizeof(reply_packet_));
           return ret;
         }));
 
@@ -185,7 +185,7 @@
                      unsigned char flags,
                      unsigned char scope,
                      QuicIpAddress ip) {
-  CHECK(ip.IsInitialized());
+  QUICHE_CHECK(ip.IsInitialized());
   unsigned char family;
   switch (ip.address_family()) {
     case IpAddressFamily::IP_V4:
diff --git a/quic/qbone/platform/rtnetlink_message_test.cc b/quic/qbone/platform/rtnetlink_message_test.cc
index 00b0caa..f2d9d92 100644
--- a/quic/qbone/platform/rtnetlink_message_test.cc
+++ b/quic/qbone/platform/rtnetlink_message_test.cc
@@ -124,7 +124,7 @@
                                      seq, pid, &interface_address_header);
 
   QuicIpAddress ip;
-  CHECK(ip.FromString("10.0.100.3"));
+  QUICHE_CHECK(ip.FromString("10.0.100.3"));
   message.AppendAttribute(IFA_ADDRESS, ip.ToPackedString().c_str(),
                           ip.ToPackedString().size());
 
@@ -181,7 +181,7 @@
                                    pid, &route_message_header);
 
   QuicIpAddress preferred_source;
-  CHECK(preferred_source.FromString("ff80::1"));
+  QUICHE_CHECK(preferred_source.FromString("ff80::1"));
   message.AppendAttribute(RTA_PREFSRC,
                           preferred_source.ToPackedString().c_str(),
                           preferred_source.ToPackedString().size());
diff --git a/quic/qbone/qbone_client_session.cc b/quic/qbone/qbone_client_session.cc
index c2f3ef3..f3b6290 100644
--- a/quic/qbone/qbone_client_session.cc
+++ b/quic/qbone/qbone_client_session.cc
@@ -42,7 +42,8 @@
       ->CryptoConnect();
   // Register the reserved control stream.
   QuicStreamId next_id = GetNextOutgoingBidirectionalStreamId();
-  DCHECK_EQ(next_id, QboneConstants::GetControlStreamId(transport_version()));
+  QUICHE_DCHECK_EQ(next_id,
+                   QboneConstants::GetControlStreamId(transport_version()));
   auto control_stream =
       std::make_unique<QboneClientControlStream>(this, handler_);
   control_stream_ = control_stream.get();
diff --git a/quic/qbone/qbone_client_test.cc b/quic/qbone/qbone_client_test.cc
index 28d7bbc..75a3a1e 100644
--- a/quic/qbone/qbone_client_test.cc
+++ b/quic/qbone/qbone_client_test.cc
@@ -128,7 +128,7 @@
       const QuicSocketAddress& peer_address,
       absl::string_view alpn,
       const quic::ParsedQuicVersion& version) override {
-    CHECK_EQ(alpn, "qbone");
+    QUICHE_CHECK_EQ(alpn, "qbone");
     QuicConnection* connection = new QuicConnection(
         id, self_address, peer_address, helper(), alarm_factory(), writer(),
         /* owns_writer= */ false, Perspective::IS_SERVER,
diff --git a/quic/qbone/qbone_packet_processor.cc b/quic/qbone/qbone_packet_processor.cc
index 8f908db..c993557 100644
--- a/quic/qbone/qbone_packet_processor.cc
+++ b/quic/qbone/qbone_packet_processor.cc
@@ -38,12 +38,12 @@
       stats_(stats),
       filter_(new Filter) {
   memcpy(self_ip_.s6_addr, self_ip.ToPackedString().data(), kIPv6AddressSize);
-  DCHECK_LE(client_ip_subnet_length, kIPv6AddressSize * 8);
+  QUICHE_DCHECK_LE(client_ip_subnet_length, kIPv6AddressSize * 8);
   client_ip_subnet_length_ = client_ip_subnet_length;
 
-  DCHECK(IpAddressFamily::IP_V6 == self_ip.address_family());
-  DCHECK(IpAddressFamily::IP_V6 == client_ip.address_family());
-  DCHECK(self_ip != kInvalidIpAddress);
+  QUICHE_DCHECK(IpAddressFamily::IP_V6 == self_ip.address_family());
+  QUICHE_DCHECK(IpAddressFamily::IP_V6 == client_ip.address_family());
+  QUICHE_DCHECK(self_ip != kInvalidIpAddress);
 }
 
 QbonePacketProcessor::OutputInterface::~OutputInterface() {}
@@ -201,7 +201,7 @@
       address_reject_code = ICMP6_DST_UNREACH_NOROUTE;
       break;
   }
-  DCHECK(ip_parse_result);
+  QUICHE_DCHECK(ip_parse_result);
   if (!client_ip_.InSameSubnet(address_to_check, client_ip_subnet_length_)) {
     QUIC_DVLOG(1)
         << "Dropped packet: source/destination address is not client's";
diff --git a/quic/qbone/qbone_packet_processor_test.cc b/quic/qbone/qbone_packet_processor_test.cc
index df88a8e..d79400c 100644
--- a/quic/qbone/qbone_packet_processor_test.cc
+++ b/quic/qbone/qbone_packet_processor_test.cc
@@ -138,9 +138,9 @@
 class QbonePacketProcessorTest : public QuicTest {
  protected:
   QbonePacketProcessorTest() {
-    CHECK(client_ip_.FromString("fd00:0:0:1::1"));
-    CHECK(self_ip_.FromString("fd00:0:0:4::1"));
-    CHECK(network_ip_.FromString("fd00:0:0:5::1"));
+    QUICHE_CHECK(client_ip_.FromString("fd00:0:0:1::1"));
+    QUICHE_CHECK(self_ip_.FromString("fd00:0:0:4::1"));
+    QUICHE_CHECK(network_ip_.FromString("fd00:0:0:5::1"));
 
     processor_ = std::make_unique<QbonePacketProcessor>(
         self_ip_, client_ip_, /*client_ip_subnet_length=*/62, &output_,
diff --git a/quic/qbone/qbone_server_session.cc b/quic/qbone/qbone_server_session.cc
index 036c8ac..76a460c 100644
--- a/quic/qbone/qbone_server_session.cc
+++ b/quic/qbone/qbone_server_session.cc
@@ -89,7 +89,7 @@
 }
 
 void QboneServerSession::SendPacketToNetwork(absl::string_view packet) {
-  DCHECK(writer_ != nullptr);
+  QUICHE_DCHECK(writer_ != nullptr);
   writer_->WritePacketToNetwork(packet.data(), packet.size());
 }
 
diff --git a/quic/quic_transport/quic_transport_stream.cc b/quic/quic_transport/quic_transport_stream.cc
index 91b644d..e27f469 100644
--- a/quic/quic_transport/quic_transport_stream.cc
+++ b/quic/quic_transport/quic_transport_stream.cc
@@ -47,7 +47,7 @@
   const size_t bytes_to_read = ReadableBytes();
   output->resize(old_size + bytes_to_read);
   size_t bytes_read = Read(&(*output)[old_size], bytes_to_read);
-  DCHECK_EQ(bytes_to_read, bytes_read);
+  QUICHE_DCHECK_EQ(bytes_to_read, bytes_read);
   output->resize(old_size + bytes_read);
   return bytes_read;
 }
@@ -93,7 +93,7 @@
   QuicMemSlice empty;
   QuicConsumedData consumed =
       WriteMemSlices(QuicMemSliceSpan(&empty), /*fin=*/true);
-  DCHECK_EQ(consumed.bytes_consumed, 0u);
+  QUICHE_DCHECK_EQ(consumed.bytes_consumed, 0u);
   return consumed.fin_consumed;
 }
 
diff --git a/quic/test_tools/crypto_test_utils.cc b/quic/test_tools/crypto_test_utils.cc
index ce1c217..23f24d6 100644
--- a/quic/test_tools/crypto_test_utils.cc
+++ b/quic/test_tools/crypto_test_utils.cc
@@ -263,7 +263,7 @@
       });
 
   // The client's handshake must have been started already.
-  CHECK_NE(0u, client_conn->encrypted_packets_.size());
+  QUICHE_CHECK_NE(0u, client_conn->encrypted_packets_.size());
 
   CommunicateHandshakeMessages(client_conn, client, server_conn,
                                server_session.GetMutableCryptoStream());
@@ -292,7 +292,7 @@
                          return version.handshake_protocol != PROTOCOL_TLS1_3;
                        }),
         supported_versions.end());
-    CHECK(!options.only_quic_crypto_versions);
+    QUICHE_CHECK(!options.only_quic_crypto_versions);
   } else if (options.only_quic_crypto_versions) {
     supported_versions.erase(
         std::remove_if(supported_versions.begin(), supported_versions.end(),
@@ -326,7 +326,7 @@
             {AlpnForVersion(client_conn->version())})));
   }
   client_session.GetMutableCryptoStream()->CryptoConnect();
-  CHECK_EQ(1u, client_conn->encrypted_packets_.size());
+  QUICHE_CHECK_EQ(1u, client_conn->encrypted_packets_.size());
 
   CommunicateHandshakeMessages(client_conn,
                                client_session.GetMutableCryptoStream(),
@@ -459,7 +459,7 @@
       AllSupportedVersionsWithQuicCrypto().front().transport_version, "",
       std::unique_ptr<ProofSource::Callback>(new Callback(&ok, &chain)));
   if (!ok || chain->certs.empty()) {
-    DCHECK(false) << "Proof generation failed";
+    QUICHE_DCHECK(false) << "Proof generation failed";
     return 0;
   }
 
@@ -655,26 +655,26 @@
 
 QuicTag ParseTag(const char* tagstr) {
   const size_t len = strlen(tagstr);
-  CHECK_NE(0u, len);
+  QUICHE_CHECK_NE(0u, len);
 
   QuicTag tag = 0;
 
   if (tagstr[0] == '#') {
-    CHECK_EQ(static_cast<size_t>(1 + 2 * 4), len);
+    QUICHE_CHECK_EQ(static_cast<size_t>(1 + 2 * 4), len);
     tagstr++;
 
     for (size_t i = 0; i < 8; i++) {
       tag <<= 4;
 
       uint8_t v = 0;
-      CHECK(HexChar(tagstr[i], &v));
+      QUICHE_CHECK(HexChar(tagstr[i], &v));
       tag |= v;
     }
 
     return tag;
   }
 
-  CHECK_LE(len, 4u);
+  QUICHE_CHECK_LE(len, 4u);
   for (size_t i = 0; i < 4; i++) {
     tag >>= 8;
     if (i < len) {
@@ -723,7 +723,7 @@
       CryptoFramer::ConstructHandshakeMessage(msg);
   std::unique_ptr<CryptoHandshakeMessage> parsed(
       CryptoFramer::ParseMessage(bytes->AsStringPiece()));
-  CHECK(parsed);
+  QUICHE_CHECK(parsed);
 
   return *parsed;
 }
@@ -840,7 +840,7 @@
   std::unique_ptr<CryptoHandshakeMessage> msg =
       crypto_config->AddConfig(primary_config, clock->WallNow());
   absl::string_view orbit;
-  CHECK(msg->GetStringPiece(kORBT, &orbit));
+  QUICHE_CHECK(msg->GetStringPiece(kORBT, &orbit));
   std::string nonce;
   CryptoUtils::GenerateNonce(clock->WallNow(), QuicRandom::GetInstance(), orbit,
                              &nonce);
diff --git a/quic/test_tools/fake_proof_source.cc b/quic/test_tools/fake_proof_source.cc
index 0d3da93..bc75678 100644
--- a/quic/test_tools/fake_proof_source.cc
+++ b/quic/test_tools/fake_proof_source.cc
@@ -140,7 +140,7 @@
 }
 
 void FakeProofSource::InvokePendingCallback(int n) {
-  CHECK(NumPendingCallbacks() > n);
+  QUICHE_CHECK(NumPendingCallbacks() > n);
 
   pending_ops_[n]->Run();
 
diff --git a/quic/test_tools/fake_proof_source_handle.cc b/quic/test_tools/fake_proof_source_handle.cc
index 437a913..673d957 100644
--- a/quic/test_tools/fake_proof_source_handle.cc
+++ b/quic/test_tools/fake_proof_source_handle.cc
@@ -22,7 +22,7 @@
   explicit ResultSavingSignatureCallback(
       absl::optional<ComputeSignatureResult>* result)
       : result_(result) {
-    DCHECK(!result_->has_value());
+    QUICHE_DCHECK(!result_->has_value());
   }
   void Run(bool ok,
            std::string signature,
@@ -46,8 +46,9 @@
   delegate->ComputeTlsSignature(
       server_address, client_address, hostname, signature_algorithm, in,
       std::make_unique<ResultSavingSignatureCallback>(&result));
-  CHECK(result.has_value()) << "delegate->ComputeTlsSignature must computes a "
-                               "signature immediately";
+  QUICHE_CHECK(result.has_value())
+      << "delegate->ComputeTlsSignature must computes a "
+         "signature immediately";
   return std::move(result.value());
 }
 }  // namespace
@@ -88,7 +89,7 @@
     return QUIC_FAILURE;
   }
 
-  DCHECK(select_cert_action_ == Action::DELEGATE_SYNC);
+  QUICHE_DCHECK(select_cert_action_ == Action::DELEGATE_SYNC);
   QuicReferenceCountedPointer<ProofSource::Chain> chain =
       delegate_->GetCertChain(server_address, client_address, hostname);
 
@@ -116,7 +117,7 @@
     return QUIC_FAILURE;
   }
 
-  DCHECK(compute_signature_action_ == Action::DELEGATE_SYNC);
+  QUICHE_DCHECK(compute_signature_action_ == Action::DELEGATE_SYNC);
   ComputeSignatureResult result =
       ComputeSignatureNow(delegate_, server_address, client_address, hostname,
                           signature_algorithm, in);
@@ -135,7 +136,7 @@
 }
 
 void FakeProofSourceHandle::CompletePendingOperation() {
-  DCHECK_LE(NumPendingOperations(), 1);
+  QUICHE_DCHECK_LE(NumPendingOperations(), 1);
 
   if (select_cert_op_.has_value()) {
     select_cert_op_->Run();
diff --git a/quic/test_tools/fuzzing/quic_framer_process_data_packet_fuzzer.cc b/quic/test_tools/fuzzing/quic_framer_process_data_packet_fuzzer.cc
index e3a9bdf..0126d4b 100644
--- a/quic/test_tools/fuzzing/quic_framer_process_data_packet_fuzzer.cc
+++ b/quic/test_tools/fuzzing/quic_framer_process_data_packet_fuzzer.cc
@@ -222,7 +222,7 @@
     uint16_t payload_size = data_provider.ConsumeIntegralInRange<uint16_t>(
         min_payload_size, max_payload_size);
 
-    CHECK_NE(last_remaining_bytes, data_provider.remaining_bytes())
+    QUICHE_CHECK_NE(last_remaining_bytes, data_provider.remaining_bytes())
         << "Check fail to avoid an infinite loop. ConsumeIntegralInRange("
         << min_payload_size << ", " << max_payload_size
         << ") did not consume any bytes. remaining_bytes:"
@@ -230,28 +230,30 @@
 
     std::vector<char> payload_buffer =
         data_provider.ConsumeBytes<char>(payload_size);
-    CHECK_GE(packet_buffer.size(),
-             GetPacketHeaderSize(sender_framer.transport_version(), header) +
-                 payload_buffer.size());
+    QUICHE_CHECK_GE(
+        packet_buffer.size(),
+        GetPacketHeaderSize(sender_framer.transport_version(), header) +
+            payload_buffer.size());
 
     // Serialize the null-encrypted packet into |packet_buffer|.
     QuicDataWriter writer(packet_buffer.size(), packet_buffer.data());
     size_t length_field_offset = 0;
-    CHECK(sender_framer.AppendPacketHeader(header, &writer,
-                                           &length_field_offset));
+    QUICHE_CHECK(sender_framer.AppendPacketHeader(header, &writer,
+                                                  &length_field_offset));
 
-    CHECK(writer.WriteBytes(payload_buffer.data(), payload_buffer.size()));
+    QUICHE_CHECK(
+        writer.WriteBytes(payload_buffer.data(), payload_buffer.size()));
 
     EncryptionLevel encryption_level =
         quic::test::HeaderToEncryptionLevel(header);
-    CHECK(sender_framer.WriteIetfLongHeaderLength(
+    QUICHE_CHECK(sender_framer.WriteIetfLongHeaderLength(
         header, &writer, length_field_offset, encryption_level));
 
     size_t encrypted_length = sender_framer.EncryptInPlace(
         encryption_level, header.packet_number,
         GetStartOfEncryptedData(sender_framer.transport_version(), header),
         writer.length(), packet_buffer.size(), packet_buffer.data());
-    CHECK_NE(encrypted_length, 0u);
+    QUICHE_CHECK_NE(encrypted_length, 0u);
 
     // Use receiver's framer to process the packet. Ensure both
     // ProcessPublicHeader and DecryptPayload were called and succeeded.
@@ -265,14 +267,15 @@
 
     receiver_framer.ProcessPacket(packet);
 
-    DCHECK_EQ(process_public_header_success_count + 1,
-              receiver_framer_visitor.process_public_header_success_count_)
+    QUICHE_DCHECK_EQ(
+        process_public_header_success_count + 1,
+        receiver_framer_visitor.process_public_header_success_count_)
         << "ProcessPublicHeader failed. error:"
         << QuicErrorCodeToString(receiver_framer.error())
         << ", error_detail:" << receiver_framer.detailed_error()
         << ". header:" << header;
-    DCHECK_EQ(decrypted_packet_count + 1,
-              receiver_framer_visitor.decrypted_packet_count_)
+    QUICHE_DCHECK_EQ(decrypted_packet_count + 1,
+                     receiver_framer_visitor.decrypted_packet_count_)
         << "Packet was not decrypted. error:"
         << QuicErrorCodeToString(receiver_framer.error())
         << ", error_detail:" << receiver_framer.detailed_error()
diff --git a/quic/test_tools/packet_dropping_test_writer.cc b/quic/test_tools/packet_dropping_test_writer.cc
index bf763ef..35cc978 100644
--- a/quic/test_tools/packet_dropping_test_writer.cc
+++ b/quic/test_tools/packet_dropping_test_writer.cc
@@ -118,7 +118,7 @@
   if (fake_blocked_socket_percentage_ > 0 &&
       simple_random_.RandUint64() % 100 <
           static_cast<uint64_t>(fake_blocked_socket_percentage_)) {
-    CHECK(on_can_write_ != nullptr);
+    QUICHE_CHECK(on_can_write_ != nullptr);
     QUIC_DVLOG(1) << "Blocking socket for packet " << num_calls_to_write_;
     if (!write_unblocked_alarm_->IsSet()) {
       // Set the alarm to fire immediately.
@@ -206,7 +206,7 @@
   QuicPacketWriterWrapper::WritePacket(
       iter->buffer.data(), iter->buffer.length(), iter->self_address,
       iter->peer_address, iter->options.get());
-  DCHECK_GE(cur_buffer_size_, iter->buffer.length());
+  QUICHE_DCHECK_GE(cur_buffer_size_, iter->buffer.length());
   cur_buffer_size_ -= iter->buffer.length();
   delayed_packets_.erase(iter);
 
diff --git a/quic/test_tools/packet_reordering_writer.cc b/quic/test_tools/packet_reordering_writer.cc
index 2fb5f7e..1b931eb 100644
--- a/quic/test_tools/packet_reordering_writer.cc
+++ b/quic/test_tools/packet_reordering_writer.cc
@@ -32,7 +32,8 @@
     return wr;
   }
   // Still have packet to wait.
-  DCHECK_LT(0u, num_packets_to_wait_) << "Only allow one packet to be delayed";
+  QUICHE_DCHECK_LT(0u, num_packets_to_wait_)
+      << "Only allow one packet to be delayed";
   delayed_data_ = std::string(buffer, buf_len);
   delayed_self_address_ = self_address;
   delayed_peer_address_ = peer_address;
@@ -44,7 +45,7 @@
 }
 
 void PacketReorderingWriter::SetDelay(size_t num_packets_to_wait) {
-  DCHECK_GT(num_packets_to_wait, 0u);
+  QUICHE_DCHECK_GT(num_packets_to_wait, 0u);
   num_packets_to_wait_ = num_packets_to_wait;
   delay_next_ = true;
 }
diff --git a/quic/test_tools/qpack/qpack_decoder_test_utils.cc b/quic/test_tools/qpack/qpack_decoder_test_utils.cc
index bc1a60b..ab76c44 100644
--- a/quic/test_tools/qpack/qpack_decoder_test_utils.cc
+++ b/quic/test_tools/qpack/qpack_decoder_test_utils.cc
@@ -46,8 +46,8 @@
 }
 
 spdy::Http2HeaderBlock TestHeadersHandler::ReleaseHeaderList() {
-  DCHECK(decoding_completed_);
-  DCHECK(!decoding_error_detected_);
+  QUICHE_DCHECK(decoding_completed_);
+  QUICHE_DCHECK(!decoding_error_detected_);
 
   return std::move(header_list_);
 }
@@ -61,7 +61,7 @@
 }
 
 const std::string& TestHeadersHandler::error_message() const {
-  DCHECK(decoding_error_detected_);
+  QUICHE_DCHECK(decoding_error_detected_);
   return error_message_;
 }
 
diff --git a/quic/test_tools/qpack/qpack_offline_decoder.cc b/quic/test_tools/qpack/qpack_offline_decoder.cc
index 025c1ed..6bad8d6 100644
--- a/quic/test_tools/qpack/qpack_offline_decoder.cc
+++ b/quic/test_tools/qpack/qpack_offline_decoder.cc
@@ -218,7 +218,7 @@
   }
 
   if (!decoders_.empty()) {
-    DCHECK(!decoders_.front().headers_handler->decoding_completed());
+    QUICHE_DCHECK(!decoders_.front().headers_handler->decoding_completed());
 
     QUIC_LOG(ERROR) << "Blocked decoding uncomplete after reading entire"
                        " file, on stream "
diff --git a/quic/test_tools/quic_config_peer.cc b/quic/test_tools/quic_config_peer.cc
index 928f842..9bd5dd3 100644
--- a/quic/test_tools/quic_config_peer.cc
+++ b/quic/test_tools/quic_config_peer.cc
@@ -60,7 +60,7 @@
 // static
 void QuicConfigPeer::SetReceivedBytesForConnectionId(QuicConfig* config,
                                                      uint32_t bytes) {
-  DCHECK(bytes == 0 || bytes == 8);
+  QUICHE_DCHECK(bytes == 0 || bytes == 8);
   config->bytes_for_connection_id_.SetReceivedValue(bytes);
 }
 
diff --git a/quic/test_tools/quic_packet_creator_peer.cc b/quic/test_tools/quic_packet_creator_peer.cc
index 7098fb2..0caf263 100644
--- a/quic/test_tools/quic_packet_creator_peer.cc
+++ b/quic/test_tools/quic_packet_creator_peer.cc
@@ -30,7 +30,7 @@
     creator->packet_.encryption_level = ENCRYPTION_FORWARD_SECURE;
     return;
   }
-  DCHECK(creator->packet_.encryption_level < ENCRYPTION_FORWARD_SECURE);
+  QUICHE_DCHECK(creator->packet_.encryption_level < ENCRYPTION_FORWARD_SECURE);
 }
 
 // static
@@ -60,7 +60,7 @@
 
 void QuicPacketCreatorPeer::SetPacketNumber(QuicPacketCreator* creator,
                                             uint64_t s) {
-  DCHECK_NE(0u, s);
+  QUICHE_DCHECK_NE(0u, s);
   creator->packet_.packet_number = QuicPacketNumber(s);
 }
 
@@ -105,15 +105,15 @@
     const QuicFrames& frames,
     char* buffer,
     size_t buffer_len) {
-  DCHECK(creator->queued_frames_.empty());
-  DCHECK(!frames.empty());
+  QUICHE_DCHECK(creator->queued_frames_.empty());
+  QUICHE_DCHECK(!frames.empty());
   for (const QuicFrame& frame : frames) {
     bool success = creator->AddFrame(frame, NOT_RETRANSMISSION);
-    DCHECK(success);
+    QUICHE_DCHECK(success);
   }
   const bool success = creator->SerializePacket(
       QuicOwnedPacketBuffer(buffer, nullptr), buffer_len);
-  DCHECK(success);
+  QUICHE_DCHECK(success);
   SerializedPacket packet = std::move(creator->packet_);
   // The caller takes ownership of the QuicEncryptedPacket.
   creator->packet_.encrypted_buffer = nullptr;
diff --git a/quic/test_tools/quic_sent_packet_manager_peer.cc b/quic/test_tools/quic_sent_packet_manager_peer.cc
index f358783..0789946 100644
--- a/quic/test_tools/quic_sent_packet_manager_peer.cc
+++ b/quic/test_tools/quic_sent_packet_manager_peer.cc
@@ -82,7 +82,7 @@
 bool QuicSentPacketManagerPeer::IsRetransmission(
     QuicSentPacketManager* sent_packet_manager,
     uint64_t packet_number) {
-  DCHECK(HasRetransmittableFrames(sent_packet_manager, packet_number));
+  QUICHE_DCHECK(HasRetransmittableFrames(sent_packet_manager, packet_number));
   if (!HasRetransmittableFrames(sent_packet_manager, packet_number)) {
     return false;
   }
diff --git a/quic/test_tools/quic_session_peer.cc b/quic/test_tools/quic_session_peer.cc
index 49466b5..344b1b1 100644
--- a/quic/test_tools/quic_session_peer.cc
+++ b/quic/test_tools/quic_session_peer.cc
@@ -53,7 +53,7 @@
 void QuicSessionPeer::SetMaxOpenIncomingBidirectionalStreams(
     QuicSession* session,
     uint32_t max_streams) {
-  DCHECK(VersionHasIetfQuicFrames(session->transport_version()))
+  QUICHE_DCHECK(VersionHasIetfQuicFrames(session->transport_version()))
       << "SetmaxOpenIncomingBidirectionalStreams not supported for Google "
          "QUIC";
   session->ietf_streamid_manager_.SetMaxOpenIncomingBidirectionalStreams(
@@ -63,7 +63,7 @@
 void QuicSessionPeer::SetMaxOpenIncomingUnidirectionalStreams(
     QuicSession* session,
     uint32_t max_streams) {
-  DCHECK(VersionHasIetfQuicFrames(session->transport_version()))
+  QUICHE_DCHECK(VersionHasIetfQuicFrames(session->transport_version()))
       << "SetmaxOpenIncomingUnidirectionalStreams not supported for Google "
          "QUIC";
   session->ietf_streamid_manager_.SetMaxOpenIncomingUnidirectionalStreams(
@@ -84,7 +84,7 @@
 void QuicSessionPeer::SetMaxOpenOutgoingBidirectionalStreams(
     QuicSession* session,
     uint32_t max_streams) {
-  DCHECK(VersionHasIetfQuicFrames(session->transport_version()))
+  QUICHE_DCHECK(VersionHasIetfQuicFrames(session->transport_version()))
       << "SetmaxOpenOutgoingBidirectionalStreams not supported for Google "
          "QUIC";
   session->ietf_streamid_manager_.MaybeAllowNewOutgoingBidirectionalStreams(
@@ -94,7 +94,7 @@
 void QuicSessionPeer::SetMaxOpenOutgoingUnidirectionalStreams(
     QuicSession* session,
     uint32_t max_streams) {
-  DCHECK(VersionHasIetfQuicFrames(session->transport_version()))
+  QUICHE_DCHECK(VersionHasIetfQuicFrames(session->transport_version()))
       << "SetmaxOpenOutgoingUnidirectionalStreams not supported for Google "
          "QUIC";
   session->ietf_streamid_manager_.MaybeAllowNewOutgoingUnidirectionalStreams(
diff --git a/quic/test_tools/quic_spdy_session_peer.cc b/quic/test_tools/quic_spdy_session_peer.cc
index acb66df..58eedcc 100644
--- a/quic/test_tools/quic_spdy_session_peer.cc
+++ b/quic/test_tools/quic_spdy_session_peer.cc
@@ -15,13 +15,13 @@
 // static
 QuicHeadersStream* QuicSpdySessionPeer::GetHeadersStream(
     QuicSpdySession* session) {
-  DCHECK(!VersionUsesHttp3(session->transport_version()));
+  QUICHE_DCHECK(!VersionUsesHttp3(session->transport_version()));
   return session->headers_stream();
 }
 
 void QuicSpdySessionPeer::SetHeadersStream(QuicSpdySession* session,
                                            QuicHeadersStream* headers_stream) {
-  DCHECK(!VersionUsesHttp3(session->transport_version()));
+  QUICHE_DCHECK(!VersionUsesHttp3(session->transport_version()));
   for (auto& it : QuicSessionPeer::stream_map(session)) {
     if (it.first ==
         QuicUtils::GetHeadersStreamId(session->transport_version())) {
diff --git a/quic/test_tools/quic_test_client.cc b/quic/test_tools/quic_test_client.cc
index 9dcfb42..4133950 100644
--- a/quic/test_tools/quic_test_client.cc
+++ b/quic/test_tools/quic_test_client.cc
@@ -164,12 +164,12 @@
   }
 
   void UseWriter(QuicPacketWriterWrapper* writer) {
-    CHECK(test_writer_ == nullptr);
+    QUICHE_CHECK(test_writer_ == nullptr);
     test_writer_ = writer;
   }
 
   void set_peer_address(const QuicSocketAddress& address) {
-    CHECK(test_writer_ != nullptr);
+    QUICHE_CHECK(test_writer_ != nullptr);
     test_writer_->set_peer_address(address);
   }
 
@@ -834,24 +834,24 @@
 }
 
 void QuicTestClient::UseConnectionId(QuicConnectionId server_connection_id) {
-  DCHECK(!connected());
+  QUICHE_DCHECK(!connected());
   client_->UseConnectionId(server_connection_id);
 }
 
 void QuicTestClient::UseConnectionIdLength(int server_connection_id_length) {
-  DCHECK(!connected());
+  QUICHE_DCHECK(!connected());
   client_->UseConnectionIdLength(server_connection_id_length);
 }
 
 void QuicTestClient::UseClientConnectionId(
     QuicConnectionId client_connection_id) {
-  DCHECK(!connected());
+  QUICHE_DCHECK(!connected());
   client_->UseClientConnectionId(client_connection_id);
 }
 
 void QuicTestClient::UseClientConnectionIdLength(
     int client_connection_id_length) {
-  DCHECK(!connected());
+  QUICHE_DCHECK(!connected());
   client_->UseClientConnectionIdLength(client_connection_id_length);
 }
 
diff --git a/quic/test_tools/quic_test_server.cc b/quic/test_tools/quic_test_server.cc
index 59fac5d..55170b2 100644
--- a/quic/test_tools/quic_test_server.cc
+++ b/quic/test_tools/quic_test_server.cc
@@ -127,23 +127,23 @@
 
   void SetSessionFactory(QuicTestServer::SessionFactory* factory) {
     QuicWriterMutexLock lock(&factory_lock_);
-    DCHECK(session_factory_ == nullptr);
-    DCHECK(stream_factory_ == nullptr);
-    DCHECK(crypto_stream_factory_ == nullptr);
+    QUICHE_DCHECK(session_factory_ == nullptr);
+    QUICHE_DCHECK(stream_factory_ == nullptr);
+    QUICHE_DCHECK(crypto_stream_factory_ == nullptr);
     session_factory_ = factory;
   }
 
   void SetStreamFactory(QuicTestServer::StreamFactory* factory) {
     QuicWriterMutexLock lock(&factory_lock_);
-    DCHECK(session_factory_ == nullptr);
-    DCHECK(stream_factory_ == nullptr);
+    QUICHE_DCHECK(session_factory_ == nullptr);
+    QUICHE_DCHECK(stream_factory_ == nullptr);
     stream_factory_ = factory;
   }
 
   void SetCryptoStreamFactory(QuicTestServer::CryptoStreamFactory* factory) {
     QuicWriterMutexLock lock(&factory_lock_);
-    DCHECK(session_factory_ == nullptr);
-    DCHECK(crypto_stream_factory_ == nullptr);
+    QUICHE_DCHECK(session_factory_ == nullptr);
+    QUICHE_DCHECK(crypto_stream_factory_ == nullptr);
     crypto_stream_factory_ = factory;
   }
 
@@ -195,7 +195,7 @@
 }
 
 void QuicTestServer::SetSessionFactory(SessionFactory* factory) {
-  DCHECK(dispatcher());
+  QUICHE_DCHECK(dispatcher());
   static_cast<QuicTestDispatcher*>(dispatcher())->SetSessionFactory(factory);
 }
 
diff --git a/quic/test_tools/quic_test_utils.cc b/quic/test_tools/quic_test_utils.cc
index a2aa11c..fb5d772 100644
--- a/quic/test_tools/quic_test_utils.cc
+++ b/quic/test_tools/quic_test_utils.cc
@@ -71,7 +71,7 @@
 }
 
 uint64_t TestConnectionIdToUInt64(QuicConnectionId connection_id) {
-  DCHECK_EQ(connection_id.length(), kQuicDefaultConnectionIdLength);
+  QUICHE_DCHECK_EQ(connection_id.length(), kQuicDefaultConnectionIdLength);
   uint64_t connection_id64_net = 0;
   memcpy(&connection_id64_net, connection_id.data(),
          std::min<size_t>(static_cast<size_t>(connection_id.length()),
@@ -97,13 +97,13 @@
 }
 
 QuicAckFrame InitAckFrame(const std::vector<QuicAckBlock>& ack_blocks) {
-  DCHECK_GT(ack_blocks.size(), 0u);
+  QUICHE_DCHECK_GT(ack_blocks.size(), 0u);
 
   QuicAckFrame ack;
   QuicPacketNumber end_of_previous_block(1);
   for (const QuicAckBlock& block : ack_blocks) {
-    DCHECK_GE(block.start, end_of_previous_block);
-    DCHECK_GT(block.limit, block.start);
+    QUICHE_DCHECK_GE(block.start, end_of_previous_block);
+    QUICHE_DCHECK_GT(block.limit, block.start);
     ack.packets.AddRange(block.start, block.limit);
     end_of_previous_block = block.limit;
   }
@@ -170,13 +170,13 @@
       framer->GetMaxPlaintextSize(kMaxOutgoingPacketSize);
   size_t packet_size = GetPacketHeaderSize(framer->transport_version(), header);
   for (size_t i = 0; i < frames.size(); ++i) {
-    DCHECK_LE(packet_size, max_plaintext_size);
+    QUICHE_DCHECK_LE(packet_size, max_plaintext_size);
     bool first_frame = i == 0;
     bool last_frame = i == frames.size() - 1;
     const size_t frame_size = framer->GetSerializedFrameLength(
         frames[i], max_plaintext_size - packet_size, first_frame, last_frame,
         header.packet_number_length);
-    DCHECK(frame_size);
+    QUICHE_DCHECK(frame_size);
     packet_size += frame_size;
   }
   return BuildUnsizedDataPacket(framer, header, frames, packet_size);
@@ -191,7 +191,7 @@
   EncryptionLevel level = HeaderToEncryptionLevel(header);
   size_t length =
       framer->BuildDataPacket(header, frames, buffer, packet_size, level);
-  DCHECK_NE(0u, length);
+  QUICHE_DCHECK_NE(0u, length);
   // Re-construct the data packet with data ownership.
   return std::make_unique<QuicPacket>(
       buffer, length, /* owns_buffer */ true,
@@ -638,11 +638,11 @@
   if (write_length > 0) {
     auto buf = std::make_unique<char[]>(write_length);
     QuicStream* stream = GetOrCreateStream(id);
-    DCHECK(stream);
+    QUICHE_DCHECK(stream);
     QuicDataWriter writer(write_length, buf.get(), quiche::HOST_BYTE_ORDER);
     stream->WriteStreamData(offset, write_length, &writer);
   } else {
-    DCHECK(state != NO_FIN);
+    QUICHE_DCHECK(state != NO_FIN);
   }
   return QuicConsumedData(write_length, state != NO_FIN);
 }
@@ -727,11 +727,11 @@
   if (write_length > 0) {
     auto buf = std::make_unique<char[]>(write_length);
     QuicStream* stream = GetOrCreateStream(id);
-    DCHECK(stream);
+    QUICHE_DCHECK(stream);
     QuicDataWriter writer(write_length, buf.get(), quiche::HOST_BYTE_ORDER);
     stream->WriteStreamData(offset, write_length, &writer);
   } else {
-    DCHECK(state != NO_FIN);
+    QUICHE_DCHECK(state != NO_FIN);
   }
   return QuicConsumedData(write_length, state != NO_FIN);
 }
@@ -1208,10 +1208,10 @@
     QuicCryptoClientConfig* crypto_client_config,
     PacketSavingConnection** client_connection,
     TestQuicSpdyClientSession** client_session) {
-  CHECK(crypto_client_config);
-  CHECK(client_connection);
-  CHECK(client_session);
-  CHECK(!connection_start_time.IsZero())
+  QUICHE_CHECK(crypto_client_config);
+  QUICHE_CHECK(client_connection);
+  QUICHE_CHECK(client_session);
+  QUICHE_CHECK(!connection_start_time.IsZero())
       << "Connections must start at non-zero times, otherwise the "
       << "strike-register will be unhappy.";
 
@@ -1234,10 +1234,10 @@
     QuicCompressedCertsCache* compressed_certs_cache,
     PacketSavingConnection** server_connection,
     TestQuicSpdyServerSession** server_session) {
-  CHECK(server_crypto_config);
-  CHECK(server_connection);
-  CHECK(server_session);
-  CHECK(!connection_start_time.IsZero())
+  QUICHE_CHECK(server_crypto_config);
+  QUICHE_CHECK(server_connection);
+  QUICHE_CHECK(server_session);
+  QUICHE_CHECK(!connection_start_time.IsZero())
       << "Connections must start at non-zero times, otherwise the "
       << "strike-register will be unhappy.";
 
diff --git a/quic/test_tools/server_thread.cc b/quic/test_tools/server_thread.cc
index a744ac6..f5c9b7e 100644
--- a/quic/test_tools/server_thread.cc
+++ b/quic/test_tools/server_thread.cc
@@ -61,7 +61,7 @@
 }
 
 void ServerThread::Schedule(std::function<void()> action) {
-  DCHECK(!quit_.HasBeenNotified());
+  QUICHE_DCHECK(!quit_.HasBeenNotified());
   QuicWriterMutexLock lock(&scheduled_actions_lock_);
   scheduled_actions_.push_back(std::move(action));
 }
@@ -89,14 +89,14 @@
 }
 
 void ServerThread::Pause() {
-  DCHECK(!pause_.HasBeenNotified());
+  QUICHE_DCHECK(!pause_.HasBeenNotified());
   pause_.Notify();
   paused_.WaitForNotification();
 }
 
 void ServerThread::Resume() {
-  DCHECK(!resume_.HasBeenNotified());
-  DCHECK(pause_.HasBeenNotified());
+  QUICHE_DCHECK(!resume_.HasBeenNotified());
+  QUICHE_DCHECK(pause_.HasBeenNotified());
   resume_.Notify();
 }
 
diff --git a/quic/test_tools/simple_quic_framer.cc b/quic/test_tools/simple_quic_framer.cc
index 04d44b1..96b1318 100644
--- a/quic/test_tools/simple_quic_framer.cc
+++ b/quic/test_tools/simple_quic_framer.cc
@@ -101,7 +101,7 @@
   }
 
   bool OnAckRange(QuicPacketNumber start, QuicPacketNumber end) override {
-    DCHECK(!ack_frames_.empty());
+    QUICHE_DCHECK(!ack_frames_.empty());
     ack_frames_[ack_frames_.size() - 1].packets.AddRange(start, end);
     return true;
   }
diff --git a/quic/test_tools/simple_session_notifier.cc b/quic/test_tools/simple_session_notifier.cc
index 1a75a4c..415332a 100644
--- a/quic/test_tools/simple_session_notifier.cc
+++ b/quic/test_tools/simple_session_notifier.cc
@@ -481,7 +481,7 @@
   if (id == kInvalidControlFrameId) {
     return false;
   }
-  DCHECK(id < least_unacked_ + control_frames_.size());
+  QUICHE_DCHECK(id < least_unacked_ + control_frames_.size());
   if (id < least_unacked_ ||
       GetControlFrameId(control_frames_.at(id - least_unacked_)) ==
           kInvalidControlFrameId) {
@@ -504,7 +504,7 @@
   if (id == kInvalidControlFrameId) {
     return;
   }
-  DCHECK(id < least_unacked_ + control_frames_.size());
+  QUICHE_DCHECK(id < least_unacked_ + control_frames_.size());
   if (id < least_unacked_ ||
       GetControlFrameId(control_frames_.at(id - least_unacked_)) ==
           kInvalidControlFrameId) {
diff --git a/quic/test_tools/simulator/alarm_factory.cc b/quic/test_tools/simulator/alarm_factory.cc
index 8ea3e58..4e1ed2e 100644
--- a/quic/test_tools/simulator/alarm_factory.cc
+++ b/quic/test_tools/simulator/alarm_factory.cc
@@ -21,7 +21,7 @@
   ~Alarm() override {}
 
   void SetImpl() override {
-    DCHECK(deadline().IsInitialized());
+    QUICHE_DCHECK(deadline().IsInitialized());
     adapter_.Set(deadline());
   }
 
@@ -41,7 +41,7 @@
     void Cancel() { Unschedule(); }
 
     void Act() override {
-      DCHECK(clock_->Now() >= parent_->deadline());
+      QUICHE_DCHECK(clock_->Now() >= parent_->deadline());
       parent_->Fire();
     }
 
diff --git a/quic/test_tools/simulator/link.cc b/quic/test_tools/simulator/link.cc
index dcfd2dc..16850a9 100644
--- a/quic/test_tools/simulator/link.cc
+++ b/quic/test_tools/simulator/link.cc
@@ -35,7 +35,7 @@
 OneWayLink::QueuedPacket::~QueuedPacket() {}
 
 void OneWayLink::AcceptPacket(std::unique_ptr<Packet> packet) {
-  DCHECK(TimeUntilAvailable().IsZero());
+  QUICHE_DCHECK(TimeUntilAvailable().IsZero());
   QuicTime::Delta transfer_time = bandwidth_.TransferTime(packet->size);
   next_write_at_ = clock_->Now() + transfer_time;
 
@@ -60,8 +60,8 @@
 }
 
 void OneWayLink::Act() {
-  DCHECK(!packets_in_transit_.empty());
-  DCHECK(packets_in_transit_.front().dequeue_time >= clock_->Now());
+  QUICHE_DCHECK(!packets_in_transit_.empty());
+  QUICHE_DCHECK(packets_in_transit_.front().dequeue_time >= clock_->Now());
 
   sink_->AcceptPacket(std::move(packets_in_transit_.front().packet));
   packets_in_transit_.pop_front();
diff --git a/quic/test_tools/simulator/queue.cc b/quic/test_tools/simulator/queue.cc
index fc0c320..5113cf7 100644
--- a/quic/test_tools/simulator/queue.cc
+++ b/quic/test_tools/simulator/queue.cc
@@ -59,9 +59,9 @@
 }
 
 void Queue::Act() {
-  DCHECK(!queue_.empty());
+  QUICHE_DCHECK(!queue_.empty());
   if (tx_port_->TimeUntilAvailable().IsZero()) {
-    DCHECK(bytes_queued_ >= queue_.front().packet->size);
+    QUICHE_DCHECK(bytes_queued_ >= queue_.front().packet->size);
     bytes_queued_ -= queue_.front().packet->size;
 
     tx_port_->AcceptPacket(std::move(queue_.front().packet));
@@ -76,10 +76,10 @@
 
 void Queue::EnableAggregation(QuicByteCount aggregation_threshold,
                               QuicTime::Delta aggregation_timeout) {
-  DCHECK_EQ(bytes_queued_, 0u);
-  DCHECK_GT(aggregation_threshold, 0u);
-  DCHECK(!aggregation_timeout.IsZero());
-  DCHECK(!aggregation_timeout.IsInfinite());
+  QUICHE_DCHECK_EQ(bytes_queued_, 0u);
+  QUICHE_DCHECK_GT(aggregation_threshold, 0u);
+  QUICHE_DCHECK(!aggregation_timeout.IsZero());
+  QUICHE_DCHECK(!aggregation_timeout.IsInfinite());
 
   aggregation_threshold_ = aggregation_threshold;
   aggregation_timeout_ = aggregation_timeout;
@@ -109,7 +109,7 @@
 
 void Queue::ScheduleNextPacketDequeue() {
   if (queue_.empty()) {
-    DCHECK_EQ(bytes_queued_, 0u);
+    QUICHE_DCHECK_EQ(bytes_queued_, 0u);
     return;
   }
 
diff --git a/quic/test_tools/simulator/quic_endpoint.cc b/quic/test_tools/simulator/quic_endpoint.cc
index 2534b8d..cb0b58e 100644
--- a/quic/test_tools/simulator/quic_endpoint.cc
+++ b/quic/test_tools/simulator/quic_endpoint.cc
@@ -74,7 +74,8 @@
   QuicErrorCode error_code = config.ProcessPeerHello(
       peer_hello, perspective == Perspective::IS_CLIENT ? SERVER : CLIENT,
       &error);
-  DCHECK_EQ(error_code, QUIC_NO_ERROR) << "Configuration failed: " << error;
+  QUICHE_DCHECK_EQ(error_code, QUIC_NO_ERROR)
+      << "Configuration failed: " << error;
   if (connection_->version().UsesTls()) {
     if (connection_->perspective() == Perspective::IS_CLIENT) {
       test::QuicConfigPeer::SetReceivedOriginalConnectionId(
@@ -131,7 +132,7 @@
 
 void QuicEndpoint::OnStreamFrame(const QuicStreamFrame& frame) {
   // Verify that the data received always matches the expected.
-  DCHECK(frame.stream_id == kDataStream);
+  QUICHE_DCHECK(frame.stream_id == kDataStream);
   for (size_t i = 0; i < frame.data_length; i++) {
     if (frame.data_buffer[i] != kStreamDataContents) {
       wrong_data_received_ = true;
@@ -139,7 +140,7 @@
   }
   offsets_received_.Add(frame.offset, frame.offset + frame.data_length);
   // Sanity check against very pathological connections.
-  DCHECK_LE(offsets_received_.Size(), 1000u);
+  QUICHE_DCHECK_LE(offsets_received_.Size(), 1000u);
 }
 
 void QuicEndpoint::OnCryptoFrame(const QuicCryptoFrame& /*frame*/) {}
@@ -184,18 +185,18 @@
 }
 
 void QuicEndpoint::OnFrameLost(const QuicFrame& frame) {
-  DCHECK(notifier_);
+  QUICHE_DCHECK(notifier_);
   notifier_->OnFrameLost(frame);
 }
 
 void QuicEndpoint::RetransmitFrames(const QuicFrames& frames,
                                     TransmissionType type) {
-  DCHECK(notifier_);
+  QUICHE_DCHECK(notifier_);
   notifier_->RetransmitFrames(frames, type);
 }
 
 bool QuicEndpoint::IsFrameOutstanding(const QuicFrame& frame) const {
-  DCHECK(notifier_);
+  QUICHE_DCHECK(notifier_);
   return notifier_->IsFrameOutstanding(frame);
 }
 
@@ -243,7 +244,7 @@
     QuicConsumedData consumed_data = connection_->SendStreamData(
         kDataStream, transmission_size, bytes_transferred_, NO_FIN);
 
-    DCHECK(consumed_data.bytes_consumed <= transmission_size);
+    QUICHE_DCHECK(consumed_data.bytes_consumed <= transmission_size);
     bytes_transferred_ += consumed_data.bytes_consumed;
     bytes_to_transfer_ -= consumed_data.bytes_consumed;
     if (consumed_data.bytes_consumed != transmission_size) {
diff --git a/quic/test_tools/simulator/quic_endpoint_base.cc b/quic/test_tools/simulator/quic_endpoint_base.cc
index d221888..a563a29 100644
--- a/quic/test_tools/simulator/quic_endpoint_base.cc
+++ b/quic/test_tools/simulator/quic_endpoint_base.cc
@@ -133,9 +133,9 @@
     const QuicIpAddress& /*self_address*/,
     const QuicSocketAddress& /*peer_address*/,
     PerPacketOptions* options) {
-  DCHECK(!IsWriteBlocked());
-  DCHECK(options == nullptr);
-  DCHECK(buf_len <= kMaxOutgoingPacketSize);
+  QUICHE_DCHECK(!IsWriteBlocked());
+  QUICHE_DCHECK(options == nullptr);
+  QUICHE_DCHECK(buf_len <= kMaxOutgoingPacketSize);
 
   // Instead of losing a packet, become write-blocked when the egress queue is
   // full.
diff --git a/quic/test_tools/simulator/simulator.cc b/quic/test_tools/simulator/simulator.cc
index 9aa10ab..8d68ee4 100644
--- a/quic/test_tools/simulator/simulator.cc
+++ b/quic/test_tools/simulator/simulator.cc
@@ -48,15 +48,15 @@
   auto emplace_names_result = actor_names_.insert(actor->name());
 
   // Ensure that the object was actually placed into the map.
-  DCHECK(emplace_times_result.second);
-  DCHECK(emplace_names_result.second);
+  QUICHE_DCHECK(emplace_times_result.second);
+  QUICHE_DCHECK(emplace_names_result.second);
 }
 
 void Simulator::RemoveActor(Actor* actor) {
   auto scheduled_time_it = scheduled_times_.find(actor);
   auto actor_names_it = actor_names_.find(actor->name());
-  DCHECK(scheduled_time_it != scheduled_times_.end());
-  DCHECK(actor_names_it != actor_names_.end());
+  QUICHE_DCHECK(scheduled_time_it != scheduled_times_.end());
+  QUICHE_DCHECK(actor_names_it != actor_names_.end());
 
   QuicTime scheduled_time = scheduled_time_it->second;
   if (scheduled_time != QuicTime::Infinite()) {
@@ -69,7 +69,7 @@
 
 void Simulator::Schedule(Actor* actor, QuicTime new_time) {
   auto scheduled_time_it = scheduled_times_.find(actor);
-  DCHECK(scheduled_time_it != scheduled_times_.end());
+  QUICHE_DCHECK(scheduled_time_it != scheduled_times_.end());
   QuicTime scheduled_time = scheduled_time_it->second;
 
   if (scheduled_time <= new_time) {
@@ -86,10 +86,10 @@
 
 void Simulator::Unschedule(Actor* actor) {
   auto scheduled_time_it = scheduled_times_.find(actor);
-  DCHECK(scheduled_time_it != scheduled_times_.end());
+  QUICHE_DCHECK(scheduled_time_it != scheduled_times_.end());
   QuicTime scheduled_time = scheduled_time_it->second;
 
-  DCHECK(scheduled_time != QuicTime::Infinite());
+  QUICHE_DCHECK(scheduled_time != QuicTime::Infinite());
   auto range = schedule_.equal_range(scheduled_time);
   for (auto it = range.first; it != range.second; ++it) {
     if (it->second == actor) {
@@ -98,7 +98,7 @@
       return;
     }
   }
-  DCHECK(false);
+  QUICHE_DCHECK(false);
 }
 
 const QuicClock* Simulator::GetClock() const {
@@ -129,7 +129,7 @@
 }
 
 void Simulator::RunFor(QuicTime::Delta time_span) {
-  DCHECK(!run_for_alarm_->IsSet());
+  QUICHE_DCHECK(!run_for_alarm_->IsSet());
 
   // RunFor() ensures that the simulation stops at the exact time specified by
   // scheduling an alarm at that point and using that alarm to abort the
@@ -141,8 +141,8 @@
   run_for_should_stop_ = false;
   bool simulation_result = RunUntil([this]() { return run_for_should_stop_; });
 
-  DCHECK(simulation_result);
-  DCHECK(clock_.Now() == end_time);
+  QUICHE_DCHECK(simulation_result);
+  QUICHE_DCHECK(clock_.Now() == end_time);
 }
 
 void Simulator::HandleNextScheduledActor() {
diff --git a/quic/test_tools/simulator/traffic_policer.cc b/quic/test_tools/simulator/traffic_policer.cc
index e44e67f..be62669 100644
--- a/quic/test_tools/simulator/traffic_policer.cc
+++ b/quic/test_tools/simulator/traffic_policer.cc
@@ -45,7 +45,7 @@
   }
 
   auto bucket = token_buckets_.find(packet.destination);
-  DCHECK(bucket != token_buckets_.end());
+  QUICHE_DCHECK(bucket != token_buckets_.end());
 
   // Silently drop the packet on the floor if out of tokens
   if (bucket->second < packet.size) {
diff --git a/quic/tools/quic_client.cc b/quic/tools/quic_client.cc
index 131ed33..f8375ab 100644
--- a/quic/tools/quic_client.cc
+++ b/quic/tools/quic_client.cc
@@ -48,7 +48,7 @@
     return QuicSocketAddress();
   }
 
-  CHECK(info_list != nullptr);
+  QUICHE_CHECK(info_list != nullptr);
   std::unique_ptr<addrinfo, void (*)(addrinfo*)> info_list_owned(info_list,
                                                                  freeaddrinfo);
   return QuicSocketAddress(info_list->ai_addr, info_list->ai_addrlen);
diff --git a/quic/tools/quic_client_base.cc b/quic/tools/quic_client_base.cc
index 6666dbb..57cfcb5 100644
--- a/quic/tools/quic_client_base.cc
+++ b/quic/tools/quic_client_base.cc
@@ -55,7 +55,7 @@
     client_->session()->MigratePath(
         migration_context->self_address(), migration_context->peer_address(),
         migration_context->WriterToUse(), /*owns_writer=*/false);
-    DCHECK(migration_context->WriterToUse() != nullptr);
+    QUICHE_DCHECK(migration_context->WriterToUse() != nullptr);
     // Hand the ownership of the alternative writer to the client.
     client_->set_writer(migration_context->ReleaseWriter());
   }
@@ -154,8 +154,8 @@
 }
 
 void QuicClientBase::StartConnect() {
-  DCHECK(initialized_);
-  DCHECK(!connected());
+  QUICHE_DCHECK(initialized_);
+  QUICHE_DCHECK(!connected());
   QuicPacketWriter* writer = network_helper_->CreateQuicPacketWriter();
   ParsedQuicVersion mutual_version = UnsupportedQuicVersion();
   const bool can_reconnect_with_different_version =
@@ -205,7 +205,7 @@
 }
 
 void QuicClientBase::Disconnect() {
-  DCHECK(initialized_);
+  QUICHE_DCHECK(initialized_);
 
   initialized_ = false;
   if (connected()) {
@@ -236,7 +236,7 @@
 
   network_helper_->RunEventLoop();
 
-  DCHECK(session() != nullptr);
+  QUICHE_DCHECK(session() != nullptr);
   ParsedQuicVersion version = UnsupportedQuicVersion();
   if (!connected() && CanReconnectWithDifferentVersion(&version)) {
     QUIC_DLOG(INFO) << "Can reconnect with version: " << version
@@ -273,9 +273,9 @@
 }
 
 bool QuicClientBase::ValidateAndMigrateSocket(const QuicIpAddress& new_host) {
-  DCHECK(VersionHasIetfQuicFrames(
-             session_->connection()->version().transport_version) &&
-         session_->connection()->use_path_validator());
+  QUICHE_DCHECK(VersionHasIetfQuicFrames(
+                    session_->connection()->version().transport_version) &&
+                session_->connection()->use_path_validator());
   if (!connected()) {
     return false;
   }
diff --git a/quic/tools/quic_client_epoll_network_helper.cc b/quic/tools/quic_client_epoll_network_helper.cc
index e31ef11..2049f15 100644
--- a/quic/tools/quic_client_epoll_network_helper.cc
+++ b/quic/tools/quic_client_epoll_network_helper.cc
@@ -110,7 +110,7 @@
   if (fd > -1) {
     epoll_server_->UnregisterFD(fd);
     int rc = close(fd);
-    DCHECK_EQ(0, rc);
+    QUICHE_DCHECK_EQ(0, rc);
   }
 }
 
diff --git a/quic/tools/quic_client_interop_test_bin.cc b/quic/tools/quic_client_interop_test_bin.cc
index 822c61b..f67a338 100644
--- a/quic/tools/quic_client_interop_test_bin.cc
+++ b/quic/tools/quic_client_interop_test_bin.cc
@@ -378,7 +378,7 @@
       break;
     }
   }
-  CHECK(version.IsKnown());
+  QUICHE_CHECK(version.IsKnown());
   QuicEnableVersion(version);
 
   std::cout << "Attempting interop with version " << version << std::endl;
diff --git a/quic/tools/quic_client_test.cc b/quic/tools/quic_client_test.cc
index 0eec86f..160f255 100644
--- a/quic/tools/quic_client_test.cc
+++ b/quic/tools/quic_client_test.cc
@@ -29,7 +29,8 @@
 std::string ReadLink(const std::string& path) {
   std::string result(PATH_MAX, '\0');
   ssize_t result_size = readlink(path.c_str(), &result[0], result.size());
-  CHECK(result_size > 0 && static_cast<size_t>(result_size) < result.size());
+  QUICHE_CHECK(result_size > 0 &&
+               static_cast<size_t>(result_size) < result.size());
   result.resize(result_size);
   return result;
 }
diff --git a/quic/tools/quic_memory_cache_backend.cc b/quic/tools/quic_memory_cache_backend.cc
index df2f604..c67e5b3 100644
--- a/quic/tools/quic_memory_cache_backend.cc
+++ b/quic/tools/quic_memory_cache_backend.cc
@@ -105,7 +105,7 @@
 
 void QuicMemoryCacheBackend::ResourceFile::SetHostPathFromBase(
     absl::string_view base) {
-  DCHECK(base[0] != '/') << base;
+  QUICHE_DCHECK(base[0] != '/') << base;
   size_t path_start = base.find_first_of('/');
   if (path_start == absl::string_view::npos) {
     host_ = std::string(base);
@@ -359,7 +359,8 @@
     Http2HeaderBlock response_trailers) {
   QuicWriterMutexLock lock(&response_mutex_);
 
-  DCHECK(!host.empty()) << "Host must be populated, e.g. \"www.google.com\"";
+  QUICHE_DCHECK(!host.empty())
+      << "Host must be populated, e.g. \"www.google.com\"";
   std::string key = GetKey(host, path);
   if (QuicContainsKey(responses_, key)) {
     QUIC_BUG << "Response for '" << key << "' already exists!";
diff --git a/quic/tools/quic_packet_printer_bin.cc b/quic/tools/quic_packet_printer_bin.cc
index 937921e..9d67b09 100644
--- a/quic/tools/quic_packet_printer_bin.cc
+++ b/quic/tools/quic_packet_printer_bin.cc
@@ -82,7 +82,7 @@
   }
   void OnDecryptedPacket(size_t /*length*/, EncryptionLevel level) override {
     // This only currently supports "decrypting" null encrypted packets.
-    DCHECK_EQ(ENCRYPTION_INITIAL, level);
+    QUICHE_DCHECK_EQ(ENCRYPTION_INITIAL, level);
     std::cerr << "OnDecryptedPacket\n";
   }
   bool OnPacketHeader(const QuicPacketHeader& /*header*/) override {
diff --git a/quic/tools/quic_server.cc b/quic/tools/quic_server.cc
index f10d672..fe10d12 100644
--- a/quic/tools/quic_server.cc
+++ b/quic/tools/quic_server.cc
@@ -82,7 +82,7 @@
       quic_simple_server_backend_(quic_simple_server_backend),
       expected_server_connection_id_length_(
           expected_server_connection_id_length) {
-  DCHECK(quic_simple_server_backend_);
+  QUICHE_DCHECK(quic_simple_server_backend_);
   Initialize();
 }
 
@@ -190,7 +190,7 @@
 }
 
 void QuicServer::OnEvent(int fd, QuicEpollEvent* event) {
-  DCHECK_EQ(fd, fd_);
+  QUICHE_DCHECK_EQ(fd, fd_);
   event->out_ready_mask = 0;
 
   if (event->in_events & EPOLLIN) {
diff --git a/quic/tools/quic_server_test.cc b/quic/tools/quic_server_test.cc
index e48ccec..80ab7f7 100644
--- a/quic/tools/quic_server_test.cc
+++ b/quic/tools/quic_server_test.cc
@@ -118,7 +118,7 @@
   StartListening();
   bool more_chlos = true;
   MockQuicSimpleDispatcher* dispatcher_ = server_.mock_dispatcher();
-  DCHECK(dispatcher_ != nullptr);
+  QUICHE_DCHECK(dispatcher_ != nullptr);
   EXPECT_CALL(*dispatcher_, OnCanWrite()).Times(testing::AnyNumber());
   EXPECT_CALL(*dispatcher_, ProcessBufferedChlos(_)).Times(2);
   EXPECT_CALL(*dispatcher_, HasPendingWrites()).Times(testing::AnyNumber());
diff --git a/quic/tools/quic_simple_server_session.cc b/quic/tools/quic_simple_server_session.cc
index 740b591..044998c 100644
--- a/quic/tools/quic_simple_server_session.cc
+++ b/quic/tools/quic_simple_server_session.cc
@@ -35,7 +35,7 @@
       highest_promised_stream_id_(
           QuicUtils::GetInvalidStreamId(connection->transport_version())),
       quic_simple_server_backend_(quic_simple_server_backend) {
-  DCHECK(quic_simple_server_backend_);
+  QUICHE_DCHECK(quic_simple_server_backend_);
 }
 
 QuicSimpleServerSession::~QuicSimpleServerSession() {
@@ -115,7 +115,7 @@
 
 QuicSimpleServerStream*
 QuicSimpleServerSession::CreateOutgoingBidirectionalStream() {
-  DCHECK(false);
+  QUICHE_DCHECK(false);
   return nullptr;
 }
 
@@ -206,8 +206,8 @@
   while (!promised_streams_.empty() &&
          ShouldCreateOutgoingUnidirectionalStream()) {
     PromisedStreamInfo& promised_info = promised_streams_.front();
-    DCHECK_EQ(next_outgoing_unidirectional_stream_id(),
-              promised_info.stream_id);
+    QUICHE_DCHECK_EQ(next_outgoing_unidirectional_stream_id(),
+                     promised_info.stream_id);
 
     if (promised_info.is_cancelled) {
       // This stream has been reset by client. Skip this stream id.
@@ -219,8 +219,8 @@
     QuicSimpleServerStream* promised_stream =
         static_cast<QuicSimpleServerStream*>(
             CreateOutgoingUnidirectionalStream());
-    DCHECK_NE(promised_stream, nullptr);
-    DCHECK_EQ(promised_info.stream_id, promised_stream->id());
+    QUICHE_DCHECK_NE(promised_stream, nullptr);
+    QUICHE_DCHECK_EQ(promised_info.stream_id, promised_stream->id());
     QUIC_DLOG(INFO) << "created server push stream " << promised_stream->id();
 
     promised_stream->SetPriority(promised_info.precedence);
@@ -245,7 +245,7 @@
   size_t previous_static_stream_count = num_static_streams();
   QuicSpdySession::MaybeInitializeHttp3UnidirectionalStreams();
   size_t current_static_stream_count = num_static_streams();
-  DCHECK_GE(current_static_stream_count, previous_static_stream_count);
+  QUICHE_DCHECK_GE(current_static_stream_count, previous_static_stream_count);
   highest_promised_stream_id_ +=
       QuicUtils::StreamIdDelta(transport_version()) *
       (current_static_stream_count - previous_static_stream_count);
diff --git a/quic/tools/quic_simple_server_stream.cc b/quic/tools/quic_simple_server_stream.cc
index 7a439c2..800608b 100644
--- a/quic/tools/quic_simple_server_stream.cc
+++ b/quic/tools/quic_simple_server_stream.cc
@@ -34,7 +34,7 @@
       content_length_(-1),
       generate_bytes_length_(0),
       quic_simple_server_backend_(quic_simple_server_backend) {
-  DCHECK(quic_simple_server_backend_);
+  QUICHE_DCHECK(quic_simple_server_backend_);
 }
 
 QuicSimpleServerStream::QuicSimpleServerStream(
@@ -46,7 +46,7 @@
       content_length_(-1),
       generate_bytes_length_(0),
       quic_simple_server_backend_(quic_simple_server_backend) {
-  DCHECK(quic_simple_server_backend_);
+  QUICHE_DCHECK(quic_simple_server_backend_);
 }
 
 QuicSimpleServerStream::~QuicSimpleServerStream() {
@@ -132,7 +132,7 @@
   content_length_ = 0;
   QUIC_DVLOG(1) << "Stream " << id()
                 << " ready to receive server push response.";
-  DCHECK(reading_stopped());
+  QUICHE_DCHECK(reading_stopped());
 
   // Directly send response based on the emulated request_headers_.
   SendResponse();
diff --git a/quic/tools/quic_simple_server_stream_test.cc b/quic/tools/quic_simple_server_stream_test.cc
index c83de42..cee1753 100644
--- a/quic/tools/quic_simple_server_stream_test.cc
+++ b/quic/tools/quic_simple_server_stream_test.cc
@@ -80,7 +80,7 @@
 
   absl::string_view GetHeader(absl::string_view key) const {
     auto it = request_headers_.find(key);
-    DCHECK(it != request_headers_.end());
+    QUICHE_DCHECK(it != request_headers_.end());
     return it->second;
   }
 
@@ -211,11 +211,11 @@
     if (write_length > 0) {
       auto buf = std::make_unique<char[]>(write_length);
       QuicStream* stream = GetOrCreateStream(id);
-      DCHECK(stream);
+      QUICHE_DCHECK(stream);
       QuicDataWriter writer(write_length, buf.get(), quiche::HOST_BYTE_ORDER);
       stream->WriteStreamData(offset, write_length, &writer);
     } else {
-      DCHECK(state != NO_FIN);
+      QUICHE_DCHECK(state != NO_FIN);
     }
     return QuicConsumedData(write_length, state != NO_FIN);
   }
diff --git a/quic/tools/quic_spdy_client_base.cc b/quic/tools/quic_spdy_client_base.cc
index 4fe5d1a..d28eb77 100644
--- a/quic/tools/quic_spdy_client_base.cc
+++ b/quic/tools/quic_spdy_client_base.cc
@@ -77,7 +77,7 @@
 }
 
 void QuicSpdyClientBase::OnClose(QuicSpdyStream* stream) {
-  DCHECK(stream != nullptr);
+  QUICHE_DCHECK(stream != nullptr);
   QuicSpdyClientStream* client_stream =
       static_cast<QuicSpdyClientStream*>(stream);
 
diff --git a/quic/tools/quic_toy_client.cc b/quic/tools/quic_toy_client.cc
index 45c2531..15cdc29 100644
--- a/quic/tools/quic_toy_client.cc
+++ b/quic/tools/quic_toy_client.cc
@@ -337,7 +337,7 @@
   // Construct the string body from flags, if provided.
   std::string body = GetQuicFlag(FLAGS_body);
   if (!GetQuicFlag(FLAGS_body_hex).empty()) {
-    DCHECK(GetQuicFlag(FLAGS_body).empty())
+    QUICHE_DCHECK(GetQuicFlag(FLAGS_body).empty())
         << "Only set one of --body and --body_hex.";
     body = absl::HexStringToBytes(GetQuicFlag(FLAGS_body_hex));
   }
diff --git a/quic/tools/quic_transport_simple_server_session.cc b/quic/tools/quic_transport_simple_server_session.cc
index 42250d0..ad93115 100644
--- a/quic/tools/quic_transport_simple_server_session.cc
+++ b/quic/tools/quic_transport_simple_server_session.cc
@@ -51,7 +51,7 @@
 
   void OnFinRead() override {
     bool success = stream_->SendFin();
-    DCHECK(success);
+    QUICHE_DCHECK(success);
   }
 
   void OnCanWrite() override {
@@ -79,7 +79,7 @@
 
   void OnCanRead() override {
     bool success = stream_->Read(&buffer_);
-    DCHECK(success);
+    QUICHE_DCHECK(success);
   }
 
   void OnFinRead() override {
@@ -114,7 +114,7 @@
     }
     data_ = "";
     bool fin_sent = stream_->SendFin();
-    DCHECK(fin_sent);
+    QUICHE_DCHECK(fin_sent);
   }
 
  private: