aboutsummaryrefslogtreecommitdiffstats
path: root/src/blogc/rusage.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/blogc/rusage.c')
-rw-r--r--src/blogc/rusage.c54
1 files changed, 23 insertions, 31 deletions
diff --git a/src/blogc/rusage.c b/src/blogc/rusage.c
index 972ae4f..7c04db3 100644
--- a/src/blogc/rusage.c
+++ b/src/blogc/rusage.c
@@ -18,24 +18,28 @@
#include <sys/resource.h>
#endif /* HAVE_SYS_RESOURCE_H */
+#include <stdlib.h>
#include "../common/utils.h"
#include "rusage.h"
-// FIXME: optimize to use a single syscall for both cpu time and memory?
-
-long long
-blogc_rusage_get_cpu_time(void)
+blogc_rusage_t*
+blogc_rusage_get(void)
{
#ifndef HAVE_RUSAGE
- return 0;
+ return NULL;
#else
struct rusage usage;
if (0 != getrusage(RUSAGE_SELF, &usage))
- return 0;
- return (
+ return NULL;
+
+ blogc_rusage_t *rv = bc_malloc(sizeof(blogc_rusage_t));
+ rv->cpu_time = (
(usage.ru_utime.tv_sec * 1000000) + usage.ru_utime.tv_usec +
(usage.ru_stime.tv_sec * 1000000) + usage.ru_stime.tv_usec);
+ rv->memory = usage.ru_maxrss;
+
+ return rv;
#endif
}
@@ -56,27 +60,6 @@ blogc_rusage_format_cpu_time(long long time)
char*
-blogc_rusage_cpu_time(void)
-{
- return blogc_rusage_format_cpu_time(blogc_rusage_get_cpu_time());
-}
-
-
-long
-blogc_rusage_get_memory(void)
-{
-#ifndef HAVE_RUSAGE
- return 0;
-#else
- struct rusage usage;
- if (0 != getrusage(RUSAGE_SELF, &usage))
- return 0;
- return usage.ru_maxrss;
-#endif
-}
-
-
-char*
blogc_rusage_format_memory(long mem)
{
if (mem > 1048576)
@@ -87,8 +70,17 @@ blogc_rusage_format_memory(long mem)
}
-char*
-blogc_rusage_memory(void)
+void
+blogc_rusage_inject(bc_trie_t *global)
{
- return blogc_rusage_format_memory(blogc_rusage_get_memory());
+ blogc_rusage_t *usage = blogc_rusage_get();
+ if (usage == NULL)
+ return;
+
+ bc_trie_insert(global, "BLOGC_RUSAGE_CPU_TIME",
+ blogc_rusage_format_cpu_time(usage->cpu_time));
+ bc_trie_insert(global, "BLOGC_RUSAGE_MEMORY",
+ blogc_rusage_format_memory(usage->memory));
+
+ free(usage);
}