* Added AS_DUMP_ALLOCATOR command that dumps an applications memory allocator to
the syslog/serial output. * Added app_server_debug command that currently just sends this command to the specified teams. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@39441 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2001-2009, Haiku.
|
* Copyright 2001-2010, Haiku.
|
||||||
* Distributed under the terms of the MIT License.
|
* Distributed under the terms of the MIT License.
|
||||||
*
|
*
|
||||||
* Authors:
|
* Authors:
|
||||||
@@ -336,6 +336,9 @@ enum {
|
|||||||
// desktop listener communications
|
// desktop listener communications
|
||||||
AS_TALK_TO_DESKTOP_LISTENER,
|
AS_TALK_TO_DESKTOP_LISTENER,
|
||||||
|
|
||||||
|
// debugging helper
|
||||||
|
AS_DUMP_ALLOCATOR,
|
||||||
|
|
||||||
AS_LAST_CODE
|
AS_LAST_CODE
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -211,6 +211,32 @@ ClientMemoryAllocator::Unlock()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
ClientMemoryAllocator::Dump()
|
||||||
|
{
|
||||||
|
AutoReadLocker locker(fLock);
|
||||||
|
|
||||||
|
debug_printf("Application %ld, %s: chunks:\n", fApplication->ClientTeam(),
|
||||||
|
fApplication->Signature());
|
||||||
|
|
||||||
|
chunk_list::Iterator iterator = fChunks.GetIterator();
|
||||||
|
int32 i = 0;
|
||||||
|
while (struct chunk* chunk = iterator.Next()) {
|
||||||
|
debug_printf(" [%4ld] %p, area %ld, base %p, size %lu\n", i++, chunk,
|
||||||
|
chunk->area, chunk->base, chunk->size);
|
||||||
|
}
|
||||||
|
|
||||||
|
debug_printf("free blocks:\n");
|
||||||
|
|
||||||
|
block_list::Iterator blockIterator = fFreeBlocks.GetIterator();
|
||||||
|
i = 0;
|
||||||
|
while (struct block* block = blockIterator.Next()) {
|
||||||
|
debug_printf(" [%6ld] %p, chunk %p, base %p, size %lu\n", i++, block,
|
||||||
|
block->chunk, block->base, block->size);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
struct block *
|
struct block *
|
||||||
ClientMemoryAllocator::_AllocateChunk(size_t size, bool& newArea)
|
ClientMemoryAllocator::_AllocateChunk(size_t size, bool& newArea)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -51,6 +51,8 @@ public:
|
|||||||
bool Lock();
|
bool Lock();
|
||||||
void Unlock();
|
void Unlock();
|
||||||
|
|
||||||
|
void Dump();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
struct block* _AllocateChunk(size_t size, bool& newArea);
|
struct block* _AllocateChunk(size_t size, bool& newArea);
|
||||||
|
|
||||||
|
|||||||
@@ -2387,6 +2387,7 @@ Desktop::_DispatchMessage(int32 code, BPrivate::LinkReceiver &link)
|
|||||||
}
|
}
|
||||||
|
|
||||||
case AS_APP_CRASHED:
|
case AS_APP_CRASHED:
|
||||||
|
case AS_DUMP_ALLOCATOR:
|
||||||
{
|
{
|
||||||
BAutolock locker(fApplicationsLock);
|
BAutolock locker(fApplicationsLock);
|
||||||
|
|
||||||
@@ -2398,7 +2399,7 @@ Desktop::_DispatchMessage(int32 code, BPrivate::LinkReceiver &link)
|
|||||||
ServerApp* app = fApplications.ItemAt(i);
|
ServerApp* app = fApplications.ItemAt(i);
|
||||||
|
|
||||||
if (app->ClientTeam() == team)
|
if (app->ClientTeam() == team)
|
||||||
app->PostMessage(AS_APP_CRASHED);
|
app->PostMessage(code);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2001-2009, Haiku.
|
* Copyright 2001-2010, Haiku.
|
||||||
* Distributed under the terms of the MIT License.
|
* Distributed under the terms of the MIT License.
|
||||||
*
|
*
|
||||||
* Authors:
|
* Authors:
|
||||||
@@ -545,6 +545,10 @@ ServerApp::_DispatchMessage(int32 code, BPrivate::LinkReceiver& link)
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case AS_DUMP_ALLOCATOR:
|
||||||
|
fMemoryAllocator.Dump();
|
||||||
|
break;
|
||||||
|
|
||||||
case AS_CREATE_WINDOW:
|
case AS_CREATE_WINDOW:
|
||||||
case AS_CREATE_OFFSCREEN_WINDOW:
|
case AS_CREATE_OFFSCREEN_WINDOW:
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,12 +1,18 @@
|
|||||||
SubDir HAIKU_TOP src tests servers app ;
|
SubDir HAIKU_TOP src tests servers app ;
|
||||||
|
|
||||||
|
UsePrivateHeaders app graphics input interface shared storage ;
|
||||||
|
|
||||||
|
SimpleTest app_server_debug :
|
||||||
|
app_server_debug.cpp
|
||||||
|
: be
|
||||||
|
;
|
||||||
|
|
||||||
SetSubDirSupportedPlatforms libbe_test ;
|
SetSubDirSupportedPlatforms libbe_test ;
|
||||||
|
|
||||||
# No need to define any of those targets, when not building for libbe_test
|
# No need to define any of those targets, when not building for libbe_test
|
||||||
if $(TARGET_PLATFORM) = libbe_test {
|
if $(TARGET_PLATFORM) = libbe_test {
|
||||||
|
|
||||||
UseLibraryHeaders agg png zlib ;
|
UseLibraryHeaders agg png zlib ;
|
||||||
UsePrivateHeaders app graphics input interface shared storage ;
|
|
||||||
UsePrivateHeaders [ FDirName graphics common ] ;
|
UsePrivateHeaders [ FDirName graphics common ] ;
|
||||||
|
|
||||||
# headers/build/private/kernel is needed for safemode.h and syscalls.h.
|
# headers/build/private/kernel is needed for safemode.h and syscalls.h.
|
||||||
|
|||||||
@@ -0,0 +1,55 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010, Axel Dörfler, axeld@pinc-software.de.
|
||||||
|
* Distributed under the terms of the MIT License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#include <DesktopLink.h>
|
||||||
|
#include <ServerProtocol.h>
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
|
||||||
|
extern const char* __progname;
|
||||||
|
|
||||||
|
|
||||||
|
status_t
|
||||||
|
send_debug_message(team_id team, int32 code)
|
||||||
|
{
|
||||||
|
BPrivate::DesktopLink link;
|
||||||
|
|
||||||
|
status_t status = link.InitCheck();
|
||||||
|
if (status != B_OK)
|
||||||
|
return status;
|
||||||
|
|
||||||
|
// prepare the message
|
||||||
|
status = link.StartMessage(code);
|
||||||
|
if (status != B_OK)
|
||||||
|
return status;
|
||||||
|
|
||||||
|
status = link.Attach(team);
|
||||||
|
if (status != B_OK)
|
||||||
|
return status;
|
||||||
|
|
||||||
|
// send it
|
||||||
|
return link.Flush();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int
|
||||||
|
main(int argc, char** argv)
|
||||||
|
{
|
||||||
|
if (argc == 1) {
|
||||||
|
fprintf(stderr, "usage: %s <team-id> [...]\n", __progname);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int32 i = 1; i < argc; i++) {
|
||||||
|
team_id team = atoi(argv[i]);
|
||||||
|
if (team > 0)
|
||||||
|
send_debug_message(team, AS_DUMP_ALLOCATOR);
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user