Fix ANR & Crash on Ryu
Fixes impossible dequeue crash as the wrong start point of the frame was used. We need to use the start point for RT, not the start point for the frame. Workaround for sysui ANR caused by what appears to be a driver bug. Drivers with the bug will have transiently higher memory usage. Drivers without the bug will be unaffected. Bug: 62213889 Bug: 62250550 Test: Manual Change-Id: I9992b224f84bc1c40834bafff7e0013b38270ae0
This commit is contained in:
@@ -877,7 +877,8 @@ static jobject android_view_ThreadedRenderer_createHardwareBitmapFromRenderNode(
|
||||
sp<IGraphicBufferProducer> producer;
|
||||
sp<IGraphicBufferConsumer> rawConsumer;
|
||||
BufferQueue::createBufferQueue(&producer, &rawConsumer);
|
||||
rawConsumer->setMaxBufferCount(1);
|
||||
// We only need 1 buffer but some drivers have bugs so workaround it by setting max count to 2
|
||||
rawConsumer->setMaxBufferCount(2);
|
||||
sp<BufferItemConsumer> consumer = new BufferItemConsumer(rawConsumer,
|
||||
GRALLOC_USAGE_HW_TEXTURE | GRALLOC_USAGE_SW_READ_NEVER | GRALLOC_USAGE_SW_WRITE_NEVER);
|
||||
consumer->setDefaultBufferSize(width, height);
|
||||
|
||||
@@ -437,8 +437,8 @@ void CanvasContext::draw() {
|
||||
if (mNativeSurface.get()) {
|
||||
int durationUs;
|
||||
nsecs_t dequeueStart = mNativeSurface->getLastDequeueStartTime();
|
||||
if (dequeueStart < mCurrentFrameInfo->get(FrameInfoIndex::Vsync)) {
|
||||
// Ignoring dequeue duration as it happened prior to vsync
|
||||
if (dequeueStart < mCurrentFrameInfo->get(FrameInfoIndex::SyncStart)) {
|
||||
// Ignoring dequeue duration as it happened prior to frame render start
|
||||
// and thus is not part of the frame.
|
||||
swap.dequeueDuration = 0;
|
||||
} else {
|
||||
|
||||
Reference in New Issue
Block a user