Use Tuner Resource Handle instead of Resource Id in TunerResourceManager
Test: atest TunerResourceManagerServiceTest Bug: 170684039 Change-Id: I5dcf1ee97c35be7f95adeeb5afee9266d0b845be
This commit is contained in:
@@ -54,7 +54,7 @@ public final class TunerFrontendInfo implements Parcelable {
|
||||
}
|
||||
};
|
||||
|
||||
private final int mId;
|
||||
private final int mHandle;
|
||||
|
||||
@Type
|
||||
private final int mFrontendType;
|
||||
@@ -66,7 +66,7 @@ public final class TunerFrontendInfo implements Parcelable {
|
||||
private final int mExclusiveGroupId;
|
||||
|
||||
private TunerFrontendInfo(@NonNull Parcel source) {
|
||||
mId = source.readInt();
|
||||
mHandle = source.readInt();
|
||||
mFrontendType = source.readInt();
|
||||
mExclusiveGroupId = source.readInt();
|
||||
}
|
||||
@@ -74,25 +74,26 @@ public final class TunerFrontendInfo implements Parcelable {
|
||||
/**
|
||||
* Constructs a new {@link TunerFrontendInfo} with the given parameters.
|
||||
*
|
||||
* @param handle frontend handle
|
||||
* @param frontendType the type of the frontend.
|
||||
* @param exclusiveGroupId the group id of the frontend. FE with the same
|
||||
group id can't function at the same time.
|
||||
*/
|
||||
public TunerFrontendInfo(int id,
|
||||
public TunerFrontendInfo(int handle,
|
||||
@Type int frontendType,
|
||||
int exclusiveGroupId) {
|
||||
mId = id;
|
||||
mHandle = handle;
|
||||
mFrontendType = frontendType;
|
||||
mExclusiveGroupId = exclusiveGroupId;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the frontend id.
|
||||
* Returns the frontend handle.
|
||||
*
|
||||
* @return the value of the frontend id.
|
||||
* @return the value of the frontend handle.
|
||||
*/
|
||||
public int getId() {
|
||||
return mId;
|
||||
public int getHandle() {
|
||||
return mHandle;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -125,7 +126,7 @@ public final class TunerFrontendInfo implements Parcelable {
|
||||
@Override
|
||||
public String toString() {
|
||||
StringBuilder b = new StringBuilder(128);
|
||||
b.append("TunerFrontendInfo {id=").append(mId);
|
||||
b.append("TunerFrontendInfo {handle=").append(mHandle);
|
||||
b.append(", frontendType=").append(mFrontendType);
|
||||
b.append(", exclusiveGroupId=").append(mExclusiveGroupId);
|
||||
b.append("}");
|
||||
@@ -134,7 +135,7 @@ public final class TunerFrontendInfo implements Parcelable {
|
||||
|
||||
@Override
|
||||
public void writeToParcel(@NonNull Parcel dest, int flags) {
|
||||
dest.writeInt(mId);
|
||||
dest.writeInt(mHandle);
|
||||
dest.writeInt(mFrontendType);
|
||||
dest.writeInt(mExclusiveGroupId);
|
||||
}
|
||||
|
||||
@@ -63,9 +63,9 @@ public final class ClientProfile {
|
||||
private int mNiceValue;
|
||||
|
||||
/**
|
||||
* List of the frontend ids that are used by the current client.
|
||||
* List of the frontend handles that are used by the current client.
|
||||
*/
|
||||
private Set<Integer> mUsingFrontendIds = new HashSet<>();
|
||||
private Set<Integer> mUsingFrontendHandles = new HashSet<>();
|
||||
|
||||
/**
|
||||
* List of the client ids that share frontend with the current client.
|
||||
@@ -73,9 +73,9 @@ public final class ClientProfile {
|
||||
private Set<Integer> mShareFeClientIds = new HashSet<>();
|
||||
|
||||
/**
|
||||
* List of the Lnb ids that are used by the current client.
|
||||
* List of the Lnb handles that are used by the current client.
|
||||
*/
|
||||
private Set<Integer> mUsingLnbIds = new HashSet<>();
|
||||
private Set<Integer> mUsingLnbHandles = new HashSet<>();
|
||||
|
||||
/**
|
||||
* List of the Cas system ids that are used by the current client.
|
||||
@@ -139,10 +139,10 @@ public final class ClientProfile {
|
||||
/**
|
||||
* Set when the client starts to use a frontend.
|
||||
*
|
||||
* @param frontendId being used.
|
||||
* @param frontendHandle being used.
|
||||
*/
|
||||
public void useFrontend(int frontendId) {
|
||||
mUsingFrontendIds.add(frontendId);
|
||||
public void useFrontend(int frontendHandle) {
|
||||
mUsingFrontendHandles.add(frontendHandle);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -163,8 +163,8 @@ public final class ClientProfile {
|
||||
mShareFeClientIds.remove(clientId);
|
||||
}
|
||||
|
||||
public Set<Integer> getInUseFrontendIds() {
|
||||
return mUsingFrontendIds;
|
||||
public Set<Integer> getInUseFrontendHandles() {
|
||||
return mUsingFrontendHandles;
|
||||
}
|
||||
|
||||
public Set<Integer> getShareFeClientIds() {
|
||||
@@ -175,30 +175,30 @@ public final class ClientProfile {
|
||||
* Called when the client released a frontend.
|
||||
*/
|
||||
public void releaseFrontend() {
|
||||
mUsingFrontendIds.clear();
|
||||
mUsingFrontendHandles.clear();
|
||||
mShareFeClientIds.clear();
|
||||
}
|
||||
|
||||
/**
|
||||
* Set when the client starts to use an Lnb.
|
||||
*
|
||||
* @param lnbId being used.
|
||||
* @param lnbHandle being used.
|
||||
*/
|
||||
public void useLnb(int lnbId) {
|
||||
mUsingLnbIds.add(lnbId);
|
||||
public void useLnb(int lnbHandle) {
|
||||
mUsingLnbHandles.add(lnbHandle);
|
||||
}
|
||||
|
||||
public Set<Integer> getInUseLnbIds() {
|
||||
return mUsingLnbIds;
|
||||
public Set<Integer> getInUseLnbHandles() {
|
||||
return mUsingLnbHandles;
|
||||
}
|
||||
|
||||
/**
|
||||
* Called when the client released an lnb.
|
||||
*
|
||||
* @param lnbId being released.
|
||||
* @param lnbHandle being released.
|
||||
*/
|
||||
public void releaseLnb(int lnbId) {
|
||||
mUsingLnbIds.remove(lnbId);
|
||||
public void releaseLnb(int lnbHandle) {
|
||||
mUsingLnbHandles.remove(lnbHandle);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -225,9 +225,9 @@ public final class ClientProfile {
|
||||
* Called to reclaim all the resources being used by the current client.
|
||||
*/
|
||||
public void reclaimAllResources() {
|
||||
mUsingFrontendIds.clear();
|
||||
mUsingFrontendHandles.clear();
|
||||
mShareFeClientIds.clear();
|
||||
mUsingLnbIds.clear();
|
||||
mUsingLnbHandles.clear();
|
||||
mUsingCasSystemId = INVALID_RESOURCE_ID;
|
||||
}
|
||||
|
||||
|
||||
@@ -40,9 +40,9 @@ public final class FrontendResource extends TunerResourceBasic {
|
||||
private final int mExclusiveGroupId;
|
||||
|
||||
/**
|
||||
* An array to save all the FE ids under the same exclisive group.
|
||||
* An array to save all the FE handles under the same exclisive group.
|
||||
*/
|
||||
private Set<Integer> mExclusiveGroupMemberFeIds = new HashSet<>();
|
||||
private Set<Integer> mExclusiveGroupMemberHandles = new HashSet<>();
|
||||
|
||||
private FrontendResource(Builder builder) {
|
||||
super(builder);
|
||||
@@ -58,26 +58,26 @@ public final class FrontendResource extends TunerResourceBasic {
|
||||
return mExclusiveGroupId;
|
||||
}
|
||||
|
||||
public Set<Integer> getExclusiveGroupMemberFeIds() {
|
||||
return mExclusiveGroupMemberFeIds;
|
||||
public Set<Integer> getExclusiveGroupMemberFeHandles() {
|
||||
return mExclusiveGroupMemberHandles;
|
||||
}
|
||||
|
||||
/**
|
||||
* Add one id into the exclusive group member id collection.
|
||||
* Add one handle into the exclusive group member handle collection.
|
||||
*
|
||||
* @param id the id to be added.
|
||||
* @param handle the handle to be added.
|
||||
*/
|
||||
public void addExclusiveGroupMemberFeId(int id) {
|
||||
mExclusiveGroupMemberFeIds.add(id);
|
||||
public void addExclusiveGroupMemberFeHandle(int handle) {
|
||||
mExclusiveGroupMemberHandles.add(handle);
|
||||
}
|
||||
|
||||
/**
|
||||
* Add one id collection to the exclusive group member id collection.
|
||||
* Add one handle collection to the exclusive group member handle collection.
|
||||
*
|
||||
* @param ids the id collection to be added.
|
||||
* @param handles the handle collection to be added.
|
||||
*/
|
||||
public void addExclusiveGroupMemberFeIds(Collection<Integer> ids) {
|
||||
mExclusiveGroupMemberFeIds.addAll(ids);
|
||||
public void addExclusiveGroupMemberFeHandles(Collection<Integer> handles) {
|
||||
mExclusiveGroupMemberHandles.addAll(handles);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -85,15 +85,15 @@ public final class FrontendResource extends TunerResourceBasic {
|
||||
*
|
||||
* @param id the id to be removed.
|
||||
*/
|
||||
public void removeExclusiveGroupMemberFeId(int id) {
|
||||
mExclusiveGroupMemberFeIds.remove(id);
|
||||
public void removeExclusiveGroupMemberFeId(int handle) {
|
||||
mExclusiveGroupMemberHandles.remove(handle);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "FrontendResource[id=" + this.mId + ", type=" + this.mType
|
||||
+ ", exclusiveGId=" + this.mExclusiveGroupId + ", exclusiveGMemeberIds="
|
||||
+ this.mExclusiveGroupMemberFeIds
|
||||
return "FrontendResource[handle=" + this.mHandle + ", type=" + this.mType
|
||||
+ ", exclusiveGId=" + this.mExclusiveGroupId + ", exclusiveGMemeberHandles="
|
||||
+ this.mExclusiveGroupMemberHandles
|
||||
+ ", isInUse=" + this.mIsInUse + ", ownerClientId=" + this.mOwnerClientId + "]";
|
||||
}
|
||||
|
||||
@@ -104,8 +104,8 @@ public final class FrontendResource extends TunerResourceBasic {
|
||||
@Type private int mType;
|
||||
private int mExclusiveGroupId;
|
||||
|
||||
Builder(int id) {
|
||||
super(id);
|
||||
Builder(int handle) {
|
||||
super(handle);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -29,7 +29,7 @@ public final class LnbResource extends TunerResourceBasic {
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "LnbResource[id=" + this.mId
|
||||
return "LnbResource[handle=" + this.mHandle
|
||||
+ ", isInUse=" + this.mIsInUse + ", ownerClientId=" + this.mOwnerClientId + "]";
|
||||
}
|
||||
|
||||
@@ -38,8 +38,8 @@ public final class LnbResource extends TunerResourceBasic {
|
||||
*/
|
||||
public static class Builder extends TunerResourceBasic.Builder {
|
||||
|
||||
Builder(int id) {
|
||||
super(id);
|
||||
Builder(int handle) {
|
||||
super(handle);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -25,10 +25,10 @@ import static android.media.tv.tunerresourcemanager.TunerResourceManager.INVALID
|
||||
*/
|
||||
public class TunerResourceBasic {
|
||||
/**
|
||||
* Id of the current resource. Should not be changed and should be aligned with the driver level
|
||||
* implementation.
|
||||
* Handle of the current resource. Should not be changed and should be aligned with the driver
|
||||
* level implementation.
|
||||
*/
|
||||
final int mId;
|
||||
final int mHandle;
|
||||
|
||||
/**
|
||||
* If the current resource is in use.
|
||||
@@ -41,11 +41,11 @@ public class TunerResourceBasic {
|
||||
int mOwnerClientId = INVALID_OWNER_ID;
|
||||
|
||||
TunerResourceBasic(Builder builder) {
|
||||
this.mId = builder.mId;
|
||||
this.mHandle = builder.mHandle;
|
||||
}
|
||||
|
||||
public int getId() {
|
||||
return mId;
|
||||
public int getHandle() {
|
||||
return mHandle;
|
||||
}
|
||||
|
||||
public boolean isInUse() {
|
||||
@@ -78,10 +78,10 @@ public class TunerResourceBasic {
|
||||
* Builder class for {@link TunerResourceBasic}.
|
||||
*/
|
||||
public static class Builder {
|
||||
private final int mId;
|
||||
private final int mHandle;
|
||||
|
||||
Builder(int id) {
|
||||
this.mId = id;
|
||||
Builder(int handle) {
|
||||
this.mHandle = handle;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -190,13 +190,13 @@ public class TunerResourceManagerService extends SystemService implements IBinde
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setLnbInfoList(int[] lnbIds) throws RemoteException {
|
||||
public void setLnbInfoList(int[] lnbHandles) throws RemoteException {
|
||||
enforceTrmAccessPermission("setLnbInfoList");
|
||||
if (lnbIds == null) {
|
||||
throw new RemoteException("Lnb id list can't be null");
|
||||
if (lnbHandles == null) {
|
||||
throw new RemoteException("Lnb handle list can't be null");
|
||||
}
|
||||
synchronized (mLock) {
|
||||
setLnbInfoListInternal(lnbIds);
|
||||
setLnbInfoListInternal(lnbHandles);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -214,7 +214,7 @@ public class TunerResourceManagerService extends SystemService implements IBinde
|
||||
+ request.getClientId());
|
||||
}
|
||||
// If the request client is holding or sharing a frontend, throw an exception.
|
||||
if (!getClientProfile(request.getClientId()).getInUseFrontendIds().isEmpty()) {
|
||||
if (!getClientProfile(request.getClientId()).getInUseFrontendHandles().isEmpty()) {
|
||||
throw new RemoteException("Release frontend before requesting another one. "
|
||||
+ "Client id: " + request.getClientId());
|
||||
}
|
||||
@@ -235,7 +235,7 @@ public class TunerResourceManagerService extends SystemService implements IBinde
|
||||
throw new RemoteException("Request to share frontend with an unregistered "
|
||||
+ "client:" + targetClientId);
|
||||
}
|
||||
if (getClientProfile(targetClientId).getInUseFrontendIds().isEmpty()) {
|
||||
if (getClientProfile(targetClientId).getInUseFrontendHandles().isEmpty()) {
|
||||
throw new RemoteException("Request to share frontend with a client that has no "
|
||||
+ "frontend resources. Target client id:" + targetClientId);
|
||||
}
|
||||
@@ -323,8 +323,7 @@ public class TunerResourceManagerService extends SystemService implements IBinde
|
||||
throw new RemoteException("Release frontend from unregistered client:"
|
||||
+ clientId);
|
||||
}
|
||||
int frontendId = getResourceIdFromHandle(frontendHandle);
|
||||
FrontendResource fe = getFrontendResource(frontendId);
|
||||
FrontendResource fe = getFrontendResource(frontendHandle);
|
||||
if (fe == null) {
|
||||
throw new RemoteException("Releasing frontend does not exist.");
|
||||
}
|
||||
@@ -388,8 +387,7 @@ public class TunerResourceManagerService extends SystemService implements IBinde
|
||||
if (!checkClientExists(clientId)) {
|
||||
throw new RemoteException("Release lnb from unregistered client:" + clientId);
|
||||
}
|
||||
int lnbId = getResourceIdFromHandle(lnbHandle);
|
||||
LnbResource lnb = getLnbResource(lnbId);
|
||||
LnbResource lnb = getLnbResource(lnbHandle);
|
||||
if (lnb == null) {
|
||||
throw new RemoteException("Releasing lnb does not exist.");
|
||||
}
|
||||
@@ -518,18 +516,18 @@ public class TunerResourceManagerService extends SystemService implements IBinde
|
||||
// A set to record the frontends pending on updating. Ids will be removed
|
||||
// from this set once its updating finished. Any frontend left in this set when all
|
||||
// the updates are done will be removed from mFrontendResources.
|
||||
Set<Integer> updatingFrontendIds = new HashSet<>(getFrontendResources().keySet());
|
||||
Set<Integer> updatingFrontendHandles = new HashSet<>(getFrontendResources().keySet());
|
||||
|
||||
// Update frontendResources map and other mappings accordingly
|
||||
for (int i = 0; i < infos.length; i++) {
|
||||
if (getFrontendResource(infos[i].getId()) != null) {
|
||||
if (getFrontendResource(infos[i].getHandle()) != null) {
|
||||
if (DEBUG) {
|
||||
Slog.d(TAG, "Frontend id=" + infos[i].getId() + "exists.");
|
||||
Slog.d(TAG, "Frontend handle=" + infos[i].getHandle() + "exists.");
|
||||
}
|
||||
updatingFrontendIds.remove(infos[i].getId());
|
||||
updatingFrontendHandles.remove(infos[i].getHandle());
|
||||
} else {
|
||||
// Add a new fe resource
|
||||
FrontendResource newFe = new FrontendResource.Builder(infos[i].getId())
|
||||
FrontendResource newFe = new FrontendResource.Builder(infos[i].getHandle())
|
||||
.type(infos[i].getFrontendType())
|
||||
.exclusiveGroupId(infos[i].getExclusiveGroupId())
|
||||
.build();
|
||||
@@ -537,41 +535,41 @@ public class TunerResourceManagerService extends SystemService implements IBinde
|
||||
}
|
||||
}
|
||||
|
||||
for (int removingId : updatingFrontendIds) {
|
||||
for (int removingHandle : updatingFrontendHandles) {
|
||||
// update the exclusive group id member list
|
||||
removeFrontendResource(removingId);
|
||||
removeFrontendResource(removingHandle);
|
||||
}
|
||||
}
|
||||
|
||||
@VisibleForTesting
|
||||
protected void setLnbInfoListInternal(int[] lnbIds) {
|
||||
protected void setLnbInfoListInternal(int[] lnbHandles) {
|
||||
if (DEBUG) {
|
||||
for (int i = 0; i < lnbIds.length; i++) {
|
||||
Slog.d(TAG, "updateLnbInfo(lnbId=" + lnbIds[i] + ")");
|
||||
for (int i = 0; i < lnbHandles.length; i++) {
|
||||
Slog.d(TAG, "updateLnbInfo(lnbHanle=" + lnbHandles[i] + ")");
|
||||
}
|
||||
}
|
||||
|
||||
// A set to record the Lnbs pending on updating. Ids will be removed
|
||||
// A set to record the Lnbs pending on updating. Handles will be removed
|
||||
// from this set once its updating finished. Any lnb left in this set when all
|
||||
// the updates are done will be removed from mLnbResources.
|
||||
Set<Integer> updatingLnbIds = new HashSet<>(getLnbResources().keySet());
|
||||
Set<Integer> updatingLnbHandles = new HashSet<>(getLnbResources().keySet());
|
||||
|
||||
// Update lnbResources map and other mappings accordingly
|
||||
for (int i = 0; i < lnbIds.length; i++) {
|
||||
if (getLnbResource(lnbIds[i]) != null) {
|
||||
for (int i = 0; i < lnbHandles.length; i++) {
|
||||
if (getLnbResource(lnbHandles[i]) != null) {
|
||||
if (DEBUG) {
|
||||
Slog.d(TAG, "Lnb id=" + lnbIds[i] + "exists.");
|
||||
Slog.d(TAG, "Lnb handle=" + lnbHandles[i] + "exists.");
|
||||
}
|
||||
updatingLnbIds.remove(lnbIds[i]);
|
||||
updatingLnbHandles.remove(lnbHandles[i]);
|
||||
} else {
|
||||
// Add a new lnb resource
|
||||
LnbResource newLnb = new LnbResource.Builder(lnbIds[i]).build();
|
||||
LnbResource newLnb = new LnbResource.Builder(lnbHandles[i]).build();
|
||||
addLnbResource(newLnb);
|
||||
}
|
||||
}
|
||||
|
||||
for (int removingId : updatingLnbIds) {
|
||||
removeLnbResource(removingId);
|
||||
for (int removingHandle : updatingLnbHandles) {
|
||||
removeLnbResource(removingHandle);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -613,28 +611,29 @@ public class TunerResourceManagerService extends SystemService implements IBinde
|
||||
|
||||
frontendHandle[0] = TunerResourceManager.INVALID_RESOURCE_HANDLE;
|
||||
ClientProfile requestClient = getClientProfile(request.getClientId());
|
||||
int grantingFrontendId = -1;
|
||||
int inUseLowestPriorityFrId = -1;
|
||||
int grantingFrontendHandle = TunerResourceManager.INVALID_RESOURCE_HANDLE;
|
||||
int inUseLowestPriorityFrHandle = TunerResourceManager.INVALID_RESOURCE_HANDLE;
|
||||
// Priority max value is 1000
|
||||
int currentLowestPriority = MAX_CLIENT_PRIORITY + 1;
|
||||
for (FrontendResource fr : getFrontendResources().values()) {
|
||||
if (fr.getType() == request.getFrontendType()) {
|
||||
if (!fr.isInUse()) {
|
||||
// Grant unused frontend with no exclusive group members first.
|
||||
if (fr.getExclusiveGroupMemberFeIds().isEmpty()) {
|
||||
grantingFrontendId = fr.getId();
|
||||
if (fr.getExclusiveGroupMemberFeHandles().isEmpty()) {
|
||||
grantingFrontendHandle = fr.getHandle();
|
||||
break;
|
||||
} else if (grantingFrontendId < 0) {
|
||||
} else if (grantingFrontendHandle
|
||||
== TunerResourceManager.INVALID_RESOURCE_HANDLE) {
|
||||
// Grant the unused frontend with lower id first if all the unused
|
||||
// frontends have exclusive group members.
|
||||
grantingFrontendId = fr.getId();
|
||||
grantingFrontendHandle = fr.getHandle();
|
||||
}
|
||||
} else if (grantingFrontendId < 0) {
|
||||
} 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());
|
||||
if (currentLowestPriority > priority) {
|
||||
inUseLowestPriorityFrId = fr.getId();
|
||||
inUseLowestPriorityFrHandle = fr.getHandle();
|
||||
currentLowestPriority = priority;
|
||||
}
|
||||
}
|
||||
@@ -642,23 +641,24 @@ public class TunerResourceManagerService extends SystemService implements IBinde
|
||||
}
|
||||
|
||||
// Grant frontend when there is unused resource.
|
||||
if (grantingFrontendId > -1) {
|
||||
frontendHandle[0] = generateResourceHandle(
|
||||
TunerResourceManager.TUNER_RESOURCE_TYPE_FRONTEND, grantingFrontendId);
|
||||
updateFrontendClientMappingOnNewGrant(grantingFrontendId, request.getClientId());
|
||||
if (grantingFrontendHandle != TunerResourceManager.INVALID_RESOURCE_HANDLE) {
|
||||
frontendHandle[0] = grantingFrontendHandle;
|
||||
updateFrontendClientMappingOnNewGrant(grantingFrontendHandle, request.getClientId());
|
||||
return true;
|
||||
}
|
||||
|
||||
// When all the resources are occupied, grant the lowest priority resource if the
|
||||
// request client has higher priority.
|
||||
if (inUseLowestPriorityFrId > -1 && (requestClient.getPriority() > currentLowestPriority)) {
|
||||
if (!reclaimResource(getFrontendResource(inUseLowestPriorityFrId).getOwnerClientId(),
|
||||
if (inUseLowestPriorityFrHandle != TunerResourceManager.INVALID_RESOURCE_HANDLE
|
||||
&& (requestClient.getPriority() > currentLowestPriority)) {
|
||||
if (!reclaimResource(
|
||||
getFrontendResource(inUseLowestPriorityFrHandle).getOwnerClientId(),
|
||||
TunerResourceManager.TUNER_RESOURCE_TYPE_FRONTEND)) {
|
||||
return false;
|
||||
}
|
||||
frontendHandle[0] = generateResourceHandle(
|
||||
TunerResourceManager.TUNER_RESOURCE_TYPE_FRONTEND, inUseLowestPriorityFrId);
|
||||
updateFrontendClientMappingOnNewGrant(inUseLowestPriorityFrId, request.getClientId());
|
||||
frontendHandle[0] = inUseLowestPriorityFrHandle;
|
||||
updateFrontendClientMappingOnNewGrant(
|
||||
inUseLowestPriorityFrHandle, request.getClientId());
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -670,7 +670,7 @@ public class TunerResourceManagerService extends SystemService implements IBinde
|
||||
if (DEBUG) {
|
||||
Slog.d(TAG, "shareFrontend from " + selfClientId + " with " + targetClientId);
|
||||
}
|
||||
for (int feId : getClientProfile(targetClientId).getInUseFrontendIds()) {
|
||||
for (int feId : getClientProfile(targetClientId).getInUseFrontendHandles()) {
|
||||
getClientProfile(selfClientId).useFrontend(feId);
|
||||
}
|
||||
getClientProfile(targetClientId).shareFrontend(selfClientId);
|
||||
@@ -684,45 +684,43 @@ public class TunerResourceManagerService extends SystemService implements IBinde
|
||||
|
||||
lnbHandle[0] = TunerResourceManager.INVALID_RESOURCE_HANDLE;
|
||||
ClientProfile requestClient = getClientProfile(request.getClientId());
|
||||
int grantingLnbId = -1;
|
||||
int inUseLowestPriorityLnbId = -1;
|
||||
int grantingLnbHandle = TunerResourceManager.INVALID_RESOURCE_HANDLE;
|
||||
int inUseLowestPriorityLnbHandle = TunerResourceManager.INVALID_RESOURCE_HANDLE;
|
||||
// Priority max value is 1000
|
||||
int currentLowestPriority = MAX_CLIENT_PRIORITY + 1;
|
||||
for (LnbResource lnb : getLnbResources().values()) {
|
||||
if (!lnb.isInUse()) {
|
||||
// Grant the unused lnb with lower id first
|
||||
grantingLnbId = lnb.getId();
|
||||
// Grant the unused lnb with lower handle first
|
||||
grantingLnbHandle = lnb.getHandle();
|
||||
break;
|
||||
} 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());
|
||||
if (currentLowestPriority > priority) {
|
||||
inUseLowestPriorityLnbId = lnb.getId();
|
||||
inUseLowestPriorityLnbHandle = lnb.getHandle();
|
||||
currentLowestPriority = priority;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Grant Lnb when there is unused resource.
|
||||
if (grantingLnbId > -1) {
|
||||
lnbHandle[0] = generateResourceHandle(
|
||||
TunerResourceManager.TUNER_RESOURCE_TYPE_LNB, grantingLnbId);
|
||||
updateLnbClientMappingOnNewGrant(grantingLnbId, request.getClientId());
|
||||
if (grantingLnbHandle > -1) {
|
||||
lnbHandle[0] = grantingLnbHandle;
|
||||
updateLnbClientMappingOnNewGrant(grantingLnbHandle, request.getClientId());
|
||||
return true;
|
||||
}
|
||||
|
||||
// When all the resources are occupied, grant the lowest priority resource if the
|
||||
// request client has higher priority.
|
||||
if (inUseLowestPriorityLnbId > -1
|
||||
if (inUseLowestPriorityLnbHandle > TunerResourceManager.INVALID_RESOURCE_HANDLE
|
||||
&& (requestClient.getPriority() > currentLowestPriority)) {
|
||||
if (!reclaimResource(getLnbResource(inUseLowestPriorityLnbId).getOwnerClientId(),
|
||||
if (!reclaimResource(getLnbResource(inUseLowestPriorityLnbHandle).getOwnerClientId(),
|
||||
TunerResourceManager.TUNER_RESOURCE_TYPE_LNB)) {
|
||||
return false;
|
||||
}
|
||||
lnbHandle[0] = generateResourceHandle(
|
||||
TunerResourceManager.TUNER_RESOURCE_TYPE_LNB, inUseLowestPriorityLnbId);
|
||||
updateLnbClientMappingOnNewGrant(inUseLowestPriorityLnbId, request.getClientId());
|
||||
lnbHandle[0] = inUseLowestPriorityLnbHandle;
|
||||
updateLnbClientMappingOnNewGrant(inUseLowestPriorityLnbHandle, request.getClientId());
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -807,7 +805,7 @@ public class TunerResourceManagerService extends SystemService implements IBinde
|
||||
@VisibleForTesting
|
||||
protected void releaseFrontendInternal(FrontendResource fe, int clientId) {
|
||||
if (DEBUG) {
|
||||
Slog.d(TAG, "releaseFrontend(id=" + fe.getId() + ", clientId=" + clientId + " )");
|
||||
Slog.d(TAG, "releaseFrontend(id=" + fe.getHandle() + ", clientId=" + clientId + " )");
|
||||
}
|
||||
if (clientId == fe.getOwnerClientId()) {
|
||||
ClientProfile ownerClient = getClientProfile(fe.getOwnerClientId());
|
||||
@@ -821,7 +819,7 @@ public class TunerResourceManagerService extends SystemService implements IBinde
|
||||
@VisibleForTesting
|
||||
protected void releaseLnbInternal(LnbResource lnb) {
|
||||
if (DEBUG) {
|
||||
Slog.d(TAG, "releaseLnb(lnbId=" + lnb.getId() + ")");
|
||||
Slog.d(TAG, "releaseLnb(lnbHandle=" + lnb.getHandle() + ")");
|
||||
}
|
||||
updateLnbClientMappingOnRelease(lnb);
|
||||
}
|
||||
@@ -965,28 +963,28 @@ public class TunerResourceManagerService extends SystemService implements IBinde
|
||||
return false;
|
||||
}
|
||||
|
||||
private void updateFrontendClientMappingOnNewGrant(int grantingId, int ownerClientId) {
|
||||
FrontendResource grantingFrontend = getFrontendResource(grantingId);
|
||||
private void updateFrontendClientMappingOnNewGrant(int grantingHandle, int ownerClientId) {
|
||||
FrontendResource grantingFrontend = getFrontendResource(grantingHandle);
|
||||
ClientProfile ownerProfile = getClientProfile(ownerClientId);
|
||||
grantingFrontend.setOwner(ownerClientId);
|
||||
ownerProfile.useFrontend(grantingId);
|
||||
for (int exclusiveGroupMember : grantingFrontend.getExclusiveGroupMemberFeIds()) {
|
||||
ownerProfile.useFrontend(grantingHandle);
|
||||
for (int exclusiveGroupMember : grantingFrontend.getExclusiveGroupMemberFeHandles()) {
|
||||
getFrontendResource(exclusiveGroupMember).setOwner(ownerClientId);
|
||||
ownerProfile.useFrontend(exclusiveGroupMember);
|
||||
}
|
||||
}
|
||||
|
||||
private void updateLnbClientMappingOnNewGrant(int grantingId, int ownerClientId) {
|
||||
LnbResource grantingLnb = getLnbResource(grantingId);
|
||||
private void updateLnbClientMappingOnNewGrant(int grantingHandle, int ownerClientId) {
|
||||
LnbResource grantingLnb = getLnbResource(grantingHandle);
|
||||
ClientProfile ownerProfile = getClientProfile(ownerClientId);
|
||||
grantingLnb.setOwner(ownerClientId);
|
||||
ownerProfile.useLnb(grantingId);
|
||||
ownerProfile.useLnb(grantingHandle);
|
||||
}
|
||||
|
||||
private void updateLnbClientMappingOnRelease(@NonNull LnbResource releasingLnb) {
|
||||
ClientProfile ownerProfile = getClientProfile(releasingLnb.getOwnerClientId());
|
||||
releasingLnb.removeOwner();
|
||||
ownerProfile.releaseLnb(releasingLnb.getId());
|
||||
ownerProfile.releaseLnb(releasingLnb.getHandle());
|
||||
}
|
||||
|
||||
private void updateCasClientMappingOnNewGrant(int grantingId, int ownerClientId) {
|
||||
@@ -1015,8 +1013,8 @@ public class TunerResourceManagerService extends SystemService implements IBinde
|
||||
|
||||
@VisibleForTesting
|
||||
@Nullable
|
||||
protected FrontendResource getFrontendResource(int frontendId) {
|
||||
return mFrontendResources.get(frontendId);
|
||||
protected FrontendResource getFrontendResource(int frontendHandle) {
|
||||
return mFrontendResources.get(frontendHandle);
|
||||
}
|
||||
|
||||
@VisibleForTesting
|
||||
@@ -1028,22 +1026,22 @@ public class TunerResourceManagerService extends SystemService implements IBinde
|
||||
// Update the exclusive group member list in all the existing Frontend resource
|
||||
for (FrontendResource fe : getFrontendResources().values()) {
|
||||
if (fe.getExclusiveGroupId() == newFe.getExclusiveGroupId()) {
|
||||
newFe.addExclusiveGroupMemberFeId(fe.getId());
|
||||
newFe.addExclusiveGroupMemberFeIds(fe.getExclusiveGroupMemberFeIds());
|
||||
for (int excGroupmemberFeId : fe.getExclusiveGroupMemberFeIds()) {
|
||||
getFrontendResource(excGroupmemberFeId)
|
||||
.addExclusiveGroupMemberFeId(newFe.getId());
|
||||
newFe.addExclusiveGroupMemberFeHandle(fe.getHandle());
|
||||
newFe.addExclusiveGroupMemberFeHandles(fe.getExclusiveGroupMemberFeHandles());
|
||||
for (int excGroupmemberFeHandle : fe.getExclusiveGroupMemberFeHandles()) {
|
||||
getFrontendResource(excGroupmemberFeHandle)
|
||||
.addExclusiveGroupMemberFeHandle(newFe.getHandle());
|
||||
}
|
||||
fe.addExclusiveGroupMemberFeId(newFe.getId());
|
||||
fe.addExclusiveGroupMemberFeHandle(newFe.getHandle());
|
||||
break;
|
||||
}
|
||||
}
|
||||
// Update resource list and available id list
|
||||
mFrontendResources.put(newFe.getId(), newFe);
|
||||
mFrontendResources.put(newFe.getHandle(), newFe);
|
||||
}
|
||||
|
||||
private void removeFrontendResource(int removingId) {
|
||||
FrontendResource fe = getFrontendResource(removingId);
|
||||
private void removeFrontendResource(int removingHandle) {
|
||||
FrontendResource fe = getFrontendResource(removingHandle);
|
||||
if (fe == null) {
|
||||
return;
|
||||
}
|
||||
@@ -1054,17 +1052,17 @@ public class TunerResourceManagerService extends SystemService implements IBinde
|
||||
}
|
||||
clearFrontendAndClientMapping(ownerClient);
|
||||
}
|
||||
for (int excGroupmemberFeId : fe.getExclusiveGroupMemberFeIds()) {
|
||||
getFrontendResource(excGroupmemberFeId)
|
||||
.removeExclusiveGroupMemberFeId(fe.getId());
|
||||
for (int excGroupmemberFeHandle : fe.getExclusiveGroupMemberFeHandles()) {
|
||||
getFrontendResource(excGroupmemberFeHandle)
|
||||
.removeExclusiveGroupMemberFeId(fe.getHandle());
|
||||
}
|
||||
mFrontendResources.remove(removingId);
|
||||
mFrontendResources.remove(removingHandle);
|
||||
}
|
||||
|
||||
@VisibleForTesting
|
||||
@Nullable
|
||||
protected LnbResource getLnbResource(int lnbId) {
|
||||
return mLnbResources.get(lnbId);
|
||||
protected LnbResource getLnbResource(int lnbHandle) {
|
||||
return mLnbResources.get(lnbHandle);
|
||||
}
|
||||
|
||||
@VisibleForTesting
|
||||
@@ -1074,18 +1072,18 @@ public class TunerResourceManagerService extends SystemService implements IBinde
|
||||
|
||||
private void addLnbResource(LnbResource newLnb) {
|
||||
// Update resource list and available id list
|
||||
mLnbResources.put(newLnb.getId(), newLnb);
|
||||
mLnbResources.put(newLnb.getHandle(), newLnb);
|
||||
}
|
||||
|
||||
private void removeLnbResource(int removingId) {
|
||||
LnbResource lnb = getLnbResource(removingId);
|
||||
private void removeLnbResource(int removingHandle) {
|
||||
LnbResource lnb = getLnbResource(removingHandle);
|
||||
if (lnb == null) {
|
||||
return;
|
||||
}
|
||||
if (lnb.isInUse()) {
|
||||
releaseLnbInternal(lnb);
|
||||
}
|
||||
mLnbResources.remove(removingId);
|
||||
mLnbResources.remove(removingHandle);
|
||||
}
|
||||
|
||||
@VisibleForTesting
|
||||
@@ -1143,7 +1141,7 @@ public class TunerResourceManagerService extends SystemService implements IBinde
|
||||
}
|
||||
|
||||
private void clearFrontendAndClientMapping(ClientProfile profile) {
|
||||
for (Integer feId : profile.getInUseFrontendIds()) {
|
||||
for (Integer feId : profile.getInUseFrontendHandles()) {
|
||||
FrontendResource fe = getFrontendResource(feId);
|
||||
if (fe.getOwnerClientId() == profile.getId()) {
|
||||
fe.removeOwner();
|
||||
@@ -1156,8 +1154,8 @@ public class TunerResourceManagerService extends SystemService implements IBinde
|
||||
|
||||
private void clearAllResourcesAndClientMapping(ClientProfile profile) {
|
||||
// Clear Lnb
|
||||
for (Integer lnbId : profile.getInUseLnbIds()) {
|
||||
getLnbResource(lnbId).removeOwner();
|
||||
for (Integer lnbHandle : profile.getInUseLnbHandles()) {
|
||||
getLnbResource(lnbHandle).removeOwner();
|
||||
}
|
||||
// Clear Cas
|
||||
if (profile.getInUseCasSystemId() != ClientProfile.INVALID_RESOURCE_ID) {
|
||||
|
||||
@@ -86,7 +86,7 @@ public class TunerResourceManagerServiceTest {
|
||||
return (actual == null) && (expected == null);
|
||||
}
|
||||
|
||||
return actual.getId() == expected.getId()
|
||||
return actual.getHandle() == expected.getHandle()
|
||||
&& actual.getType() == expected.getFrontendType()
|
||||
&& actual.getExclusiveGroupId() == expected.getExclusiveGroupId();
|
||||
}, "is correctly configured from ");
|
||||
@@ -119,12 +119,12 @@ public class TunerResourceManagerServiceTest {
|
||||
Map<Integer, FrontendResource> resources =
|
||||
mTunerResourceManagerService.getFrontendResources();
|
||||
for (int id = 0; id < infos.length; id++) {
|
||||
assertThat(resources.get(infos[id].getId())
|
||||
.getExclusiveGroupMemberFeIds().size()).isEqualTo(0);
|
||||
assertThat(resources.get(infos[id].getHandle())
|
||||
.getExclusiveGroupMemberFeHandles().size()).isEqualTo(0);
|
||||
}
|
||||
for (int id = 0; id < infos.length; id++) {
|
||||
assertThat(resources.get(infos[id].getId())
|
||||
.getExclusiveGroupMemberFeIds().size()).isEqualTo(0);
|
||||
assertThat(resources.get(infos[id].getHandle())
|
||||
.getExclusiveGroupMemberFeHandles().size()).isEqualTo(0);
|
||||
}
|
||||
assertThat(resources.values()).comparingElementsUsing(FR_TFI_COMPARE)
|
||||
.containsExactlyElementsIn(Arrays.asList(infos));
|
||||
@@ -149,10 +149,10 @@ public class TunerResourceManagerServiceTest {
|
||||
assertThat(resources.values()).comparingElementsUsing(FR_TFI_COMPARE)
|
||||
.containsExactlyElementsIn(Arrays.asList(infos));
|
||||
|
||||
assertThat(resources.get(0).getExclusiveGroupMemberFeIds()).isEmpty();
|
||||
assertThat(resources.get(1).getExclusiveGroupMemberFeIds()).containsExactly(2, 3);
|
||||
assertThat(resources.get(2).getExclusiveGroupMemberFeIds()).containsExactly(1, 3);
|
||||
assertThat(resources.get(3).getExclusiveGroupMemberFeIds()).containsExactly(1, 2);
|
||||
assertThat(resources.get(0).getExclusiveGroupMemberFeHandles()).isEmpty();
|
||||
assertThat(resources.get(1).getExclusiveGroupMemberFeHandles()).containsExactly(2, 3);
|
||||
assertThat(resources.get(2).getExclusiveGroupMemberFeHandles()).containsExactly(1, 3);
|
||||
assertThat(resources.get(3).getExclusiveGroupMemberFeHandles()).containsExactly(1, 2);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -195,8 +195,8 @@ public class TunerResourceManagerServiceTest {
|
||||
Map<Integer, FrontendResource> resources =
|
||||
mTunerResourceManagerService.getFrontendResources();
|
||||
for (int id = 0; id < infos1.length; id++) {
|
||||
assertThat(resources.get(infos1[id].getId())
|
||||
.getExclusiveGroupMemberFeIds().size()).isEqualTo(0);
|
||||
assertThat(resources.get(infos1[id].getHandle())
|
||||
.getExclusiveGroupMemberFeHandles().size()).isEqualTo(0);
|
||||
}
|
||||
assertThat(resources.values()).comparingElementsUsing(FR_TFI_COMPARE)
|
||||
.containsExactlyElementsIn(Arrays.asList(infos1));
|
||||
@@ -222,8 +222,8 @@ public class TunerResourceManagerServiceTest {
|
||||
Map<Integer, FrontendResource> resources =
|
||||
mTunerResourceManagerService.getFrontendResources();
|
||||
for (int id = 0; id < infos1.length; id++) {
|
||||
assertThat(resources.get(infos1[id].getId())
|
||||
.getExclusiveGroupMemberFeIds().size()).isEqualTo(0);
|
||||
assertThat(resources.get(infos1[id].getHandle())
|
||||
.getExclusiveGroupMemberFeHandles().size()).isEqualTo(0);
|
||||
}
|
||||
assertThat(resources.values()).comparingElementsUsing(FR_TFI_COMPARE)
|
||||
.containsExactlyElementsIn(Arrays.asList(infos1));
|
||||
@@ -236,8 +236,7 @@ public class TunerResourceManagerServiceTest {
|
||||
int[] frontendHandle = new int[1];
|
||||
assertThat(mTunerResourceManagerService
|
||||
.requestFrontendInternal(request, frontendHandle)).isFalse();
|
||||
assertThat(mTunerResourceManagerService.getResourceIdFromHandle(frontendHandle[0]))
|
||||
.isEqualTo(TunerResourceManager.INVALID_RESOURCE_HANDLE);
|
||||
assertThat(frontendHandle[0]).isEqualTo(TunerResourceManager.INVALID_RESOURCE_HANDLE);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -260,8 +259,7 @@ public class TunerResourceManagerServiceTest {
|
||||
int[] frontendHandle = new int[1];
|
||||
assertThat(mTunerResourceManagerService
|
||||
.requestFrontendInternal(request, frontendHandle)).isFalse();
|
||||
assertThat(mTunerResourceManagerService.getResourceIdFromHandle(frontendHandle[0]))
|
||||
.isEqualTo(TunerResourceManager.INVALID_RESOURCE_HANDLE);
|
||||
assertThat(frontendHandle[0]).isEqualTo(TunerResourceManager.INVALID_RESOURCE_HANDLE);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -275,12 +273,18 @@ public class TunerResourceManagerServiceTest {
|
||||
|
||||
// Init frontend resources.
|
||||
TunerFrontendInfo[] infos = new TunerFrontendInfo[3];
|
||||
infos[0] =
|
||||
new TunerFrontendInfo(0 /*id*/, FrontendSettings.TYPE_DVBT, 0 /*exclusiveGroupId*/);
|
||||
infos[1] =
|
||||
new TunerFrontendInfo(1 /*id*/, FrontendSettings.TYPE_DVBT, 1 /*exclusiveGroupId*/);
|
||||
infos[2] =
|
||||
new TunerFrontendInfo(2 /*id*/, FrontendSettings.TYPE_DVBS, 1 /*exclusiveGroupId*/);
|
||||
infos[0] = new TunerFrontendInfo(
|
||||
0 /*handle*/,
|
||||
FrontendSettings.TYPE_DVBT,
|
||||
0 /*exclusiveGroupId*/);
|
||||
infos[1] = new TunerFrontendInfo(
|
||||
1 /*handle*/,
|
||||
FrontendSettings.TYPE_DVBT,
|
||||
1 /*exclusiveGroupId*/);
|
||||
infos[2] = new TunerFrontendInfo(
|
||||
2 /*handle*/,
|
||||
FrontendSettings.TYPE_DVBS,
|
||||
1 /*exclusiveGroupId*/);
|
||||
mTunerResourceManagerService.setFrontendInfoListInternal(infos);
|
||||
|
||||
TunerFrontendRequest request =
|
||||
@@ -288,8 +292,7 @@ public class TunerResourceManagerServiceTest {
|
||||
int[] frontendHandle = new int[1];
|
||||
assertThat(mTunerResourceManagerService
|
||||
.requestFrontendInternal(request, frontendHandle)).isTrue();
|
||||
assertThat(mTunerResourceManagerService.getResourceIdFromHandle(frontendHandle[0]))
|
||||
.isEqualTo(0);
|
||||
assertThat(frontendHandle[0]).isEqualTo(0);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -309,12 +312,18 @@ public class TunerResourceManagerServiceTest {
|
||||
|
||||
// Init frontend resources.
|
||||
TunerFrontendInfo[] infos = new TunerFrontendInfo[3];
|
||||
infos[0] =
|
||||
new TunerFrontendInfo(0 /*id*/, FrontendSettings.TYPE_DVBT, 0 /*exclusiveGroupId*/);
|
||||
infos[1] =
|
||||
new TunerFrontendInfo(1 /*id*/, FrontendSettings.TYPE_DVBT, 1 /*exclusiveGroupId*/);
|
||||
infos[2] =
|
||||
new TunerFrontendInfo(2 /*id*/, FrontendSettings.TYPE_DVBS, 1 /*exclusiveGroupId*/);
|
||||
infos[0] = new TunerFrontendInfo(
|
||||
0 /*handle*/,
|
||||
FrontendSettings.TYPE_DVBT,
|
||||
0 /*exclusiveGroupId*/);
|
||||
infos[1] = new TunerFrontendInfo(
|
||||
1 /*handle*/,
|
||||
FrontendSettings.TYPE_DVBT,
|
||||
1 /*exclusiveGroupId*/);
|
||||
infos[2] = new TunerFrontendInfo(
|
||||
2 /*handle*/,
|
||||
FrontendSettings.TYPE_DVBS,
|
||||
1 /*exclusiveGroupId*/);
|
||||
mTunerResourceManagerService.setFrontendInfoListInternal(infos);
|
||||
|
||||
int[] frontendHandle = new int[1];
|
||||
@@ -322,19 +331,17 @@ public class TunerResourceManagerServiceTest {
|
||||
new TunerFrontendRequest(clientId1[0] /*clientId*/, FrontendSettings.TYPE_DVBT);
|
||||
assertThat(mTunerResourceManagerService
|
||||
.requestFrontendInternal(request, frontendHandle)).isTrue();
|
||||
assertThat(mTunerResourceManagerService.getResourceIdFromHandle(frontendHandle[0]))
|
||||
.isEqualTo(infos[0].getId());
|
||||
assertThat(frontendHandle[0]).isEqualTo(infos[0].getHandle());
|
||||
|
||||
request =
|
||||
new TunerFrontendRequest(clientId0[0] /*clientId*/, FrontendSettings.TYPE_DVBT);
|
||||
assertThat(mTunerResourceManagerService
|
||||
.requestFrontendInternal(request, frontendHandle)).isTrue();
|
||||
assertThat(mTunerResourceManagerService.getResourceIdFromHandle(frontendHandle[0]))
|
||||
.isEqualTo(infos[1].getId());
|
||||
assertThat(mTunerResourceManagerService.getFrontendResource(infos[1].getId())
|
||||
.isInUse()).isTrue();
|
||||
assertThat(mTunerResourceManagerService.getFrontendResource(infos[2].getId())
|
||||
.isInUse()).isTrue();
|
||||
assertThat(frontendHandle[0]).isEqualTo(infos[1].getHandle());
|
||||
assertThat(mTunerResourceManagerService.getFrontendResource(infos[1].getHandle()).isInUse())
|
||||
.isTrue();
|
||||
assertThat(mTunerResourceManagerService.getFrontendResource(infos[2].getHandle()).isInUse())
|
||||
.isTrue();
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -424,25 +431,23 @@ public class TunerResourceManagerServiceTest {
|
||||
int[] frontendHandle = new int[1];
|
||||
assertThat(mTunerResourceManagerService
|
||||
.requestFrontendInternal(request, frontendHandle)).isTrue();
|
||||
assertThat(mTunerResourceManagerService.getResourceIdFromHandle(frontendHandle[0]))
|
||||
.isEqualTo(infos[0].getId());
|
||||
assertThat(frontendHandle[0]).isEqualTo(infos[0].getHandle());
|
||||
assertThat(mTunerResourceManagerService.getClientProfile(clientId0[0])
|
||||
.getInUseFrontendIds()).isEqualTo(
|
||||
new HashSet<Integer>(Arrays.asList(infos[0].getId(), infos[1].getId())));
|
||||
.getInUseFrontendHandles()).isEqualTo(new HashSet<Integer>(Arrays.asList(
|
||||
infos[0].getHandle(), infos[1].getHandle())));
|
||||
|
||||
request =
|
||||
new TunerFrontendRequest(clientId1[0] /*clientId*/, FrontendSettings.TYPE_DVBS);
|
||||
assertThat(mTunerResourceManagerService
|
||||
.requestFrontendInternal(request, frontendHandle)).isTrue();
|
||||
assertThat(mTunerResourceManagerService.getResourceIdFromHandle(frontendHandle[0]))
|
||||
.isEqualTo(infos[1].getId());
|
||||
assertThat(mTunerResourceManagerService.getFrontendResource(infos[0].getId())
|
||||
assertThat(frontendHandle[0]).isEqualTo(infos[1].getHandle());
|
||||
assertThat(mTunerResourceManagerService.getFrontendResource(infos[0].getHandle())
|
||||
.isInUse()).isTrue();
|
||||
assertThat(mTunerResourceManagerService.getFrontendResource(infos[1].getId())
|
||||
assertThat(mTunerResourceManagerService.getFrontendResource(infos[1].getHandle())
|
||||
.isInUse()).isTrue();
|
||||
assertThat(mTunerResourceManagerService.getFrontendResource(infos[0].getId())
|
||||
assertThat(mTunerResourceManagerService.getFrontendResource(infos[0].getHandle())
|
||||
.getOwnerClientId()).isEqualTo(clientId1[0]);
|
||||
assertThat(mTunerResourceManagerService.getFrontendResource(infos[1].getId())
|
||||
assertThat(mTunerResourceManagerService.getFrontendResource(infos[1].getHandle())
|
||||
.getOwnerClientId()).isEqualTo(clientId1[0]);
|
||||
assertThat(listener.isReclaimed()).isTrue();
|
||||
}
|
||||
@@ -471,20 +476,19 @@ public class TunerResourceManagerServiceTest {
|
||||
int[] frontendHandle = new int[1];
|
||||
assertThat(mTunerResourceManagerService
|
||||
.requestFrontendInternal(request, frontendHandle)).isTrue();
|
||||
int frontendId = mTunerResourceManagerService.getResourceIdFromHandle(frontendHandle[0]);
|
||||
assertThat(frontendId).isEqualTo(infos[0].getId());
|
||||
assertThat(frontendHandle[0]).isEqualTo(infos[0].getHandle());
|
||||
assertThat(mTunerResourceManagerService
|
||||
.getFrontendResource(infos[1].getId()).isInUse()).isTrue();
|
||||
.getFrontendResource(infos[1].getHandle()).isInUse()).isTrue();
|
||||
|
||||
// Release frontend
|
||||
mTunerResourceManagerService.releaseFrontendInternal(mTunerResourceManagerService
|
||||
.getFrontendResource(frontendId), clientId[0]);
|
||||
.getFrontendResource(frontendHandle[0]), clientId[0]);
|
||||
assertThat(mTunerResourceManagerService
|
||||
.getFrontendResource(frontendId).isInUse()).isFalse();
|
||||
.getFrontendResource(frontendHandle[0]).isInUse()).isFalse();
|
||||
assertThat(mTunerResourceManagerService
|
||||
.getFrontendResource(infos[1].getId()).isInUse()).isFalse();
|
||||
.getFrontendResource(infos[1].getHandle()).isInUse()).isFalse();
|
||||
assertThat(mTunerResourceManagerService
|
||||
.getClientProfile(clientId[0]).getInUseFrontendIds().size()).isEqualTo(0);
|
||||
.getClientProfile(clientId[0]).getInUseFrontendHandles().size()).isEqualTo(0);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -604,30 +608,28 @@ public class TunerResourceManagerServiceTest {
|
||||
.setPriority(clientPriorities[1]);
|
||||
|
||||
// Init lnb resources.
|
||||
int[] lnbIds = {1};
|
||||
mTunerResourceManagerService.setLnbInfoListInternal(lnbIds);
|
||||
int[] lnbHandles = {1};
|
||||
mTunerResourceManagerService.setLnbInfoListInternal(lnbHandles);
|
||||
|
||||
TunerLnbRequest request = new TunerLnbRequest(clientId0[0]);
|
||||
int[] lnbHandle = new int[1];
|
||||
assertThat(mTunerResourceManagerService
|
||||
.requestLnbInternal(request, lnbHandle)).isTrue();
|
||||
assertThat(mTunerResourceManagerService.getResourceIdFromHandle(lnbHandle[0]))
|
||||
.isEqualTo(lnbIds[0]);
|
||||
assertThat(mTunerResourceManagerService.getClientProfile(clientId0[0])
|
||||
.getInUseLnbIds()).isEqualTo(new HashSet<Integer>(Arrays.asList(lnbIds[0])));
|
||||
assertThat(lnbHandle[0]).isEqualTo(lnbHandles[0]);
|
||||
assertThat(mTunerResourceManagerService.getClientProfile(clientId0[0]).getInUseLnbHandles())
|
||||
.isEqualTo(new HashSet<Integer>(Arrays.asList(lnbHandles[0])));
|
||||
|
||||
request = new TunerLnbRequest(clientId1[0]);
|
||||
assertThat(mTunerResourceManagerService
|
||||
.requestLnbInternal(request, lnbHandle)).isTrue();
|
||||
assertThat(mTunerResourceManagerService.getResourceIdFromHandle(lnbHandle[0]))
|
||||
.isEqualTo(lnbIds[0]);
|
||||
assertThat(mTunerResourceManagerService.getLnbResource(lnbIds[0])
|
||||
assertThat(lnbHandle[0]).isEqualTo(lnbHandles[0]);
|
||||
assertThat(mTunerResourceManagerService.getLnbResource(lnbHandles[0])
|
||||
.isInUse()).isTrue();
|
||||
assertThat(mTunerResourceManagerService.getLnbResource(lnbIds[0])
|
||||
assertThat(mTunerResourceManagerService.getLnbResource(lnbHandles[0])
|
||||
.getOwnerClientId()).isEqualTo(clientId1[0]);
|
||||
assertThat(listener.isReclaimed()).isTrue();
|
||||
assertThat(mTunerResourceManagerService.getClientProfile(clientId0[0])
|
||||
.getInUseLnbIds().size()).isEqualTo(0);
|
||||
.getInUseLnbHandles().size()).isEqualTo(0);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -642,23 +644,22 @@ public class TunerResourceManagerServiceTest {
|
||||
assertThat(clientId[0]).isNotEqualTo(TunerResourceManagerService.INVALID_CLIENT_ID);
|
||||
|
||||
// Init lnb resources.
|
||||
int[] lnbIds = {0};
|
||||
mTunerResourceManagerService.setLnbInfoListInternal(lnbIds);
|
||||
int[] lnbHandles = {0};
|
||||
mTunerResourceManagerService.setLnbInfoListInternal(lnbHandles);
|
||||
|
||||
TunerLnbRequest request = new TunerLnbRequest(clientId[0]);
|
||||
int[] lnbHandle = new int[1];
|
||||
assertThat(mTunerResourceManagerService
|
||||
.requestLnbInternal(request, lnbHandle)).isTrue();
|
||||
int lnbId = mTunerResourceManagerService.getResourceIdFromHandle(lnbHandle[0]);
|
||||
assertThat(lnbId).isEqualTo(lnbIds[0]);
|
||||
assertThat(lnbHandle[0]).isEqualTo(lnbHandles[0]);
|
||||
|
||||
// Release lnb
|
||||
mTunerResourceManagerService.releaseLnbInternal(mTunerResourceManagerService
|
||||
.getLnbResource(lnbId));
|
||||
.getLnbResource(lnbHandle[0]));
|
||||
assertThat(mTunerResourceManagerService
|
||||
.getLnbResource(lnbId).isInUse()).isFalse();
|
||||
.getLnbResource(lnbHandle[0]).isInUse()).isFalse();
|
||||
assertThat(mTunerResourceManagerService
|
||||
.getClientProfile(clientId[0]).getInUseLnbIds().size()).isEqualTo(0);
|
||||
.getClientProfile(clientId[0]).getInUseLnbHandles().size()).isEqualTo(0);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -684,18 +685,17 @@ public class TunerResourceManagerServiceTest {
|
||||
int[] frontendHandle = new int[1];
|
||||
assertThat(mTunerResourceManagerService
|
||||
.requestFrontendInternal(request, frontendHandle)).isTrue();
|
||||
assertThat(mTunerResourceManagerService.getResourceIdFromHandle(frontendHandle[0]))
|
||||
.isEqualTo(infos[0].getId());
|
||||
assertThat(mTunerResourceManagerService.getFrontendResource(infos[0].getId())
|
||||
assertThat(frontendHandle[0]).isEqualTo(infos[0].getHandle());
|
||||
assertThat(mTunerResourceManagerService.getFrontendResource(infos[0].getHandle())
|
||||
.isInUse()).isTrue();
|
||||
assertThat(mTunerResourceManagerService.getFrontendResource(infos[1].getId())
|
||||
assertThat(mTunerResourceManagerService.getFrontendResource(infos[1].getHandle())
|
||||
.isInUse()).isTrue();
|
||||
|
||||
// Unregister client when using frontend
|
||||
mTunerResourceManagerService.unregisterClientProfileInternal(clientId[0]);
|
||||
assertThat(mTunerResourceManagerService.getFrontendResource(infos[0].getId())
|
||||
assertThat(mTunerResourceManagerService.getFrontendResource(infos[0].getHandle())
|
||||
.isInUse()).isFalse();
|
||||
assertThat(mTunerResourceManagerService.getFrontendResource(infos[1].getId())
|
||||
assertThat(mTunerResourceManagerService.getFrontendResource(infos[1].getHandle())
|
||||
.isInUse()).isFalse();
|
||||
assertThat(mTunerResourceManagerService.checkClientExists(clientId[0])).isFalse();
|
||||
|
||||
@@ -838,8 +838,8 @@ public class TunerResourceManagerServiceTest {
|
||||
1 /*exclusiveGroupId*/);
|
||||
|
||||
/**** Init Lnb Resources ****/
|
||||
int[] lnbIds = {1};
|
||||
mTunerResourceManagerService.setLnbInfoListInternal(lnbIds);
|
||||
int[] lnbHandles = {1};
|
||||
mTunerResourceManagerService.setLnbInfoListInternal(lnbHandles);
|
||||
|
||||
// Update frontend list in TRM
|
||||
mTunerResourceManagerService.setFrontendInfoListInternal(infos);
|
||||
@@ -856,15 +856,13 @@ public class TunerResourceManagerServiceTest {
|
||||
assertThat(mTunerResourceManagerService
|
||||
.requestFrontendInternal(request, frontendHandle))
|
||||
.isTrue();
|
||||
assertThat(mTunerResourceManagerService
|
||||
.getResourceIdFromHandle(frontendHandle[0]))
|
||||
.isEqualTo(infos[0].getId());
|
||||
assertThat(frontendHandle[0]).isEqualTo(infos[0].getHandle());
|
||||
assertThat(mTunerResourceManagerService
|
||||
.getClientProfile(ownerClientId0[0])
|
||||
.getInUseFrontendIds())
|
||||
.getInUseFrontendHandles())
|
||||
.isEqualTo(new HashSet<Integer>(Arrays.asList(
|
||||
infos[0].getId(),
|
||||
infos[1].getId())));
|
||||
infos[0].getHandle(),
|
||||
infos[1].getHandle())));
|
||||
|
||||
/**** Share Frontend ****/
|
||||
|
||||
@@ -876,14 +874,14 @@ public class TunerResourceManagerServiceTest {
|
||||
shareClientId1[0]/*selfClientId*/,
|
||||
ownerClientId0[0]/*targetClientId*/);
|
||||
// Verify fe in use status
|
||||
assertThat(mTunerResourceManagerService.getFrontendResource(infos[0].getId())
|
||||
assertThat(mTunerResourceManagerService.getFrontendResource(infos[0].getHandle())
|
||||
.isInUse()).isTrue();
|
||||
assertThat(mTunerResourceManagerService.getFrontendResource(infos[1].getId())
|
||||
assertThat(mTunerResourceManagerService.getFrontendResource(infos[1].getHandle())
|
||||
.isInUse()).isTrue();
|
||||
// Verify fe owner status
|
||||
assertThat(mTunerResourceManagerService.getFrontendResource(infos[0].getId())
|
||||
assertThat(mTunerResourceManagerService.getFrontendResource(infos[0].getHandle())
|
||||
.getOwnerClientId()).isEqualTo(ownerClientId0[0]);
|
||||
assertThat(mTunerResourceManagerService.getFrontendResource(infos[1].getId())
|
||||
assertThat(mTunerResourceManagerService.getFrontendResource(infos[1].getHandle())
|
||||
.getOwnerClientId()).isEqualTo(ownerClientId0[0]);
|
||||
// Verify share fe client status in the primary owner client
|
||||
assertThat(mTunerResourceManagerService.getClientProfile(ownerClientId0[0])
|
||||
@@ -894,22 +892,22 @@ public class TunerResourceManagerServiceTest {
|
||||
// Verify in use frontend list in all the primary owner and share owner clients
|
||||
assertThat(mTunerResourceManagerService
|
||||
.getClientProfile(ownerClientId0[0])
|
||||
.getInUseFrontendIds())
|
||||
.getInUseFrontendHandles())
|
||||
.isEqualTo(new HashSet<Integer>(Arrays.asList(
|
||||
infos[0].getId(),
|
||||
infos[1].getId())));
|
||||
infos[0].getHandle(),
|
||||
infos[1].getHandle())));
|
||||
assertThat(mTunerResourceManagerService
|
||||
.getClientProfile(shareClientId0[0])
|
||||
.getInUseFrontendIds())
|
||||
.getInUseFrontendHandles())
|
||||
.isEqualTo(new HashSet<Integer>(Arrays.asList(
|
||||
infos[0].getId(),
|
||||
infos[1].getId())));
|
||||
infos[0].getHandle(),
|
||||
infos[1].getHandle())));
|
||||
assertThat(mTunerResourceManagerService
|
||||
.getClientProfile(shareClientId1[0])
|
||||
.getInUseFrontendIds())
|
||||
.getInUseFrontendHandles())
|
||||
.isEqualTo(new HashSet<Integer>(Arrays.asList(
|
||||
infos[0].getId(),
|
||||
infos[1].getId())));
|
||||
infos[0].getHandle(),
|
||||
infos[1].getHandle())));
|
||||
|
||||
/**** Remove Frontend Share Owner ****/
|
||||
|
||||
@@ -923,16 +921,16 @@ public class TunerResourceManagerServiceTest {
|
||||
shareClientId0[0])));
|
||||
assertThat(mTunerResourceManagerService
|
||||
.getClientProfile(ownerClientId0[0])
|
||||
.getInUseFrontendIds())
|
||||
.getInUseFrontendHandles())
|
||||
.isEqualTo(new HashSet<Integer>(Arrays.asList(
|
||||
infos[0].getId(),
|
||||
infos[1].getId())));
|
||||
infos[0].getHandle(),
|
||||
infos[1].getHandle())));
|
||||
assertThat(mTunerResourceManagerService
|
||||
.getClientProfile(shareClientId0[0])
|
||||
.getInUseFrontendIds())
|
||||
.getInUseFrontendHandles())
|
||||
.isEqualTo(new HashSet<Integer>(Arrays.asList(
|
||||
infos[0].getId(),
|
||||
infos[1].getId())));
|
||||
infos[0].getHandle(),
|
||||
infos[1].getHandle())));
|
||||
|
||||
/**** Request Shared Frontend with Higher Priority Client ****/
|
||||
|
||||
@@ -947,27 +945,25 @@ public class TunerResourceManagerServiceTest {
|
||||
.isTrue();
|
||||
|
||||
// Validate granted resource and internal mapping
|
||||
assertThat(mTunerResourceManagerService
|
||||
.getResourceIdFromHandle(frontendHandle[0]))
|
||||
.isEqualTo(infos[0].getId());
|
||||
assertThat(mTunerResourceManagerService.getFrontendResource(infos[0].getId())
|
||||
assertThat(frontendHandle[0]).isEqualTo(infos[0].getHandle());
|
||||
assertThat(mTunerResourceManagerService.getFrontendResource(infos[0].getHandle())
|
||||
.getOwnerClientId()).isEqualTo(ownerClientId1[0]);
|
||||
assertThat(mTunerResourceManagerService.getFrontendResource(infos[1].getId())
|
||||
assertThat(mTunerResourceManagerService.getFrontendResource(infos[1].getHandle())
|
||||
.getOwnerClientId()).isEqualTo(ownerClientId1[0]);
|
||||
assertThat(mTunerResourceManagerService
|
||||
.getClientProfile(ownerClientId1[0])
|
||||
.getInUseFrontendIds())
|
||||
.getInUseFrontendHandles())
|
||||
.isEqualTo(new HashSet<Integer>(Arrays.asList(
|
||||
infos[0].getId(),
|
||||
infos[1].getId())));
|
||||
infos[0].getHandle(),
|
||||
infos[1].getHandle())));
|
||||
assertThat(mTunerResourceManagerService
|
||||
.getClientProfile(ownerClientId0[0])
|
||||
.getInUseFrontendIds()
|
||||
.getInUseFrontendHandles()
|
||||
.isEmpty())
|
||||
.isTrue();
|
||||
assertThat(mTunerResourceManagerService
|
||||
.getClientProfile(shareClientId0[0])
|
||||
.getInUseFrontendIds()
|
||||
.getInUseFrontendHandles()
|
||||
.isEmpty())
|
||||
.isTrue();
|
||||
assertThat(mTunerResourceManagerService
|
||||
@@ -987,22 +983,22 @@ public class TunerResourceManagerServiceTest {
|
||||
|
||||
// Release the frontend resource from the primary owner
|
||||
mTunerResourceManagerService.releaseFrontendInternal(mTunerResourceManagerService
|
||||
.getFrontendResource(infos[0].getId()), ownerClientId1[0]);
|
||||
.getFrontendResource(infos[0].getHandle()), ownerClientId1[0]);
|
||||
|
||||
// Validate the internal mapping
|
||||
assertThat(mTunerResourceManagerService.getFrontendResource(infos[0].getId())
|
||||
assertThat(mTunerResourceManagerService.getFrontendResource(infos[0].getHandle())
|
||||
.isInUse()).isFalse();
|
||||
assertThat(mTunerResourceManagerService.getFrontendResource(infos[1].getId())
|
||||
assertThat(mTunerResourceManagerService.getFrontendResource(infos[1].getHandle())
|
||||
.isInUse()).isFalse();
|
||||
// Verify client status
|
||||
assertThat(mTunerResourceManagerService
|
||||
.getClientProfile(ownerClientId1[0])
|
||||
.getInUseFrontendIds()
|
||||
.getInUseFrontendHandles()
|
||||
.isEmpty())
|
||||
.isTrue();
|
||||
assertThat(mTunerResourceManagerService
|
||||
.getClientProfile(shareClientId0[0])
|
||||
.getInUseFrontendIds()
|
||||
.getInUseFrontendHandles()
|
||||
.isEmpty())
|
||||
.isTrue();
|
||||
assertThat(mTunerResourceManagerService
|
||||
@@ -1034,20 +1030,20 @@ public class TunerResourceManagerServiceTest {
|
||||
mTunerResourceManagerService.unregisterClientProfileInternal(ownerClientId1[0]);
|
||||
|
||||
// Validate the internal mapping
|
||||
assertThat(mTunerResourceManagerService.getFrontendResource(infos[0].getId())
|
||||
assertThat(mTunerResourceManagerService.getFrontendResource(infos[0].getHandle())
|
||||
.isInUse()).isFalse();
|
||||
assertThat(mTunerResourceManagerService.getFrontendResource(infos[1].getId())
|
||||
assertThat(mTunerResourceManagerService.getFrontendResource(infos[1].getHandle())
|
||||
.isInUse()).isFalse();
|
||||
// Verify client status
|
||||
assertThat(mTunerResourceManagerService
|
||||
.getClientProfile(shareClientId0[0])
|
||||
.getInUseFrontendIds()
|
||||
.getInUseFrontendHandles()
|
||||
.isEmpty())
|
||||
.isTrue();
|
||||
assertThat(mTunerResourceManagerService
|
||||
.getClientProfile(shareClientId0[0])
|
||||
.getInUseLnbIds())
|
||||
.getInUseLnbHandles())
|
||||
.isEqualTo(new HashSet<Integer>(Arrays.asList(
|
||||
lnbIds[0])));
|
||||
lnbHandles[0])));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user