diff --git a/http2/decoder/decode_buffer.cc b/http2/decoder/decode_buffer.cc
index b0519f3..2d1b6f7 100644
--- a/http2/decoder/decode_buffer.cc
+++ b/http2/decoder/decode_buffer.cc
@@ -11,7 +11,7 @@
 }
 
 uint16_t DecodeBuffer::DecodeUInt16() {
-  DCHECK_LE(2u, Remaining());
+  QUICHE_DCHECK_LE(2u, Remaining());
   const uint8_t b1 = DecodeUInt8();
   const uint8_t b2 = DecodeUInt8();
   // Note that chars are automatically promoted to ints during arithmetic,
@@ -21,7 +21,7 @@
 }
 
 uint32_t DecodeBuffer::DecodeUInt24() {
-  DCHECK_LE(3u, Remaining());
+  QUICHE_DCHECK_LE(3u, Remaining());
   const uint8_t b1 = DecodeUInt8();
   const uint8_t b2 = DecodeUInt8();
   const uint8_t b3 = DecodeUInt8();
@@ -29,7 +29,7 @@
 }
 
 uint32_t DecodeBuffer::DecodeUInt31() {
-  DCHECK_LE(4u, Remaining());
+  QUICHE_DCHECK_LE(4u, Remaining());
   const uint8_t b1 = DecodeUInt8() & 0x7f;  // Mask out the high order bit.
   const uint8_t b2 = DecodeUInt8();
   const uint8_t b3 = DecodeUInt8();
@@ -38,7 +38,7 @@
 }
 
 uint32_t DecodeBuffer::DecodeUInt32() {
-  DCHECK_LE(4u, Remaining());
+  QUICHE_DCHECK_LE(4u, Remaining());
   const uint8_t b1 = DecodeUInt8();
   const uint8_t b2 = DecodeUInt8();
   const uint8_t b3 = DecodeUInt8();
@@ -49,42 +49,42 @@
 #ifndef NDEBUG
 void DecodeBuffer::set_subset_of_base(DecodeBuffer* base,
                                       const DecodeBufferSubset* subset) {
-  DCHECK_EQ(this, subset);
+  QUICHE_DCHECK_EQ(this, subset);
   base->set_subset(subset);
 }
 void DecodeBuffer::clear_subset_of_base(DecodeBuffer* base,
                                         const DecodeBufferSubset* subset) {
-  DCHECK_EQ(this, subset);
+  QUICHE_DCHECK_EQ(this, subset);
   base->clear_subset(subset);
 }
 void DecodeBuffer::set_subset(const DecodeBufferSubset* subset) {
-  DCHECK(subset != nullptr);
-  DCHECK_EQ(subset_, nullptr) << "There is already a subset";
+  QUICHE_DCHECK(subset != nullptr);
+  QUICHE_DCHECK_EQ(subset_, nullptr) << "There is already a subset";
   subset_ = subset;
 }
 void DecodeBuffer::clear_subset(const DecodeBufferSubset* subset) {
-  DCHECK(subset != nullptr);
-  DCHECK_EQ(subset_, subset);
+  QUICHE_DCHECK(subset != nullptr);
+  QUICHE_DCHECK_EQ(subset_, subset);
   subset_ = nullptr;
 }
 void DecodeBufferSubset::DebugSetup() {
   start_base_offset_ = base_buffer_->Offset();
   max_base_offset_ = start_base_offset_ + FullSize();
-  DCHECK_LE(max_base_offset_, base_buffer_->FullSize());
+  QUICHE_DCHECK_LE(max_base_offset_, base_buffer_->FullSize());
 
   // Ensure that there is only one DecodeBufferSubset at a time for a base.
   set_subset_of_base(base_buffer_, this);
 }
 void DecodeBufferSubset::DebugTearDown() {
   // Ensure that the base hasn't been modified.
-  DCHECK_EQ(start_base_offset_, base_buffer_->Offset())
+  QUICHE_DCHECK_EQ(start_base_offset_, base_buffer_->Offset())
       << "The base buffer was modified";
 
   // Ensure that we haven't gone beyond the maximum allowed offset.
   size_t offset = Offset();
-  DCHECK_LE(offset, FullSize());
-  DCHECK_LE(start_base_offset_ + offset, max_base_offset_);
-  DCHECK_LE(max_base_offset_, base_buffer_->FullSize());
+  QUICHE_DCHECK_LE(offset, FullSize());
+  QUICHE_DCHECK_LE(start_base_offset_ + offset, max_base_offset_);
+  QUICHE_DCHECK_LE(max_base_offset_, base_buffer_->FullSize());
 
   clear_subset_of_base(base_buffer_, this);
 }
diff --git a/http2/decoder/decode_buffer.h b/http2/decoder/decode_buffer.h
index 2b701c9..4757c06 100644
--- a/http2/decoder/decode_buffer.h
+++ b/http2/decoder/decode_buffer.h
@@ -28,12 +28,12 @@
  public:
   DecodeBuffer(const char* buffer, size_t len)
       : buffer_(buffer), cursor_(buffer), beyond_(buffer + len) {
-    DCHECK(buffer != nullptr);
+    QUICHE_DCHECK(buffer != nullptr);
     // We assume the decode buffers will typically be modest in size (i.e. often
     // a few KB, perhaps as high as 100KB). Let's make sure during testing that
     // we don't go very high, with 32MB selected rather arbitrarily.
     const size_t kMaxDecodeBufferLength = 1 << 25;
-    DCHECK_LE(len, kMaxDecodeBufferLength);
+    QUICHE_DCHECK_LE(len, kMaxDecodeBufferLength);
   }
   explicit DecodeBuffer(absl::string_view s)
       : DecodeBuffer(s.data(), s.size()) {}
@@ -49,7 +49,7 @@
   bool Empty() const { return cursor_ >= beyond_; }
   bool HasData() const { return cursor_ < beyond_; }
   size_t Remaining() const {
-    DCHECK_LE(cursor_, beyond_);
+    QUICHE_DCHECK_LE(cursor_, beyond_);
     return beyond_ - cursor_;
   }
   size_t Offset() const { return cursor_ - buffer_; }
@@ -66,15 +66,18 @@
   const char* cursor() const { return cursor_; }
   // Advances the cursor (pointer to the next byte/char to be decoded).
   void AdvanceCursor(size_t amount) {
-    DCHECK_LE(amount, Remaining());  // Need at least that much remaining.
-    DCHECK_EQ(subset_, nullptr) << "Access via subset only when present.";
+    QUICHE_DCHECK_LE(amount,
+                     Remaining());  // Need at least that much remaining.
+    QUICHE_DCHECK_EQ(subset_, nullptr)
+        << "Access via subset only when present.";
     cursor_ += amount;
   }
 
   // Only call methods starting "Decode" when there is enough input remaining.
   char DecodeChar() {
-    DCHECK_LE(1u, Remaining());  // Need at least one byte remaining.
-    DCHECK_EQ(subset_, nullptr) << "Access via subset only when present.";
+    QUICHE_DCHECK_LE(1u, Remaining());  // Need at least one byte remaining.
+    QUICHE_DCHECK_EQ(subset_, nullptr)
+        << "Access via subset only when present.";
     return *cursor_++;
   }
 
@@ -114,7 +117,7 @@
   const char* const buffer_;
   const char* cursor_;
   const char* const beyond_;
-  const DecodeBufferSubset* subset_ = nullptr;  // Used for DCHECKs.
+  const DecodeBufferSubset* subset_ = nullptr;  // Used for QUICHE_DCHECKs.
 };
 
 // DecodeBufferSubset is used when decoding a known sized chunk of data, which
@@ -153,8 +156,8 @@
  private:
   DecodeBuffer* const base_buffer_;
 #ifndef NDEBUG
-  size_t start_base_offset_;  // Used for DCHECKs.
-  size_t max_base_offset_;    // Used for DCHECKs.
+  size_t start_base_offset_;  // Used for QUICHE_DCHECKs.
+  size_t max_base_offset_;    // Used for QUICHE_DCHECKs.
 
   void DebugSetup();
   void DebugTearDown();
