Update TODO

This commit is contained in:
Søren Sandmann Pedersen
2009-09-14 04:59:28 -04:00
parent 08fc4f64a9
commit a33678df26
5 changed files with 56 additions and 42 deletions

36
TODO
View File

@ -1,3 +1,10 @@
Before 1.1:
* Move perfcounter.h into sysprof namespace
* Check for existence and presense of __NR_perf_counter_open in
syscall.h
Before 1.2:
* Build system
@ -9,8 +16,8 @@ Before 1.2:
Someone already did create a package - should be googlable.
* The hrtimer in the kernel currently generate an event every time the
timer fires. There are two problems with this:
* The hrtimer in the kernel currently generates an event every time
the timer fires. There are two problems with this:
- Essentially all the events are idle events and exclude_idle is
ignored.
@ -55,6 +62,9 @@ Before 1.2:
events compare equal, unless both have the same pid and one is a
fork and the other is not.
A system-wide serial number could be expensive to maintain though,
so maybe time events would be just as good.
* Another issue is processes that exit during the initial scan of
/proc. Such a process will not cause sample events by itself, but it
may fork a child that will. There is no way to get maps for that
@ -116,7 +126,7 @@ Before 1.2:
* Why do we get EINVAL when we try to track forks?
* Sometimes it get samples for unknown processes. This may be due to
* Sometimes it gets samples for unknown processes. This may be due to
forking without execing.
* Give an informative error message if not run as root
@ -626,7 +636,7 @@ http://www.linuxbase.org/spec/booksets/LSB-Embedded/LSB-Embedded/ehframe.html
- Possibly a special "view details" mode, assuming that
the details of a function are not that interesting
together with a tree. (Could add radio buttons somewhere in
in the right pane).
in the right pane). Or tabs.
- Open a new window for the function.
- Add view->ancestors/descendants menu items
@ -782,14 +792,18 @@ Later:
Cookies are used to figure out whether an access is really the same, ie., for two identical
cookies, the size is still just one, however
Memory is different from disk because you can't reasonably assume that stuff that has
been read will stay in cache (for short profile runs you can assume that with disk,
but not for long ones).
Memory is different from disk because you can't reasonably assume
that stuff that has been read will stay in cache (for short profile
runs you can assume that with disk, but not for long ones).
- Perhaps show a timeline with CPU in one color and disk in one color. Allow people to
look at at subintervals of this timeline. Is it useful to look at both CPU and disk at
the same time? Probably not. See also marker discussion above. UI should probably allow
double clicking on a marked section and all instances of that one would be marked.
- Perhaps show a timeline with CPU in one color and disk in one
color. Allow people to look at at subintervals of this
timeline. Is it useful to look at both CPU and disk at the same
time? Probably not. See also marker discussion above. UI should
probably allow double clicking on a marked section and all
instances of that one would be marked.
- This also allows us to show how well multicore CPUs are being used.
- Other variation on the timeline idea: Instead of a disk timeline you could have a
list of individual diskaccesses, and be able to select the ones you wanted to

View File

