通过systrace学习代码

  • Post author:
  • Post category:其他



[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多




成为第一个赞



版权声明:本文为seiyaaa原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。