diff --git a/http2/decoder/decode_http2_structures.cc b/http2/decoder/decode_http2_structures.cc
index 2f0b06e..a5582c2 100644
--- a/http2/decoder/decode_http2_structures.cc
+++ b/http2/decoder/decode_http2_structures.cc
@@ -16,9 +16,9 @@
 // Http2FrameHeader decoding:
 
 void DoDecode(Http2FrameHeader* out, DecodeBuffer* b) {
-  DCHECK_NE(nullptr, out);
-  DCHECK_NE(nullptr, b);
-  DCHECK_LE(Http2FrameHeader::EncodedSize(), b->Remaining());
+  QUICHE_DCHECK_NE(nullptr, out);
+  QUICHE_DCHECK_NE(nullptr, b);
+  QUICHE_DCHECK_LE(Http2FrameHeader::EncodedSize(), b->Remaining());
   out->payload_length = b->DecodeUInt24();
   out->type = static_cast<Http2FrameType>(b->DecodeUInt8());
   out->flags = static_cast<Http2FrameFlag>(b->DecodeUInt8());
@@ -28,9 +28,9 @@
 // Http2PriorityFields decoding:
 
 void DoDecode(Http2PriorityFields* out, DecodeBuffer* b) {
-  DCHECK_NE(nullptr, out);
-  DCHECK_NE(nullptr, b);
-  DCHECK_LE(Http2PriorityFields::EncodedSize(), b->Remaining());
+  QUICHE_DCHECK_NE(nullptr, out);
+  QUICHE_DCHECK_NE(nullptr, b);
+  QUICHE_DCHECK_LE(Http2PriorityFields::EncodedSize(), b->Remaining());
   uint32_t stream_id_and_flag = b->DecodeUInt32();
   out->stream_dependency = stream_id_and_flag & StreamIdMask();
   if (out->stream_dependency == stream_id_and_flag) {
@@ -46,18 +46,18 @@
 // Http2RstStreamFields decoding:
 
 void DoDecode(Http2RstStreamFields* out, DecodeBuffer* b) {
-  DCHECK_NE(nullptr, out);
-  DCHECK_NE(nullptr, b);
-  DCHECK_LE(Http2RstStreamFields::EncodedSize(), b->Remaining());
+  QUICHE_DCHECK_NE(nullptr, out);
+  QUICHE_DCHECK_NE(nullptr, b);
+  QUICHE_DCHECK_LE(Http2RstStreamFields::EncodedSize(), b->Remaining());
   out->error_code = static_cast<Http2ErrorCode>(b->DecodeUInt32());
 }
 
 // Http2SettingFields decoding:
 
 void DoDecode(Http2SettingFields* out, DecodeBuffer* b) {
-  DCHECK_NE(nullptr, out);
-  DCHECK_NE(nullptr, b);
-  DCHECK_LE(Http2SettingFields::EncodedSize(), b->Remaining());
+  QUICHE_DCHECK_NE(nullptr, out);
+  QUICHE_DCHECK_NE(nullptr, b);
+  QUICHE_DCHECK_LE(Http2SettingFields::EncodedSize(), b->Remaining());
   out->parameter = static_cast<Http2SettingsParameter>(b->DecodeUInt16());
   out->value = b->DecodeUInt32();
 }
@@ -65,18 +65,18 @@
 // Http2PushPromiseFields decoding:
 
 void DoDecode(Http2PushPromiseFields* out, DecodeBuffer* b) {
-  DCHECK_NE(nullptr, out);
-  DCHECK_NE(nullptr, b);
-  DCHECK_LE(Http2PushPromiseFields::EncodedSize(), b->Remaining());
+  QUICHE_DCHECK_NE(nullptr, out);
+  QUICHE_DCHECK_NE(nullptr, b);
+  QUICHE_DCHECK_LE(Http2PushPromiseFields::EncodedSize(), b->Remaining());
   out->promised_stream_id = b->DecodeUInt31();
 }
 
 // Http2PingFields decoding:
 
 void DoDecode(Http2PingFields* out, DecodeBuffer* b) {
-  DCHECK_NE(nullptr, out);
-  DCHECK_NE(nullptr, b);
-  DCHECK_LE(Http2PingFields::EncodedSize(), b->Remaining());
+  QUICHE_DCHECK_NE(nullptr, out);
+  QUICHE_DCHECK_NE(nullptr, b);
+  QUICHE_DCHECK_LE(Http2PingFields::EncodedSize(), b->Remaining());
   memcpy(out->opaque_bytes, b->cursor(), Http2PingFields::EncodedSize());
   b->AdvanceCursor(Http2PingFields::EncodedSize());
 }
@@ -84,9 +84,9 @@
 // Http2GoAwayFields decoding:
 
 void DoDecode(Http2GoAwayFields* out, DecodeBuffer* b) {
-  DCHECK_NE(nullptr, out);
-  DCHECK_NE(nullptr, b);
-  DCHECK_LE(Http2GoAwayFields::EncodedSize(), b->Remaining());
+  QUICHE_DCHECK_NE(nullptr, out);
+  QUICHE_DCHECK_NE(nullptr, b);
+  QUICHE_DCHECK_LE(Http2GoAwayFields::EncodedSize(), b->Remaining());
   out->last_stream_id = b->DecodeUInt31();
   out->error_code = static_cast<Http2ErrorCode>(b->DecodeUInt32());
 }
@@ -94,27 +94,27 @@
 // Http2WindowUpdateFields decoding:
 
 void DoDecode(Http2WindowUpdateFields* out, DecodeBuffer* b) {
-  DCHECK_NE(nullptr, out);
-  DCHECK_NE(nullptr, b);
-  DCHECK_LE(Http2WindowUpdateFields::EncodedSize(), b->Remaining());
+  QUICHE_DCHECK_NE(nullptr, out);
+  QUICHE_DCHECK_NE(nullptr, b);
+  QUICHE_DCHECK_LE(Http2WindowUpdateFields::EncodedSize(), b->Remaining());
   out->window_size_increment = b->DecodeUInt31();
 }
 
 // Http2PriorityUpdateFields decoding:
 
 void DoDecode(Http2PriorityUpdateFields* out, DecodeBuffer* b) {
-  DCHECK_NE(nullptr, out);
-  DCHECK_NE(nullptr, b);
-  DCHECK_LE(Http2PriorityUpdateFields::EncodedSize(), b->Remaining());
+  QUICHE_DCHECK_NE(nullptr, out);
+  QUICHE_DCHECK_NE(nullptr, b);
+  QUICHE_DCHECK_LE(Http2PriorityUpdateFields::EncodedSize(), b->Remaining());
   out->prioritized_stream_id = b->DecodeUInt31();
 }
 
 // Http2AltSvcFields decoding:
 
 void DoDecode(Http2AltSvcFields* out, DecodeBuffer* b) {
-  DCHECK_NE(nullptr, out);
-  DCHECK_NE(nullptr, b);
-  DCHECK_LE(Http2AltSvcFields::EncodedSize(), b->Remaining());
+  QUICHE_DCHECK_NE(nullptr, out);
+  QUICHE_DCHECK_NE(nullptr, b);
+  QUICHE_DCHECK_LE(Http2AltSvcFields::EncodedSize(), b->Remaining());
   out->origin_length = b->DecodeUInt16();
 }
 
diff --git a/http2/decoder/frame_decoder_state.cc b/http2/decoder/frame_decoder_state.cc
index 5acee1b..ee53964 100644
--- a/http2/decoder/frame_decoder_state.cc
+++ b/http2/decoder/frame_decoder_state.cc
@@ -10,14 +10,14 @@
                                               bool report_pad_length) {
   HTTP2_DVLOG(2) << "ReadPadLength db->Remaining=" << db->Remaining()
                  << "; payload_length=" << frame_header().payload_length;
-  DCHECK(IsPaddable());
-  DCHECK(frame_header().IsPadded());
+  QUICHE_DCHECK(IsPaddable());
+  QUICHE_DCHECK(frame_header().IsPadded());
 
   // Pad Length is always at the start of the frame, so remaining_payload_
   // should equal payload_length at this point.
   const uint32_t total_payload = frame_header().payload_length;
-  DCHECK_EQ(total_payload, remaining_payload_);
-  DCHECK_EQ(0u, remaining_padding_);
+  QUICHE_DCHECK_EQ(total_payload, remaining_payload_);
+  QUICHE_DCHECK_EQ(0u, remaining_padding_);
 
   if (db->HasData()) {
     const uint32_t pad_length = db->DecodeUInt8();
@@ -54,9 +54,9 @@
   HTTP2_DVLOG(2) << "SkipPadding remaining_padding_=" << remaining_padding_
                  << ", db->Remaining=" << db->Remaining()
                  << ", header: " << frame_header();
-  DCHECK_EQ(remaining_payload_, 0u);
-  DCHECK(IsPaddable()) << "header: " << frame_header();
-  DCHECK(remaining_padding_ == 0 || frame_header().IsPadded())
+  QUICHE_DCHECK_EQ(remaining_payload_, 0u);
+  QUICHE_DCHECK(IsPaddable()) << "header: " << frame_header();
+  QUICHE_DCHECK(remaining_padding_ == 0 || frame_header().IsPadded())
       << "remaining_padding_=" << remaining_padding_
       << ", header: " << frame_header();
   const size_t avail = AvailablePadding(db);
diff --git a/http2/decoder/frame_decoder_state.h b/http2/decoder/frame_decoder_state.h
index cdce155..f0c1357 100644
--- a/http2/decoder/frame_decoder_state.h
+++ b/http2/decoder/frame_decoder_state.h
@@ -107,7 +107,7 @@
   // after the variables have been initialized, which in practice means once a
   // payload decoder has called InitializeRemainders and/or ReadPadLength.
   size_t remaining_total_payload() const {
-    DCHECK(IsPaddable() || remaining_padding_ == 0) << frame_header();
+    QUICHE_DCHECK(IsPaddable() || remaining_padding_ == 0) << frame_header();
     return remaining_payload_ + remaining_padding_;
   }
 
@@ -125,7 +125,7 @@
   // which in practice means once a payload decoder has called
   // InitializeRemainders and/or ReadPadLength.
   size_t remaining_payload_and_padding() const {
-    DCHECK(IsPaddable()) << frame_header();
+    QUICHE_DCHECK(IsPaddable()) << frame_header();
     return remaining_payload_ + remaining_padding_;
   }
 
@@ -135,7 +135,7 @@
   // practice means once a payload decoder has called InitializeRemainders,
   // and isn't set to a non-zero value until ReadPadLength has been called.
   uint32_t remaining_padding() const {
-    DCHECK(IsPaddable()) << frame_header();
+    QUICHE_DCHECK(IsPaddable()) << frame_header();
     return remaining_padding_;
   }
 
@@ -147,7 +147,7 @@
   // How many bytes of the remaining payload and padding are in db?
   // Call only for frames whose type is paddable.
   size_t AvailablePayloadAndPadding(DecodeBuffer* db) const {
-    DCHECK(IsPaddable()) << frame_header();
+    QUICHE_DCHECK(IsPaddable()) << frame_header();
     return db->MinLengthRemaining(remaining_payload_ + remaining_padding_);
   }
 
@@ -156,8 +156,8 @@
   // been cleared (for unpadded frames); and after all of the non-padding
   // payload has been decoded.
   size_t AvailablePadding(DecodeBuffer* db) const {
-    DCHECK(IsPaddable()) << frame_header();
-    DCHECK_EQ(remaining_payload_, 0u);
+    QUICHE_DCHECK(IsPaddable()) << frame_header();
+    QUICHE_DCHECK_EQ(remaining_payload_, 0u);
     return db->MinLengthRemaining(remaining_padding_);
   }
 
@@ -166,7 +166,7 @@
   // listener; remaining_payload_ will be automatically reduced when fixed
   // size structures and padding, including the Pad Length field, are decoded.
   void ConsumePayload(size_t amount) {
-    DCHECK_LE(amount, remaining_payload_);
+    QUICHE_DCHECK_LE(amount, remaining_payload_);
     remaining_payload_ -= amount;
   }
 
diff --git a/http2/decoder/http2_frame_decoder.cc b/http2/decoder/http2_frame_decoder.cc
index e395a27..449d649 100644
--- a/http2/decoder/http2_frame_decoder.cc
+++ b/http2/decoder/http2_frame_decoder.cc
@@ -188,7 +188,7 @@
   // buffer we pass to the start method that is specific to the frame type
   // does not exend beyond this frame.
   size_t remaining = frame_decoder_state_.remaining_total_payload();
-  DCHECK_LE(remaining, frame_header().payload_length);
+  QUICHE_DCHECK_LE(remaining, frame_header().payload_length);
   DecodeBufferSubset subset(db, remaining);
   DecodeStatus status;
   switch (frame_header().type) {
@@ -279,8 +279,8 @@
 }
 DecodeStatus Http2FrameDecoder::ResumeDecodingAltSvcPayload(DecodeBuffer* db) {
   // The frame is not paddable.
-  DCHECK_EQ(frame_decoder_state_.remaining_total_payload(),
-            frame_decoder_state_.remaining_payload());
+  QUICHE_DCHECK_EQ(frame_decoder_state_.remaining_total_payload(),
+                   frame_decoder_state_.remaining_payload());
   return altsvc_payload_decoder_.ResumeDecodingPayload(&frame_decoder_state_,
                                                        db);
 }
@@ -294,8 +294,8 @@
 DecodeStatus Http2FrameDecoder::ResumeDecodingContinuationPayload(
     DecodeBuffer* db) {
   // The frame is not paddable.
-  DCHECK_EQ(frame_decoder_state_.remaining_total_payload(),
-            frame_decoder_state_.remaining_payload());
+  QUICHE_DCHECK_EQ(frame_decoder_state_.remaining_total_payload(),
+                   frame_decoder_state_.remaining_payload());
   return continuation_payload_decoder_.ResumeDecodingPayload(
       &frame_decoder_state_, db);
 }
@@ -315,8 +315,8 @@
 }
 DecodeStatus Http2FrameDecoder::ResumeDecodingGoAwayPayload(DecodeBuffer* db) {
   // The frame is not paddable.
-  DCHECK_EQ(frame_decoder_state_.remaining_total_payload(),
-            frame_decoder_state_.remaining_payload());
+  QUICHE_DCHECK_EQ(frame_decoder_state_.remaining_total_payload(),
+                   frame_decoder_state_.remaining_payload());
   return goaway_payload_decoder_.ResumeDecodingPayload(&frame_decoder_state_,
                                                        db);
 }
@@ -328,8 +328,8 @@
                                                        db);
 }
 DecodeStatus Http2FrameDecoder::ResumeDecodingHeadersPayload(DecodeBuffer* db) {
-  DCHECK_LE(frame_decoder_state_.remaining_payload_and_padding(),
-            frame_header().payload_length);
+  QUICHE_DCHECK_LE(frame_decoder_state_.remaining_payload_and_padding(),
+                   frame_header().payload_length);
   return headers_payload_decoder_.ResumeDecodingPayload(&frame_decoder_state_,
                                                         db);
 }
@@ -340,8 +340,8 @@
 }
 DecodeStatus Http2FrameDecoder::ResumeDecodingPingPayload(DecodeBuffer* db) {
   // The frame is not paddable.
-  DCHECK_EQ(frame_decoder_state_.remaining_total_payload(),
-            frame_decoder_state_.remaining_payload());
+  QUICHE_DCHECK_EQ(frame_decoder_state_.remaining_total_payload(),
+                   frame_decoder_state_.remaining_payload());
   return ping_payload_decoder_.ResumeDecodingPayload(&frame_decoder_state_, db);
 }
 
@@ -353,8 +353,8 @@
 DecodeStatus Http2FrameDecoder::ResumeDecodingPriorityPayload(
     DecodeBuffer* db) {
   // The frame is not paddable.
-  DCHECK_EQ(frame_decoder_state_.remaining_total_payload(),
-            frame_decoder_state_.remaining_payload());
+  QUICHE_DCHECK_EQ(frame_decoder_state_.remaining_total_payload(),
+                   frame_decoder_state_.remaining_payload());
   return priority_payload_decoder_.ResumeDecodingPayload(&frame_decoder_state_,
                                                          db);
 }
@@ -368,8 +368,8 @@
 DecodeStatus Http2FrameDecoder::ResumeDecodingPriorityUpdatePayload(
     DecodeBuffer* db) {
   // The frame is not paddable.
-  DCHECK_EQ(frame_decoder_state_.remaining_total_payload(),
-            frame_decoder_state_.remaining_payload());
+  QUICHE_DCHECK_EQ(frame_decoder_state_.remaining_total_payload(),
+                   frame_decoder_state_.remaining_payload());
   return priority_payload_update_decoder_.ResumeDecodingPayload(
       &frame_decoder_state_, db);
 }
@@ -382,8 +382,8 @@
 }
 DecodeStatus Http2FrameDecoder::ResumeDecodingPushPromisePayload(
     DecodeBuffer* db) {
-  DCHECK_LE(frame_decoder_state_.remaining_payload_and_padding(),
-            frame_header().payload_length);
+  QUICHE_DCHECK_LE(frame_decoder_state_.remaining_payload_and_padding(),
+                   frame_header().payload_length);
   return push_promise_payload_decoder_.ResumeDecodingPayload(
       &frame_decoder_state_, db);
 }
@@ -397,8 +397,8 @@
 DecodeStatus Http2FrameDecoder::ResumeDecodingRstStreamPayload(
     DecodeBuffer* db) {
   // The frame is not paddable.
-  DCHECK_EQ(frame_decoder_state_.remaining_total_payload(),
-            frame_decoder_state_.remaining_payload());
+  QUICHE_DCHECK_EQ(frame_decoder_state_.remaining_total_payload(),
+                   frame_decoder_state_.remaining_payload());
   return rst_stream_payload_decoder_.ResumeDecodingPayload(
       &frame_decoder_state_, db);
 }
@@ -411,8 +411,8 @@
 DecodeStatus Http2FrameDecoder::ResumeDecodingSettingsPayload(
     DecodeBuffer* db) {
   // The frame is not paddable.
-  DCHECK_EQ(frame_decoder_state_.remaining_total_payload(),
-            frame_decoder_state_.remaining_payload());
+  QUICHE_DCHECK_EQ(frame_decoder_state_.remaining_total_payload(),
+                   frame_decoder_state_.remaining_payload());
   return settings_payload_decoder_.ResumeDecodingPayload(&frame_decoder_state_,
                                                          db);
 }
