[base]: Disable default print on exit

Use finalizing flag to disable print on MppBufferService destroy.

Change-Id: I8f17a6b8ed77101cf4f240dad05f8e886968c3c6
Signed-off-by: Herman Chen <herman.chen@rock-chips.com>
This commit is contained in:
Herman Chen
2017-09-30 18:21:37 +08:00
parent 10676cee87
commit 68d22d8fec
2 changed files with 45 additions and 25 deletions

View File

@@ -24,8 +24,9 @@
#define MPP_BUF_DBG_FUNCTION (0x00000001)
#define MPP_BUF_DBG_OPS_RUNTIME (0x00000002)
#define MPP_BUF_DBG_OPS_HISTORY (0x00000004)
#define MPP_BUF_DBG_CLR_ON_EXIT (0x00000008)
#define MPP_BUF_DBG_CHECK_SIZE (0x00000010)
#define MPP_BUF_DBG_CLR_ON_EXIT (0x00000010)
#define MPP_BUF_DBG_DUMP_ON_EXIT (0x00000020)
#define MPP_BUF_DBG_CHECK_SIZE (0x00000100)
#define mpp_buf_dbg(flag, fmt, ...) _mpp_dbg(mpp_buffer_debug, flag, fmt, ## __VA_ARGS__)
#define mpp_buf_dbg_f(flag, fmt, ...) _mpp_dbg_f(mpp_buffer_debug, flag, fmt, ## __VA_ARGS__)

View File

@@ -71,6 +71,7 @@ private:
RK_U32 get_group_id();
RK_U32 group_id;
RK_U32 group_count;
RK_U32 finalizing;
// misc group for internal / externl buffer with different type
MppBufferGroupImpl *misc[MPP_BUFFER_MODE_BUTT][MPP_BUFFER_TYPE_BUTT];
@@ -96,6 +97,7 @@ public:
void put_group(MppBufferGroupImpl *group);
MppBufferGroupImpl *get_group_by_id(RK_U32 id);
void dump_misc_group();
RK_U32 is_finalizing();
};
static const char *mode2str[MPP_BUFFER_MODE_BUTT] = {
@@ -183,22 +185,28 @@ static void buffer_group_dump_log(MppBufferGroupImpl *group)
static MPP_RET deinit_buffer_no_lock(MppBufferImpl *buffer, const char *caller)
{
mpp_assert(buffer->ref_count == 0);
mpp_assert(buffer->used == 0);
if (!MppBufferService::get_instance()->is_finalizing()) {
mpp_assert(buffer->ref_count == 0);
mpp_assert(buffer->used == 0);
}
list_del_init(&buffer->list_status);
MppBufferGroupImpl *group = SEARCH_GROUP_BY_ID(buffer->group_id);
BufferOp func = (group->mode == MPP_BUFFER_INTERNAL) ?
(group->alloc_api->free) :
(group->alloc_api->release);
func(group->allocator, &buffer->info);
group->usage -= buffer->info.size;
group->buffer_count--;
if (group) {
BufferOp func = (group->mode == MPP_BUFFER_INTERNAL) ?
(group->alloc_api->free) :
(group->alloc_api->release);
func(group->allocator, &buffer->info);
group->usage -= buffer->info.size;
group->buffer_count--;
buffer_group_add_log(group, buffer, BUF_DESTROY, caller);
buffer_group_add_log(group, buffer, BUF_DESTROY, caller);
if (group->is_orphan && !group->usage) {
MppBufferService::get_instance()->put_group(group);
if (group->is_orphan && !group->usage) {
MppBufferService::get_instance()->put_group(group);
}
} else {
mpp_assert(MppBufferService::get_instance()->is_finalizing());
}
mpp_free(buffer);
@@ -555,7 +563,8 @@ MppBufferGroupImpl *mpp_buffer_get_misc_group(MppBufferMode mode, MppBufferType
MppBufferService::MppBufferService()
: group_id(0),
group_count(0)
group_count(0),
finalizing(0)
{
RK_S32 i, j;
@@ -572,14 +581,7 @@ MppBufferService::~MppBufferService()
{
RK_S32 i, j;
// first remove legacy group
for (i = 0; i < MPP_BUFFER_MODE_BUTT; i++)
for (j = 0; j < MPP_BUFFER_TYPE_BUTT; j++) {
if (misc[i][j]) {
put_group(misc[i][j]);
misc[i][j] = NULL;
}
}
finalizing = 1;
// then remove the remaining group
if (!list_empty(&mListGroup)) {
@@ -589,6 +591,15 @@ MppBufferService::~MppBufferService()
}
}
// first remove legacy group
for (i = 0; i < MPP_BUFFER_MODE_BUTT; i++)
for (j = 0; j < MPP_BUFFER_TYPE_BUTT; j++) {
if (misc[i][j]) {
put_group(misc[i][j]);
misc[i][j] = NULL;
}
}
// remove all orphan buffer
if (!list_empty(&mListOrphan)) {
MppBufferImpl *pos, *n;
@@ -688,10 +699,13 @@ void MppBufferService::put_group(MppBufferGroupImpl *p)
if (list_empty(&p->list_used)) {
destroy_group(p);
} else {
mpp_err("mpp_group %p tag %s caller %s mode %s type %s deinit with %d bytes not released\n",
p, p->tag, p->caller, mode2str[p->mode], type2str[p->type], p->usage);
if (!finalizing ||
(finalizing && (mpp_buffer_debug & MPP_BUF_DBG_DUMP_ON_EXIT))) {
mpp_err("mpp_group %p tag %s caller %s mode %s type %s deinit with %d bytes not released\n",
p, p->tag, p->caller, mode2str[p->mode], type2str[p->type], p->usage);
mpp_buffer_group_dump(p);
mpp_buffer_group_dump(p);
}
/* if clear on exit we need to release remaining buffer */
if (p->clear_on_exit) {
@@ -794,3 +808,8 @@ void MppBufferService::dump_misc_group()
}
}
RK_U32 MppBufferService::is_finalizing()
{
return finalizing;
}