diff options
author | Michael Brown | 2014-04-28 13:31:39 +0200 |
---|---|---|
committer | Michael Brown | 2014-04-28 13:31:39 +0200 |
commit | 4e78733094e7d1d8e2b3ea1d11a56334b74ae8de (patch) | |
tree | 67889a69b4bfcbf7812174b07f6e27cee6d3b144 /src/core/downloader.c | |
parent | [http] Profile receive datapath (diff) | |
download | ipxe-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.c | 15 |
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; } |