- The buffer is full. I think the size of the buffer is determined by the value of the net_buffer_length variable. This is set to 16384 on my servers.
- There are no more binlog events to send.
I don't know how much this contributes to replication delay. When semi-sync replication as implemented in the Google patch is used, the buffer is usually flushed at transaction boundaries whether or not the buffer is full. This is done so that a slave can acknowledge receipt of the binlog events before the transaction commit returns to a user.
Whether or not semi-sync replication is deployed, flushing data to the slave on transaction boundaries decreases the chance of transaction loss on failover.