@ -38,7 +38,7 @@
#include "binfile.h"
#include "elfparser.h"
struct BinFile
struct bin_file_t
{
int ref_count;
@ -325,13 +325,13 @@ get_vdso_bytes (size_t *length)
return bytes;
}
BinFile *
bin_file_t *
bin_file_new (const char *filename)
{
ElfParser *elf = NULL;
BinFile *bf;
bin_file_t *bf;
bf = g_new0 (BinFile, 1);
bf = g_new0 (bin_file_t, 1);
bf->inode_check = FALSE;
bf->filename = g_strdup (filename);
@ -371,7 +371,7 @@ bin_file_new (const char *filename)
}
void
bin_file_free (BinFile *bin_file)
bin_file_free (bin_file_t *bin_file)
{
if (--bin_file->ref_count == 0)
{
@ -384,8 +384,8 @@ bin_file_free (BinFile *bin_file)
}
}
const BinSymbol *
bin_file_lookup_symbol (BinFile *bin_file,
const bin_symbol_t *
bin_file_lookup_symbol (bin_file_t *bin_file,
gulong address)
{
GList *list;
@ -413,7 +413,7 @@ bin_file_lookup_symbol (BinFile *bin_file,
g_print ("found %lx => %s\n", address,
bin_symbol_get_name (bin_file, sym));
#endif
return (const BinSymbol *)sym;
return (const bin_symbol_t *)sym;
}
}
@ -424,11 +424,11 @@ bin_file_lookup_symbol (BinFile *bin_file,
bin_file->text_offset);
#endif
return (const BinSymbol *)bin_file->undefined_name;
return (const bin_symbol_t *)bin_file->undefined_name;
}
gboolean
bin_file_check_inode (BinFile *bin_file,
bin_file_check_inode (bin_file_t *bin_file,
ino_t inode)
{
if (bin_file->inode == inode)
@ -450,8 +450,8 @@ bin_file_check_inode (BinFile *bin_file,
}
static const ElfSym *
get_elf_sym (BinFile *file,
const BinSymbol *symbol,
get_elf_sym (bin_file_t *file,
const bin_symbol_t *symbol,
ElfParser **elf_ret)
{
GList *list;
@ -475,8 +475,8 @@ get_elf_sym (BinFile *file,
}
const char *
bin_symbol_get_name (BinFile *file,
const BinSymbol *symbol)
bin_symbol_get_name (bin_file_t *file,
const bin_symbol_t *symbol)
{
if (file->undefined_name == (char *)symbol)
{
@ -494,8 +494,8 @@ bin_symbol_get_name (BinFile *file,
}
gulong
bin_symbol_get_address (BinFile *file,
const BinSymbol *symbol)
bin_symbol_get_address (bin_file_t *file,
const bin_symbol_t *symbol)
{
if (file->undefined_name == (char *)symbol)
{

View File

@ -27,20 +27,20 @@
#include <glib.h>
#include <sys/types.h>
typedef struct BinFile BinFile;
typedef struct BinSymbol BinSymbol;
typedef struct bin_file_t bin_file_t;
typedef struct bin_symbol_t bin_symbol_t;
/* Binary File */
BinFile * bin_file_new (const char *filename);
void bin_file_free (BinFile *bin_file);
const BinSymbol *bin_file_lookup_symbol (BinFile *bin_file,
bin_file_t * bin_file_new (const char *filename);
void bin_file_free (bin_file_t *bin_file);
const bin_symbol_t *bin_file_lookup_symbol (bin_file_t *bin_file,
gulong address);
gboolean bin_file_check_inode (BinFile *bin_file,
gboolean bin_file_check_inode (bin_file_t *bin_file,
ino_t inode);
const char * bin_symbol_get_name (BinFile *bin_file,
const BinSymbol *symbol);
gulong bin_symbol_get_address (BinFile *bin_file,
const BinSymbol *symbol);
const char * bin_symbol_get_name (bin_file_t *bin_file,
const bin_symbol_t *symbol);
gulong bin_symbol_get_address (bin_file_t *bin_file,
const bin_symbol_t *symbol);
#endif

View File

@ -972,7 +972,7 @@ expand_descendants_tree (Application *app)
GTK_TREE_VIEW (app->descendants_view), best_path, FALSE);
n_rows += n_children;
if (gtk_tree_path_get_depth (best_path) < 6)
if (gtk_tree_path_get_depth (best_path) < 4)
{
GtkTreePath *path = gtk_tree_path_copy (best_path);
gtk_tree_path_down (path);

View File

@ -795,10 +795,10 @@ make_message (state_t *state, const char *format, ...)
return result;
}
static BinFile *
static bin_file_t *
state_get_bin_file (state_t *state, const char *filename)
{
BinFile *bf = g_hash_table_lookup (state->bin_files, filename);
bin_file_t *bf = g_hash_table_lookup (state->bin_files, filename);
if (!bf)
{
@ -834,8 +834,8 @@ lookup_symbol (state_t *state,
}
else
{
BinFile *bin_file = state_get_bin_file (state, map->filename);
const BinSymbol *bin_sym;
bin_file_t *bin_file = state_get_bin_file (state, map->filename);
const bin_symbol_t *bin_sym;
address -= map->start;
address += map->offset;