diff --git a/.clang-tidy b/.clang-tidy
index cfa4a8f..a692886 100644
--- a/.clang-tidy
+++ b/.clang-tidy
@@ -3,6 +3,7 @@
   Checks:          '-*,
                     llvm-namespace-comment,
                     modernize-use-override,
+                    readability-container-size-empty,
                     readability-static-definition-in-anonymous-namespace,
                     readability-redundant-smartptr-get,
                     readability-redundant-declaration'
diff --git a/examples/peerconnection/client/linux/main_wnd.cc b/examples/peerconnection/client/linux/main_wnd.cc
index 74a27f7..a3e4b76 100644
--- a/examples/peerconnection/client/linux/main_wnd.cc
+++ b/examples/peerconnection/client/linux/main_wnd.cc
@@ -374,7 +374,7 @@
   gtk_widget_set_sensitive(widget, false);
   server_ = gtk_entry_get_text(GTK_ENTRY(server_edit_));
   port_ = gtk_entry_get_text(GTK_ENTRY(port_edit_));
-  int port = port_.length() ? atoi(port_.c_str()) : 0;
+  int port = !port_.empty() ? atoi(port_.c_str()) : 0;
   callback_->StartLogin(server_, port);
 }
 
diff --git a/media/base/media_engine.cc b/media/base/media_engine.cc
index bdcad2a..752573c 100644
--- a/media/base/media_engine.cc
+++ b/media/base/media_engine.cc
@@ -65,7 +65,7 @@
   }
 
   const std::vector<RidDescription>& rids = sp.rids();
-  RTC_DCHECK(rids.size() == 0 || rids.size() == encoding_count);
+  RTC_DCHECK(rids.empty() || rids.size() == encoding_count);
   for (size_t i = 0; i < rids.size(); ++i) {
     encodings[i].rid = rids[i].rid;
   }
