Suggested by Shaun Jackman <sjackman@gmail.com>:
* defs.h (print_transfer_performance): Update prototype. * m32r-rom.c (m32r_load, m32r_upload_command): Use gettimeofday for print_transfer_performance. * remote-m32r-sdi.c (m32r_load): Likewise. * symfile.c (generic_load): Likewise. (report_transfer_performance): Create a dummy struct timeval. (print_transfer_performance): Use a more accurate measure of performance.
This commit is contained in:
parent
4bb64c2874
commit
2b71414df9
@ -1,3 +1,15 @@
|
||||
2005-08-01 Daniel Jacobowitz <dan@codesourcery.com>
|
||||
|
||||
Suggested by Shaun Jackman <sjackman@gmail.com>:
|
||||
* defs.h (print_transfer_performance): Update prototype.
|
||||
* m32r-rom.c (m32r_load, m32r_upload_command): Use gettimeofday
|
||||
for print_transfer_performance.
|
||||
* remote-m32r-sdi.c (m32r_load): Likewise.
|
||||
* symfile.c (generic_load): Likewise.
|
||||
(report_transfer_performance): Create a dummy struct timeval.
|
||||
(print_transfer_performance): Use a more accurate measure
|
||||
of performance.
|
||||
|
||||
2005-08-01 Fred Fish <fnf@specifix.com>
|
||||
|
||||
* stack.c (parse_frame_specification_1): Remove use of obsolete
|
||||
|
@ -552,10 +552,12 @@ extern void symbol_file_command (char *, int);
|
||||
extern void generic_load (char *name, int from_tty);
|
||||
|
||||
/* Summarise a download */
|
||||
struct timeval;
|
||||
extern void print_transfer_performance (struct ui_file *stream,
|
||||
unsigned long data_count,
|
||||
unsigned long write_count,
|
||||
unsigned long time_count);
|
||||
const struct timeval *start_time,
|
||||
const struct timeval *end_time);
|
||||
|
||||
/* From top.c */
|
||||
|
||||
|
@ -1,8 +1,8 @@
|
||||
/* Remote debugging interface to m32r and mon2000 ROM monitors for GDB,
|
||||
the GNU debugger.
|
||||
|
||||
Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2004 Free Software
|
||||
Foundation, Inc.
|
||||
Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2004, 2005
|
||||
Free Software Foundation, Inc.
|
||||
|
||||
Adapted by Michael Snyder of Cygnus Support.
|
||||
|
||||
@ -35,6 +35,7 @@
|
||||
#include "command.h"
|
||||
#include "gdbcmd.h"
|
||||
#include "symfile.h" /* for generic load */
|
||||
#include <sys/time.h>
|
||||
#include <time.h> /* for time_t */
|
||||
#include "gdb_string.h"
|
||||
#include "objfiles.h" /* for ALL_OBJFILES etc. */
|
||||
@ -119,7 +120,7 @@ m32r_load (char *filename, int from_tty)
|
||||
bfd *abfd;
|
||||
asection *s;
|
||||
unsigned int i, data_count = 0;
|
||||
time_t start_time, end_time; /* for timing of download */
|
||||
struct timeval start_time, end_time;
|
||||
|
||||
if (filename == NULL || filename[0] == 0)
|
||||
filename = get_exec_file (1);
|
||||
@ -129,7 +130,7 @@ m32r_load (char *filename, int from_tty)
|
||||
error (_("Unable to open file %s."), filename);
|
||||
if (bfd_check_format (abfd, bfd_object) == 0)
|
||||
error (_("File is not an object file."));
|
||||
start_time = time (NULL);
|
||||
gettimeofday (&start_time, NULL);
|
||||
#if 0
|
||||
for (s = abfd->sections; s; s = s->next)
|
||||
if (s->flags & SEC_LOAD)
|
||||
@ -163,10 +164,10 @@ m32r_load (char *filename, int from_tty)
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
end_time = time (NULL);
|
||||
gettimeofday (&end_time, NULL);
|
||||
printf_filtered ("Start address 0x%lx\n", bfd_get_start_address (abfd));
|
||||
print_transfer_performance (gdb_stdout, data_count, 0,
|
||||
end_time - start_time);
|
||||
print_transfer_performance (gdb_stdout, data_count, 0, &start_time,
|
||||
&end_time);
|
||||
|
||||
/* Finally, make the PC point at the start address */
|
||||
if (exec_bfd)
|
||||
@ -405,7 +406,7 @@ m32r_upload_command (char *args, int from_tty)
|
||||
{
|
||||
bfd *abfd;
|
||||
asection *s;
|
||||
time_t start_time, end_time; /* for timing of download */
|
||||
struct timeval start_time, end_time;
|
||||
int resp_len, data_count = 0;
|
||||
char buf[1024];
|
||||
struct hostent *hostent;
|
||||
@ -467,7 +468,7 @@ m32r_upload_command (char *args, int from_tty)
|
||||
("Need to know default download path (use 'set download-path')");
|
||||
}
|
||||
|
||||
start_time = time (NULL);
|
||||
gettimeofday (&start_time, NULL);
|
||||
monitor_printf ("uhip %s\r", server_addr);
|
||||
resp_len = monitor_expect_prompt (buf, sizeof (buf)); /* parse result? */
|
||||
monitor_printf ("ulip %s\r", board_addr);
|
||||
@ -491,7 +492,7 @@ m32r_upload_command (char *args, int from_tty)
|
||||
else
|
||||
printf_filtered (" -- Ethernet load complete.\n");
|
||||
|
||||
end_time = time (NULL);
|
||||
gettimeofday (&end_time, NULL);
|
||||
abfd = bfd_openr (args, 0);
|
||||
if (abfd != NULL)
|
||||
{ /* Download is done -- print section statistics */
|
||||
@ -517,8 +518,8 @@ m32r_upload_command (char *args, int from_tty)
|
||||
/* Finally, make the PC point at the start address */
|
||||
write_pc (bfd_get_start_address (abfd));
|
||||
printf_filtered ("Start address 0x%lx\n", bfd_get_start_address (abfd));
|
||||
print_transfer_performance (gdb_stdout, data_count, 0,
|
||||
end_time - start_time);
|
||||
print_transfer_performance (gdb_stdout, data_count, 0, &start_time,
|
||||
&end_time);
|
||||
}
|
||||
inferior_ptid = null_ptid; /* No process now */
|
||||
|
||||
|
@ -1213,7 +1213,7 @@ m32r_load (char *args, int from_tty)
|
||||
char *filename;
|
||||
int quiet;
|
||||
int nostart;
|
||||
time_t start_time, end_time; /* Start and end times of download */
|
||||
struct timeval start_time, end_time;
|
||||
unsigned long data_count; /* Number of bytes transferred to memory */
|
||||
int ret;
|
||||
static RETSIGTYPE (*prev_sigint) ();
|
||||
@ -1263,7 +1263,7 @@ m32r_load (char *args, int from_tty)
|
||||
error (_("\"%s\" is not an object file: %s"), filename,
|
||||
bfd_errmsg (bfd_get_error ()));
|
||||
|
||||
start_time = time (NULL);
|
||||
gettimeofday (&start_time, NULL);
|
||||
data_count = 0;
|
||||
|
||||
interrupted = 0;
|
||||
@ -1349,7 +1349,7 @@ m32r_load (char *args, int from_tty)
|
||||
interrupted = 0;
|
||||
signal (SIGINT, prev_sigint);
|
||||
|
||||
end_time = time (NULL);
|
||||
gettimeofday (&end_time, NULL);
|
||||
|
||||
/* Make the PC point at the start address */
|
||||
if (exec_bfd)
|
||||
@ -1373,8 +1373,8 @@ m32r_load (char *args, int from_tty)
|
||||
printf_unfiltered ("[Starting %s at 0x%lx]\n", filename, entry);
|
||||
}
|
||||
|
||||
print_transfer_performance (gdb_stdout, data_count, 0,
|
||||
end_time - start_time);
|
||||
print_transfer_performance (gdb_stdout, data_count, 0, &start_time,
|
||||
&end_time);
|
||||
|
||||
do_cleanups (old_chain);
|
||||
}
|
||||
|
@ -1,7 +1,7 @@
|
||||
/* Generic symbol file reading for the GNU debugger, GDB.
|
||||
|
||||
Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
|
||||
1999, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
|
||||
1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
|
||||
|
||||
Contributed by Cygnus Support, using pieces from other GDB modules.
|
||||
|
||||
@ -57,6 +57,7 @@
|
||||
#include "gdb_stat.h"
|
||||
#include <ctype.h>
|
||||
#include <time.h>
|
||||
#include <sys/time.h>
|
||||
|
||||
#ifndef O_BINARY
|
||||
#define O_BINARY 0
|
||||
@ -1600,7 +1601,7 @@ generic_load (char *args, int from_tty)
|
||||
{
|
||||
asection *s;
|
||||
bfd *loadfile_bfd;
|
||||
time_t start_time, end_time; /* Start and end times of download */
|
||||
struct timeval start_time, end_time;
|
||||
char *filename;
|
||||
struct cleanup *old_cleanups;
|
||||
char *offptr;
|
||||
@ -1652,11 +1653,11 @@ generic_load (char *args, int from_tty)
|
||||
bfd_map_over_sections (loadfile_bfd, add_section_size_callback,
|
||||
(void *) &cbdata.total_size);
|
||||
|
||||
start_time = time (NULL);
|
||||
gettimeofday (&start_time, NULL);
|
||||
|
||||
bfd_map_over_sections (loadfile_bfd, load_section_callback, &cbdata);
|
||||
|
||||
end_time = time (NULL);
|
||||
gettimeofday (&end_time, NULL);
|
||||
|
||||
entry = bfd_get_start_address (loadfile_bfd);
|
||||
ui_out_text (uiout, "Start address ");
|
||||
@ -1675,7 +1676,7 @@ generic_load (char *args, int from_tty)
|
||||
others don't (or didn't - perhaps they have all been deleted). */
|
||||
|
||||
print_transfer_performance (gdb_stdout, cbdata.data_count,
|
||||
cbdata.write_count, end_time - start_time);
|
||||
cbdata.write_count, &start_time, &end_time);
|
||||
|
||||
do_cleanups (old_cleanups);
|
||||
}
|
||||
@ -1690,21 +1691,35 @@ void
|
||||
report_transfer_performance (unsigned long data_count, time_t start_time,
|
||||
time_t end_time)
|
||||
{
|
||||
print_transfer_performance (gdb_stdout, data_count,
|
||||
end_time - start_time, 0);
|
||||
struct timeval start, end;
|
||||
|
||||
start.tv_sec = start_time;
|
||||
start.tv_usec = 0;
|
||||
end.tv_sec = end_time;
|
||||
end.tv_usec = 0;
|
||||
|
||||
print_transfer_performance (gdb_stdout, data_count, 0, &start, &end);
|
||||
}
|
||||
|
||||
void
|
||||
print_transfer_performance (struct ui_file *stream,
|
||||
unsigned long data_count,
|
||||
unsigned long write_count,
|
||||
unsigned long time_count)
|
||||
const struct timeval *start_time,
|
||||
const struct timeval *end_time)
|
||||
{
|
||||
unsigned long time_count;
|
||||
|
||||
/* Compute the elapsed time in milliseconds, as a tradeoff between
|
||||
accuracy and overflow. */
|
||||
time_count = (end_time->tv_sec - start_time->tv_sec) * 1000;
|
||||
time_count += (end_time->tv_usec - start_time->tv_usec) / 1000;
|
||||
|
||||
ui_out_text (uiout, "Transfer rate: ");
|
||||
if (time_count > 0)
|
||||
{
|
||||
ui_out_field_fmt (uiout, "transfer-rate", "%lu",
|
||||
(data_count * 8) / time_count);
|
||||
1000 * (data_count * 8) / time_count);
|
||||
ui_out_text (uiout, " bits/sec");
|
||||
}
|
||||
else
|
||||
|
Loading…
x
Reference in New Issue
Block a user