我是靠谱客的博主 冷酷羽毛,最近开发中收集的这篇文章主要介绍通过systrace学习代码 [066]Camera360录像预览滞后 - 简书,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

 [066]Camera360录像预览滞后 - 简书

需要trace文件请留言

环境:rockchip、应用Camera360

现象:Camera360画面不跟手

知识点1

queuebuffer没有完成,SurfaceView的buffer数量就会增加1,但是实际上这一个buffer对于SurfaceFlinger是不可用。

知识点2

queuebuffer的过程会因为同一个bufferqueue的上一帧GPU绘制未完成而block。

知识点1和2分别对应下列代码中注释的那行代码。
frameworks/native/libs/gui/BufferQueueProducer.cpp

status_t BufferQueueProducer::queueBuffer(int slot,

        const QueueBufferInput &input, QueueBufferOutput *output) {

    ATRACE_CALL();

    ...

    BufferItem item;

    { // Autolock scope

    ...

        output->width = mCore->mDefaultWidth;

        output->height = mCore->mDefaultHeight;

        output->transformHint = mCore->mTransformHintInUse = mCore->mTransformHint;

        output->numPendingBuffers = static_cast<uint32_t>(mCore->mQueue.size());

        output->nextFrameNumber = mCore->mFrameCounter + 1;

        ATRACE_INT(mCore->mConsumerName.string(),

                static_cast<int32_t>(mCore->mQueue.size()));//知识点1

        ...

    } // Autolock scope

    // Wait without lock held

    if (connectedApi == NATIVE_WINDOW_API_EGL) {

        // Waiting here allows for two full buffers to be queued but not a

        // third. In the event that frames take varying time, this makes a

        // small trade-off in favor of latency rather than throughput.

        lastQueuedFence->waitForever("Throttling EGL Production");//知识点2

    }

    return NO_ERROR;

}

SurfaceTexture-0-13887-0: 5

queueBuffer @53ms

 de'queue'Buffer  @113ms

总共60ms多

赞成为第一个赞

最后

以上就是冷酷羽毛为你收集整理的通过systrace学习代码 [066]Camera360录像预览滞后 - 简书的全部内容,希望文章能够帮你解决通过systrace学习代码 [066]Camera360录像预览滞后 - 简书所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(47)

评论列表共有 0 条评论

立即
投稿
返回
顶部