Merge "Avoid starving RT anims"

This commit is contained in:
Treehugger Robot
2016-11-17 23:52:59 +00:00
committed by Gerrit Code Review

View File

@@ -20,6 +20,7 @@
#include "CanvasContext.h" #include "CanvasContext.h"
#include "EglManager.h" #include "EglManager.h"
#include "RenderProxy.h" #include "RenderProxy.h"
#include "utils/FatVector.h"
#include <gui/DisplayEventReceiver.h> #include <gui/DisplayEventReceiver.h>
#include <gui/ISurfaceComposer.h> #include <gui/ISurfaceComposer.h>
@@ -282,11 +283,19 @@ bool RenderThread::threadLoop() {
"RenderThread Looper POLL_ERROR!"); "RenderThread Looper POLL_ERROR!");
nsecs_t nextWakeup; nsecs_t nextWakeup;
// Process our queue, if we have anything {
FatVector<RenderTask*, 10> workQueue;
// Process our queue, if we have anything. By first acquiring
// all the pending events then processing them we avoid vsync
// starvation if more tasks are queued while we are processing tasks.
while (RenderTask* task = nextTask(&nextWakeup)) { while (RenderTask* task = nextTask(&nextWakeup)) {
workQueue.push_back(task);
}
for (auto task : workQueue) {
task->run(); task->run();
// task may have deleted itself, do not reference it again // task may have deleted itself, do not reference it again
} }
}
if (nextWakeup == LLONG_MAX) { if (nextWakeup == LLONG_MAX) {
timeoutMillis = -1; timeoutMillis = -1;
} else { } else {