Camera service: Extend UID check timeout to 300ms.

Also make the timeout sleeping more granular, so that the wait
won't always be 300ms in case the initial checks fail.

Test: Camera CTS passes
Bug: 110840510
Change-Id: I3f0d09913b10526dd27cecca50c111712da82846
gugelfrei
Eino-Ville Talvala 6 years ago
parent 11e0589b4d
commit 32b8c20dbc

@ -2434,7 +2434,8 @@ bool CameraService::UidPolicy::isUidActive(uid_t uid, String16 callingPackage) {
return isUidActiveLocked(uid, callingPackage); return isUidActiveLocked(uid, callingPackage);
} }
static const int kPollUidActiveTimeoutMillis = 50; static const int64_t kPollUidActiveTimeoutTotalMillis = 300;
static const int64_t kPollUidActiveTimeoutMillis = 50;
bool CameraService::UidPolicy::isUidActiveLocked(uid_t uid, String16 callingPackage) { bool CameraService::UidPolicy::isUidActiveLocked(uid_t uid, String16 callingPackage) {
// Non-app UIDs are considered always active // Non-app UIDs are considered always active
@ -2462,7 +2463,8 @@ bool CameraService::UidPolicy::isUidActiveLocked(uid_t uid, String16 callingPack
// activity being resumed. The proper fix is very risky, so we temporary add // activity being resumed. The proper fix is very risky, so we temporary add
// some polling which should happen pretty rarely anyway as the race is hard // some polling which should happen pretty rarely anyway as the race is hard
// to hit. // to hit.
active = am.isUidActive(uid, callingPackage); active = mActiveUids.find(uid) != mActiveUids.end();
if (!active) active = am.isUidActive(uid, callingPackage);
if (active) { if (active) {
break; break;
} }
@ -2470,11 +2472,15 @@ bool CameraService::UidPolicy::isUidActiveLocked(uid_t uid, String16 callingPack
startTimeMillis = uptimeMillis(); startTimeMillis = uptimeMillis();
} }
int64_t ellapsedTimeMillis = uptimeMillis() - startTimeMillis; int64_t ellapsedTimeMillis = uptimeMillis() - startTimeMillis;
int64_t remainingTimeMillis = kPollUidActiveTimeoutMillis - ellapsedTimeMillis; int64_t remainingTimeMillis = kPollUidActiveTimeoutTotalMillis - ellapsedTimeMillis;
if (remainingTimeMillis <= 0) { if (remainingTimeMillis <= 0) {
break; break;
} }
remainingTimeMillis = std::min(kPollUidActiveTimeoutMillis, remainingTimeMillis);
mUidLock.unlock();
usleep(remainingTimeMillis * 1000); usleep(remainingTimeMillis * 1000);
mUidLock.lock();
} while (true); } while (true);
if (active) { if (active) {

Loading…
Cancel
Save