SF: Ignore PTS more than one second in the future
Some of this logic already existed, but when we optimized SurfaceFlinger to avoid unnecessary wake-ups, we didn't carry the logic over into the new readiness test. shouldPresentNow now returns true if the timestamp is more than a second in the future (since it's likely a bogus timestamp and should be ignored). Bug: 21932760 Change-Id: Ib50970a4eb621588c0b60766c8d8d1a8bddf853b
This commit is contained in:
parent
56105b2f72
commit
0eb2d39866
@ -1102,10 +1102,21 @@ void Layer::useEmptyDamage() {
|
||||
|
||||
bool Layer::shouldPresentNow(const DispSync& dispSync) const {
|
||||
Mutex::Autolock lock(mQueueItemLock);
|
||||
if (mQueueItems.empty()) {
|
||||
return false;
|
||||
}
|
||||
auto timestamp = mQueueItems[0].mTimestamp;
|
||||
nsecs_t expectedPresent =
|
||||
mSurfaceFlingerConsumer->computeExpectedPresent(dispSync);
|
||||
return mQueueItems.empty() ?
|
||||
false : mQueueItems[0].mTimestamp < expectedPresent;
|
||||
|
||||
// Ignore timestamps more than a second in the future
|
||||
bool isPlausible = timestamp < (expectedPresent + s2ns(1));
|
||||
ALOGW_IF(!isPlausible, "[%s] Timestamp %" PRId64 " seems implausible "
|
||||
"relative to expectedPresent %" PRId64, mName.string(), timestamp,
|
||||
expectedPresent);
|
||||
|
||||
bool isDue = timestamp < expectedPresent;
|
||||
return isDue || !isPlausible;
|
||||
}
|
||||
|
||||
bool Layer::onPreComposition() {
|
||||
|
Loading…
Reference in New Issue
Block a user