Android Binder Transaction Logging
1. 목적
- 부팅이 완료될 때까지 Android Binder Transaction 전체 로깅을 남기자
2. 방법
- /proc/binder/transaction_log 을 읽으면 최근 32개의 Transaction 로그 출력
- 전체 로깅을 프로세스명까지 남기기 위해서 Emulator 커널의 binder 소스 수정
- drivers/staging/android/binder.c 수정
- 위 파일의 소스 일부 수정
1402 //if (binder_debug_mask & BINDER_DEBUG_TRANSACTION) {
1403 if (reply)
1404 printk(KERN_INFO "binder: %d(%s):%d BC_REPLY %d -> %d(%s):%d, "
1405 "data %p-%p size %zd-%zd\n",
1406 proc->pid, proc->tsk->comm, thread->pid, t->debug_id,
1407 target_proc->pid, target_proc->tsk->comm, target_thread->pid,
1408 tr->data.ptr.buffer, tr->data.ptr.offsets,
1409 tr->data_size, tr->offsets_size);
1410 else
1411 printk(KERN_INFO "binder: %d(%s):%d BC_TRANSACTION %d -> "
1412 "%d(%s) - node %d, data %p-%p size %zd-%zd\n",
1413 proc->pid, proc->tsk->comm, thread->pid, t->debug_id,
1414 target_proc->pid, target_proc->tsk->comm, target_node->debug_id,
1415 tr->data.ptr.buffer, tr->data.ptr.offsets,
1416 tr->data_size, tr->offsets_size);
1417 //}
1403 if (reply)
1404 printk(KERN_INFO "binder: %d(%s):%d BC_REPLY %d -> %d(%s):%d, "
1405 "data %p-%p size %zd-%zd\n",
1406 proc->pid, proc->tsk->comm, thread->pid, t->debug_id,
1407 target_proc->pid, target_proc->tsk->comm, target_thread->pid,
1408 tr->data.ptr.buffer, tr->data.ptr.offsets,
1409 tr->data_size, tr->offsets_size);
1410 else
1411 printk(KERN_INFO "binder: %d(%s):%d BC_TRANSACTION %d -> "
1412 "%d(%s) - node %d, data %p-%p size %zd-%zd\n",
1413 proc->pid, proc->tsk->comm, thread->pid, t->debug_id,
1414 target_proc->pid, target_proc->tsk->comm, target_node->debug_id,
1415 tr->data.ptr.buffer, tr->data.ptr.offsets,
1416 tr->data_size, tr->offsets_size);
1417 //}
3. 결과
- 전체 로그는 첨부파일 참조
- 전체 대략 3857개의 Transaction이 요청됨
- 전체 Transaction debug ID는 8600 정도
- 각 프로세스 별 Transaction을 분석 필요
댓글
댓글 쓰기