@@ -425,8 +425,8 @@
 }
 DecodeStatus Http2FrameDecoder::ResumeDecodingUnknownPayload(DecodeBuffer* db) {
   // We don't known what type of frame this is, so we treat it as not paddable.
-  DCHECK_EQ(frame_decoder_state_.remaining_total_payload(),
-            frame_decoder_state_.remaining_payload());
+  QUICHE_DCHECK_EQ(frame_decoder_state_.remaining_total_payload(),
+                   frame_decoder_state_.remaining_payload());
   return unknown_payload_decoder_.ResumeDecodingPayload(&frame_decoder_state_,
                                                         db);
 }
@@ -440,8 +440,8 @@
 DecodeStatus Http2FrameDecoder::ResumeDecodingWindowUpdatePayload(
     DecodeBuffer* db) {
   // The frame is not paddable.
-  DCHECK_EQ(frame_decoder_state_.remaining_total_payload(),
-            frame_decoder_state_.remaining_payload());
+  QUICHE_DCHECK_EQ(frame_decoder_state_.remaining_total_payload(),
+                   frame_decoder_state_.remaining_payload());
   return window_update_payload_decoder_.ResumeDecodingPayload(
       &frame_decoder_state_, db);
 }
diff --git a/http2/decoder/http2_structure_decoder.h b/http2/decoder/http2_structure_decoder.h
index f27ea59..367e225 100644
--- a/http2/decoder/http2_structure_decoder.h
+++ b/http2/decoder/http2_structure_decoder.h
@@ -67,7 +67,7 @@
       DoDecode(out, &buffer_db);
       return true;
     }
-    DCHECK_LT(offset_, S::EncodedSize());
+    QUICHE_DCHECK_LT(offset_, S::EncodedSize());
     return false;
   }
 
@@ -104,7 +104,7 @@
       DoDecode(out, &buffer_db);
       return true;
     }
-    DCHECK_LT(offset_, S::EncodedSize());
+    QUICHE_DCHECK_LT(offset_, S::EncodedSize());
     return false;
   }
 
diff --git a/http2/decoder/payload_decoders/altsvc_payload_decoder.cc b/http2/decoder/payload_decoders/altsvc_payload_decoder.cc
index 39ae7e9..2b34104 100644
--- a/http2/decoder/payload_decoders/altsvc_payload_decoder.cc
+++ b/http2/decoder/payload_decoders/altsvc_payload_decoder.cc
@@ -40,9 +40,9 @@
     DecodeBuffer* db) {
   HTTP2_DVLOG(2) << "AltSvcPayloadDecoder::StartDecodingPayload: "
                  << state->frame_header();
-  DCHECK_EQ(Http2FrameType::ALTSVC, state->frame_header().type);
-  DCHECK_LE(db->Remaining(), state->frame_header().payload_length);
-  DCHECK_EQ(0, state->frame_header().flags);
+  QUICHE_DCHECK_EQ(Http2FrameType::ALTSVC, state->frame_header().type);
+  QUICHE_DCHECK_LE(db->Remaining(), state->frame_header().payload_length);
+  QUICHE_DCHECK_EQ(0, state->frame_header().flags);
 
   state->InitializeRemainders();
   payload_state_ = PayloadState::kStartDecodingStruct;
@@ -56,13 +56,13 @@
   const Http2FrameHeader& frame_header = state->frame_header();
   HTTP2_DVLOG(2) << "AltSvcPayloadDecoder::ResumeDecodingPayload: "
                  << frame_header;
-  DCHECK_EQ(Http2FrameType::ALTSVC, frame_header.type);
-  DCHECK_LE(state->remaining_payload(), frame_header.payload_length);
-  DCHECK_LE(db->Remaining(), state->remaining_payload());
-  DCHECK_NE(PayloadState::kMaybeDecodedStruct, payload_state_);
+  QUICHE_DCHECK_EQ(Http2FrameType::ALTSVC, frame_header.type);
+  QUICHE_DCHECK_LE(state->remaining_payload(), frame_header.payload_length);
+  QUICHE_DCHECK_LE(db->Remaining(), state->remaining_payload());
+  QUICHE_DCHECK_NE(PayloadState::kMaybeDecodedStruct, payload_state_);
   // |status| has to be initialized to some value to avoid compiler error in
   // case PayloadState::kMaybeDecodedStruct below, but value does not matter,
-  // see DCHECK_NE above.
+  // see QUICHE_DCHECK_NE above.
   DecodeStatus status = DecodeStatus::kDecodeError;
   while (true) {
     HTTP2_DVLOG(2)
@@ -81,8 +81,8 @@
           state->listener()->OnAltSvcStart(frame_header, origin_length,
                                            value_length);
         } else if (status != DecodeStatus::kDecodeDone) {
-          DCHECK(state->remaining_payload() > 0 ||
-                 status == DecodeStatus::kDecodeError)
+          QUICHE_DCHECK(state->remaining_payload() > 0 ||
+                        status == DecodeStatus::kDecodeError)
               << "\nremaining_payload: " << state->remaining_payload()
               << "\nstatus: " << status << "\nheader: " << frame_header;
           // Assume in progress.
@@ -90,7 +90,8 @@
           return status;
         } else {
           // The origin's length is longer than the remaining payload.
-          DCHECK_GT(altsvc_fields_.origin_length, state->remaining_payload());
+          QUICHE_DCHECK_GT(altsvc_fields_.origin_length,
+                           state->remaining_payload());
           return state->ReportFrameSizeError();
         }
         HTTP2_FALLTHROUGH;
@@ -130,8 +131,8 @@
     }
   }
   // All that is left is the value string.
