Merge "Update holder priority when new request coming into the TRM service"
This commit is contained in:
@@ -50,8 +50,6 @@ public final class ClientProfile {
|
||||
*/
|
||||
private final int mProcessId;
|
||||
|
||||
private boolean mIsForeground;
|
||||
|
||||
/**
|
||||
* All the clients that share the same resource would be under the same group id.
|
||||
*
|
||||
@@ -89,6 +87,12 @@ public final class ClientProfile {
|
||||
*/
|
||||
private int mUsingCiCamId = INVALID_RESOURCE_ID;
|
||||
|
||||
/**
|
||||
* If the priority is overwritten through
|
||||
* {@link TunerResourceManagerService#setPriority(int, int)}.
|
||||
*/
|
||||
private boolean mIsPriorityOverwritten = false;
|
||||
|
||||
/**
|
||||
* Optional arbitrary priority value given by the client.
|
||||
*
|
||||
@@ -121,17 +125,10 @@ public final class ClientProfile {
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the current isForeground status.
|
||||
* If the client priority is overwrttien.
|
||||
*/
|
||||
public void setForeground(boolean isForeground) {
|
||||
mIsForeground = isForeground;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the previous recorded isForeground status.
|
||||
*/
|
||||
public boolean isForeground() {
|
||||
return mIsForeground;
|
||||
public boolean isPriorityOverwritten() {
|
||||
return mIsPriorityOverwritten;
|
||||
}
|
||||
|
||||
public int getGroupId() {
|
||||
@@ -153,6 +150,17 @@ public final class ClientProfile {
|
||||
mPriority = priority;
|
||||
}
|
||||
|
||||
/**
|
||||
* Overwrite the client priority.
|
||||
*/
|
||||
public void overwritePriority(int priority) {
|
||||
if (priority < 0) {
|
||||
return;
|
||||
}
|
||||
mIsPriorityOverwritten = true;
|
||||
mPriority = priority;
|
||||
}
|
||||
|
||||
public void setNiceValue(int niceValue) {
|
||||
mNiceValue = niceValue;
|
||||
}
|
||||
|
||||
@@ -507,9 +507,8 @@ public class TunerResourceManagerService extends SystemService implements IBinde
|
||||
.useCase(profile.useCase)
|
||||
.processId(pid)
|
||||
.build();
|
||||
clientProfile.setForeground(checkIsForeground(pid));
|
||||
clientProfile.setPriority(
|
||||
getClientPriority(profile.useCase, clientProfile.isForeground()));
|
||||
getClientPriority(profile.useCase, checkIsForeground(pid)));
|
||||
|
||||
addClientProfile(clientId[0], clientProfile, listener);
|
||||
}
|
||||
@@ -547,8 +546,7 @@ public class TunerResourceManagerService extends SystemService implements IBinde
|
||||
return false;
|
||||
}
|
||||
|
||||
profile.setForeground(checkIsForeground(profile.getProcessId()));
|
||||
profile.setPriority(priority);
|
||||
profile.overwritePriority(priority);
|
||||
profile.setNiceValue(niceValue);
|
||||
|
||||
return true;
|
||||
@@ -694,7 +692,7 @@ public class TunerResourceManagerService extends SystemService implements IBinde
|
||||
} else if (grantingFrontendHandle == TunerResourceManager.INVALID_RESOURCE_HANDLE) {
|
||||
// Record the frontend id with the lowest client priority among all the
|
||||
// in use frontends when no available frontend has been found.
|
||||
int priority = getOwnerClientPriority(fr.getOwnerClientId());
|
||||
int priority = updateAndGetOwnerClientPriority(fr.getOwnerClientId());
|
||||
if (currentLowestPriority > priority) {
|
||||
inUseLowestPriorityFrHandle = fr.getHandle();
|
||||
currentLowestPriority = priority;
|
||||
@@ -760,7 +758,7 @@ public class TunerResourceManagerService extends SystemService implements IBinde
|
||||
} else {
|
||||
// Record the lnb id with the lowest client priority among all the
|
||||
// in use lnb when no available lnb has been found.
|
||||
int priority = getOwnerClientPriority(lnb.getOwnerClientId());
|
||||
int priority = updateAndGetOwnerClientPriority(lnb.getOwnerClientId());
|
||||
if (currentLowestPriority > priority) {
|
||||
inUseLowestPriorityLnbHandle = lnb.getHandle();
|
||||
currentLowestPriority = priority;
|
||||
@@ -818,7 +816,7 @@ public class TunerResourceManagerService extends SystemService implements IBinde
|
||||
}
|
||||
for (int ownerId : cas.getOwnerClientIds()) {
|
||||
// Record the client id with lowest priority that is using the current Cas system.
|
||||
int priority = getOwnerClientPriority(ownerId);
|
||||
int priority = updateAndGetOwnerClientPriority(ownerId);
|
||||
if (currentLowestPriority > priority) {
|
||||
lowestPriorityOwnerId = ownerId;
|
||||
currentLowestPriority = priority;
|
||||
@@ -867,7 +865,7 @@ public class TunerResourceManagerService extends SystemService implements IBinde
|
||||
}
|
||||
for (int ownerId : ciCam.getOwnerClientIds()) {
|
||||
// Record the client id with lowest priority that is using the current Cas system.
|
||||
int priority = getOwnerClientPriority(ownerId);
|
||||
int priority = updateAndGetOwnerClientPriority(ownerId);
|
||||
if (currentLowestPriority > priority) {
|
||||
lowestPriorityOwnerId = ownerId;
|
||||
currentLowestPriority = priority;
|
||||
@@ -966,18 +964,17 @@ public class TunerResourceManagerService extends SystemService implements IBinde
|
||||
}
|
||||
|
||||
@VisibleForTesting
|
||||
// This mothod is to sync up the request client's foreground/background status and update
|
||||
// the client priority accordingly whenever new resource request comes in.
|
||||
protected void clientPriorityUpdateOnRequest(ClientProfile requestProfile) {
|
||||
int pid = requestProfile.getProcessId();
|
||||
boolean currentIsForeground = checkIsForeground(pid);
|
||||
if (requestProfile.isForeground() == currentIsForeground) {
|
||||
// This mothod is to sync up the request/holder client's foreground/background status and update
|
||||
// the client priority accordingly whenever a new resource request comes in.
|
||||
protected void clientPriorityUpdateOnRequest(ClientProfile profile) {
|
||||
if (profile.isPriorityOverwritten()) {
|
||||
// To avoid overriding the priority set through updateClientPriority API.
|
||||
return;
|
||||
}
|
||||
requestProfile.setForeground(currentIsForeground);
|
||||
requestProfile.setPriority(
|
||||
getClientPriority(requestProfile.getUseCase(), currentIsForeground));
|
||||
int pid = profile.getProcessId();
|
||||
boolean currentIsForeground = checkIsForeground(pid);
|
||||
profile.setPriority(
|
||||
getClientPriority(profile.getUseCase(), currentIsForeground));
|
||||
}
|
||||
|
||||
@VisibleForTesting
|
||||
@@ -1154,13 +1151,15 @@ public class TunerResourceManagerService extends SystemService implements IBinde
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the owner client's priority.
|
||||
* Update and get the owner client's priority.
|
||||
*
|
||||
* @param clientId the owner client id.
|
||||
* @return the priority of the owner client.
|
||||
*/
|
||||
private int getOwnerClientPriority(int clientId) {
|
||||
return getClientProfile(clientId).getPriority();
|
||||
private int updateAndGetOwnerClientPriority(int clientId) {
|
||||
ClientProfile profile = getClientProfile(clientId);
|
||||
clientPriorityUpdateOnRequest(profile);
|
||||
return profile.getPriority();
|
||||
}
|
||||
|
||||
@VisibleForTesting
|
||||
|
||||
@@ -365,13 +365,13 @@ public class TunerResourceManagerServiceTest {
|
||||
mTunerResourceManagerService.registerClientProfileInternal(
|
||||
profiles[0], listener, clientId0);
|
||||
assertThat(clientId0[0]).isNotEqualTo(TunerResourceManagerService.INVALID_CLIENT_ID);
|
||||
mTunerResourceManagerService.getClientProfile(clientId0[0])
|
||||
.setPriority(clientPriorities[0]);
|
||||
mTunerResourceManagerService.updateClientPriorityInternal(
|
||||
clientId0[0], clientPriorities[0], 0/*niceValue*/);
|
||||
mTunerResourceManagerService.registerClientProfileInternal(
|
||||
profiles[1], new TestResourcesReclaimListener(), clientId1);
|
||||
assertThat(clientId1[0]).isNotEqualTo(TunerResourceManagerService.INVALID_CLIENT_ID);
|
||||
mTunerResourceManagerService.getClientProfile(clientId1[0])
|
||||
.setPriority(clientPriorities[1]);
|
||||
mTunerResourceManagerService.updateClientPriorityInternal(
|
||||
clientId1[0], clientPriorities[1], 0/*niceValue*/);
|
||||
|
||||
// Init frontend resources.
|
||||
TunerFrontendInfo[] infos = new TunerFrontendInfo[2];
|
||||
@@ -415,13 +415,13 @@ public class TunerResourceManagerServiceTest {
|
||||
mTunerResourceManagerService.registerClientProfileInternal(
|
||||
profiles[0], listener, clientId0);
|
||||
assertThat(clientId0[0]).isNotEqualTo(TunerResourceManagerService.INVALID_CLIENT_ID);
|
||||
mTunerResourceManagerService.getClientProfile(clientId0[0])
|
||||
.setPriority(clientPriorities[0]);
|
||||
mTunerResourceManagerService.updateClientPriorityInternal(
|
||||
clientId0[0], clientPriorities[0], 0/*niceValue*/);
|
||||
mTunerResourceManagerService.registerClientProfileInternal(
|
||||
profiles[1], new TestResourcesReclaimListener(), clientId1);
|
||||
assertThat(clientId1[0]).isNotEqualTo(TunerResourceManagerService.INVALID_CLIENT_ID);
|
||||
mTunerResourceManagerService.getClientProfile(clientId1[0])
|
||||
.setPriority(clientPriorities[1]);
|
||||
mTunerResourceManagerService.updateClientPriorityInternal(
|
||||
clientId1[0], clientPriorities[1], 0/*niceValue*/);
|
||||
|
||||
// Init frontend resources.
|
||||
TunerFrontendInfo[] infos = new TunerFrontendInfo[2];
|
||||
@@ -511,13 +511,13 @@ public class TunerResourceManagerServiceTest {
|
||||
mTunerResourceManagerService.registerClientProfileInternal(
|
||||
profiles[0], listener, clientId0);
|
||||
assertThat(clientId0[0]).isNotEqualTo(TunerResourceManagerService.INVALID_CLIENT_ID);
|
||||
mTunerResourceManagerService.getClientProfile(clientId0[0])
|
||||
.setPriority(clientPriorities[0]);
|
||||
mTunerResourceManagerService.updateClientPriorityInternal(
|
||||
clientId0[0], clientPriorities[0], 0/*niceValue*/);
|
||||
mTunerResourceManagerService.registerClientProfileInternal(
|
||||
profiles[1], new TestResourcesReclaimListener(), clientId1);
|
||||
assertThat(clientId1[0]).isNotEqualTo(TunerResourceManagerService.INVALID_CLIENT_ID);
|
||||
mTunerResourceManagerService.getClientProfile(clientId1[0])
|
||||
.setPriority(clientPriorities[1]);
|
||||
mTunerResourceManagerService.updateClientPriorityInternal(
|
||||
clientId1[0], clientPriorities[1], 0/*niceValue*/);
|
||||
|
||||
// Init cas resources.
|
||||
mTunerResourceManagerService.updateCasInfoInternal(1 /*casSystemId*/, 2 /*maxSessionNum*/);
|
||||
@@ -567,13 +567,13 @@ public class TunerResourceManagerServiceTest {
|
||||
mTunerResourceManagerService.registerClientProfileInternal(
|
||||
profiles[0], listener, clientId0);
|
||||
assertThat(clientId0[0]).isNotEqualTo(TunerResourceManagerService.INVALID_CLIENT_ID);
|
||||
mTunerResourceManagerService.getClientProfile(clientId0[0])
|
||||
.setPriority(clientPriorities[0]);
|
||||
mTunerResourceManagerService.updateClientPriorityInternal(
|
||||
clientId0[0], clientPriorities[0], 0/*niceValue*/);
|
||||
mTunerResourceManagerService.registerClientProfileInternal(
|
||||
profiles[1], new TestResourcesReclaimListener(), clientId1);
|
||||
assertThat(clientId1[0]).isNotEqualTo(TunerResourceManagerService.INVALID_CLIENT_ID);
|
||||
mTunerResourceManagerService.getClientProfile(clientId1[0])
|
||||
.setPriority(clientPriorities[1]);
|
||||
mTunerResourceManagerService.updateClientPriorityInternal(
|
||||
clientId1[0], clientPriorities[1], 0/*niceValue*/);
|
||||
|
||||
// Init cicam/cas resources.
|
||||
mTunerResourceManagerService.updateCasInfoInternal(1 /*casSystemId*/, 2 /*maxSessionNum*/);
|
||||
@@ -697,13 +697,13 @@ public class TunerResourceManagerServiceTest {
|
||||
mTunerResourceManagerService.registerClientProfileInternal(
|
||||
profiles[0], listener, clientId0);
|
||||
assertThat(clientId0[0]).isNotEqualTo(TunerResourceManagerService.INVALID_CLIENT_ID);
|
||||
mTunerResourceManagerService.getClientProfile(clientId0[0])
|
||||
.setPriority(clientPriorities[0]);
|
||||
mTunerResourceManagerService.updateClientPriorityInternal(
|
||||
clientId0[0], clientPriorities[0], 0/*niceValue*/);
|
||||
mTunerResourceManagerService.registerClientProfileInternal(
|
||||
profiles[1], new TestResourcesReclaimListener(), clientId1);
|
||||
assertThat(clientId1[0]).isNotEqualTo(TunerResourceManagerService.INVALID_CLIENT_ID);
|
||||
mTunerResourceManagerService.getClientProfile(clientId1[0])
|
||||
.setPriority(clientPriorities[1]);
|
||||
mTunerResourceManagerService.updateClientPriorityInternal(
|
||||
clientId1[0], clientPriorities[1], 0/*niceValue*/);
|
||||
|
||||
// Init lnb resources.
|
||||
int[] lnbHandles = {1};
|
||||
|
||||
Reference in New Issue
Block a user