summaryrefslogtreecommitdiffstats
path: root/src/core/downloader.c
diff options
context:
space:
mode:
authorMichael Brown2014-04-28 13:31:39 +0200
committerMichael Brown2014-04-28 13:31:39 +0200
commit4e78733094e7d1d8e2b3ea1d11a56334b74ae8de (patch)
tree67889a69b4bfcbf7812174b07f6e27cee6d3b144 /src/core/downloader.c
parent[http] Profile receive datapath (diff)
downloadipxe-4e78733094e7d1d8e2b3ea1d11a56334b74ae8de.tar.gz
ipxe-4e78733094e7d1d8e2b3ea1d11a56334b74ae8de.tar.xz
ipxe-4e78733094e7d1d8e2b3ea1d11a56334b74ae8de.zip
[downloader] Profile receive datapath
Signed-off-by: Michael Brown <mcb30@ipxe.org>
Diffstat (limited to 'src/core/downloader.c')
-rw-r--r--src/core/downloader.c15
1 files changed, 15 insertions, 0 deletions
diff --git a/src/core/downloader.c b/src/core/downloader.c
index cec6625b..ec69db6b 100644
--- a/src/core/downloader.c
+++ b/src/core/downloader.c
@@ -29,6 +29,7 @@ FILE_LICENCE ( GPL2_OR_LATER );
#include <ipxe/uaccess.h>
#include <ipxe/umalloc.h>
#include <ipxe/image.h>
+#include <ipxe/profile.h>
#include <ipxe/downloader.h>
/** @file
@@ -37,6 +38,14 @@ FILE_LICENCE ( GPL2_OR_LATER );
*
*/
+/** 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 */
@@ -166,6 +175,9 @@ static int downloader_xfer_deliver ( struct downloader *downloader,
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;
@@ -178,8 +190,10 @@ static int downloader_xfer_deliver ( struct downloader *downloader,
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;
@@ -188,6 +202,7 @@ static int downloader_xfer_deliver ( struct downloader *downloader,
free_iob ( iobuf );
if ( rc != 0 )
downloader_finished ( downloader, rc );
+ profile_stop ( &downloader_rx_profiler );
return rc;
}