-  DCHECK_LE(state->remaining_payload(), value_length);
-  DCHECK_LE(db->Remaining(), state->remaining_payload());
+  QUICHE_DCHECK_LE(state->remaining_payload(), value_length);
+  QUICHE_DCHECK_LE(db->Remaining(), state->remaining_payload());
   if (db->HasData()) {
     size_t avail = db->Remaining();
     state->listener()->OnAltSvcValueData(db->cursor(), avail);
diff --git a/http2/decoder/payload_decoders/continuation_payload_decoder.cc b/http2/decoder/payload_decoders/continuation_payload_decoder.cc
index 1f7d263..10e9d95 100644
--- a/http2/decoder/payload_decoders/continuation_payload_decoder.cc
+++ b/http2/decoder/payload_decoders/continuation_payload_decoder.cc
@@ -22,9 +22,9 @@
 
   HTTP2_DVLOG(2) << "ContinuationPayloadDecoder::StartDecodingPayload: "
                  << frame_header;
-  DCHECK_EQ(Http2FrameType::CONTINUATION, frame_header.type);
-  DCHECK_LE(db->Remaining(), total_length);
-  DCHECK_EQ(0, frame_header.flags & ~(Http2FrameFlag::END_HEADERS));
+  QUICHE_DCHECK_EQ(Http2FrameType::CONTINUATION, frame_header.type);
+  QUICHE_DCHECK_LE(db->Remaining(), total_length);
+  QUICHE_DCHECK_EQ(0, frame_header.flags & ~(Http2FrameFlag::END_HEADERS));
 
   state->InitializeRemainders();
   state->listener()->OnContinuationStart(frame_header);
@@ -37,12 +37,13 @@
   HTTP2_DVLOG(2) << "ContinuationPayloadDecoder::ResumeDecodingPayload"
                  << "  remaining_payload=" << state->remaining_payload()
                  << "  db->Remaining=" << db->Remaining();
-  DCHECK_EQ(Http2FrameType::CONTINUATION, state->frame_header().type);
-  DCHECK_LE(state->remaining_payload(), state->frame_header().payload_length);
-  DCHECK_LE(db->Remaining(), state->remaining_payload());
+  QUICHE_DCHECK_EQ(Http2FrameType::CONTINUATION, state->frame_header().type);
+  QUICHE_DCHECK_LE(state->remaining_payload(),
+                   state->frame_header().payload_length);
+  QUICHE_DCHECK_LE(db->Remaining(), state->remaining_payload());
 
   size_t avail = db->Remaining();
-  DCHECK_LE(avail, state->remaining_payload());
+  QUICHE_DCHECK_LE(avail, state->remaining_payload());
   if (avail > 0) {
     state->listener()->OnHpackFragment(db->cursor(), avail);
     db->AdvanceCursor(avail);
diff --git a/http2/decoder/payload_decoders/data_payload_decoder.cc b/http2/decoder/payload_decoders/data_payload_decoder.cc
index ee750b9..03e442d 100644
--- a/http2/decoder/payload_decoders/data_payload_decoder.cc
+++ b/http2/decoder/payload_decoders/data_payload_decoder.cc
@@ -40,10 +40,10 @@
 
   HTTP2_DVLOG(2) << "DataPayloadDecoder::StartDecodingPayload: "
                  << frame_header;
-  DCHECK_EQ(Http2FrameType::DATA, frame_header.type);
-  DCHECK_LE(db->Remaining(), total_length);
-  DCHECK_EQ(0, frame_header.flags &
-                   ~(Http2FrameFlag::END_STREAM | Http2FrameFlag::PADDED));
+  QUICHE_DCHECK_EQ(Http2FrameType::DATA, frame_header.type);
+  QUICHE_DCHECK_LE(db->Remaining(), total_length);
+  QUICHE_DCHECK_EQ(0, frame_header.flags & ~(Http2FrameFlag::END_STREAM |
+                                             Http2FrameFlag::PADDED));
 
   // Special case for the hoped for common case: unpadded and fits fully into
   // the decode buffer. TO BE SEEN if that is true. It certainly requires that
@@ -80,10 +80,10 @@
   HTTP2_DVLOG(2) << "DataPayloadDecoder::ResumeDecodingPayload payload_state_="
                  << payload_state_;
   const Http2FrameHeader& frame_header = state->frame_header();
-  DCHECK_EQ(Http2FrameType::DATA, frame_header.type);
-  DCHECK_LE(state->remaining_payload_and_padding(),
-            frame_header.payload_length);
-  DCHECK_LE(db->Remaining(), state->remaining_payload_and_padding());
+  QUICHE_DCHECK_EQ(Http2FrameType::DATA, frame_header.type);
+  QUICHE_DCHECK_LE(state->remaining_payload_and_padding(),
+                   frame_header.payload_length);
+  QUICHE_DCHECK_LE(db->Remaining(), state->remaining_payload_and_padding());
   DecodeStatus status;
   size_t avail;
   switch (payload_state_) {
diff --git a/http2/decoder/payload_decoders/goaway_payload_decoder.cc b/http2/decoder/payload_decoders/goaway_payload_decoder.cc
index 51ed305..17b7e7d 100644
--- a/http2/decoder/payload_decoders/goaway_payload_decoder.cc
+++ b/http2/decoder/payload_decoders/goaway_payload_decoder.cc
@@ -40,9 +40,9 @@
     DecodeBuffer* db) {
   HTTP2_DVLOG(2) << "GoAwayPayloadDecoder::StartDecodingPayload: "
                  << state->frame_header();
-  DCHECK_EQ(Http2FrameType::GOAWAY, state->frame_header().type);
-  DCHECK_LE(db->Remaining(), state->frame_header().payload_length);
-  DCHECK_EQ(0, state->frame_header().flags);
+  QUICHE_DCHECK_EQ(Http2FrameType::GOAWAY, state->frame_header().type);
+  QUICHE_DCHECK_LE(db->Remaining(), state->frame_header().payload_length);
+  QUICHE_DCHECK_EQ(0, state->frame_header().flags);
 
   state->InitializeRemainders();
   payload_state_ = PayloadState::kStartDecodingFixedFields;
@@ -57,13 +57,13 @@
       << state->remaining_payload() << ", db->Remaining=" << db->Remaining();
 
   const Http2FrameHeader& frame_header = state->frame_header();
-  DCHECK_EQ(Http2FrameType::GOAWAY, frame_header.type);
-  DCHECK_LE(db->Remaining(), frame_header.payload_length);
-  DCHECK_NE(PayloadState::kHandleFixedFieldsStatus, payload_state_);
+  QUICHE_DCHECK_EQ(Http2FrameType::GOAWAY, frame_header.type);
+  QUICHE_DCHECK_LE(db->Remaining(), frame_header.payload_length);
+  QUICHE_DCHECK_NE(PayloadState::kHandleFixedFieldsStatus, payload_state_);
 
   // |status| has to be initialized to some value to avoid compiler error in
   // case PayloadState::kHandleFixedFieldsStatus below, but value does not
-  // matter, see DCHECK_NE above.
+  // matter, see QUICHE_DCHECK_NE above.
   DecodeStatus status = DecodeStatus::kDecodeError;
   size_t avail;
   while (true) {
@@ -82,10 +82,10 @@
           // Not done decoding the structure. Either we've got more payload
           // to decode, or we've run out because the payload is too short,
           // in which case OnFrameSizeError will have already been called.
-          DCHECK((status == DecodeStatus::kDecodeInProgress &&
-                  state->remaining_payload() > 0) ||
-                 (status == DecodeStatus::kDecodeError &&
-                  state->remaining_payload() == 0))
+          QUICHE_DCHECK((status == DecodeStatus::kDecodeInProgress &&
+                         state->remaining_payload() > 0) ||
+                        (status == DecodeStatus::kDecodeError &&
+                         state->remaining_payload() == 0))
               << "\n status=" << status
               << "; remaining_payload=" << state->remaining_payload();
           payload_state_ = PayloadState::kResumeDecodingFixedFields;
diff --git a/http2/decoder/payload_decoders/headers_payload_decoder.cc b/http2/decoder/payload_decoders/headers_payload_decoder.cc
index 28e20e7..9b219d7 100644
--- a/http2/decoder/payload_decoders/headers_payload_decoder.cc
+++ b/http2/decoder/payload_decoders/headers_payload_decoder.cc
@@ -46,11 +46,12 @@
   HTTP2_DVLOG(2) << "HeadersPayloadDecoder::StartDecodingPayload: "
                  << frame_header;
 
-  DCHECK_EQ(Http2FrameType::HEADERS, frame_header.type);
-  DCHECK_LE(db->Remaining(), total_length);
-  DCHECK_EQ(0, frame_header.flags &
-                   ~(Http2FrameFlag::END_STREAM | Http2FrameFlag::END_HEADERS |
-                     Http2FrameFlag::PADDED | Http2FrameFlag::PRIORITY));
+  QUICHE_DCHECK_EQ(Http2FrameType::HEADERS, frame_header.type);
+  QUICHE_DCHECK_LE(db->Remaining(), total_length);
+  QUICHE_DCHECK_EQ(
+      0, frame_header.flags &
+             ~(Http2FrameFlag::END_STREAM | Http2FrameFlag::END_HEADERS |
+               Http2FrameFlag::PADDED | Http2FrameFlag::PRIORITY));
 
   // Special case for HEADERS frames that contain only the HPACK block
   // (fragment or whole) and that fit fully into the decode buffer.
@@ -86,7 +87,7 @@
   } else if (frame_header.IsPadded()) {
     payload_state_ = PayloadState::kReadPadLength;
   } else {
-    DCHECK(frame_header.HasPriority()) << frame_header;
+    QUICHE_DCHECK(frame_header.HasPriority()) << frame_header;
     payload_state_ = PayloadState::kStartDecodingPriorityFields;
   }
   state->InitializeRemainders();
@@ -103,10 +104,10 @@
 
   const Http2FrameHeader& frame_header = state->frame_header();
 
-  DCHECK_EQ(Http2FrameType::HEADERS, frame_header.type);
-  DCHECK_LE(state->remaining_payload_and_padding(),
-            frame_header.payload_length);
-  DCHECK_LE(db->Remaining(), state->remaining_payload_and_padding());
+  QUICHE_DCHECK_EQ(Http2FrameType::HEADERS, frame_header.type);
+  QUICHE_DCHECK_LE(state->remaining_payload_and_padding(),
+                   frame_header.payload_length);
+  QUICHE_DCHECK_LE(db->Remaining(), state->remaining_payload_and_padding());
   DecodeStatus status;
   size_t avail;
   while (true) {
diff --git a/http2/decoder/payload_decoders/ping_payload_decoder.cc b/http2/decoder/payload_decoders/ping_payload_decoder.cc
index 9c637f9..6c73cf7 100644
--- a/http2/decoder/payload_decoders/ping_payload_decoder.cc
+++ b/http2/decoder/payload_decoders/ping_payload_decoder.cc
@@ -20,9 +20,9 @@
 
   HTTP2_DVLOG(2) << "PingPayloadDecoder::StartDecodingPayload: "
                  << frame_header;
-  DCHECK_EQ(Http2FrameType::PING, frame_header.type);
-  DCHECK_LE(db->Remaining(), total_length);
-  DCHECK_EQ(0, frame_header.flags & ~(Http2FrameFlag::ACK));
+  QUICHE_DCHECK_EQ(Http2FrameType::PING, frame_header.type);
+  QUICHE_DCHECK_LE(db->Remaining(), total_length);
+  QUICHE_DCHECK_EQ(0, frame_header.flags & ~(Http2FrameFlag::ACK));
 
   // Is the payload entirely in the decode buffer and is it the correct size?
   // Given the size of the header and payload (17 bytes total), this is most
@@ -53,8 +53,8 @@
                                                        DecodeBuffer* db) {
   HTTP2_DVLOG(2) << "ResumeDecodingPayload: remaining_payload="
                  << state->remaining_payload();
-  DCHECK_EQ(Http2FrameType::PING, state->frame_header().type);
-  DCHECK_LE(db->Remaining(), state->frame_header().payload_length);
+  QUICHE_DCHECK_EQ(Http2FrameType::PING, state->frame_header().type);
+  QUICHE_DCHECK_LE(db->Remaining(), state->frame_header().payload_length);
   return HandleStatus(
       state, state->ResumeDecodingStructureInPayload(&ping_fields_, db));
 }
@@ -78,7 +78,7 @@
   }
   // Not done decoding the structure. Either we've got more payload to decode,
   // or we've run out because the payload is too short.
-  DCHECK(
+  QUICHE_DCHECK(
       (status == DecodeStatus::kDecodeInProgress &&
        state->remaining_payload() > 0) ||
       (status == DecodeStatus::kDecodeError && state->remaining_payload() == 0))
diff --git a/http2/decoder/payload_decoders/priority_payload_decoder.cc b/http2/decoder/payload_decoders/priority_payload_decoder.cc
index 471bd84..e68cbce 100644
--- a/http2/decoder/payload_decoders/priority_payload_decoder.cc
+++ b/http2/decoder/payload_decoders/priority_payload_decoder.cc
@@ -17,10 +17,10 @@
     DecodeBuffer* db) {
   HTTP2_DVLOG(2) << "PriorityPayloadDecoder::StartDecodingPayload: "
                  << state->frame_header();
-  DCHECK_EQ(Http2FrameType::PRIORITY, state->frame_header().type);
-  DCHECK_LE(db->Remaining(), state->frame_header().payload_length);
+  QUICHE_DCHECK_EQ(Http2FrameType::PRIORITY, state->frame_header().type);
+  QUICHE_DCHECK_LE(db->Remaining(), state->frame_header().payload_length);
   // PRIORITY frames have no flags.
-  DCHECK_EQ(0, state->frame_header().flags);
+  QUICHE_DCHECK_EQ(0, state->frame_header().flags);
   state->InitializeRemainders();
   return HandleStatus(
       state, state->StartDecodingStructureInPayload(&priority_fields_, db));
@@ -32,8 +32,8 @@
   HTTP2_DVLOG(2) << "PriorityPayloadDecoder::ResumeDecodingPayload"
                  << "  remaining_payload=" << state->remaining_payload()
                  << "  db->Remaining=" << db->Remaining();
-  DCHECK_EQ(Http2FrameType::PRIORITY, state->frame_header().type);
-  DCHECK_LE(db->Remaining(), state->frame_header().payload_length);
+  QUICHE_DCHECK_EQ(Http2FrameType::PRIORITY, state->frame_header().type);
+  QUICHE_DCHECK_LE(db->Remaining(), state->frame_header().payload_length);
   return HandleStatus(
       state, state->ResumeDecodingStructureInPayload(&priority_fields_, db));
 }
@@ -52,7 +52,7 @@
   // Not done decoding the structure. Either we've got more payload to decode,
   // or we've run out because the payload is too short, in which case
   // OnFrameSizeError will have already been called.
-  DCHECK(
+  QUICHE_DCHECK(
       (status == DecodeStatus::kDecodeInProgress &&
        state->remaining_payload() > 0) ||
       (status == DecodeStatus::kDecodeError && state->remaining_payload() == 0))
diff --git a/http2/decoder/payload_decoders/priority_update_payload_decoder.cc b/http2/decoder/payload_decoders/priority_update_payload_decoder.cc
index ec52c20..d115c35 100644
--- a/http2/decoder/payload_decoders/priority_update_payload_decoder.cc
+++ b/http2/decoder/payload_decoders/priority_update_payload_decoder.cc
@@ -41,9 +41,9 @@
     DecodeBuffer* db) {
   HTTP2_DVLOG(2) << "PriorityUpdatePayloadDecoder::StartDecodingPayload: "
                  << state->frame_header();
-  DCHECK_EQ(Http2FrameType::PRIORITY_UPDATE, state->frame_header().type);
-  DCHECK_LE(db->Remaining(), state->frame_header().payload_length);
-  DCHECK_EQ(0, state->frame_header().flags);
+  QUICHE_DCHECK_EQ(Http2FrameType::PRIORITY_UPDATE, state->frame_header().type);
+  QUICHE_DCHECK_LE(db->Remaining(), state->frame_header().payload_length);
+  QUICHE_DCHECK_EQ(0, state->frame_header().flags);
 
   state->InitializeRemainders();
   payload_state_ = PayloadState::kStartDecodingFixedFields;
@@ -59,13 +59,13 @@
                  << ", db->Remaining=" << db->Remaining();
 
   const Http2FrameHeader& frame_header = state->frame_header();
-  DCHECK_EQ(Http2FrameType::PRIORITY_UPDATE, frame_header.type);
-  DCHECK_LE(db->Remaining(), frame_header.payload_length);
-  DCHECK_NE(PayloadState::kHandleFixedFieldsStatus, payload_state_);
+  QUICHE_DCHECK_EQ(Http2FrameType::PRIORITY_UPDATE, frame_header.type);
+  QUICHE_DCHECK_LE(db->Remaining(), frame_header.payload_length);
+  QUICHE_DCHECK_NE(PayloadState::kHandleFixedFieldsStatus, payload_state_);
 
   // |status| has to be initialized to some value to avoid compiler error in
   // case PayloadState::kHandleFixedFieldsStatus below, but value does not
-  // matter, see DCHECK_NE above.
+  // matter, see QUICHE_DCHECK_NE above.
   DecodeStatus status = DecodeStatus::kDecodeError;
   size_t avail;
   while (true) {
@@ -86,10 +86,10 @@
           // Not done decoding the structure. Either we've got more payload
           // to decode, or we've run out because the payload is too short,
           // in which case OnFrameSizeError will have already been called.
-          DCHECK((status == DecodeStatus::kDecodeInProgress &&
-                  state->remaining_payload() > 0) ||
-                 (status == DecodeStatus::kDecodeError &&
-                  state->remaining_payload() == 0))
+          QUICHE_DCHECK((status == DecodeStatus::kDecodeInProgress &&
+                         state->remaining_payload() > 0) ||
+                        (status == DecodeStatus::kDecodeError &&
+                         state->remaining_payload() == 0))
               << "\n status=" << status
               << "; remaining_payload=" << state->remaining_payload();
           payload_state_ = PayloadState::kResumeDecodingFixedFields;
diff --git a/http2/decoder/payload_decoders/push_promise_payload_decoder.cc b/http2/decoder/payload_decoders/push_promise_payload_decoder.cc
index ba3112c..efb1520 100644
--- a/http2/decoder/payload_decoders/push_promise_payload_decoder.cc
+++ b/http2/decoder/payload_decoders/push_promise_payload_decoder.cc
@@ -44,10 +44,10 @@
   HTTP2_DVLOG(2) << "PushPromisePayloadDecoder::StartDecodingPayload: "
                  << frame_header;
 
-  DCHECK_EQ(Http2FrameType::PUSH_PROMISE, frame_header.type);
-  DCHECK_LE(db->Remaining(), total_length);
-  DCHECK_EQ(0, frame_header.flags &
-                   ~(Http2FrameFlag::END_HEADERS | Http2FrameFlag::PADDED));
+  QUICHE_DCHECK_EQ(Http2FrameType::PUSH_PROMISE, frame_header.type);
+  QUICHE_DCHECK_LE(db->Remaining(), total_length);
+  QUICHE_DCHECK_EQ(0, frame_header.flags & ~(Http2FrameFlag::END_HEADERS |
+                                             Http2FrameFlag::PADDED));
 
   if (!frame_header.IsPadded()) {
     // If it turns out that PUSH_PROMISE frames without padding are sufficiently
@@ -70,9 +70,9 @@
                  << "  db->Remaining=" << db->Remaining();
 
   const Http2FrameHeader& frame_header = state->frame_header();
-  DCHECK_EQ(Http2FrameType::PUSH_PROMISE, frame_header.type);
-  DCHECK_LE(state->remaining_payload(), frame_header.payload_length);
-  DCHECK_LE(db->Remaining(), frame_header.payload_length);
+  QUICHE_DCHECK_EQ(Http2FrameType::PUSH_PROMISE, frame_header.type);
+  QUICHE_DCHECK_LE(state->remaining_payload(), frame_header.payload_length);
+  QUICHE_DCHECK_LE(db->Remaining(), frame_header.payload_length);
 
   DecodeStatus status;
   while (true) {
@@ -81,7 +81,8 @@
         << payload_state_;
     switch (payload_state_) {
       case PayloadState::kReadPadLength:
-        DCHECK_EQ(state->remaining_payload(), frame_header.payload_length);
+        QUICHE_DCHECK_EQ(state->remaining_payload(),
+                         frame_header.payload_length);
         // ReadPadLength handles the OnPadLength callback, and updating the
         // remaining_payload and remaining_padding fields. If the amount of
         // padding is too large to fit in the frame's payload, ReadPadLength
@@ -109,11 +110,12 @@
         HTTP2_FALLTHROUGH;
 
       case PayloadState::kReadPayload:
-        DCHECK_LT(state->remaining_payload(), frame_header.payload_length);
-        DCHECK_LE(state->remaining_payload(),
-                  frame_header.payload_length -
-                      Http2PushPromiseFields::EncodedSize());
-        DCHECK_LE(
+        QUICHE_DCHECK_LT(state->remaining_payload(),
+                         frame_header.payload_length);
+        QUICHE_DCHECK_LE(state->remaining_payload(),
+                         frame_header.payload_length -
+                             Http2PushPromiseFields::EncodedSize());
+        QUICHE_DCHECK_LE(
             state->remaining_payload(),
             frame_header.payload_length -
                 Http2PushPromiseFields::EncodedSize() -
diff --git a/http2/decoder/payload_decoders/rst_stream_payload_decoder.cc b/http2/decoder/payload_decoders/rst_stream_payload_decoder.cc
index d9d0fd2..b2afc40 100644
--- a/http2/decoder/payload_decoders/rst_stream_payload_decoder.cc
+++ b/http2/decoder/payload_decoders/rst_stream_payload_decoder.cc
@@ -17,10 +17,10 @@
     DecodeBuffer* db) {
   HTTP2_DVLOG(2) << "RstStreamPayloadDecoder::StartDecodingPayload: "
                  << state->frame_header();
-  DCHECK_EQ(Http2FrameType::RST_STREAM, state->frame_header().type);
-  DCHECK_LE(db->Remaining(), state->frame_header().payload_length);
+  QUICHE_DCHECK_EQ(Http2FrameType::RST_STREAM, state->frame_header().type);
+  QUICHE_DCHECK_LE(db->Remaining(), state->frame_header().payload_length);
   // RST_STREAM has no flags.
-  DCHECK_EQ(0, state->frame_header().flags);
+  QUICHE_DCHECK_EQ(0, state->frame_header().flags);
   state->InitializeRemainders();
   return HandleStatus(
       state, state->StartDecodingStructureInPayload(&rst_stream_fields_, db));
@@ -32,8 +32,8 @@
   HTTP2_DVLOG(2) << "RstStreamPayloadDecoder::ResumeDecodingPayload"
                  << "  remaining_payload=" << state->remaining_payload()
                  << "  db->Remaining=" << db->Remaining();
-  DCHECK_EQ(Http2FrameType::RST_STREAM, state->frame_header().type);
-  DCHECK_LE(db->Remaining(), state->frame_header().payload_length);
+  QUICHE_DCHECK_EQ(Http2FrameType::RST_STREAM, state->frame_header().type);
+  QUICHE_DCHECK_LE(db->Remaining(), state->frame_header().payload_length);
   return HandleStatus(
       state, state->ResumeDecodingStructureInPayload(&rst_stream_fields_, db));
 }
@@ -54,7 +54,7 @@
   // Not done decoding the structure. Either we've got more payload to decode,
   // or we've run out because the payload is too short, in which case
   // OnFrameSizeError will have already been called by the FrameDecoderState.
-  DCHECK(
+  QUICHE_DCHECK(
       (status == DecodeStatus::kDecodeInProgress &&
        state->remaining_payload() > 0) ||
       (status == DecodeStatus::kDecodeError && state->remaining_payload() == 0))
diff --git a/http2/decoder/payload_decoders/settings_payload_decoder.cc b/http2/decoder/payload_decoders/settings_payload_decoder.cc
index 5227bc4..a041792 100644
--- a/http2/decoder/payload_decoders/settings_payload_decoder.cc
+++ b/http2/decoder/payload_decoders/settings_payload_decoder.cc
@@ -20,9 +20,9 @@
 
   HTTP2_DVLOG(2) << "SettingsPayloadDecoder::StartDecodingPayload: "
                  << frame_header;
-  DCHECK_EQ(Http2FrameType::SETTINGS, frame_header.type);
-  DCHECK_LE(db->Remaining(), total_length);
-  DCHECK_EQ(0, frame_header.flags & ~(Http2FrameFlag::ACK));
+  QUICHE_DCHECK_EQ(Http2FrameType::SETTINGS, frame_header.type);
+  QUICHE_DCHECK_LE(db->Remaining(), total_length);
+  QUICHE_DCHECK_EQ(0, frame_header.flags & ~(Http2FrameFlag::ACK));
 
   if (frame_header.IsAck()) {
     if (total_length == 0) {
@@ -45,8 +45,8 @@
   HTTP2_DVLOG(2) << "SettingsPayloadDecoder::ResumeDecodingPayload"
                  << "  remaining_payload=" << state->remaining_payload()
                  << "  db->Remaining=" << db->Remaining();
-  DCHECK_EQ(Http2FrameType::SETTINGS, state->frame_header().type);
-  DCHECK_LE(db->Remaining(), state->frame_header().payload_length);
+  QUICHE_DCHECK_EQ(Http2FrameType::SETTINGS, state->frame_header().type);
+  QUICHE_DCHECK_LE(db->Remaining(), state->frame_header().payload_length);
 
   DecodeStatus status =
       state->ResumeDecodingStructureInPayload(&setting_fields_, db);
@@ -85,7 +85,7 @@
   // Not done decoding the structure. Either we've got more payload to decode,
   // or we've run out because the payload is too short, in which case
   // OnFrameSizeError will have already been called.
-  DCHECK(
+  QUICHE_DCHECK(
       (status == DecodeStatus::kDecodeInProgress &&
        state->remaining_payload() > 0) ||
       (status == DecodeStatus::kDecodeError && state->remaining_payload() == 0))
diff --git a/http2/decoder/payload_decoders/settings_payload_decoder.h b/http2/decoder/payload_decoders/settings_payload_decoder.h
index 2d5e71d..7462888 100644
--- a/http2/decoder/payload_decoders/settings_payload_decoder.h
+++ b/http2/decoder/payload_decoders/settings_payload_decoder.h
@@ -41,7 +41,7 @@
                                      DecodeBuffer* db);
 
   // Decoding a single SETTING returned a status other than kDecodeDone; this
-  // method just brings together the DCHECKs to reduce duplication.
+  // method just brings together the QUICHE_DCHECKs to reduce duplication.
   DecodeStatus HandleNotDone(FrameDecoderState* state,
                              DecodeBuffer* db,
                              DecodeStatus status);
diff --git a/http2/decoder/payload_decoders/unknown_payload_decoder.cc b/http2/decoder/payload_decoders/unknown_payload_decoder.cc
index 5bbaa5d..a71ea78 100644
--- a/http2/decoder/payload_decoders/unknown_payload_decoder.cc
+++ b/http2/decoder/payload_decoders/unknown_payload_decoder.cc
@@ -21,8 +21,8 @@
 
   HTTP2_DVLOG(2) << "UnknownPayloadDecoder::StartDecodingPayload: "
                  << frame_header;
-  DCHECK(!IsSupportedHttp2FrameType(frame_header.type)) << frame_header;
-  DCHECK_LE(db->Remaining(), frame_header.payload_length);
+  QUICHE_DCHECK(!IsSupportedHttp2FrameType(frame_header.type)) << frame_header;
+  QUICHE_DCHECK_LE(db->Remaining(), frame_header.payload_length);
 
   state->InitializeRemainders();
   state->listener()->OnUnknownStart(frame_header);
@@ -35,10 +35,11 @@
   HTTP2_DVLOG(2) << "UnknownPayloadDecoder::ResumeDecodingPayload "
                  << "remaining_payload=" << state->remaining_payload()
                  << "; db->Remaining=" << db->Remaining();
-  DCHECK(!IsSupportedHttp2FrameType(state->frame_header().type))
+  QUICHE_DCHECK(!IsSupportedHttp2FrameType(state->frame_header().type))
       << state->frame_header();
-  DCHECK_LE(state->remaining_payload(), state->frame_header().payload_length);
-  DCHECK_LE(db->Remaining(), state->remaining_payload());
+  QUICHE_DCHECK_LE(state->remaining_payload(),
+                   state->frame_header().payload_length);
+  QUICHE_DCHECK_LE(db->Remaining(), state->remaining_payload());
 
   size_t avail = db->Remaining();
   if (avail > 0) {
diff --git a/http2/decoder/payload_decoders/window_update_payload_decoder.cc b/http2/decoder/payload_decoders/window_update_payload_decoder.cc
index 8085f70..d088e51 100644
--- a/http2/decoder/payload_decoders/window_update_payload_decoder.cc
+++ b/http2/decoder/payload_decoders/window_update_payload_decoder.cc
@@ -22,11 +22,11 @@
   HTTP2_DVLOG(2) << "WindowUpdatePayloadDecoder::StartDecodingPayload: "
                  << frame_header;
 
-  DCHECK_EQ(Http2FrameType::WINDOW_UPDATE, frame_header.type);
-  DCHECK_LE(db->Remaining(), total_length);
+  QUICHE_DCHECK_EQ(Http2FrameType::WINDOW_UPDATE, frame_header.type);
+  QUICHE_DCHECK_LE(db->Remaining(), total_length);
 
   // WINDOW_UPDATE frames have no flags.
-  DCHECK_EQ(0, frame_header.flags);
+  QUICHE_DCHECK_EQ(0, frame_header.flags);
 
   // Special case for when the payload is the correct size and entirely in
   // the buffer.
@@ -48,8 +48,8 @@
   HTTP2_DVLOG(2) << "ResumeDecodingPayload: remaining_payload="
                  << state->remaining_payload()
                  << "; db->Remaining=" << db->Remaining();
-  DCHECK_EQ(Http2FrameType::WINDOW_UPDATE, state->frame_header().type);
-  DCHECK_LE(db->Remaining(), state->frame_header().payload_length);
+  QUICHE_DCHECK_EQ(Http2FrameType::WINDOW_UPDATE, state->frame_header().type);
+  QUICHE_DCHECK_LE(db->Remaining(), state->frame_header().payload_length);
   return HandleStatus(state, state->ResumeDecodingStructureInPayload(
                                  &window_update_fields_, db));
 }
@@ -70,7 +70,7 @@
   // Not done decoding the structure. Either we've got more payload to decode,
   // or we've run out because the payload is too short, in which case
   // OnFrameSizeError will have already been called.
-  DCHECK(
+  QUICHE_DCHECK(
       (status == DecodeStatus::kDecodeInProgress &&
        state->remaining_payload() > 0) ||
       (status == DecodeStatus::kDecodeError && state->remaining_payload() == 0))
diff --git a/http2/hpack/decoder/hpack_block_collector.cc b/http2/hpack/decoder/hpack_block_collector.cc
index f77100a..677f55a 100644
--- a/http2/hpack/decoder/hpack_block_collector.cc
+++ b/http2/hpack/decoder/hpack_block_collector.cc
@@ -95,7 +95,7 @@
 
 void HpackBlockCollector::AppendToHpackBlockBuilder(
     HpackBlockBuilder* hbb) const {
-  CHECK(IsNotPending());
+  QUICHE_CHECK(IsNotPending());
   for (const auto& entry : entries_) {
     entry.AppendToHpackBlockBuilder(hbb);
   }
diff --git a/http2/hpack/decoder/hpack_block_decoder.cc b/http2/hpack/decoder/hpack_block_decoder.cc
index c609f27..9c63f03 100644
--- a/http2/hpack/decoder/hpack_block_decoder.cc
+++ b/http2/hpack/decoder/hpack_block_decoder.cc
@@ -24,14 +24,14 @@
         before_entry_ = true;
         break;
       case DecodeStatus::kDecodeInProgress:
-        DCHECK_EQ(0u, db->Remaining());
+        QUICHE_DCHECK_EQ(0u, db->Remaining());
         return DecodeStatus::kDecodeInProgress;
       case DecodeStatus::kDecodeError:
         HTTP2_CODE_COUNT_N(decompress_failure_3, 1, 23);
         return DecodeStatus::kDecodeError;
     }
   }
-  DCHECK(before_entry_);
+  QUICHE_DCHECK(before_entry_);
   while (db->HasData()) {
     HTTP2_DVLOG(2) << "HpackBlockDecoder::Decode start entry, db->Remaining="
                    << db->Remaining();
@@ -40,16 +40,16 @@
       case DecodeStatus::kDecodeDone:
         continue;
       case DecodeStatus::kDecodeInProgress:
-        DCHECK_EQ(0u, db->Remaining());
+        QUICHE_DCHECK_EQ(0u, db->Remaining());
         before_entry_ = false;
         return DecodeStatus::kDecodeInProgress;
       case DecodeStatus::kDecodeError:
         HTTP2_CODE_COUNT_N(decompress_failure_3, 2, 23);
         return DecodeStatus::kDecodeError;
     }
-    DCHECK(false);
+    QUICHE_DCHECK(false);
   }
-  DCHECK(before_entry_);
+  QUICHE_DCHECK(before_entry_);
   return DecodeStatus::kDecodeDone;
 }
 
diff --git a/http2/hpack/decoder/hpack_block_decoder.h b/http2/hpack/decoder/hpack_block_decoder.h
index 2f28c4e..3d956b1 100644
--- a/http2/hpack/decoder/hpack_block_decoder.h
+++ b/http2/hpack/decoder/hpack_block_decoder.h
@@ -26,7 +26,7 @@
  public:
   explicit HpackBlockDecoder(HpackEntryDecoderListener* listener)
       : listener_(listener) {
-    DCHECK_NE(listener_, nullptr);
+    QUICHE_DCHECK_NE(listener_, nullptr);
   }
   ~HpackBlockDecoder() {}
 
diff --git a/http2/hpack/decoder/hpack_decoder.cc b/http2/hpack/decoder/hpack_decoder.cc
index d1552de..45d7a78 100644
--- a/http2/hpack/decoder/hpack_decoder.cc
+++ b/http2/hpack/decoder/hpack_decoder.cc
@@ -69,7 +69,8 @@
     return false;
   }
   // Should be positioned between entries iff decoding is complete.
-  DCHECK_EQ(block_decoder_.before_entry(), status == DecodeStatus::kDecodeDone)
+  QUICHE_DCHECK_EQ(block_decoder_.before_entry(),
+                   status == DecodeStatus::kDecodeDone)
       << status;
   if (!block_decoder_.before_entry()) {
     entry_buffer_.BufferStringsIfUnbuffered();
diff --git a/http2/hpack/decoder/hpack_decoder_state.cc b/http2/hpack/decoder/hpack_decoder_state.cc
index 6e234af..528f1b6 100644
--- a/http2/hpack/decoder/hpack_decoder_state.cc
+++ b/http2/hpack/decoder/hpack_decoder_state.cc
@@ -43,7 +43,7 @@
     uint32_t header_table_size) {
   HTTP2_DVLOG(2) << "HpackDecoderState::ApplyHeaderTableSizeSetting("
                  << header_table_size << ")";
-  DCHECK_LE(lowest_header_table_size_, final_header_table_size_);
+  QUICHE_DCHECK_LE(lowest_header_table_size_, final_header_table_size_);
   if (header_table_size < lowest_header_table_size_) {
     lowest_header_table_size_ = header_table_size;
   }
@@ -59,9 +59,9 @@
   // This instance can't be reused after an error has been detected, as we must
   // assume that the encoder and decoder compression states are no longer
   // synchronized.
-  DCHECK(error_ == HpackDecodingError::kOk)
+  QUICHE_DCHECK(error_ == HpackDecodingError::kOk)
       << HpackDecodingErrorToString(error_);
-  DCHECK_LE(lowest_header_table_size_, final_header_table_size_);
+  QUICHE_DCHECK_LE(lowest_header_table_size_, final_header_table_size_);
   allow_dynamic_table_size_update_ = true;
   saw_dynamic_table_size_update_ = false;
   // If the peer has acknowledged a HEADER_TABLE_SIZE smaller than that which
@@ -155,7 +155,7 @@
   if (error_ != HpackDecodingError::kOk) {
     return;
   }
-  DCHECK_LE(lowest_header_table_size_, final_header_table_size_);
+  QUICHE_DCHECK_LE(lowest_header_table_size_, final_header_table_size_);
   if (!allow_dynamic_table_size_update_) {
     // At most two dynamic table size updates allowed at the start, and not
     // after a header.
diff --git a/http2/hpack/decoder/hpack_decoder_string_buffer.cc b/http2/hpack/decoder/hpack_decoder_string_buffer.cc
index 3d31026..2a21846 100644
--- a/http2/hpack/decoder/hpack_decoder_string_buffer.cc
+++ b/http2/hpack/decoder/hpack_decoder_string_buffer.cc
@@ -62,7 +62,7 @@
 
 void HpackDecoderStringBuffer::Set(absl::string_view value, bool is_static) {
   HTTP2_DVLOG(2) << "HpackDecoderStringBuffer::Set";
-  DCHECK_EQ(state_, State::RESET);
+  QUICHE_DCHECK_EQ(state_, State::RESET);
   value_ = value;
   state_ = State::COMPLETE;
   backing_ = is_static ? Backing::STATIC : Backing::UNBUFFERED;
@@ -73,7 +73,7 @@
 
 void HpackDecoderStringBuffer::OnStart(bool huffman_encoded, size_t len) {
   HTTP2_DVLOG(2) << "HpackDecoderStringBuffer::OnStart";
-  DCHECK_EQ(state_, State::RESET);
+  QUICHE_DCHECK_EQ(state_, State::RESET);
 
   remaining_len_ = len;
   is_huffman_encoded_ = huffman_encoded;
@@ -107,12 +107,12 @@
 bool HpackDecoderStringBuffer::OnData(const char* data, size_t len) {
   HTTP2_DVLOG(2) << "HpackDecoderStringBuffer::OnData state=" << state_
                  << ", backing=" << backing_;
-  DCHECK_EQ(state_, State::COLLECTING);
-  DCHECK_LE(len, remaining_len_);
+  QUICHE_DCHECK_EQ(state_, State::COLLECTING);
+  QUICHE_DCHECK_LE(len, remaining_len_);
   remaining_len_ -= len;
 
   if (is_huffman_encoded_) {
-    DCHECK_EQ(backing_, Backing::BUFFERED);
+    QUICHE_DCHECK_EQ(backing_, Backing::BUFFERED);
     return decoder_.Decode(absl::string_view(data, len), &buffer_);
   }
 
@@ -136,7 +136,7 @@
 
   // This is not the first call to OnData for this string, so it should be
   // buffered.
-  DCHECK_EQ(backing_, Backing::BUFFERED);
+  QUICHE_DCHECK_EQ(backing_, Backing::BUFFERED);
 
   // Append to the current contents of the buffer.
   buffer_.append(data, len);
@@ -145,11 +145,11 @@
 
 bool HpackDecoderStringBuffer::OnEnd() {
   HTTP2_DVLOG(2) << "HpackDecoderStringBuffer::OnEnd";
-  DCHECK_EQ(state_, State::COLLECTING);
-  DCHECK_EQ(0u, remaining_len_);
+  QUICHE_DCHECK_EQ(state_, State::COLLECTING);
+  QUICHE_DCHECK_EQ(0u, remaining_len_);
 
   if (is_huffman_encoded_) {
-    DCHECK_EQ(backing_, Backing::BUFFERED);
+    QUICHE_DCHECK_EQ(backing_, Backing::BUFFERED);
     // Did the Huffman encoding of the string end properly?
     if (!decoder_.InputProperlyTerminated()) {
       return false;  // No, it didn't.
@@ -189,7 +189,7 @@
 
 absl::string_view HpackDecoderStringBuffer::str() const {
   HTTP2_DVLOG(3) << "HpackDecoderStringBuffer::str";
-  DCHECK_EQ(state_, State::COMPLETE);
+  QUICHE_DCHECK_EQ(state_, State::COMPLETE);
   return value_;
 }
 
@@ -202,8 +202,8 @@
 
 std::string HpackDecoderStringBuffer::ReleaseString() {
   HTTP2_DVLOG(3) << "HpackDecoderStringBuffer::ReleaseString";
-  DCHECK_EQ(state_, State::COMPLETE);
-  DCHECK_EQ(backing_, Backing::BUFFERED);
+  QUICHE_DCHECK_EQ(state_, State::COMPLETE);
+  QUICHE_DCHECK_EQ(backing_, Backing::BUFFERED);
   if (state_ == State::COMPLETE) {
     state_ = State::RESET;
     if (backing_ == Backing::BUFFERED) {
diff --git a/http2/hpack/decoder/hpack_decoder_tables.cc b/http2/hpack/decoder/hpack_decoder_tables.cc
index fa87b83..1b2cc11 100644
--- a/http2/hpack/decoder/hpack_decoder_tables.cc
+++ b/http2/hpack/decoder/hpack_decoder_tables.cc
@@ -15,8 +15,8 @@
   ptr->reserve(kFirstDynamicTableIndex);
   ptr->emplace_back("", "");
 
-#define STATIC_TABLE_ENTRY(name, value, index)        \
-  DCHECK_EQ(ptr->size(), static_cast<size_t>(index)); \
+#define STATIC_TABLE_ENTRY(name, value, index)               \
+  QUICHE_DCHECK_EQ(ptr->size(), static_cast<size_t>(index)); \
   ptr->emplace_back(name, value)
 
 #include "http2/hpack/hpack_static_table_entries.inc"
@@ -63,7 +63,7 @@
   HTTP2_DVLOG(3) << "HpackDecoderDynamicTable::DynamicTableSizeUpdate "
                  << size_limit;
   EnsureSizeNoMoreThan(size_limit);
-  DCHECK_LE(current_size_, size_limit);
+  QUICHE_DCHECK_LE(current_size_, size_limit);
   size_limit_ = size_limit;
 }
 
@@ -94,8 +94,8 @@
   table_.push_front(entry);
   current_size_ += entry_size;
   HTTP2_DVLOG(2) << "InsertEntry: current_size_=" << current_size_;
-  DCHECK_GE(current_size_, entry_size);
-  DCHECK_LE(current_size_, size_limit_);
+  QUICHE_DCHECK_GE(current_size_, entry_size);
+  QUICHE_DCHECK_LE(current_size_, size_limit_);
 }
 
 const HpackStringPair* HpackDecoderDynamicTable::Lookup(size_t index) const {
@@ -118,19 +118,19 @@
   while (current_size_ > limit) {
     RemoveLastEntry();
   }
-  DCHECK_LE(current_size_, limit);
+  QUICHE_DCHECK_LE(current_size_, limit);
 }
 
 void HpackDecoderDynamicTable::RemoveLastEntry() {
-  DCHECK(!table_.empty());
+  QUICHE_DCHECK(!table_.empty());
   if (!table_.empty()) {
     HTTP2_DVLOG(2) << "RemoveLastEntry current_size_=" << current_size_
                    << ", last entry size=" << table_.back().size();
-    DCHECK_GE(current_size_, table_.back().size());
+    QUICHE_DCHECK_GE(current_size_, table_.back().size());
     current_size_ -= table_.back().size();
     table_.pop_back();
     // Empty IFF current_size_ == 0.
-    DCHECK_EQ(table_.empty(), current_size_ == 0);
+    QUICHE_DCHECK_EQ(table_.empty(), current_size_ == 0);
   }
 }
 
diff --git a/http2/hpack/decoder/hpack_decoder_tables_test.cc b/http2/hpack/decoder/hpack_decoder_tables_test.cc
index 7978b7f..a3e4ee0 100644
--- a/http2/hpack/decoder/hpack_decoder_tables_test.cc
+++ b/http2/hpack/decoder/hpack_decoder_tables_test.cc
@@ -38,8 +38,8 @@
 std::vector<StaticEntry> MakeSpecStaticEntries() {
   std::vector<StaticEntry> static_entries;
 
-#define STATIC_TABLE_ENTRY(name, value, index)                      \
-  DCHECK_EQ(static_entries.size() + 1, static_cast<size_t>(index)); \
+#define STATIC_TABLE_ENTRY(name, value, index)                             \
+  QUICHE_DCHECK_EQ(static_entries.size() + 1, static_cast<size_t>(index)); \
   static_entries.push_back({name, value, index});
 
 #include "http2/hpack/hpack_static_table_entries.inc"
diff --git a/http2/hpack/decoder/hpack_entry_collector.cc b/http2/hpack/decoder/hpack_entry_collector.cc
index 97abea2..a228b6a 100644
--- a/http2/hpack/decoder/hpack_entry_collector.cc
+++ b/http2/hpack/decoder/hpack_entry_collector.cc
@@ -216,11 +216,11 @@
     case HpackEntryType::kNeverIndexedLiteralHeader:
       ASSERT_TRUE(value_.HasEnded()) << *this;
       if (index_ != 0) {
-        CHECK(name_.IsClear());
+        QUICHE_CHECK(name_.IsClear());
         hbb->AppendNameIndexAndLiteralValue(header_type_, index_,
                                             value_.huffman_encoded, value_.s);
       } else {
-        CHECK(name_.HasEnded()) << *this;
+        QUICHE_CHECK(name_.HasEnded()) << *this;
         hbb->AppendLiteralNameAndValue(header_type_, name_.huffman_encoded,
                                        name_.s, value_.huffman_encoded,
                                        value_.s);
diff --git a/http2/hpack/decoder/hpack_entry_decoder.cc b/http2/hpack/decoder/hpack_entry_decoder.cc
index 3cafde8..4e4a4da 100644
--- a/http2/hpack/decoder/hpack_entry_decoder.cc
+++ b/http2/hpack/decoder/hpack_entry_decoder.cc
@@ -57,9 +57,9 @@
 
 DecodeStatus HpackEntryDecoder::Start(DecodeBuffer* db,
                                       HpackEntryDecoderListener* listener) {
-  DCHECK(db != nullptr);
-  DCHECK(listener != nullptr);
-  DCHECK(db->HasData());
+  QUICHE_DCHECK(db != nullptr);
+  QUICHE_DCHECK(listener != nullptr);
+  QUICHE_DCHECK(db->HasData());
   DecodeStatus status = entry_type_decoder_.Start(db);
   switch (status) {
     case DecodeStatus::kDecodeDone:
@@ -76,7 +76,7 @@
     case DecodeStatus::kDecodeInProgress:
       // Hit the end of the decode buffer before fully decoding
       // the entry type and varint.
-      DCHECK_EQ(0u, db->Remaining());
+      QUICHE_DCHECK_EQ(0u, db->Remaining());
       state_ = EntryDecoderState::kResumeDecodingType;
       return status;
     case DecodeStatus::kDecodeError:
@@ -92,8 +92,8 @@
 
 DecodeStatus HpackEntryDecoder::Resume(DecodeBuffer* db,
                                        HpackEntryDecoderListener* listener) {
-  DCHECK(db != nullptr);
-  DCHECK(listener != nullptr);
+  QUICHE_DCHECK(db != nullptr);
+  QUICHE_DCHECK(listener != nullptr);
 
   DecodeStatus status;
 
diff --git a/http2/hpack/decoder/hpack_entry_type_decoder.cc b/http2/hpack/decoder/hpack_entry_type_decoder.cc
index 1cfc23a..99a0770 100644
--- a/http2/hpack/decoder/hpack_entry_type_decoder.cc
+++ b/http2/hpack/decoder/hpack_entry_type_decoder.cc
@@ -31,8 +31,8 @@
 // full HTTP/2 decoder level, but preferably still higher) to determine if the
 // alternatives that take less code/data space are preferable in that situation.
 DecodeStatus HpackEntryTypeDecoder::Start(DecodeBuffer* db) {
-  DCHECK(db != nullptr);
-  DCHECK(db->HasData());
+  QUICHE_DCHECK(db != nullptr);
+  QUICHE_DCHECK(db->HasData());
 
   // The high four bits (nibble) of first byte of the entry determine the type
   // of the entry, and may also be the initial bits of the varint that
diff --git a/http2/hpack/decoder/hpack_entry_type_decoder_test.cc b/http2/hpack/decoder/hpack_entry_type_decoder_test.cc
index c02988a..8852064 100644
--- a/http2/hpack/decoder/hpack_entry_type_decoder_test.cc
+++ b/http2/hpack/decoder/hpack_entry_type_decoder_test.cc
@@ -24,7 +24,7 @@
 class HpackEntryTypeDecoderTest : public RandomDecoderTest {
  protected:
   DecodeStatus StartDecoding(DecodeBuffer* b) override {
-    CHECK_LT(0u, b->Remaining());
+    QUICHE_CHECK_LT(0u, b->Remaining());
     return decoder_.Start(b);
   }
 
diff --git a/http2/hpack/decoder/hpack_string_decoder.h b/http2/hpack/decoder/hpack_string_decoder.h
index 252ab04..b861d23 100644
--- a/http2/hpack/decoder/hpack_string_decoder.h
+++ b/http2/hpack/decoder/hpack_string_decoder.h
@@ -154,7 +154,7 @@
   bool ResumeDecodingLength(DecodeBuffer* db,
                             Listener* cb,
                             DecodeStatus* status) {
-    DCHECK_EQ(state_, kResumeDecodingLength);
+    QUICHE_DCHECK_EQ(state_, kResumeDecodingLength);
     *status = length_decoder_.Resume(db);
     if (*status == DecodeStatus::kDecodeDone) {
       state_ = kDecodingString;
diff --git a/http2/hpack/decoder/hpack_whole_entry_buffer.cc b/http2/hpack/decoder/hpack_whole_entry_buffer.cc
index e546e23..76d1f31 100644
--- a/http2/hpack/decoder/hpack_whole_entry_buffer.cc
+++ b/http2/hpack/decoder/hpack_whole_entry_buffer.cc
@@ -55,7 +55,7 @@
 void HpackWholeEntryBuffer::OnNameStart(bool huffman_encoded, size_t len) {
   HTTP2_DVLOG(2) << "HpackWholeEntryBuffer::OnNameStart: huffman_encoded="
                  << (huffman_encoded ? "true" : "false") << ",  len=" << len;
-  DCHECK_EQ(maybe_name_index_, 0u);
+  QUICHE_DCHECK_EQ(maybe_name_index_, 0u);
   if (!error_detected_) {
     if (len > max_string_size_bytes_) {
       HTTP2_DVLOG(1) << "Name length (" << len << ") is longer than permitted ("
@@ -72,7 +72,7 @@
   HTTP2_DVLOG(2) << "HpackWholeEntryBuffer::OnNameData: len=" << len
                  << " data:\n"
                  << Http2HexDump(absl::string_view(data, len));
-  DCHECK_EQ(maybe_name_index_, 0u);
+  QUICHE_DCHECK_EQ(maybe_name_index_, 0u);
   if (!error_detected_ && !name_.OnData(data, len)) {
     ReportError(HpackDecodingError::kNameHuffmanError, "");
     HTTP2_CODE_COUNT_N(decompress_failure_3, 19, 23);
@@ -81,7 +81,7 @@
 
 void HpackWholeEntryBuffer::OnNameEnd() {
   HTTP2_DVLOG(2) << "HpackWholeEntryBuffer::OnNameEnd";
-  DCHECK_EQ(maybe_name_index_, 0u);
+  QUICHE_DCHECK_EQ(maybe_name_index_, 0u);
   if (!error_detected_ && !name_.OnEnd()) {
     ReportError(HpackDecodingError::kNameHuffmanError, "");
     HTTP2_CODE_COUNT_N(decompress_failure_3, 20, 23);
diff --git a/http2/hpack/huffman/hpack_huffman_decoder.cc b/http2/hpack/huffman/hpack_huffman_decoder.cc
index 868d4f0..2f486c6 100644
--- a/http2/hpack/huffman/hpack_huffman_decoder.cc
+++ b/http2/hpack/huffman/hpack_huffman_decoder.cc
@@ -379,7 +379,7 @@
 }
 
 void HuffmanBitBuffer::ConsumeBits(HuffmanAccumulatorBitCount code_length) {
-  DCHECK_LE(code_length, count_);
+  QUICHE_DCHECK_LE(code_length, count_);
   accumulator_ <<= code_length;
   count_ -= code_length;
 }
@@ -393,7 +393,7 @@
     HuffmanAccumulator expected = ~(~HuffmanAccumulator() >> cnt);
     // We expect all the bits below the high order |cnt| bits of accumulator_
     // to be cleared as we perform left shift operations while decoding.
-    DCHECK_EQ(accumulator_ & ~expected, 0u)
+    QUICHE_DCHECK_EQ(accumulator_ & ~expected, 0u)
         << "\n  expected: " << HuffmanAccumulatorBitSet(expected) << "\n  "
         << *this;
     return accumulator_ == expected;
@@ -425,7 +425,7 @@
       // code of 5, 6 or 7 bits.
       uint8_t short_code =
           bit_buffer_.value() >> (kHuffmanAccumulatorBitCount - 7);
-      DCHECK_LT(short_code, 128);
+      QUICHE_DCHECK_LT(short_code, 128);
       if (short_code < kShortCodeTableSize) {
         ShortCodeInfo info = kShortCodeTable[short_code];
         bit_buffer_.ConsumeBits(info.length);
@@ -449,8 +449,8 @@
 
     PrefixInfo prefix_info = PrefixToInfo(code_prefix);
     HTTP2_DVLOG(3) << "prefix_info: " << prefix_info;
-    DCHECK_LE(kMinCodeBitCount, prefix_info.code_length);
-    DCHECK_LE(prefix_info.code_length, kMaxCodeBitCount);
+    QUICHE_DCHECK_LE(kMinCodeBitCount, prefix_info.code_length);
+    QUICHE_DCHECK_LE(prefix_info.code_length, kMaxCodeBitCount);
 
     if (prefix_info.code_length <= bit_buffer_.count()) {
       // We have enough bits for one code.
@@ -471,7 +471,7 @@
     // Append to it as many bytes as are available AND fit.
     size_t byte_count = bit_buffer_.AppendBytes(input);
     if (byte_count == 0) {
-      DCHECK_EQ(input.size(), 0u);
+      QUICHE_DCHECK_EQ(input.size(), 0u);
       return true;
     }
     input.remove_prefix(byte_count);
diff --git a/http2/hpack/huffman/hpack_huffman_encoder.cc b/http2/hpack/huffman/hpack_huffman_encoder.cc
index d568641..daf85bc 100644
--- a/http2/hpack/huffman/hpack_huffman_encoder.cc
+++ b/http2/hpack/huffman/hpack_huffman_encoder.cc
@@ -20,7 +20,7 @@
 void HuffmanEncode(absl::string_view plain,
                    size_t encoded_size,
                    std::string* huffman) {
-  DCHECK(huffman != nullptr);
+  QUICHE_DCHECK(huffman != nullptr);
   huffman->reserve(huffman->size() + encoded_size);
   uint64_t bit_buffer = 0;  // High-bit is next bit to output. Not clear if that
                             // is more performant than having the low-bit be the
@@ -116,7 +116,7 @@
     *(current + 4) |= code & 0xff;
   }
 
-  DCHECK_EQ(encoded_size, (bit_counter + 7) / 8);
+  QUICHE_DCHECK_EQ(encoded_size, (bit_counter + 7) / 8);
 
   // EOF
   if (bit_counter % 8 != 0) {
diff --git a/http2/hpack/tools/hpack_block_builder.h b/http2/hpack/tools/hpack_block_builder.h
index 31a6b53..079f823 100644
--- a/http2/hpack/tools/hpack_block_builder.h
+++ b/http2/hpack/tools/hpack_block_builder.h
@@ -12,8 +12,9 @@
 // values that the decoder should reject. For now, this is only intended for
 // use in tests, and thus has EXPECT* in the code. If desired to use it in an
 // encoder, it will need optimization work, especially w.r.t memory mgmt, and
-// the EXPECT* will need to be removed or replaced with DCHECKs. And of course
-// the support for very large varints will not be needed in production code.
+// the EXPECT* will need to be removed or replaced with QUICHE_DCHECKs. And of
+// course the support for very large varints will not be needed in production
+// code.
 
 #include <stddef.h>
 
diff --git a/http2/hpack/tools/hpack_example.cc b/http2/hpack/tools/hpack_example.cc
index 9832fdc..25f44c9 100644
--- a/http2/hpack/tools/hpack_example.cc
+++ b/http2/hpack/tools/hpack_example.cc
@@ -19,9 +19,9 @@
   while (!example.empty()) {
     const char c0 = example[0];
     if (isxdigit(c0)) {
-      CHECK_GT(example.size(), 1u) << "Truncated hex byte?";
+      QUICHE_CHECK_GT(example.size(), 1u) << "Truncated hex byte?";
       const char c1 = example[1];
-      CHECK(isxdigit(c1)) << "Found half a byte?";
+      QUICHE_CHECK(isxdigit(c1)) << "Found half a byte?";
       *output += Http2HexDecode(example.substr(0, 2));
       example.remove_prefix(2);
       continue;
@@ -44,7 +44,7 @@
               << absl::StrCat(" (0x", Http2Hex(c0), ")")
               << "\nExample: " << example;
   }
-  CHECK_LT(0u, output->size()) << "Example is empty.";
+  QUICHE_CHECK_LT(0u, output->size()) << "Example is empty.";
 }
 
 }  // namespace
diff --git a/http2/hpack/varint/hpack_varint_decoder.cc b/http2/hpack/varint/hpack_varint_decoder.cc
index 705976c..5ba0b74 100644
--- a/http2/hpack/varint/hpack_varint_decoder.cc
+++ b/http2/hpack/varint/hpack_varint_decoder.cc
@@ -12,8 +12,8 @@
 DecodeStatus HpackVarintDecoder::Start(uint8_t prefix_value,
                                        uint8_t prefix_length,
                                        DecodeBuffer* db) {
-  DCHECK_LE(3u, prefix_length);
-  DCHECK_LE(prefix_length, 8u);
+  QUICHE_DCHECK_LE(3u, prefix_length);
+  QUICHE_DCHECK_LE(prefix_length, 8u);
 
   // |prefix_mask| defines the sequence of low-order bits of the first byte
   // that encode the prefix of the value. It is also the marker in those bits
@@ -34,8 +34,8 @@
 
 DecodeStatus HpackVarintDecoder::StartExtended(uint8_t prefix_length,
                                                DecodeBuffer* db) {
-  DCHECK_LE(3u, prefix_length);
-  DCHECK_LE(prefix_length, 8u);
+  QUICHE_DCHECK_LE(3u, prefix_length);
+  QUICHE_DCHECK_LE(prefix_length, 8u);
 
   value_ = (1 << prefix_length) - 1;
   offset_ = 0;
@@ -59,8 +59,8 @@
 
     // Shifting a 7 bit value to the left by at most 56 places can never
     // overflow on uint64_t.
-    DCHECK_LE(offset_, 56);
-    DCHECK_LE(summand, std::numeric_limits<uint64_t>::max() >> offset_);
+    QUICHE_DCHECK_LE(offset_, 56);
+    QUICHE_DCHECK_LE(summand, std::numeric_limits<uint64_t>::max() >> offset_);
 
     summand <<= offset_;
 
@@ -68,7 +68,7 @@
     // |value_| is at most (2^prefix_length - 1) + (2^49 - 1), and
     // |summand| is at most 255 << 56 (which is smaller than 2^63),
     // so adding them can never overflow on uint64_t.
-    DCHECK_LE(value_, std::numeric_limits<uint64_t>::max() - summand);
+    QUICHE_DCHECK_LE(value_, std::numeric_limits<uint64_t>::max() - summand);
 
     value_ += summand;
 
@@ -85,7 +85,7 @@
     return DecodeStatus::kDecodeInProgress;
   }
 
-  DCHECK_EQ(kMaxOffset, offset_);
+  QUICHE_DCHECK_EQ(kMaxOffset, offset_);
 
   uint8_t byte = db->DecodeUInt8();
   // No more extension bytes are allowed after this.
diff --git a/http2/hpack/varint/hpack_varint_decoder.h b/http2/hpack/varint/hpack_varint_decoder.h
index 4d6fb0c..7de72ba 100644
--- a/http2/hpack/varint/hpack_varint_decoder.h
+++ b/http2/hpack/varint/hpack_varint_decoder.h
@@ -102,12 +102,12 @@
   }
   void CheckNotDone() const {
 #ifndef NDEBUG
-    DCHECK_NE(kHpackVarintDecoderOffsetDone, offset_);
+    QUICHE_DCHECK_NE(kHpackVarintDecoderOffsetDone, offset_);
 #endif
   }
   void CheckDone() const {
 #ifndef NDEBUG
-    DCHECK_EQ(kHpackVarintDecoderOffsetDone, offset_);
+    QUICHE_DCHECK_EQ(kHpackVarintDecoderOffsetDone, offset_);
 #endif
   }
 
diff --git a/http2/hpack/varint/hpack_varint_decoder_test.cc b/http2/hpack/varint/hpack_varint_decoder_test.cc
index 742d277..3d73c5c 100644
--- a/http2/hpack/varint/hpack_varint_decoder_test.cc
+++ b/http2/hpack/varint/hpack_varint_decoder_test.cc
@@ -89,7 +89,7 @@
   }
 
   DecodeStatus StartDecoding(DecodeBuffer* b) override {
-    CHECK_LT(0u, b->Remaining());
+    QUICHE_CHECK_LT(0u, b->Remaining());
     uint8_t prefix = b->DecodeUInt8();
     return decoder_.Start(prefix, prefix_length_, b);
   }
diff --git a/http2/hpack/varint/hpack_varint_encoder.cc b/http2/hpack/varint/hpack_varint_encoder.cc
index 3e0e9eb..87f4981 100644
--- a/http2/hpack/varint/hpack_varint_encoder.cc
+++ b/http2/hpack/varint/hpack_varint_encoder.cc
@@ -15,14 +15,14 @@
                                 uint8_t prefix_length,
                                 uint64_t varint,
                                 std::string* output) {
-  DCHECK_LE(1u, prefix_length);
-  DCHECK_LE(prefix_length, 8u);
+  QUICHE_DCHECK_LE(1u, prefix_length);
+  QUICHE_DCHECK_LE(prefix_length, 8u);
 
   // prefix_mask defines the sequence of low-order bits of the first byte
   // that encode the prefix of the value. It is also the marker in those bits
   // of the first byte indicating that at least one extension byte is needed.
   const uint8_t prefix_mask = (1 << prefix_length) - 1;
-  DCHECK_EQ(0, high_bits & prefix_mask);
+  QUICHE_DCHECK_EQ(0, high_bits & prefix_mask);
 
   if (varint < prefix_mask) {
     // The integer fits into the prefix in its entirety.
diff --git a/http2/hpack/varint/hpack_varint_round_trip_test.cc b/http2/hpack/varint/hpack_varint_round_trip_test.cc
index 91abbba..7b73edb 100644
--- a/http2/hpack/varint/hpack_varint_round_trip_test.cc
+++ b/http2/hpack/varint/hpack_varint_round_trip_test.cc
@@ -41,7 +41,7 @@
   HpackVarintRoundTripTest() : prefix_length_(0) {}
 
   DecodeStatus StartDecoding(DecodeBuffer* b) override {
-    CHECK_LT(0u, b->Remaining());
+    QUICHE_CHECK_LT(0u, b->Remaining());
     uint8_t prefix = b->DecodeUInt8();
     return decoder_.Start(prefix, prefix_length_, b);
   }
@@ -82,8 +82,8 @@
   }
 
   void EncodeNoRandom(uint64_t value, uint8_t prefix_length) {
-    DCHECK_LE(3, prefix_length);
-    DCHECK_LE(prefix_length, 8);
+    QUICHE_DCHECK_LE(3, prefix_length);
+    QUICHE_DCHECK_LE(prefix_length, 8);
     prefix_length_ = prefix_length;
 
     HpackBlockBuilder bb;
@@ -156,7 +156,7 @@
   void EncodeAndDecodeValues(const std::set<uint64_t>& values,
                              uint8_t prefix_length,
                              size_t expected_bytes) {
-    CHECK(!values.empty());
+    QUICHE_CHECK(!values.empty());
     const uint64_t minimum = *values.begin();
     const uint64_t maximum = *values.rbegin();
     for (const uint64_t value : values) {
diff --git a/http2/http2_constants.cc b/http2/http2_constants.cc
index 1cc6b17..d333cf4 100644
--- a/http2/http2_constants.cc
+++ b/http2/http2_constants.cc
@@ -85,7 +85,7 @@
   if (flags != 0) {
     append_and_clear(Http2StringPrintf("0x%02x", flags), flags);
   }
-  DCHECK_EQ(0, flags);
+  QUICHE_DCHECK_EQ(0, flags);
   return s;
 }
 std::string Http2FrameFlagsToString(uint8_t type, uint8_t flags) {
diff --git a/http2/http2_structures.h b/http2/http2_structures.h
index 79f739d..0fa4dbb 100644
--- a/http2/http2_structures.h
+++ b/http2/http2_structures.h
@@ -47,7 +47,7 @@
         stream_id(stream_id),
         type(type),
         flags(static_cast<Http2FrameFlag>(flags)) {
-    DCHECK_LT(payload_length, static_cast<uint32_t>(1 << 24))
+    QUICHE_DCHECK_LT(payload_length, static_cast<uint32_t>(1 << 24))
         << "Payload Length is only a 24 bit field\n"
         << ToString();
   }
@@ -66,38 +66,41 @@
 
   // Is the END_STREAM flag set?
   bool IsEndStream() const {
-    DCHECK(type == Http2FrameType::DATA || type == Http2FrameType::HEADERS)
+    QUICHE_DCHECK(type == Http2FrameType::DATA ||
+                  type == Http2FrameType::HEADERS)
         << ToString();
     return (flags & Http2FrameFlag::END_STREAM) != 0;
   }
 
   // Is the ACK flag set?
   bool IsAck() const {
-    DCHECK(type == Http2FrameType::SETTINGS || type == Http2FrameType::PING)
+    QUICHE_DCHECK(type == Http2FrameType::SETTINGS ||
+                  type == Http2FrameType::PING)
         << ToString();
     return (flags & Http2FrameFlag::ACK) != 0;
   }
 
   // Is the END_HEADERS flag set?
   bool IsEndHeaders() const {
-    DCHECK(type == Http2FrameType::HEADERS ||
-           type == Http2FrameType::PUSH_PROMISE ||
-           type == Http2FrameType::CONTINUATION)
+    QUICHE_DCHECK(type == Http2FrameType::HEADERS ||
+                  type == Http2FrameType::PUSH_PROMISE ||
+                  type == Http2FrameType::CONTINUATION)
         << ToString();
     return (flags & Http2FrameFlag::END_HEADERS) != 0;
   }
 
   // Is the PADDED flag set?
   bool IsPadded() const {
-    DCHECK(type == Http2FrameType::DATA || type == Http2FrameType::HEADERS ||
-           type == Http2FrameType::PUSH_PROMISE)
+    QUICHE_DCHECK(type == Http2FrameType::DATA ||
+                  type == Http2FrameType::HEADERS ||
+                  type == Http2FrameType::PUSH_PROMISE)
         << ToString();
     return (flags & Http2FrameFlag::PADDED) != 0;
   }
 
   // Is the PRIORITY flag set?
   bool HasPriority() const {
-    DCHECK_EQ(type, Http2FrameType::HEADERS) << ToString();
+    QUICHE_DCHECK_EQ(type, Http2FrameType::HEADERS) << ToString();
     return (flags & Http2FrameFlag::PRIORITY) != 0;
   }
 
@@ -149,11 +152,11 @@
         is_exclusive(is_exclusive) {
     // Can't have the high-bit set in the stream id because we need to use
     // that for the EXCLUSIVE flag bit.
-    DCHECK_EQ(stream_dependency, stream_dependency & StreamIdMask())
+    QUICHE_DCHECK_EQ(stream_dependency, stream_dependency & StreamIdMask())
         << "Stream Dependency is only a 31-bit field.\n"
         << ToString();
-    DCHECK_LE(1u, weight) << "Weight is too small.";
-    DCHECK_LE(weight, 256u) << "Weight is too large.";
+    QUICHE_DCHECK_LE(1u, weight) << "Weight is too small.";
+    QUICHE_DCHECK_LE(weight, 256u) << "Weight is too large.";
   }
   static constexpr size_t EncodedSize() { return 5; }
 
diff --git a/http2/http2_structures_test.cc b/http2/http2_structures_test.cc
index 3525c40..ffd67b3 100644
--- a/http2/http2_structures_test.cc
+++ b/http2/http2_structures_test.cc
@@ -91,8 +91,8 @@
   Http2Random random;
   uint8_t frame_type = 0;
   do {
-    // Only the payload length is DCHECK'd in the constructor, so we need to
-    // make sure it is a "uint24".
+    // Only the payload length is QUICHE_DCHECK'd in the constructor, so we need
+    // to make sure it is a "uint24".
     uint32_t payload_length = random.Rand32() & 0xffffff;
     Http2FrameType type = static_cast<Http2FrameType>(frame_type);
     uint8_t flags = random.Rand8();
diff --git a/http2/platform/api/http2_logging.h b/http2/platform/api/http2_logging.h
index d73c49c..80ced05 100644
--- a/http2/platform/api/http2_logging.h
+++ b/http2/platform/api/http2_logging.h
@@ -1,24 +1,21 @@
 #ifndef QUICHE_HTTP2_PLATFORM_API_HTTP2_LOGGING_H_
 #define QUICHE_HTTP2_PLATFORM_API_HTTP2_LOGGING_H_
 
-#include "net/http2/platform/impl/http2_logging_impl.h"
+#include "common/platform/api/quiche_logging.h"
 
-#define HTTP2_LOG(severity) HTTP2_LOG_IMPL(severity)
+#define HTTP2_LOG(severity) QUICHE_LOG(severity)
 
-#define HTTP2_VLOG(verbose_level) HTTP2_VLOG_IMPL(verbose_level)
+#define HTTP2_VLOG(verbose_level) QUICHE_VLOG(verbose_level)
 
-#define HTTP2_DLOG(severity) HTTP2_DLOG_IMPL(severity)
+#define HTTP2_DLOG(severity) QUICHE_DLOG(severity)
 
-#define HTTP2_DLOG_IF(severity, condition) \
-  HTTP2_DLOG_IF_IMPL(severity, condition)
+#define HTTP2_DLOG_IF(severity, condition) QUICHE_DLOG_IF(severity, condition)
 
-#define HTTP2_DVLOG(verbose_level) HTTP2_DVLOG_IMPL(verbose_level)
+#define HTTP2_DVLOG(verbose_level) QUICHE_DVLOG(verbose_level)
 
 #define HTTP2_DVLOG_IF(verbose_level, condition) \
-  HTTP2_DVLOG_IF_IMPL(verbose_level, condition)
+  QUICHE_DVLOG_IF(verbose_level, condition)
 
-#define HTTP2_DLOG_EVERY_N(severity, n) HTTP2_DLOG_EVERY_N_IMPL(severity, n)
-
-#define HTTP2_LOG_FIRST_N(severity, n) HTTP2_LOG_FIRST_N_IMPL(severity, n)
+#define HTTP2_LOG_FIRST_N(severity, n) QUICHE_LOG_FIRST_N(severity, n)
 
 #endif  // QUICHE_HTTP2_PLATFORM_API_HTTP2_LOGGING_H_
diff --git a/http2/test_tools/frame_parts_collector.cc b/http2/test_tools/frame_parts_collector.cc
index 1be03e3..6f02eb6 100644
--- a/http2/test_tools/frame_parts_collector.cc
+++ b/http2/test_tools/frame_parts_collector.cc
@@ -26,7 +26,7 @@
   if (n < size()) {
     return collected_frames_.at(n).get();
   }
-  CHECK(n == size());
+  QUICHE_CHECK(n == size());
   return current_frame();
 }
 
diff --git a/http2/test_tools/http2_random.cc b/http2/test_tools/http2_random.cc
index ce1b93b..c9a071d 100644
--- a/http2/test_tools/http2_random.cc
+++ b/http2/test_tools/http2_random.cc
@@ -18,7 +18,7 @@
 
 Http2Random::Http2Random(absl::string_view key) {
   std::string decoded_key = Http2HexDecode(key);
-  CHECK_EQ(sizeof(key_), decoded_key.size());
+  QUICHE_CHECK_EQ(sizeof(key_), decoded_key.size());
   memcpy(key_, decoded_key.data(), sizeof(key_));
 }
 
diff --git a/http2/tools/http2_frame_builder.h b/http2/tools/http2_frame_builder.h
index a40e46d..52f6350 100644
--- a/http2/tools/http2_frame_builder.h
+++ b/http2/tools/http2_frame_builder.h
@@ -11,7 +11,7 @@
 // For now, this is only intended for use in tests, and thus has EXPECT* in the
 // code. If desired to use it in an encoder, it will need optimization work,
 // especially w.r.t memory mgmt, and the EXPECT* will need to be removed or
-// replaced with DCHECKs.
+// replaced with QUICHE_DCHECKs.
 
 #include <stddef.h>  // for size_t
 
diff --git a/http2/tools/random_decoder_test.cc b/http2/tools/random_decoder_test.cc
index 8230fe3..08f7a60 100644
--- a/http2/tools/random_decoder_test.cc
+++ b/http2/tools/random_decoder_test.cc
@@ -151,7 +151,7 @@
                                           size_t remaining) -> size_t {
     uint32_t r = random_.Rand32();
     if (first && return_non_zero_on_first) {
-      CHECK_LT(0u, remaining);
+      QUICHE_CHECK_LT(0u, remaining);
       if (remaining == 1) {
         return 1;
       }
