blob: 2b0fe8a2602b9054169acf2d9ec83079d9a52a09 [file] [log] [blame]
/*
* Copyright 2020 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.server.tv.tunerresourcemanager;
import java.util.HashSet;
import java.util.Set;
/**
* A client profile object used by the Tuner Resource Manager to record the registered clients'
* information.
*
* @hide
*/
public final class ClientProfile {
public static final int INVALID_GROUP_ID = -1;
public static final int INVALID_RESOURCE_ID = -1;
/**
* Client id sent to the client when registering with
* {@link #registerClientProfile(ResourceClientProfile, TunerResourceManagerCallback, int[])}
*/
private final int mId;
/**
* see {@link ResourceClientProfile}
*/
private final String mTvInputSessionId;
/**
* see {@link ResourceClientProfile}
*/
private final int mUseCase;
/**
* Process id queried from {@link TvInputManager#getPid(String)}.
*/
private final int mProcessId;
/**
* All the clients that share the same resource would be under the same group id.
*
* <p>If a client's resource is to be reclaimed, all other clients under the same group id
* also lose their resources.
*/
private int mGroupId = INVALID_GROUP_ID;
/**
* Optional nice value for TRM to reduce client’s priority.
*/
private int mNiceValue;
/**
* List of the frontend ids that are used by the current client.
*/
private Set<Integer> mUsingFrontendIds = new HashSet<>();
/**
* List of the Lnb ids that are used by the current client.
*/
private Set<Integer> mUsingLnbIds = new HashSet<>();
/**
* List of the Cas system ids that are used by the current client.
*/
private int mUsingCasSystemId = INVALID_RESOURCE_ID;
/**
* Optional arbitrary priority value given by the client.
*
* <p>This value can override the default priorotiy calculated from
* the client profile.
*/
private int mPriority;
private ClientProfile(Builder builder) {
this.mId = builder.mId;
this.mTvInputSessionId = builder.mTvInputSessionId;
this.mUseCase = builder.mUseCase;
this.mProcessId = builder.mProcessId;
}
public int getId() {
return mId;
}
public String getTvInputSessionId() {
return mTvInputSessionId;
}
public int getUseCase() {
return mUseCase;
}
public int getProcessId() {
return mProcessId;
}
public int getGroupId() {
return mGroupId;
}
public int getPriority() {
return mPriority;
}
public int getNiceValue() {
return mNiceValue;
}
public void setGroupId(int groupId) {
mGroupId = groupId;
}
public void setPriority(int priority) {
mPriority = priority;
}
public void setNiceValue(int niceValue) {
mNiceValue = niceValue;
}
/**
* Set when the client starts to use a frontend.
*
* @param frontendId being used.
*/
public void useFrontend(int frontendId) {
mUsingFrontendIds.add(frontendId);
}
public Set<Integer> getInUseFrontendIds() {
return mUsingFrontendIds;
}
/**
* Called when the client released a frontend.
*
* @param frontendId being released.
*/
public void releaseFrontend(int frontendId) {
mUsingFrontendIds.remove(frontendId);
}
/**
* Set when the client starts to use an Lnb.
*
* @param lnbId being used.
*/
public void useLnb(int lnbId) {
mUsingLnbIds.add(lnbId);
}
public Set<Integer> getInUseLnbIds() {
return mUsingLnbIds;
}
/**
* Called when the client released an lnb.
*
* @param lnbId being released.
*/
public void releaseLnb(int lnbId) {
mUsingLnbIds.remove(lnbId);
}
/**
* Set when the client starts to use a Cas system.
*
* @param casSystemId cas being used.
*/
public void useCas(int casSystemId) {
mUsingCasSystemId = casSystemId;
}
public int getInUseCasSystemId() {
return mUsingCasSystemId;
}
/**
* Called when the client released a Cas System.
*/
public void releaseCas() {
mUsingCasSystemId = INVALID_RESOURCE_ID;
}
/**
* Called to reclaim all the resources being used by the current client.
*/
public void reclaimAllResources() {
mUsingFrontendIds.clear();
mUsingLnbIds.clear();
mUsingCasSystemId = INVALID_RESOURCE_ID;
}
@Override
public String toString() {
return "ClientProfile[id=" + this.mId + ", tvInputSessionId=" + this.mTvInputSessionId
+ ", useCase=" + this.mUseCase + ", processId=" + this.mProcessId + "]";
}
/**
* Builder class for {@link ClientProfile}.
*/
public static class Builder {
private final int mId;
private String mTvInputSessionId;
private int mUseCase;
private int mProcessId;
Builder(int id) {
this.mId = id;
}
/**
* Builder for {@link ClientProfile}.
*
* @param useCase the useCase of the client.
*/
public Builder useCase(int useCase) {
this.mUseCase = useCase;
return this;
}
/**
* Builder for {@link ClientProfile}.
*
* @param tvInputSessionId the id of the tv input session.
*/
public Builder tvInputSessionId(String tvInputSessionId) {
this.mTvInputSessionId = tvInputSessionId;
return this;
}
/**
* Builder for {@link ClientProfile}.
*
* @param processId the id of process.
*/
public Builder processId(int processId) {
this.mProcessId = processId;
return this;
}
/**
* Build a {@link ClientProfile}.
*
* @return {@link ClientProfile}.
*/
public ClientProfile build() {
ClientProfile clientProfile = new ClientProfile(this);
return clientProfile;
}
}
}