diff --git a/media/base/rtp_utils.cc b/media/base/rtp_utils.cc
index 8cc697f..1bb208a 100644
--- a/media/base/rtp_utils.cc
+++ b/media/base/rtp_utils.cc
@@ -353,7 +353,7 @@
 bool ApplyPacketOptions(ArrayView<uint8_t> data,
                         const PacketTimeUpdateParams& packet_time_params,
                         uint64_t time_us) {
-  RTC_DCHECK(data.size() > 0);
+  RTC_DCHECK(!data.empty());
 
   // if there is no valid `rtp_sendtime_extension_id` and `srtp_auth_key` in
   // PacketOptions, nothing to be updated in this packet.
diff --git a/media/base/stream_params.cc b/media/base/stream_params.cc
index 1d1597e..f1d873f 100644
--- a/media/base/stream_params.cc
+++ b/media/base/stream_params.cc
@@ -92,7 +92,7 @@
 SsrcGroup& SsrcGroup::operator=(SsrcGroup&&) = default;
 
 bool SsrcGroup::has_semantics(const std::string& semantics_in) const {
-  return (semantics == semantics_in && ssrcs.size() > 0);
+  return (semantics == semantics_in && !ssrcs.empty());
 }
 
 std::string SsrcGroup::ToString() const {
diff --git a/media/engine/webrtc_video_engine.cc b/media/engine/webrtc_video_engine.cc
index 0b62de6..cef81f9 100644
--- a/media/engine/webrtc_video_engine.cc
+++ b/media/engine/webrtc_video_engine.cc
@@ -2171,7 +2171,7 @@
   }
   if (!key_frames_requested_by_rid.empty()) {
     if (key_frames_requested_by_rid.size() == 1 &&
-        key_frames_requested_by_rid[0] == "") {
+        key_frames_requested_by_rid[0].empty()) {
       // For non-simulcast cases there is no rid,
       // request a keyframe on all layers.
       key_frames_requested_by_rid.clear();
@@ -2581,7 +2581,7 @@
     info.firs_received += infos[i].firs_received;
     info.nacks_received += infos[i].nacks_received;
     info.plis_received += infos[i].plis_received;
-    if (infos[i].report_block_datas.size())
+    if (!infos[i].report_block_datas.empty())
       info.report_block_datas.push_back(infos[i].report_block_datas[0]);
     if (infos[i].qp_sum) {
       if (!info.qp_sum) {
diff --git a/media/engine/webrtc_voice_engine.cc b/media/engine/webrtc_voice_engine.cc
index d5be912..6d996f1 100644
--- a/media/engine/webrtc_voice_engine.cc
+++ b/media/engine/webrtc_voice_engine.cc
@@ -1791,7 +1791,7 @@
   // With separate send and receive channels, we expect GetStats to be called on
   // both, and accumulate info, but only one channel (the send one) should have
   // senders.
-  RTC_DCHECK(info->senders.size() == 0U || send_streams_.size() == 0);
+  RTC_DCHECK(info->senders.empty() || send_streams_.empty());
   for (const auto& stream : send_streams_) {
     AudioSendStream::Stats stats = stream.second->GetStats(false);
     VoiceSenderInfo sinfo;
diff --git a/modules/audio_coding/acm2/audio_coding_module.cc b/modules/audio_coding/acm2/audio_coding_module.cc
index 41d022e..dfbfe18 100644
--- a/modules/audio_coding/acm2/audio_coding_module.cc
+++ b/modules/audio_coding/acm2/audio_coding_module.cc
@@ -268,7 +268,7 @@
       &encode_buffer_);
 
   bitrate_logger_.MaybeLog(encoder_stack_->GetTargetBitrate() / 1000);
-  if (encode_buffer_.size() == 0 && !encoded_info.send_even_if_empty) {
+  if (encode_buffer_.empty() && !encoded_info.send_even_if_empty) {
     // Not enough data.
     return 0;
   }
@@ -289,7 +289,7 @@
   }
 
   AudioFrameType frame_type;
-  if (encode_buffer_.size() == 0 && encoded_info.send_even_if_empty) {
+  if (encode_buffer_.empty() && encoded_info.send_even_if_empty) {
     frame_type = AudioFrameType::kEmptyFrame;
     encoded_info.payload_type = previous_pltype;
   } else {
diff --git a/modules/audio_coding/audio_network_adaptor/controller_manager.cc b/modules/audio_coding/audio_network_adaptor/controller_manager.cc
index c126897..074f8ed 100644
--- a/modules/audio_coding/audio_network_adaptor/controller_manager.cc
+++ b/modules/audio_coding/audio_network_adaptor/controller_manager.cc
@@ -315,7 +315,7 @@
     controllers.push_back(std::move(controller));
   }
 
-  if (scoring_points.size() == 0) {
+  if (scoring_points.empty()) {
     return std::unique_ptr<ControllerManagerImpl>(
         new ControllerManagerImpl(ControllerManagerImpl::Config(0, 0),
                                   std::move(controllers), scoring_points));
@@ -363,7 +363,7 @@
 
 std::vector<Controller*> ControllerManagerImpl::GetSortedControllers(
     const Controller::NetworkMetrics& metrics) {
-  if (controller_scoring_points_.size() == 0)
+  if (controller_scoring_points_.empty())
     return default_sorted_controllers_;
 
   if (!metrics.uplink_bandwidth_bps || !metrics.uplink_packet_loss_fraction)
diff --git a/modules/audio_coding/codecs/opus/audio_decoder_opus_unittest.cc b/modules/audio_coding/codecs/opus/audio_decoder_opus_unittest.cc
index 8c6635f..43236b7 100644
--- a/modules/audio_coding/codecs/opus/audio_decoder_opus_unittest.cc
+++ b/modules/audio_coding/codecs/opus/audio_decoder_opus_unittest.cc
@@ -139,7 +139,7 @@
     encoder.Encode(rtp_timestamp++, audio_frame.data_view().data(), &payload);
 
     // Ignore empty payloads: the encoder needs more audio to produce a packet.
-    if (payload.size() == 0) {
+    if (payload.empty()) {
       continue;
     }
 
@@ -171,7 +171,7 @@
         encoder.Encode(rtp_timestamp++, input_frame, &payload);
 
     // Ignore empty payloads: the encoder needs more audio to produce a packet.
-    if (payload.size() == 0) {
+    if (payload.empty()) {
       continue;
     }
 
@@ -222,7 +222,7 @@
     encoder.Encode(rtp_timestamp++, audio_frame.data_view().data(), &payload);
 
     // Ignore empty payloads: the encoder needs more audio to produce a packet.
-    if (payload.size() == 0) {
+    if (payload.empty()) {
       continue;
     }
 
@@ -265,7 +265,7 @@
     generator.GenerateNextFrame(input_frame);
     Buffer payload;
     encoder.Encode(rtp_timestamp++, input_frame, &payload);
-    if (payload.size() == 0) {
+    if (payload.empty()) {
       continue;
     }
 
diff --git a/modules/audio_coding/codecs/opus/opus_bandwidth_unittest.cc b/modules/audio_coding/codecs/opus/opus_bandwidth_unittest.cc
index decd1ec..030a65d 100644
--- a/modules/audio_coding/codecs/opus/opus_bandwidth_unittest.cc
+++ b/modules/audio_coding/codecs/opus/opus_bandwidth_unittest.cc
@@ -102,7 +102,7 @@
     AudioEncoder::EncodedInfo encoder_info =
         encoder->Encode(rtp_timestamp, audio_loop->GetNextBlock(), &encoded);
     rtp_timestamp += kInputBlockSizeSamples;
-    if (encoded.size() > 0) {
+    if (!encoded.empty()) {
       int decoder_info = decoder->Decode(
           encoded.data(), encoded.size(), kSampleRateHz,
           decoded.size() * sizeof(decoded[0]), decoded.data(), &speech_type);
diff --git a/modules/audio_coding/neteq/packet_buffer.cc b/modules/audio_coding/neteq/packet_buffer.cc
index a2e3a7e..86f8702 100644
--- a/modules/audio_coding/neteq/packet_buffer.cc
+++ b/modules/audio_coding/neteq/packet_buffer.cc
@@ -232,7 +232,7 @@
 size_t PacketBuffer::GetSpanSamples(size_t last_decoded_length,
                                     size_t sample_rate,
                                     bool count_waiting_time) const {
-  if (buffer_.size() == 0) {
+  if (buffer_.empty()) {
     return 0;
   }
 
diff --git a/modules/audio_coding/neteq/statistics_calculator.cc b/modules/audio_coding/neteq/statistics_calculator.cc
index 3a02711..582d0ff 100644
--- a/modules/audio_coding/neteq/statistics_calculator.cc
+++ b/modules/audio_coding/neteq/statistics_calculator.cc
@@ -390,7 +390,7 @@
                         static_cast<uint32_t>(discarded_secondary_samples +
                                               secondary_decoded_samples_));
 
-  if (waiting_times_.size() == 0) {
+  if (waiting_times_.empty()) {
     stats->mean_waiting_time_ms = -1;
     stats->median_waiting_time_ms = -1;
     stats->min_waiting_time_ms = -1;
diff --git a/modules/audio_coding/neteq/tools/encode_neteq_input.cc b/modules/audio_coding/neteq/tools/encode_neteq_input.cc
index c76dbbb..e763d78 100644
--- a/modules/audio_coding/neteq/tools/encode_neteq_input.cc
+++ b/modules/audio_coding/neteq/tools/encode_neteq_input.cc
@@ -78,7 +78,7 @@
   AudioEncoder::EncodedInfo info;
   RTC_DCHECK(!info.send_even_if_empty);
   int num_blocks = 0;
-  while (packet_data_->payload.size() == 0 && !info.send_even_if_empty) {
+  while (packet_data_->payload.empty() && !info.send_even_if_empty) {
     const size_t num_samples = CheckedDivExact(
         static_cast<int>(encoder_->SampleRateHz() * kOutputPeriodMs), 1000);
 
diff --git a/modules/audio_coding/neteq/tools/neteq_rtpplay.cc b/modules/audio_coding/neteq/tools/neteq_rtpplay.cc
index da2df22..32b5da4 100644
--- a/modules/audio_coding/neteq/tools/neteq_rtpplay.cc
+++ b/modules/audio_coding/neteq/tools/neteq_rtpplay.cc
@@ -397,7 +397,7 @@
       output_files_base_name, output_audio_filename, "");
 
   // Check if an SSRC value was provided.
-  if (absl::GetFlag(FLAGS_ssrc).size() > 0) {
+  if (!absl::GetFlag(FLAGS_ssrc).empty()) {
     uint32_t ssrc;
     RTC_CHECK(ParseSsrc(absl::GetFlag(FLAGS_ssrc), &ssrc))
         << "Flag verification has failed.";
diff --git a/modules/audio_coding/neteq/tools/neteq_test_factory.cc b/modules/audio_coding/neteq/tools/neteq_test_factory.cc
index c2599dd..ca4fb49 100644
--- a/modules/audio_coding/neteq/tools/neteq_test_factory.cc
+++ b/modules/audio_coding/neteq/tools/neteq_test_factory.cc
@@ -271,7 +271,7 @@
       CreateBuiltinAudioDecoderFactory();
 
   // Check if a replacement audio file was provided.
-  if (config.replacement_audio_file.size() > 0) {
+  if (!config.replacement_audio_file.empty()) {
     // Find largest unused payload type.
     int replacement_pt = 127;
     while (codecs.find(replacement_pt) != codecs.end()) {
diff --git a/modules/audio_device/include/test_audio_device.cc b/modules/audio_device/include/test_audio_device.cc
index 9a319d9..d2fb9b3 100644
--- a/modules/audio_device/include/test_audio_device.cc
+++ b/modules/audio_device/include/test_audio_device.cc
@@ -133,7 +133,7 @@
           }
           return read;
         });
-    return buffer->size() > 0;
+    return !buffer->empty();
   }
 
  private:
@@ -318,7 +318,7 @@
           memcpy(data.data(), read_buffer_view.data(), size);
           return read / 2;
         });
-    return buffer->size() > 0;
+    return !buffer->empty();
   }
 
  private:
diff --git a/modules/audio_device/test_audio_device_impl.cc b/modules/audio_device/test_audio_device_impl.cc
index f456636..fe3d10d 100644
--- a/modules/audio_device/test_audio_device_impl.cc
+++ b/modules/audio_device/test_audio_device_impl.cc
@@ -171,7 +171,7 @@
   if (capturing_ && capturer_ != nullptr) {
     // Capture 10ms of audio. 2 bytes per sample.
     const bool keep_capturing = capturer_->Capture(&recording_buffer_);
-    if (recording_buffer_.size() > 0) {
+    if (!recording_buffer_.empty()) {
       audio_buffer_->SetRecordedBuffer(
           recording_buffer_.data(),
           recording_buffer_.size() / capturer_->NumChannels(),
diff --git a/modules/audio_processing/utility/cascaded_biquad_filter.cc b/modules/audio_processing/utility/cascaded_biquad_filter.cc
index d2f4952..53c9d15 100644
--- a/modules/audio_processing/utility/cascaded_biquad_filter.cc
+++ b/modules/audio_processing/utility/cascaded_biquad_filter.cc
@@ -33,7 +33,7 @@
 
 void CascadedBiQuadFilter::Process(ArrayView<const float> x,
                                    ArrayView<float> y) {
-  if (biquads_.size() > 0) {
+  if (!biquads_.empty()) {
     ApplyBiQuad(x, y, &biquads_[0]);
     for (size_t k = 1; k < biquads_.size(); ++k) {
       ApplyBiQuad(y, y, &biquads_[k]);
diff --git a/modules/congestion_controller/pcc/pcc_network_controller.cc b/modules/congestion_controller/pcc/pcc_network_controller.cc
index 4a643fc..9094002 100644
--- a/modules/congestion_controller/pcc/pcc_network_controller.cc
+++ b/modules/congestion_controller/pcc/pcc_network_controller.cc
@@ -161,7 +161,7 @@
       received_size += last_received_packets_[i].sent_packet.size;
     }
     TimeDelta sending_time = TimeDelta::Zero();
-    if (last_received_packets_.size() > 0)
+    if (!last_received_packets_.empty())
       sending_time = last_received_packets_.back().receive_time -
                      last_received_packets_.front().receive_time;
     DataRate receiving_rate = bandwidth_estimate_;
@@ -179,7 +179,7 @@
       received_size += last_received_packets_[i].sent_packet.size;
     }
     TimeDelta sending_time = TimeDelta::Zero();
-    if (last_received_packets_.size() > 0)
+    if (!last_received_packets_.empty())
       sending_time = last_received_packets_.back().receive_time -
                      last_received_packets_.front().receive_time;
     DataRate receiving_rate = bandwidth_estimate_;
diff --git a/modules/desktop_capture/linux/wayland/base_capturer_pipewire.cc b/modules/desktop_capture/linux/wayland/base_capturer_pipewire.cc
index b2864ee..361b465 100644
--- a/modules/desktop_capture/linux/wayland/base_capturer_pipewire.cc
+++ b/modules/desktop_capture/linux/wayland/base_capturer_pipewire.cc
@@ -189,7 +189,7 @@
 }
 
 bool BaseCapturerPipeWire::GetSourceList(SourceList* sources) {
-  RTC_DCHECK(sources->size() == 0);
+  RTC_DCHECK(sources->empty());
   // List of available screens is already presented by the xdg-desktop-portal,
   // so we just need a (valid) source id for any callers to pass around, even
   // though it doesn't mean anything to us. Until the user selects a source in
diff --git a/modules/desktop_capture/linux/wayland/egl_dmabuf.cc b/modules/desktop_capture/linux/wayland/egl_dmabuf.cc
index 3a80f4e..cf5b4da 100644
--- a/modules/desktop_capture/linux/wayland/egl_dmabuf.cc
+++ b/modules/desktop_capture/linux/wayland/egl_dmabuf.cc
@@ -529,7 +529,7 @@
     return false;
   }
 
-  if (plane_datas.size() <= 0) {
+  if (plane_datas.empty()) {
     RTC_LOG(LS_ERROR) << "Failed to process buffer: invalid number of planes";
     return false;
   }
@@ -544,7 +544,7 @@
   attribs[atti++] = EGL_LINUX_DRM_FOURCC_EXT;
   attribs[atti++] = SpaPixelFormatToDrmFormat(format);
 
-  if (plane_datas.size() > 0) {
+  if (!plane_datas.empty()) {
     attribs[atti++] = EGL_DMA_BUF_PLANE0_FD_EXT;
     attribs[atti++] = plane_datas[0].fd;
     attribs[atti++] = EGL_DMA_BUF_PLANE0_OFFSET_EXT;
diff --git a/modules/desktop_capture/linux/wayland/screencast_stream_utils.cc b/modules/desktop_capture/linux/wayland/screencast_stream_utils.cc
index 251bc4e..ff0fdfb 100644
--- a/modules/desktop_capture/linux/wayland/screencast_stream_utils.cc
+++ b/modules/desktop_capture/linux/wayland/screencast_stream_utils.cc
@@ -91,7 +91,7 @@
                       SPA_POD_Id(SPA_MEDIA_SUBTYPE_raw), 0);
   spa_pod_builder_add(builder, SPA_FORMAT_VIDEO_format, SPA_POD_Id(format), 0);
 
-  if (modifiers.size()) {
+  if (!modifiers.empty()) {
     if (modifiers.size() == 1 && modifiers[0] == DRM_FORMAT_MOD_INVALID) {
       spa_pod_builder_prop(builder, SPA_FORMAT_VIDEO_modifier,
                            SPA_POD_PROP_FLAG_MANDATORY);
diff --git a/modules/desktop_capture/linux/x11/screen_capturer_x11.cc b/modules/desktop_capture/linux/x11/screen_capturer_x11.cc
index ce73124..27b334f 100644
--- a/modules/desktop_capture/linux/x11/screen_capturer_x11.cc
+++ b/modules/desktop_capture/linux/x11/screen_capturer_x11.cc
@@ -292,7 +292,7 @@
 }
 
 bool ScreenCapturerX11::GetSourceList(SourceList* sources) {
-  RTC_DCHECK(sources->size() == 0);
+  RTC_DCHECK(sources->empty());
   if (!use_randr_) {
     sources->push_back({});
     return true;
diff --git a/modules/rtp_rtcp/source/ulpfec_receiver.cc b/modules/rtp_rtcp/source/ulpfec_receiver.cc
index 83bc10c..53de776 100644
--- a/modules/rtp_rtcp/source/ulpfec_receiver.cc
+++ b/modules/rtp_rtcp/source/ulpfec_receiver.cc
@@ -183,7 +183,7 @@
         rtp_packet.size() - rtp_packet.headers_size() - kRedHeaderLength);
   }
 
-  if (received_packet->pkt->data.size() > 0) {
+  if (!received_packet->pkt->data.empty()) {
     received_packets_.push_back(std::move(received_packet));
   }
   return true;
diff --git a/modules/rtp_rtcp/source/video_rtp_depacketizer_av1.cc b/modules/rtp_rtcp/source/video_rtp_depacketizer_av1.cc
index 9324851..ed7434e 100644
--- a/modules/rtp_rtcp/source/video_rtp_depacketizer_av1.cc
+++ b/modules/rtp_rtcp/source/video_rtp_depacketizer_av1.cc
@@ -368,7 +368,7 @@
 
 std::optional<VideoRtpDepacketizer::ParsedRtpPayload>
 VideoRtpDepacketizerAv1::Parse(CopyOnWriteBuffer rtp_payload) {
-  if (rtp_payload.size() == 0) {
+  if (rtp_payload.empty()) {
     RTC_DLOG(LS_ERROR) << "Empty rtp payload.";
     return std::nullopt;
   }
diff --git a/modules/rtp_rtcp/source/video_rtp_depacketizer_generic.cc b/modules/rtp_rtcp/source/video_rtp_depacketizer_generic.cc
index 2f8f7fd..7de2e4b 100644
--- a/modules/rtp_rtcp/source/video_rtp_depacketizer_generic.cc
+++ b/modules/rtp_rtcp/source/video_rtp_depacketizer_generic.cc
@@ -36,7 +36,7 @@
 
 std::optional<VideoRtpDepacketizer::ParsedRtpPayload>
 VideoRtpDepacketizerGeneric::Parse(CopyOnWriteBuffer rtp_payload) {
-  if (rtp_payload.size() == 0) {
+  if (rtp_payload.empty()) {
     RTC_LOG(LS_WARNING) << "Empty payload.";
     return std::nullopt;
   }
diff --git a/modules/rtp_rtcp/source/video_rtp_depacketizer_h264.cc b/modules/rtp_rtcp/source/video_rtp_depacketizer_h264.cc
index 54b85e5..1c6529b 100644
--- a/modules/rtp_rtcp/source/video_rtp_depacketizer_h264.cc
+++ b/modules/rtp_rtcp/source/video_rtp_depacketizer_h264.cc
@@ -293,7 +293,7 @@
 
 std::optional<VideoRtpDepacketizer::ParsedRtpPayload>
 VideoRtpDepacketizerH264::Parse(CopyOnWriteBuffer rtp_payload) {
-  if (rtp_payload.size() == 0) {
+  if (rtp_payload.empty()) {
     RTC_LOG(LS_ERROR) << "Empty payload.";
     return std::nullopt;
   }
diff --git a/p2p/base/async_stun_tcp_socket_unittest.cc b/p2p/base/async_stun_tcp_socket_unittest.cc
index 39515dd..aa4fa6a 100644
--- a/p2p/base/async_stun_tcp_socket_unittest.cc
+++ b/p2p/base/async_stun_tcp_socket_unittest.cc
@@ -131,7 +131,7 @@
 
   bool CheckData(const void* data, int len) {
     bool ret = false;
-    if (recv_packets_.size()) {
+    if (!recv_packets_.empty()) {
       std::string packet = recv_packets_.front();
       recv_packets_.pop_front();
       ret = (memcmp(data, packet.c_str(), len) == 0);
diff --git a/p2p/base/connection.cc b/p2p/base/connection.cc
index 286e98f..cebb3f1 100644
--- a/p2p/base/connection.cc
+++ b/p2p/base/connection.cc
@@ -87,7 +87,7 @@
     const std::vector<Connection::SentPing>& pings_since_last_response,
     int64_t maximum_time,
     int64_t now) {
-  if (pings_since_last_response.size() == 0)
+  if (pings_since_last_response.empty())
     return false;
 
   auto first = pings_since_last_response[0];
diff --git a/p2p/base/p2p_transport_channel_unittest.cc b/p2p/base/p2p_transport_channel_unittest.cc
index f48a8a4..6f6259e 100644
--- a/p2p/base/p2p_transport_channel_unittest.cc
+++ b/p2p/base/p2p_transport_channel_unittest.cc
@@ -6797,7 +6797,7 @@
   DestroyChannels();
 }
 
-static struct LocalAreaNetworkPermissionTestConfig {
+struct LocalAreaNetworkPermissionTestConfig {
   template <typename Sink>
   friend void AbslStringify(
       Sink& sink,
diff --git a/p2p/base/stun_port.cc b/p2p/base/stun_port.cc
index 29d49c6..7623ccc 100644
--- a/p2p/base/stun_port.cc
+++ b/p2p/base/stun_port.cc
@@ -610,7 +610,7 @@
 
   // The port is "completed" if there is no stun server provided, or the bind
   // request succeeded for any stun server, or the socket is shared.
-  if (server_addresses_.empty() || bind_request_succeeded_servers_.size() > 0 ||
+  if (server_addresses_.empty() || !bind_request_succeeded_servers_.empty() ||
       SharedSocket()) {
     SignalPortComplete(this);
   } else {
diff --git a/p2p/dtls/dtls_stun_piggyback_controller.cc b/p2p/dtls/dtls_stun_piggyback_controller.cc
index 7fdeb73..70b76ab 100644
--- a/p2p/dtls/dtls_stun_piggyback_controller.cc
+++ b/p2p/dtls/dtls_stun_piggyback_controller.cc
@@ -200,7 +200,7 @@
     return;
   }
 
-  if (!data.has_value() || data->size() == 0) {
+  if (!data.has_value() || data->empty()) {
     return;
   }
 
diff --git a/p2p/dtls/dtls_transport.cc b/p2p/dtls/dtls_transport.cc
index 52020f3..51ec72c 100644
--- a/p2p/dtls/dtls_transport.cc
+++ b/p2p/dtls/dtls_transport.cc
@@ -380,7 +380,7 @@
   }
 
   // At this point we know we are doing DTLS
-  bool fingerprint_changing = remote_fingerprint_value_.size() > 0u;
+  bool fingerprint_changing = !remote_fingerprint_value_.empty();
   remote_fingerprint_value_ = std::move(remote_fingerprint_value);
   remote_fingerprint_algorithm_ = std::string(digest_alg);
 
@@ -471,7 +471,7 @@
   dtls_->SetServerRole(*dtls_role_);
   dtls_->SetEventCallback(
       [this](int events, int err) { OnDtlsEvent(events, err); });
-  if (remote_fingerprint_value_.size() &&
+  if (!remote_fingerprint_value_.empty() &&
       dtls_->SetPeerCertificateDigest(remote_fingerprint_algorithm_,
                                       remote_fingerprint_value_) !=
           SSLPeerCertificateDigestError::NONE) {
diff --git a/pc/legacy_stats_collector.cc b/pc/legacy_stats_collector.cc
index b4bf87f..377bb60 100644
--- a/pc/legacy_stats_collector.cc
+++ b/pc/legacy_stats_collector.cc
@@ -1013,7 +1013,7 @@
       }
       int srtp_crypto_suite = channel_iter.srtp_crypto_suite;
       if (srtp_crypto_suite != kSrtpInvalidCryptoSuite &&
-          SrtpCryptoSuiteToName(srtp_crypto_suite).length()) {
+          !SrtpCryptoSuiteToName(srtp_crypto_suite).empty()) {
         channel_report->AddString(StatsReport::kStatsValueNameSrtpCipher,
                                   SrtpCryptoSuiteToName(srtp_crypto_suite));
       }
diff --git a/pc/legacy_stats_collector_unittest.cc b/pc/legacy_stats_collector_unittest.cc
index c5e0b1a..8ec0c42 100644
--- a/pc/legacy_stats_collector_unittest.cc
+++ b/pc/legacy_stats_collector_unittest.cc
@@ -691,7 +691,7 @@
     std::string local_certificate_id =
         ExtractStatsValue(StatsReport::kStatsReportTypeComponent, reports,
                           StatsReport::kStatsValueNameLocalCertificateId);
-    if (local_ders.size() > 0) {
+    if (!local_ders.empty()) {
       EXPECT_NE(kNotFound, local_certificate_id);
       StatsReport::Id id(IdFromCertIdString(local_certificate_id));
       CheckCertChainReports(reports, local_ders, id);
@@ -703,7 +703,7 @@
     std::string remote_certificate_id =
         ExtractStatsValue(StatsReport::kStatsReportTypeComponent, reports,
                           StatsReport::kStatsValueNameRemoteCertificateId);
-    if (remote_ders.size() > 0) {
+    if (!remote_ders.empty()) {
       EXPECT_NE(kNotFound, remote_certificate_id);
       StatsReport::Id id(IdFromCertIdString(remote_certificate_id));
       CheckCertChainReports(reports, remote_ders, id);
diff --git a/pc/peer_connection.cc b/pc/peer_connection.cc
index de47f59..7eaa35b 100644
--- a/pc/peer_connection.cc
+++ b/pc/peer_connection.cc
@@ -1364,7 +1364,7 @@
     return std::nullopt;
   }
   // TODO(bugs.webrtc.org/7443): Change to retrieve from session-level option.
-  if (description->description()->transport_infos().size() < 1) {
+  if (description->description()->transport_infos().empty()) {
     return std::nullopt;
   }
   return description->description()->transport_infos()[0].description.HasOption(
diff --git a/pc/rtc_stats_collector.cc b/pc/rtc_stats_collector.cc
index 38c7ba2..451d9ce 100644
--- a/pc/rtc_stats_collector.cc
+++ b/pc/rtc_stats_collector.cc
@@ -2013,7 +2013,7 @@
       channel_transport_stats->dtls_cipher =
           channel_stats.tls_cipher_suite_name;
       if (channel_stats.srtp_crypto_suite != kSrtpInvalidCryptoSuite &&
-          SrtpCryptoSuiteToName(channel_stats.srtp_crypto_suite).length()) {
+          !SrtpCryptoSuiteToName(channel_stats.srtp_crypto_suite).empty()) {
         channel_transport_stats->srtp_cipher =
             SrtpCryptoSuiteToName(channel_stats.srtp_crypto_suite);
       }
diff --git a/pc/sctp_utils.cc b/pc/sctp_utils.cc
index 49cdb71..08348bc 100644
--- a/pc/sctp_utils.cc
+++ b/pc/sctp_utils.cc
@@ -49,7 +49,7 @@
 bool IsOpenMessage(const CopyOnWriteBuffer& payload) {
   // Format defined at
   // https://www.rfc-editor.org/rfc/rfc8832#section-5.1
-  if (payload.size() < 1) {
+  if (payload.empty()) {
     RTC_DLOG(LS_WARNING) << "Could not read OPEN message type.";
     return false;
   }
@@ -138,7 +138,7 @@
 }
 
 bool ParseDataChannelOpenAckMessage(const CopyOnWriteBuffer& payload) {
-  if (payload.size() < 1) {
+  if (payload.empty()) {
     RTC_LOG(LS_WARNING) << "Could not read OPEN_ACK message type.";
     return false;
   }
diff --git a/pc/sdp_offer_answer.cc b/pc/sdp_offer_answer.cc
index 7339c0f..174b4e8 100644
--- a/pc/sdp_offer_answer.cc
+++ b/pc/sdp_offer_answer.cc
@@ -3691,7 +3691,7 @@
     // m= section, or the MSID values themselves, differ from what is in
     // transceiver.sender.[[AssociatedMediaStreamIds]], return true.
     if (RtpTransceiverDirectionHasSend(transceiver->direction())) {
-      if (current_local_media_description->streams().size() == 0)
+      if (current_local_media_description->streams().empty())
         return true;
 
       std::vector<std::string> msection_msids;
diff --git a/pc/webrtc_sdp.cc b/pc/webrtc_sdp.cc
index 4adec0a..3b3f4f1 100644
--- a/pc/webrtc_sdp.cc
+++ b/pc/webrtc_sdp.cc
@@ -2247,7 +2247,7 @@
     // msid:identifier [appdata]
     std::vector<absl::string_view> fields =
         split(value, kSdpDelimiterSpaceChar);
-    if (fields.size() < 1 || fields.size() > 2) {
+    if (fields.empty() || fields.size() > 2) {
       return ParseFailed(
           line, "Expected format \"msid:<identifier>[ <appdata>]\".", error);
     }
diff --git a/rtc_base/async_tcp_socket.cc b/rtc_base/async_tcp_socket.cc
index b6046eb..fc9ea77 100644
--- a/rtc_base/async_tcp_socket.cc
+++ b/rtc_base/async_tcp_socket.cc
@@ -139,7 +139,7 @@
   RTC_DCHECK_GT(outbuf_.size(), 0);
   ArrayView<uint8_t> view = outbuf_;
   int res;
-  while (view.size() > 0) {
+  while (!view.empty()) {
     res = socket_->Send(view.data(), view.size());
     if (res <= 0) {
       break;
@@ -231,11 +231,11 @@
 void AsyncTCPSocketBase::OnWriteEvent(Socket* socket) {
   RTC_DCHECK(socket_.get() == socket);
 
-  if (outbuf_.size() > 0) {
+  if (!outbuf_.empty()) {
     FlushOutBuffer();
   }
 
-  if (outbuf_.size() == 0) {
+  if (outbuf_.empty()) {
     SignalReadyToSend(this);
   }
 }
diff --git a/rtc_base/byte_buffer.cc b/rtc_base/byte_buffer.cc
index 0b06d83..719720d 100644
--- a/rtc_base/byte_buffer.cc
+++ b/rtc_base/byte_buffer.cc
@@ -147,7 +147,7 @@
 }
 
 bool ByteBufferReader::ReadBytes(ArrayView<uint8_t> val) {
-  if (val.size() == 0) {
+  if (val.empty()) {
     return true;
   }
   return ReadBytes(val.data(), val.size());
diff --git a/rtc_base/network.cc b/rtc_base/network.cc
index 4798b84..be1acbf 100644
--- a/rtc_base/network.cc
+++ b/rtc_base/network.cc
@@ -533,7 +533,7 @@
 }
 
 bool NetworkManagerBase::IsVpnMacAddress(ArrayView<const uint8_t> address) {
-  if (address.data() == nullptr && address.size() == 0) {
+  if (address.data() == nullptr && address.empty()) {
     return false;
   }
   for (const auto& vpn : kVpns) {
@@ -1142,7 +1142,7 @@
 
 // Select the best IP address to use from this Network.
 IPAddress Network::GetBestIP() const {
-  if (ips_.size() == 0) {
+  if (ips_.empty()) {
     return IPAddress();
   }
 
diff --git a/rtc_base/openssl_adapter.cc b/rtc_base/openssl_adapter.cc
index 6ac2c66..e92de1e 100644
--- a/rtc_base/openssl_adapter.cc
+++ b/rtc_base/openssl_adapter.cc
@@ -1002,7 +1002,7 @@
   // each protocol.
   std::string transformed_alpn;
   for (const std::string& proto : alpn_protocols) {
-    if (proto.size() == 0 || proto.size() > 0xFF) {
+    if (proto.empty() || proto.size() > 0xFF) {
       RTC_LOG(LS_ERROR) << "OpenSSLAdapter::Error("
                            "TransformAlpnProtocols received proto with size "
                         << proto.size() << ")";
diff --git a/rtc_base/openssl_stream_adapter.cc b/rtc_base/openssl_stream_adapter.cc
index 604a946..50be6b5 100644
--- a/rtc_base/openssl_stream_adapter.cc
+++ b/rtc_base/openssl_stream_adapter.cc
@@ -608,7 +608,7 @@
   }
 
   // OpenSSL will return an error if we try to write zero bytes
-  if (data.size() == 0) {
+  if (data.empty()) {
     written = 0;
     return SR_SUCCESS;
   }
@@ -665,7 +665,7 @@
   }
 
   // Don't trust OpenSSL with zero byte reads
-  if (data.size() == 0) {
+  if (data.empty()) {
     read = 0;
     return SR_SUCCESS;
   }
diff --git a/rtc_base/virtual_socket_server.cc b/rtc_base/virtual_socket_server.cc
index d4b84a3..2d4aeaa 100644
--- a/rtc_base/virtual_socket_server.cc
+++ b/rtc_base/virtual_socket_server.cc
@@ -1217,7 +1217,7 @@
 
 std::unique_ptr<VirtualSocketServer::Function> VirtualSocketServer::Accumulate(
     std::unique_ptr<Function> f) {
-  RTC_DCHECK(f->size() >= 1);
+  RTC_DCHECK(!f->empty());
   double v = 0;
   for (Function::size_type i = 0; i < f->size() - 1; ++i) {
     double dx = (*f)[i + 1].first - (*f)[i].first;
@@ -1260,7 +1260,7 @@
   if (iter == f->begin()) {
     return (*f)[0].second;
   } else if (iter == f->end()) {
-    RTC_DCHECK(f->size() >= 1);
+    RTC_DCHECK(!f->empty());
     return (*f)[f->size() - 1].second;
   } else if (iter->first == x) {
     return iter->second;
diff --git a/rtc_tools/frame_analyzer/video_quality_analysis.cc b/rtc_tools/frame_analyzer/video_quality_analysis.cc
index 67a72b9..1e079ab 100644
--- a/rtc_tools/frame_analyzer/video_quality_analysis.cc
+++ b/rtc_tools/frame_analyzer/video_quality_analysis.cc
@@ -125,7 +125,7 @@
 void PrintAnalysisResults(const std::string& label,
                           ResultsContainer& results,
                           MetricsLogger& logger) {
-  if (results.frames.size() > 0u) {
+  if (!results.frames.empty()) {
     logger.LogSingleValueMetric("Unique_frames_count", label,
                                 results.frames.size(), Unit::kUnitless,
                                 ImprovementDirection::kNeitherIsBetter);
diff --git a/rtc_tools/network_tester/config_reader.cc b/rtc_tools/network_tester/config_reader.cc
index fc657a6..582dc8f 100644
--- a/rtc_tools/network_tester/config_reader.cc
+++ b/rtc_tools/network_tester/config_reader.cc
@@ -28,7 +28,7 @@
   RTC_DCHECK(config_stream.good());
   std::string config_data((std::istreambuf_iterator<char>(config_stream)),
                           (std::istreambuf_iterator<char>()));
-  if (config_data.size() > 0) {
+  if (!config_data.empty()) {
     proto_all_configs_.ParseFromString(config_data);
   }
 }
diff --git a/test/pc/e2e/analyzer/video/video_quality_metrics_reporter.cc b/test/pc/e2e/analyzer/video/video_quality_metrics_reporter.cc
index 11e586a..7083638 100644
--- a/test/pc/e2e/analyzer/video/video_quality_metrics_reporter.cc
+++ b/test/pc/e2e/analyzer/video/video_quality_metrics_reporter.cc
@@ -70,7 +70,7 @@
 
   std::vector<const RTCTransportStats*> transport_stats =
       report->GetStatsOfType<RTCTransportStats>();
-  if (transport_stats.size() == 0u ||
+  if (transport_stats.empty() ||
       !transport_stats[0]->selected_candidate_pair_id.has_value()) {
     return;
   }
diff --git a/test/pc/e2e/echo/echo_emulation.cc b/test/pc/e2e/echo/echo_emulation.cc
index 34d53f4..14c5466 100644
--- a/test/pc/e2e/echo/echo_emulation.cc
+++ b/test/pc/e2e/echo/echo_emulation.cc
@@ -115,7 +115,7 @@
 }
 
 bool EchoEmulatingRenderer::Render(ArrayView<const int16_t> data) {
-  if (data.size() > 0) {
+  if (!data.empty()) {
     echo_emulating_capturer_->OnAudioRendered(data);
   }
   return delegate_->Render(data);
diff --git a/test/testsupport/file_utils.cc b/test/testsupport/file_utils.cc
index 491dcde..7a72edb 100644
--- a/test/testsupport/file_utils.cc
+++ b/test/testsupport/file_utils.cc
@@ -149,7 +149,7 @@
 }
 
 std::optional<std::vector<std::string>> ReadDirectory(absl::string_view path) {
-  if (path.length() == 0)
+  if (path.empty())
     return std::optional<std::vector<std::string>>();
 
   std::string path_str(path);
diff --git a/test/video_codec_tester.cc b/test/video_codec_tester.cc
index dbfb6b1..8d647c9 100644
--- a/test/video_codec_tester.cc
+++ b/test/video_codec_tester.cc
@@ -949,7 +949,7 @@
       MutexLock lock(&mutex_);
       spatial_idx = *spatial_idx_;
 
-      if (ref_frames_.size() > 0) {
+      if (!ref_frames_.empty()) {
         auto it = ref_frames_.find(decoded_frame.rtp_timestamp());
         RTC_CHECK(it != ref_frames_.end());
         ref_frame = it->second;
diff --git a/video/receive_statistics_proxy.cc b/video/receive_statistics_proxy.cc
index 1ce49ca..84b00b7 100644
--- a/video/receive_statistics_proxy.cc
+++ b/video/receive_statistics_proxy.cc
@@ -616,7 +616,7 @@
   Timestamp current_time = clock_->CurrentTime();
   // TODO(bugs.webrtc.org/13984): some tests do not fill packet_infos().
   TimeDelta assembly_time = TimeDelta::Zero();
-  if (frame.packet_infos().size() > 0) {
+  if (!frame.packet_infos().empty()) {
     const auto [first_packet, last_packet] = std::minmax_element(
         frame.packet_infos().cbegin(), frame.packet_infos().cend(),
         [](const webrtc::RtpPacketInfo& a, const webrtc::RtpPacketInfo& b) {
diff --git a/video/rtp_video_stream_receiver2.cc b/video/rtp_video_stream_receiver2.cc
index f2715d3..804fff8 100644
--- a/video/rtp_video_stream_receiver2.cc
+++ b/video/rtp_video_stream_receiver2.cc
@@ -739,7 +739,7 @@
 
   packet->times_nacked = times_nacked;
 
-  if (codec_payload.size() == 0) {
+  if (codec_payload.empty()) {
     NotifyReceiverOfEmptyPacket(packet->seq_num(),
                                 GetCodecFromPayloadType(packet->payload_type));
     rtcp_feedback_buffer_.SendBufferedRtcpFeedback();
