我是
靠谱客的博主
冷酷羽毛,最近开发中收集的这篇文章主要介绍
通过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录像预览滞后 - 简书所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复