Merge "yield resource if the request come from same client with same priority" into udc-dev
This commit is contained in:
@@ -1019,6 +1019,7 @@ public class TunerResourceManagerService extends SystemService implements IBinde
|
|||||||
int inUseLowestPriorityFrHandle = TunerResourceManager.INVALID_RESOURCE_HANDLE;
|
int inUseLowestPriorityFrHandle = TunerResourceManager.INVALID_RESOURCE_HANDLE;
|
||||||
// Priority max value is 1000
|
// Priority max value is 1000
|
||||||
int currentLowestPriority = MAX_CLIENT_PRIORITY + 1;
|
int currentLowestPriority = MAX_CLIENT_PRIORITY + 1;
|
||||||
|
boolean isRequestFromSameProcess = false;
|
||||||
// If the desired frontend id was specified, we only need to check the frontend.
|
// If the desired frontend id was specified, we only need to check the frontend.
|
||||||
boolean hasDesiredFrontend = request.desiredId != TunerFrontendRequest.DEFAULT_DESIRED_ID;
|
boolean hasDesiredFrontend = request.desiredId != TunerFrontendRequest.DEFAULT_DESIRED_ID;
|
||||||
for (FrontendResource fr : getFrontendResources().values()) {
|
for (FrontendResource fr : getFrontendResources().values()) {
|
||||||
@@ -1048,6 +1049,8 @@ public class TunerResourceManagerService extends SystemService implements IBinde
|
|||||||
if (currentLowestPriority > priority) {
|
if (currentLowestPriority > priority) {
|
||||||
inUseLowestPriorityFrHandle = fr.getHandle();
|
inUseLowestPriorityFrHandle = fr.getHandle();
|
||||||
currentLowestPriority = priority;
|
currentLowestPriority = priority;
|
||||||
|
isRequestFromSameProcess = (requestClient.getProcessId()
|
||||||
|
== (getClientProfile(fr.getOwnerClientId())).getProcessId());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1063,7 +1066,8 @@ public class TunerResourceManagerService extends SystemService implements IBinde
|
|||||||
// When all the resources are occupied, grant the lowest priority resource if the
|
// When all the resources are occupied, grant the lowest priority resource if the
|
||||||
// request client has higher priority.
|
// request client has higher priority.
|
||||||
if (inUseLowestPriorityFrHandle != TunerResourceManager.INVALID_RESOURCE_HANDLE
|
if (inUseLowestPriorityFrHandle != TunerResourceManager.INVALID_RESOURCE_HANDLE
|
||||||
&& (requestClient.getPriority() > currentLowestPriority)) {
|
&& ((requestClient.getPriority() > currentLowestPriority) || (
|
||||||
|
(requestClient.getPriority() == currentLowestPriority) && isRequestFromSameProcess))) {
|
||||||
if (!reclaimResource(
|
if (!reclaimResource(
|
||||||
getFrontendResource(inUseLowestPriorityFrHandle).getOwnerClientId(),
|
getFrontendResource(inUseLowestPriorityFrHandle).getOwnerClientId(),
|
||||||
TunerResourceManager.TUNER_RESOURCE_TYPE_FRONTEND)) {
|
TunerResourceManager.TUNER_RESOURCE_TYPE_FRONTEND)) {
|
||||||
@@ -1182,6 +1186,7 @@ public class TunerResourceManagerService extends SystemService implements IBinde
|
|||||||
int inUseLowestPriorityLnbHandle = TunerResourceManager.INVALID_RESOURCE_HANDLE;
|
int inUseLowestPriorityLnbHandle = TunerResourceManager.INVALID_RESOURCE_HANDLE;
|
||||||
// Priority max value is 1000
|
// Priority max value is 1000
|
||||||
int currentLowestPriority = MAX_CLIENT_PRIORITY + 1;
|
int currentLowestPriority = MAX_CLIENT_PRIORITY + 1;
|
||||||
|
boolean isRequestFromSameProcess = false;
|
||||||
for (LnbResource lnb : getLnbResources().values()) {
|
for (LnbResource lnb : getLnbResources().values()) {
|
||||||
if (!lnb.isInUse()) {
|
if (!lnb.isInUse()) {
|
||||||
// Grant the unused lnb with lower handle first
|
// Grant the unused lnb with lower handle first
|
||||||
@@ -1194,6 +1199,8 @@ public class TunerResourceManagerService extends SystemService implements IBinde
|
|||||||
if (currentLowestPriority > priority) {
|
if (currentLowestPriority > priority) {
|
||||||
inUseLowestPriorityLnbHandle = lnb.getHandle();
|
inUseLowestPriorityLnbHandle = lnb.getHandle();
|
||||||
currentLowestPriority = priority;
|
currentLowestPriority = priority;
|
||||||
|
isRequestFromSameProcess = (requestClient.getProcessId()
|
||||||
|
== (getClientProfile(lnb.getOwnerClientId())).getProcessId());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1208,7 +1215,8 @@ public class TunerResourceManagerService extends SystemService implements IBinde
|
|||||||
// When all the resources are occupied, grant the lowest priority resource if the
|
// When all the resources are occupied, grant the lowest priority resource if the
|
||||||
// request client has higher priority.
|
// request client has higher priority.
|
||||||
if (inUseLowestPriorityLnbHandle > TunerResourceManager.INVALID_RESOURCE_HANDLE
|
if (inUseLowestPriorityLnbHandle > TunerResourceManager.INVALID_RESOURCE_HANDLE
|
||||||
&& (requestClient.getPriority() > currentLowestPriority)) {
|
&& ((requestClient.getPriority() > currentLowestPriority) || (
|
||||||
|
(requestClient.getPriority() == currentLowestPriority) && isRequestFromSameProcess))) {
|
||||||
if (!reclaimResource(getLnbResource(inUseLowestPriorityLnbHandle).getOwnerClientId(),
|
if (!reclaimResource(getLnbResource(inUseLowestPriorityLnbHandle).getOwnerClientId(),
|
||||||
TunerResourceManager.TUNER_RESOURCE_TYPE_LNB)) {
|
TunerResourceManager.TUNER_RESOURCE_TYPE_LNB)) {
|
||||||
return false;
|
return false;
|
||||||
@@ -1240,6 +1248,7 @@ public class TunerResourceManagerService extends SystemService implements IBinde
|
|||||||
int lowestPriorityOwnerId = -1;
|
int lowestPriorityOwnerId = -1;
|
||||||
// Priority max value is 1000
|
// Priority max value is 1000
|
||||||
int currentLowestPriority = MAX_CLIENT_PRIORITY + 1;
|
int currentLowestPriority = MAX_CLIENT_PRIORITY + 1;
|
||||||
|
boolean isRequestFromSameProcess = false;
|
||||||
if (!cas.isFullyUsed()) {
|
if (!cas.isFullyUsed()) {
|
||||||
casSessionHandle[0] = generateResourceHandle(
|
casSessionHandle[0] = generateResourceHandle(
|
||||||
TunerResourceManager.TUNER_RESOURCE_TYPE_CAS_SESSION, cas.getSystemId());
|
TunerResourceManager.TUNER_RESOURCE_TYPE_CAS_SESSION, cas.getSystemId());
|
||||||
@@ -1252,12 +1261,15 @@ public class TunerResourceManagerService extends SystemService implements IBinde
|
|||||||
if (currentLowestPriority > priority) {
|
if (currentLowestPriority > priority) {
|
||||||
lowestPriorityOwnerId = ownerId;
|
lowestPriorityOwnerId = ownerId;
|
||||||
currentLowestPriority = priority;
|
currentLowestPriority = priority;
|
||||||
|
isRequestFromSameProcess = (requestClient.getProcessId()
|
||||||
|
== (getClientProfile(ownerId)).getProcessId());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// When all the Cas sessions are occupied, reclaim the lowest priority client if the
|
// When all the Cas sessions are occupied, reclaim the lowest priority client if the
|
||||||
// request client has higher priority.
|
// request client has higher priority.
|
||||||
if (lowestPriorityOwnerId > -1 && (requestClient.getPriority() > currentLowestPriority)) {
|
if (lowestPriorityOwnerId > -1 && ((requestClient.getPriority() > currentLowestPriority)
|
||||||
|
|| ((requestClient.getPriority() == currentLowestPriority) && isRequestFromSameProcess))) {
|
||||||
if (!reclaimResource(lowestPriorityOwnerId,
|
if (!reclaimResource(lowestPriorityOwnerId,
|
||||||
TunerResourceManager.TUNER_RESOURCE_TYPE_CAS_SESSION)) {
|
TunerResourceManager.TUNER_RESOURCE_TYPE_CAS_SESSION)) {
|
||||||
return false;
|
return false;
|
||||||
@@ -1289,6 +1301,7 @@ public class TunerResourceManagerService extends SystemService implements IBinde
|
|||||||
int lowestPriorityOwnerId = -1;
|
int lowestPriorityOwnerId = -1;
|
||||||
// Priority max value is 1000
|
// Priority max value is 1000
|
||||||
int currentLowestPriority = MAX_CLIENT_PRIORITY + 1;
|
int currentLowestPriority = MAX_CLIENT_PRIORITY + 1;
|
||||||
|
boolean isRequestFromSameProcess = false;
|
||||||
if (!ciCam.isFullyUsed()) {
|
if (!ciCam.isFullyUsed()) {
|
||||||
ciCamHandle[0] = generateResourceHandle(
|
ciCamHandle[0] = generateResourceHandle(
|
||||||
TunerResourceManager.TUNER_RESOURCE_TYPE_FRONTEND_CICAM, ciCam.getCiCamId());
|
TunerResourceManager.TUNER_RESOURCE_TYPE_FRONTEND_CICAM, ciCam.getCiCamId());
|
||||||
@@ -1301,12 +1314,16 @@ public class TunerResourceManagerService extends SystemService implements IBinde
|
|||||||
if (currentLowestPriority > priority) {
|
if (currentLowestPriority > priority) {
|
||||||
lowestPriorityOwnerId = ownerId;
|
lowestPriorityOwnerId = ownerId;
|
||||||
currentLowestPriority = priority;
|
currentLowestPriority = priority;
|
||||||
|
isRequestFromSameProcess = (requestClient.getProcessId()
|
||||||
|
== (getClientProfile(ownerId)).getProcessId());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// When all the CiCam sessions are occupied, reclaim the lowest priority client if the
|
// When all the CiCam sessions are occupied, reclaim the lowest priority client if the
|
||||||
// request client has higher priority.
|
// request client has higher priority.
|
||||||
if (lowestPriorityOwnerId > -1 && (requestClient.getPriority() > currentLowestPriority)) {
|
if (lowestPriorityOwnerId > -1 && ((requestClient.getPriority() > currentLowestPriority)
|
||||||
|
|| ((requestClient.getPriority() == currentLowestPriority)
|
||||||
|
&& isRequestFromSameProcess))) {
|
||||||
if (!reclaimResource(lowestPriorityOwnerId,
|
if (!reclaimResource(lowestPriorityOwnerId,
|
||||||
TunerResourceManager.TUNER_RESOURCE_TYPE_FRONTEND_CICAM)) {
|
TunerResourceManager.TUNER_RESOURCE_TYPE_FRONTEND_CICAM)) {
|
||||||
return false;
|
return false;
|
||||||
@@ -1424,6 +1441,7 @@ public class TunerResourceManagerService extends SystemService implements IBinde
|
|||||||
int inUseLowestPriorityDrHandle = TunerResourceManager.INVALID_RESOURCE_HANDLE;
|
int inUseLowestPriorityDrHandle = TunerResourceManager.INVALID_RESOURCE_HANDLE;
|
||||||
// Priority max value is 1000
|
// Priority max value is 1000
|
||||||
int currentLowestPriority = MAX_CLIENT_PRIORITY + 1;
|
int currentLowestPriority = MAX_CLIENT_PRIORITY + 1;
|
||||||
|
boolean isRequestFromSameProcess = false;
|
||||||
// If the desired demux id was specified, we only need to check the demux.
|
// If the desired demux id was specified, we only need to check the demux.
|
||||||
boolean hasDesiredDemuxCap = request.desiredFilterTypes
|
boolean hasDesiredDemuxCap = request.desiredFilterTypes
|
||||||
!= DemuxFilterMainType.UNDEFINED;
|
!= DemuxFilterMainType.UNDEFINED;
|
||||||
@@ -1448,6 +1466,8 @@ public class TunerResourceManagerService extends SystemService implements IBinde
|
|||||||
// update lowest priority
|
// update lowest priority
|
||||||
if (currentLowestPriority > priority) {
|
if (currentLowestPriority > priority) {
|
||||||
currentLowestPriority = priority;
|
currentLowestPriority = priority;
|
||||||
|
isRequestFromSameProcess = (requestClient.getProcessId()
|
||||||
|
== (getClientProfile(dr.getOwnerClientId())).getProcessId());
|
||||||
shouldUpdate = true;
|
shouldUpdate = true;
|
||||||
}
|
}
|
||||||
// update smallest caps
|
// update smallest caps
|
||||||
@@ -1473,7 +1493,8 @@ public class TunerResourceManagerService extends SystemService implements IBinde
|
|||||||
// When all the resources are occupied, grant the lowest priority resource if the
|
// When all the resources are occupied, grant the lowest priority resource if the
|
||||||
// request client has higher priority.
|
// request client has higher priority.
|
||||||
if (inUseLowestPriorityDrHandle != TunerResourceManager.INVALID_RESOURCE_HANDLE
|
if (inUseLowestPriorityDrHandle != TunerResourceManager.INVALID_RESOURCE_HANDLE
|
||||||
&& (requestClient.getPriority() > currentLowestPriority)) {
|
&& ((requestClient.getPriority() > currentLowestPriority) || (
|
||||||
|
(requestClient.getPriority() == currentLowestPriority) && isRequestFromSameProcess))) {
|
||||||
if (!reclaimResource(
|
if (!reclaimResource(
|
||||||
getDemuxResource(inUseLowestPriorityDrHandle).getOwnerClientId(),
|
getDemuxResource(inUseLowestPriorityDrHandle).getOwnerClientId(),
|
||||||
TunerResourceManager.TUNER_RESOURCE_TYPE_DEMUX)) {
|
TunerResourceManager.TUNER_RESOURCE_TYPE_DEMUX)) {
|
||||||
|
|||||||
Reference in New Issue
Block a user