diff --git a/test/cpp/microbenchmarks/bm_chttp2_transport.cc b/test/cpp/microbenchmarks/bm_chttp2_transport.cc
index 1611250850080826d66ba74df723de346786aa79..d3ca27a68e5a7b602d394c2ce71f6ece90e3bf51 100644
--- a/test/cpp/microbenchmarks/bm_chttp2_transport.cc
+++ b/test/cpp/microbenchmarks/bm_chttp2_transport.cc
@@ -572,11 +572,13 @@ static void BM_TransportStreamRecv(benchmark::State &state) {
     } while (grpc_byte_stream_next(exec_ctx, recv_stream,
                                    recv_stream->length - received,
                                    drain_continue.get()) &&
-             GRPC_ERROR_NONE == grpc_byte_stream_pull(exec_ctx, recv_stream,
-                                                      &recv_slice));
+             GRPC_ERROR_NONE ==
+                 grpc_byte_stream_pull(exec_ctx, recv_stream, &recv_slice) &&
+             (received += GRPC_SLICE_LENGTH(recv_slice), true));
   });
 
   drain_continue = MakeClosure([&](grpc_exec_ctx *exec_ctx, grpc_error *error) {
+    grpc_byte_stream_pull(exec_ctx, recv_stream, &recv_slice);
     received += GRPC_SLICE_LENGTH(recv_slice);
     grpc_slice_unref_internal(exec_ctx, recv_slice);
     grpc_closure_run(exec_ctx, drain.get(), GRPC_ERROR_NONE);