genode/base/src/core/dump_alloc.cc

59 lines
1.2 KiB
C++

/*
* \brief Allocator dump helpers
* \author Norman Feske
* \date 2009-10-15
*/
/*
* Copyright (C) 2009-2013 Genode Labs GmbH
*
* This file is part of the Genode OS framework, which is distributed
* under the terms of the GNU General Public License version 2.
*/
#include <base/printf.h>
#include <base/allocator_avl.h>
using namespace Genode;
void Allocator_avl_base::Block::dump()
{
printf(" Block: [%08lx,%08lx) size=%08zx avail=%08zx max_avail=%08zx\n",
addr(), addr() + size(), size(), avail(), max_avail());
}
void Allocator_avl_base::dump_addr_tree(Block *addr_node)
{
bool top = false;
static unsigned long mem_size;
static unsigned long mem_avail;
if (addr_node == 0) {
addr_node = _addr_tree.first();
printf("Allocator %p dump:\n", this);
mem_size = mem_avail = 0;
top = true;
}
if (!addr_node) return;
if (addr_node->child(0))
dump_addr_tree(addr_node->child(0));
Block *b = (Block *)addr_node;
b->dump();
mem_size += b->size();
mem_avail += b->avail();
if (addr_node->child(1))
dump_addr_tree(addr_node->child(1));
if (top)
printf(" => mem_size=%lu (%lu MB) / mem_avail=%lu (%lu MB)\n",
mem_size, mem_size / 1024 / 1024,
mem_avail, mem_avail / 1024 / 1024);
}