From 78f386ad45dc046d673fca5441dff188a7297059 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Tue, 15 Jun 2004 15:18:33 +0000 Subject: more work git-svn-id: file:///home/lennart/svn/public/pulseaudio/trunk@17 fefdeb5f-60dc-0310-8127-8f9354f1896f --- src/memblock.c | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) (limited to 'src/memblock.c') diff --git a/src/memblock.c b/src/memblock.c index 3bef4944..2d346769 100644 --- a/src/memblock.c +++ b/src/memblock.c @@ -1,15 +1,22 @@ +#include #include #include #include +#include +#include #include "memblock.h" +unsigned n_blocks = 0; + struct memblock *memblock_new(size_t length) { struct memblock *b = malloc(sizeof(struct memblock)+length); b->type = MEMBLOCK_APPENDED; b->ref = 1; b->length = length; b->data = b+1; + n_blocks++; + timerclear(&b->stamp); return b; } @@ -19,6 +26,8 @@ struct memblock *memblock_new_fixed(void *d, size_t length) { b->ref = 1; b->length = length; b->data = d; + n_blocks++; + timerclear(&b->stamp); return b; } @@ -28,6 +37,8 @@ struct memblock *memblock_new_dynamic(void *d, size_t length) { b->ref = 1; b->length = length; b->data = d; + n_blocks++; + timerclear(&b->stamp); return b; } @@ -45,6 +56,7 @@ void memblock_unref(struct memblock*b) { if (b->type == MEMBLOCK_DYNAMIC) free(b->data); free(b); + n_blocks--; } } @@ -65,3 +77,29 @@ void memblock_unref_fixed(struct memblock *b) { b->type = MEMBLOCK_DYNAMIC; } +void memblock_stamp(struct memblock*b) { + assert(b); + gettimeofday(&b->stamp, NULL); +} + +uint32_t memblock_age(struct memblock*b) { + assert(b); + struct timeval tv; + uint32_t r; + + if (b->stamp.tv_sec == 0) + return (suseconds_t) -1; + + gettimeofday(&tv, NULL); + + /*fprintf(stderr, "memblock: (%lu,%lu) -- (%lu,%lu)\r", b->stamp.tv_sec, b->stamp.tv_usec, tv.tv_sec, tv.tv_usec);*/ + + r = (tv.tv_sec-b->stamp.tv_sec) * 1000000; + + if (tv.tv_usec >= b->stamp.tv_usec) + r += tv.tv_usec - b->stamp.tv_usec; + else + r -= b->stamp.tv_usec - tv.tv_usec; + + return r; +} -- cgit