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

Commit 9aacf195 authored by christosts's avatar christosts Committed by Christos Tsilopoulos
Browse files

Log additional NuPlayer information in bug reports

This change adds more logging from NuPlayer when obtaining
a bug report. NuPlayer's renderer will print whether it has occupied
the wake lock and for how much time. In addition, handlers attached
to the player's looper will also log if they are currently executing
a message (at the time of the bug report).

The above logs will help detect if the NuPlayer's wake lock is kept
acquired because the player looper is blocked on a specific handler.

Test: manual on device test, grabbed a bug-report while playing media

Change-Id: I3e91da9ea45a5fe270a0866054f695f5e844e8c7
Bug: 265531109
parent 8a917b31
Loading
Loading
Loading
Loading
+2 −0
Original line number Original line Diff line number Diff line
@@ -67,6 +67,7 @@ bool AWakeLock::acquire() {
            if (status.isOk()) {
            if (status.isOk()) {
                mWakeLockToken = binder;
                mWakeLockToken = binder;
                mWakeLockCount++;
                mWakeLockCount++;
                ALOGI("AwakeLock acquired");
                return true;
                return true;
            }
            }
        }
        }
@@ -93,6 +94,7 @@ void AWakeLock::release(bool force) {
            IPCThreadState::self()->restoreCallingIdentity(token);
            IPCThreadState::self()->restoreCallingIdentity(token);
        }
        }
        mWakeLockToken.clear();
        mWakeLockToken.clear();
        ALOGI("AwakeLock released");
    }
    }
}
}


+10 −0
Original line number Original line Diff line number Diff line
@@ -3032,6 +3032,16 @@ const char *NuPlayer::getDataSourceType() {
    }
    }
 }
 }


 void NuPlayer::dump(AString& logString) {
    logString.append("renderer(");
    if (mRenderer != nullptr) {
        mRenderer->dump(logString);
    } else {
        logString.append("null");
    }
    logString.append(")");
 }

