Index: uspace/drv/bus/usb/usbdiag/tests.c
===================================================================
--- uspace/drv/bus/usb/usbdiag/tests.c	(revision b7b7898ebbb6331485b857c698ffc8e20b40797f)
+++ uspace/drv/bus/usb/usbdiag/tests.c	(revision 96c416a842d1ac574b669328720d7ceb0bbcaa7c)
@@ -37,4 +37,5 @@
 #include <str_error.h>
 #include <usb/debug.h>
+#include <time.h>
 #include "device.h"
 #include "tests.h"
@@ -42,5 +43,5 @@
 #define NAME "usbdiag"
 
-static int burst_in_test(usb_pipe_t *pipe, int cycles, size_t size)
+static int burst_in_test(usb_pipe_t *pipe, int cycles, size_t size, unsigned long *duration)
 {
 	if (!pipe)
@@ -54,5 +55,9 @@
 
 	usb_log_info("Performing %s IN burst test.", usb_str_transfer_type(pipe->desc.transfer_type));
+
 	int rc = EOK;
+	struct timeval start_time;
+	gettimeofday(&start_time, NULL);
+
 	for (int i = 0; i < cycles; ++i) {
 		// Read device's response.
@@ -78,11 +83,20 @@
 			break;
 	}
-	usb_log_info("Burst test on %s IN endpoint completed.", usb_str_transfer_type(pipe->desc.transfer_type));
+
+	struct timeval final_time;
+	gettimeofday(&final_time, NULL);
+	unsigned long in_duration = ((final_time.tv_usec - start_time.tv_usec) / 1000) +
+	    ((final_time.tv_sec - start_time.tv_sec) * 1000);
+
+	usb_log_info("Burst test on %s IN endpoint completed in %lu ms.", usb_str_transfer_type(pipe->desc.transfer_type), in_duration);
 
 	free(buffer);
+	if (duration)
+		*duration = in_duration;
+
 	return rc;
 }
 
-static int burst_out_test(usb_pipe_t *pipe, int cycles, size_t size)
+static int burst_out_test(usb_pipe_t *pipe, int cycles, size_t size, unsigned long *duration)
 {
 	if (!pipe)
@@ -98,5 +112,9 @@
 
 	usb_log_info("Performing %s OUT burst test.", usb_str_transfer_type(pipe->desc.transfer_type));
+
 	int rc = EOK;
+	struct timeval start_time;
+	gettimeofday(&start_time, NULL);
+
 	for (int i = 0; i < cycles; ++i) {
 		// Write buffer to device.
@@ -106,7 +124,16 @@
 		}
 	}
-	usb_log_info("Burst test on %s OUT endpoint completed.", usb_str_transfer_type(pipe->desc.transfer_type));
+
+	struct timeval final_time;
+	gettimeofday(&final_time, NULL);
+	unsigned long in_duration = ((final_time.tv_usec - start_time.tv_usec) / 1000) +
+	    ((final_time.tv_sec - start_time.tv_sec) * 1000);
+
+	usb_log_info("Burst test on %s OUT endpoint completed in %ld ms.", usb_str_transfer_type(pipe->desc.transfer_type), in_duration);
 
 	free(buffer);
+	if (duration)
+		*duration = in_duration;
+
 	return rc;
 }
@@ -118,5 +145,6 @@
 		return EBADMEM;
 
-	return burst_in_test(dev->intr_in, cycles, size);
+	// FIXME: report duration
+	return burst_in_test(dev->intr_in, cycles, size, NULL);
 }
 
@@ -127,5 +155,6 @@
 		return EBADMEM;
 
-	return burst_out_test(dev->intr_out, cycles, size);
+	// FIXME: report duration
+	return burst_out_test(dev->intr_out, cycles, size, NULL);
 }
 
@@ -136,5 +165,6 @@
 		return EBADMEM;
 
-	return burst_in_test(dev->bulk_in, cycles, size);
+	// FIXME: report duration
+	return burst_in_test(dev->bulk_in, cycles, size, NULL);
 }
 
@@ -145,5 +175,6 @@
 		return EBADMEM;
 
-	return burst_out_test(dev->bulk_out, cycles, size);
+	// FIXME: report duration
+	return burst_out_test(dev->bulk_out, cycles, size, NULL);
 }
 
@@ -154,5 +185,6 @@
 		return EBADMEM;
 
-	return burst_in_test(dev->isoch_in, cycles, size);
+	// FIXME: report duration
+	return burst_in_test(dev->isoch_in, cycles, size, NULL);
 }
 
@@ -163,5 +195,6 @@
 		return EBADMEM;
 
-	return burst_out_test(dev->isoch_out, cycles, size);
+	// FIXME: report duration
+	return burst_out_test(dev->isoch_out, cycles, size, NULL);
 }
 
