Small improvements. Use g_array_sized_new instead of g_array_new with
* procmap.c: (glibtop_get_proc_map_s): Small improvements. Use g_array_sized_new instead of g_array_new with reserved_size = 100. Don't use g_array_append_val to avoid copying glibtop_map_entries. Use g_array_set_size(size + 1) instead. I've run a little python benchmark and this shows a little speedup. I hope this would be more sensible in gnome-system-monitor (glibtop_get_procmap is intensively used for the 'Writable Memory' column).
This commit is contained in:
@@ -1,3 +1,18 @@
|
|||||||
|
2005-12-07 Benoît Dejean <benoit@placenet.org>
|
||||||
|
|
||||||
|
* procmap.c: (glibtop_get_proc_map_s):
|
||||||
|
|
||||||
|
Small improvements.
|
||||||
|
Use g_array_sized_new instead of g_array_new with
|
||||||
|
reserved_size = 100.
|
||||||
|
Don't use g_array_append_val to avoid copying
|
||||||
|
glibtop_map_entries. Use g_array_set_size(size + 1) instead.
|
||||||
|
|
||||||
|
I've run a little python benchmark and this shows a little
|
||||||
|
speedup. I hope this would be more sensible in
|
||||||
|
gnome-system-monitor (glibtop_get_procmap is intensively used for
|
||||||
|
the 'Writable Memory' column).
|
||||||
|
|
||||||
2005-10-29 Benoît Dejean <benoit@placenet.org>
|
2005-10-29 Benoît Dejean <benoit@placenet.org>
|
||||||
|
|
||||||
* glibtop_private.c: (read_boot_time):
|
* glibtop_private.c: (read_boot_time):
|
||||||
|
@@ -59,8 +59,15 @@ glibtop_map_entry *
|
|||||||
glibtop_get_proc_map_s (glibtop *server, glibtop_proc_map *buf, pid_t pid)
|
glibtop_get_proc_map_s (glibtop *server, glibtop_proc_map *buf, pid_t pid)
|
||||||
{
|
{
|
||||||
char procfilename[GLIBTOP_MAP_FILENAME_LEN+1];
|
char procfilename[GLIBTOP_MAP_FILENAME_LEN+1];
|
||||||
GArray *entry_list = g_array_new(FALSE, FALSE,
|
|
||||||
sizeof(glibtop_map_entry));
|
/*
|
||||||
|
default size of 100 maybe inaccurate.
|
||||||
|
It's the average number of entry per process on my laptop
|
||||||
|
*/
|
||||||
|
|
||||||
|
GArray *entry_list = g_array_sized_new(FALSE, FALSE,
|
||||||
|
sizeof(glibtop_map_entry),
|
||||||
|
100);
|
||||||
FILE *maps;
|
FILE *maps;
|
||||||
|
|
||||||
glibtop_init_s (&server, GLIBTOP_SYSDEPS_PROC_MAP, 0);
|
glibtop_init_s (&server, GLIBTOP_SYSDEPS_PROC_MAP, 0);
|
||||||
@@ -77,13 +84,14 @@ glibtop_get_proc_map_s (glibtop *server, glibtop_proc_map *buf, pid_t pid)
|
|||||||
{
|
{
|
||||||
unsigned long perm = 0;
|
unsigned long perm = 0;
|
||||||
int rv;
|
int rv;
|
||||||
|
guint len;
|
||||||
|
|
||||||
unsigned short dev_major, dev_minor;
|
unsigned short dev_major, dev_minor;
|
||||||
unsigned long start, end, offset, inode;
|
unsigned long start, end, offset, inode;
|
||||||
char flags[4];
|
char flags[4];
|
||||||
char filename [GLIBTOP_MAP_FILENAME_LEN+1];
|
char filename [GLIBTOP_MAP_FILENAME_LEN+1];
|
||||||
|
|
||||||
glibtop_map_entry entry;
|
glibtop_map_entry *entry;
|
||||||
|
|
||||||
|
|
||||||
/* 8 arguments */
|
/* 8 arguments */
|
||||||
@@ -113,16 +121,22 @@ glibtop_get_proc_map_s (glibtop *server, glibtop_proc_map *buf, pid_t pid)
|
|||||||
else if (flags [3] == 'p')
|
else if (flags [3] == 'p')
|
||||||
perm |= GLIBTOP_MAP_PERM_PRIVATE;
|
perm |= GLIBTOP_MAP_PERM_PRIVATE;
|
||||||
|
|
||||||
entry.flags = _glibtop_sysdeps_map_entry;
|
/*
|
||||||
entry.start = (guint64) start;
|
avoid copying the entry, grow by 1 and point to the last
|
||||||
entry.end = (guint64) end;
|
element.
|
||||||
entry.offset = (guint64) offset;
|
*/
|
||||||
entry.perm = (guint64) perm;
|
len = entry_list->len;
|
||||||
entry.device = (guint64) MKDEV(dev_major, dev_minor);
|
g_array_set_size(entry_list, len + 1);
|
||||||
entry.inode = (guint64) inode;
|
entry = &g_array_index(entry_list, glibtop_map_entry, len);
|
||||||
g_strlcpy (entry.filename, filename, sizeof entry.filename);
|
|
||||||
|
|
||||||
g_array_append_val(entry_list, entry);
|
entry->flags = _glibtop_sysdeps_map_entry;
|
||||||
|
entry->start = (guint64) start;
|
||||||
|
entry->end = (guint64) end;
|
||||||
|
entry->offset = (guint64) offset;
|
||||||
|
entry->perm = (guint64) perm;
|
||||||
|
entry->device = (guint64) MKDEV(dev_major, dev_minor);
|
||||||
|
entry->inode = (guint64) inode;
|
||||||
|
g_strlcpy(entry->filename, filename, sizeof entry->filename);
|
||||||
}
|
}
|
||||||
|
|
||||||
fclose (maps);
|
fclose (maps);
|
||||||
|
Reference in New Issue
Block a user