// Modular DRM begin
// Modular DRM begin
status_t NuPlayer::prepareDrm(const uint8_t uuid[16], const Vector<uint8_t> &drmSessionId)
status_t NuPlayer::prepareDrm(const uint8_t uuid[16], const Vector<uint8_t> &drmSessionId)
{
{
+5 −2
Original line number Original line Diff line number Diff line
@@ -969,13 +969,16 @@ status_t NuPlayerDriver::dump(
    }
    }


    if (locked) {
    if (locked) {
        snprintf(buf, sizeof(buf), "  state(%d), atEOS(%d), looping(%d), autoLoop(%d)\n",
        snprintf(buf, sizeof(buf), "  state(%d), atEOS(%d), looping(%d), autoLoop(%d), ",
                mState, mAtEOS, mLooping, mAutoLoop);
                mState, mAtEOS, mLooping, mAutoLoop);
        logString.append(buf);
        mPlayer->dump(logString);
        logString.append("\n");
        mLock.unlock();
        mLock.unlock();
    } else {
    } else {
        snprintf(buf, sizeof(buf), "  NPD(%p) lock is taken\n", this);
        snprintf(buf, sizeof(buf), "  NPD(%p) lock is taken\n", this);
    }
        logString.append(buf);
        logString.append(buf);
    }


    for (size_t i = 0; i < trackStats.size(); ++i) {
    for (size_t i = 0; i < trackStats.size(); ++i) {
        const sp<AMessage> &stats = trackStats.itemAt(i);
        const sp<AMessage> &stats = trackStats.itemAt(i);
+41 −0
Original line number Original line Diff line number Diff line
@@ -478,6 +478,23 @@ void NuPlayer::Renderer::closeAudioSink() {
    msg->postAndAwaitResponse(&response);
    msg->postAndAwaitResponse(&response);
}
}


void NuPlayer::Renderer::dump(AString& logString) {
    Mutex::Autolock autoLock(mLock);
    logString.append("paused(");
    logString.append(mPaused);
    logString.append("), offloading(");
    logString.append(offloadingAudio());
    logString.append("), wakelock(acquired=");
    mWakelockAcquireEvent.dump(logString);
    logString.append(", timeout=");
    mWakelockTimeoutEvent.dump(logString);
    logString.append(", release=");
    mWakelockReleaseEvent.dump(logString);
    logString.append(", cancel=");
    mWakelockCancelEvent.dump(logString);
    logString.append(")");
}

void NuPlayer::Renderer::changeAudioFormat(
void NuPlayer::Renderer::changeAudioFormat(
        const sp<AMessage> &format,
        const sp<AMessage> &format,
        bool offloadOnly,
        bool offloadOnly,
@@ -792,6 +809,10 @@ void NuPlayer::Renderer::onMessageReceived(const sp<AMessage> &msg) {
        {
        {
            int32_t generation;
            int32_t generation;
            CHECK(msg->findInt32("drainGeneration", &generation));
            CHECK(msg->findInt32("drainGeneration", &generation));
            mWakelockTimeoutEvent.updateValues(
                    uptimeMillis(),
                    generation,
                    mAudioOffloadPauseTimeoutGeneration);
            if (generation != mAudioOffloadPauseTimeoutGeneration) {
            if (generation != mAudioOffloadPauseTimeoutGeneration) {
                break;
                break;
            }
            }
@@ -807,6 +828,10 @@ void NuPlayer::Renderer::onMessageReceived(const sp<AMessage> &msg) {
        {
        {
            int32_t generation;
            int32_t generation;
            CHECK(msg->findInt32("drainGeneration", &generation));
            CHECK(msg->findInt32("drainGeneration", &generation));
            mWakelockReleaseEvent.updateValues(
                uptimeMillis(),
                generation,
                mAudioOffloadPauseTimeoutGeneration);
            if (generation != mAudioOffloadPauseTimeoutGeneration) {
            if (generation != mAudioOffloadPauseTimeoutGeneration) {
                break;
                break;
            }
            }
@@ -1914,6 +1939,9 @@ void NuPlayer::Renderer::onAudioTearDown(AudioTearDownReason reason) {
void NuPlayer::Renderer::startAudioOffloadPauseTimeout() {
void NuPlayer::Renderer::startAudioOffloadPauseTimeout() {
    if (offloadingAudio()) {
    if (offloadingAudio()) {
        mWakeLock->acquire();
        mWakeLock->acquire();
        mWakelockAcquireEvent.updateValues(uptimeMillis(),
                                           mAudioOffloadPauseTimeoutGeneration,
                                           mAudioOffloadPauseTimeoutGeneration);
        sp<AMessage> msg = new AMessage(kWhatAudioOffloadPauseTimeout, this);
        sp<AMessage> msg = new AMessage(kWhatAudioOffloadPauseTimeout, this);
        msg->setInt32("drainGeneration", mAudioOffloadPauseTimeoutGeneration);
        msg->setInt32("drainGeneration", mAudioOffloadPauseTimeoutGeneration);
        msg->post(kOffloadPauseMaxUs);
        msg->post(kOffloadPauseMaxUs);
@@ -1930,6 +1958,9 @@ void NuPlayer::Renderer::cancelAudioOffloadPauseTimeout() {
    // Note: The acquired wakelock prevents the device from suspending
    // Note: The acquired wakelock prevents the device from suspending
    // immediately after offload pause (in case a resume happens shortly thereafter).
    // immediately after offload pause (in case a resume happens shortly thereafter).
    mWakeLock->release(true);
    mWakeLock->release(true);
    mWakelockCancelEvent.updateValues(uptimeMillis(),
                                      mAudioOffloadPauseTimeoutGeneration,
                                      mAudioOffloadPauseTimeoutGeneration);
    ++mAudioOffloadPauseTimeoutGeneration;
    ++mAudioOffloadPauseTimeoutGeneration;
}
}


@@ -2165,4 +2196,14 @@ void NuPlayer::Renderer::onChangeAudioFormat(
    notify->post();
    notify->post();
}
}


void NuPlayer::Renderer::WakeLockEvent::dump(AString& logString) {
  logString.append("[");
  logString.append(mTimeMs);
  logString.append(",");
  logString.append(mEventTimeoutGeneration);
  logString.append(",");
  logString.append(mRendererTimeoutGeneration);
  logString.append("]");
}

}  // namespace android
}  // namespace android
+2 −0
Original line number Original line Diff line number Diff line
@@ -104,6 +104,8 @@ struct NuPlayer : public AHandler {


    void setTargetBitrate(int bitrate /* bps */);
    void setTargetBitrate(int bitrate /* bps */);


    void dump(AString& logString);

protected:
protected:
    virtual ~NuPlayer();
    virtual ~NuPlayer();


Loading