#include <ipxe/uaccess.h>
#include <ipxe/umalloc.h>
#include <ipxe/image.h>
+#include <ipxe/profile.h>
#include <ipxe/downloader.h>
/** @file
*
*/
+/** Receive profiler */
+static struct profiler downloader_rx_profiler __profiler =
+ { .name = "downloader.rx" };
+
+/** Data copy profiler */
+static struct profiler downloader_copy_profiler __profiler =
+ { .name = "downloader.copy" };
+
/** A downloader */
struct downloader {
/** Reference count for this object */
size_t max;
int rc;
+ /* Start profiling */
+ profile_start ( &downloader_rx_profiler );
+
/* Calculate new buffer position */
if ( meta->flags & XFER_FL_ABS_OFFSET )
downloader->pos = 0;
goto done;
/* Copy data to buffer */
+ profile_start ( &downloader_copy_profiler );
copy_to_user ( downloader->image->data, downloader->pos,
iobuf->data, len );
+ profile_stop ( &downloader_copy_profiler );
/* Update current buffer position */
downloader->pos += len;
free_iob ( iobuf );
if ( rc != 0 )
downloader_finished ( downloader, rc );
+ profile_stop ( &downloader_rx_profiler );
return rc;
}