Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5e2c2647 authored by Praveen Chavan's avatar Praveen Chavan Committed by Linux Build Service Account
Browse files

stagefright: enable traces for performance debugging

Trace number of video output buffers with OMXCodec, EBD,
FBD messages. Trace calculated sleep-delay in AwesomePlayer
and trace AudioPlayer::fillBuffer call.

Change-Id: Ib63fa4da48e690c79d57e134a6ad4519e396d198
parent 1f989fd0
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -18,7 +18,9 @@

//#define LOG_NDEBUG 0
#define LOG_TAG "AudioPlayer"
#define ATRACE_TAG ATRACE_TAG_AUDIO
#include <utils/Log.h>
#include <utils/Trace.h>
#include <cutils/compiler.h>

#include <binder/IPCThreadState.h>
@@ -525,6 +527,7 @@ uint32_t AudioPlayer::getNumFramesPendingPlayout() const {
}

size_t AudioPlayer::fillBuffer(void *data, size_t size) {
    ATRACE_CALL();
    if (mNumFramesPlayed == 0) {
        ALOGV("AudioCallback");
    }
+6 −1
Original line number Diff line number Diff line
@@ -2128,7 +2128,11 @@ void AwesomePlayer::onVideoEvent() {

        latenessUs = nowUs - timeUs;

        if (latenessUs >= 0) {
            ATRACE_INT("Video Lateness (ms)", latenessUs / 1E3);
        } else {
            ATRACE_INT("Video Earlyness (ms)", -latenessUs / 1E3);
        }

        if (latenessUs > 500000ll
                && mAudioPlayer != NULL
@@ -2293,6 +2297,7 @@ void AwesomePlayer::onVideoEvent() {
        ALOGV("next frame in %" PRId64, delayUs);
        // try to schedule 30ms before time due
        postVideoEvent_l(delayUs > 60000 ? 30000 : (delayUs < 30000 ? 0 : delayUs - 30000));
        ATRACE_INT("Video postDelay", delayUs < 0 ? 1 : delayUs);
        return;
    }

+26 −0
Original line number Diff line number Diff line
@@ -23,6 +23,8 @@
#endif

#include <utils/Log.h>
#define ATRACE_TAG ATRACE_TAG_VIDEO
#include <utils/Trace.h>

#include "include/AACEncoder.h"

@@ -2384,6 +2386,7 @@ void OMXCodec::on_message(const omx_message &msg) {

        case omx_message::EMPTY_BUFFER_DONE:
        {
            ATRACE_BEGIN("EMPTY_BUFFER_DONE");
            IOMX::buffer_id buffer = msg.u.extended_buffer_data.buffer;

            CODEC_LOGV("EMPTY_BUFFER_DONE(buffer: %u)", buffer);
@@ -2424,11 +2427,13 @@ void OMXCodec::on_message(const omx_message &msg) {
                    drainInputBuffer(&buffers->editItemAt(i));
                }
            }
            ATRACE_END();
            break;
        }

        case omx_message::FILL_BUFFER_DONE:
        {
            ATRACE_BEGIN("FILL_BUFFER_DONE");
            IOMX::buffer_id buffer = msg.u.extended_buffer_data.buffer;
            OMX_U32 flags = msg.u.extended_buffer_data.flags;

@@ -2528,6 +2533,7 @@ void OMXCodec::on_message(const omx_message &msg) {
                                msg.u.extended_buffer_data.timestamp);

                        fillOutputBuffer(info);
                        ATRACE_END();
                        break;
                    }

@@ -2545,11 +2551,17 @@ void OMXCodec::on_message(const omx_message &msg) {
                }
                mFilledBuffers.push_back(i);
                mBufferFilled.signal();
                if (!strncasecmp(mMIME, "video/", 6)) {
                    ATRACE_INT("Output buffers with OMXCodec", mFilledBuffers.size());
                    ATRACE_INT("Output Buffers with OMX client",
                            countBuffersWeOwn(mPortBuffers[kPortIndexOutput]));
                }
                if (mIsEncoder) {
                    sched_yield();
                }
            }

            ATRACE_END();
            break;
        }

@@ -3246,6 +3258,7 @@ OMXCodec::BufferInfo *OMXCodec::findEmptyInputBuffer() {
}

bool OMXCodec::drainInputBuffer(BufferInfo *info) {
    ATRACE_CALL();
    if (info != NULL) {
        CHECK_EQ((int)info->mStatus, (int)OWNED_BY_US);
    }
@@ -3548,6 +3561,7 @@ void OMXCodec::setState(State newState) {

status_t OMXCodec::waitForBufferFilled_l() {

    ATRACE_CALL();
    if (mIsEncoder && mIsVideo) {
        // For timelapse video recording, the timelapse video recording may
        // not send an input frame for a _long_ time. Do not use timeout
@@ -4133,6 +4147,7 @@ sp<MetaData> OMXCodec::getFormat() {

status_t OMXCodec::read(
        MediaBuffer **buffer, const ReadOptions *options) {
    ATRACE_CALL();
    status_t err = OK;
    *buffer = NULL;

@@ -4240,6 +4255,12 @@ status_t OMXCodec::read(
        }
    }

    if (!strncasecmp(mMIME, "video/", 6)) {
        ATRACE_INT("Output buffers with OMXCodec", mFilledBuffers.size());
        ATRACE_INT("Output Buffers with OMX client",
                countBuffersWeOwn(mPortBuffers[kPortIndexOutput]));
    }

    while (mState != ERROR && !mNoMoreOutputData && mFilledBuffers.empty()) {
        if ((err = waitForBufferFilled_l()) != OK) {
            return err;
@@ -4267,6 +4288,11 @@ status_t OMXCodec::read(

    size_t index = *mFilledBuffers.begin();
    mFilledBuffers.erase(mFilledBuffers.begin());
    if (!strncasecmp(mMIME, "video/", 6)) {
        ATRACE_INT("Output buffers with OMXCodec", mFilledBuffers.size());
        ATRACE_INT("Output Buffers with OMX client",
                countBuffersWeOwn(mPortBuffers[kPortIndexOutput]));
    }

    BufferInfo *info = &mPortBuffers[kPortIndexOutput].editItemAt(index);
    CHECK_EQ((int)info->mStatus, (int)OWNED_BY_US);