<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def fill_buffer(heap_data, i_chan):
 """Blocking function to populate data in the heap. This is run in an executor. """

        # Calculate the time count and fraction.
        now = datetime.datetime.utcnow()
        time_full = now.timestamp()
        time_count = int(time_full)
        time_fraction = int((time_full - time_count) * (2**32 - 1))
        diff = now - (now.replace(hour=0, minute=0, second=0, microsecond=0))
        time_data = diff.seconds + 1e-6 * diff.microseconds

        # Write the data into the buffer.
        heap_data['visibility_timestamp_count'] = time_count
        heap_data['visibility_timestamp_fraction'] = time_fraction
        heap_data['correlator_output_data']['VIS'][:][:] = \
            time_data + i_chan * 1j