diff options
3 files changed, 50 insertions, 46 deletions
diff --git a/services/core/java/com/android/server/location/contexthub/ContextHubServiceTransaction.java b/services/core/java/com/android/server/location/contexthub/ContextHubServiceTransaction.java index 3aea6d533295..4e96b4442a33 100644 --- a/services/core/java/com/android/server/location/contexthub/ContextHubServiceTransaction.java +++ b/services/core/java/com/android/server/location/contexthub/ContextHubServiceTransaction.java @@ -16,6 +16,7 @@ package com.android.server.location.contexthub; +import android.chre.flags.Flags; import android.hardware.location.ContextHubTransaction; import android.hardware.location.NanoAppState; @@ -46,7 +47,11 @@ abstract class ContextHubServiceTransaction { /** The number of times the transaction has been started (start function called). */ private int mNumCompletedStartCalls; - private final short mHostEndpointId; + /** + * A unique identifier for the entity which owns this transaction, scoped by the transaction + * type. + */ + private final int mOwnerId; private boolean mIsComplete = false; @@ -59,7 +64,7 @@ abstract class ContextHubServiceTransaction { mNextRetryTime = Long.MAX_VALUE; mTimeoutTime = Long.MAX_VALUE; mNumCompletedStartCalls = 0; - mHostEndpointId = Short.MAX_VALUE; + mOwnerId = Integer.MAX_VALUE; } ContextHubServiceTransaction(int id, int type, long nanoAppId, @@ -72,11 +77,11 @@ abstract class ContextHubServiceTransaction { mNextRetryTime = Long.MAX_VALUE; mTimeoutTime = Long.MAX_VALUE; mNumCompletedStartCalls = 0; - mHostEndpointId = Short.MAX_VALUE; + mOwnerId = Integer.MAX_VALUE; } - ContextHubServiceTransaction(int id, int type, String packageName, - int messageSequenceNumber, short hostEndpointId) { + ContextHubServiceTransaction( + int id, int type, String packageName, int messageSequenceNumber, int ownerId) { mTransactionId = id; mTransactionType = type; mNanoAppId = Long.MAX_VALUE; @@ -85,7 +90,7 @@ abstract class ContextHubServiceTransaction { mNextRetryTime = Long.MAX_VALUE; mTimeoutTime = Long.MAX_VALUE; mNumCompletedStartCalls = 0; - mHostEndpointId = hostEndpointId; + mOwnerId = ownerId; } /** @@ -147,8 +152,15 @@ abstract class ContextHubServiceTransaction { return mNumCompletedStartCalls; } - short getHostEndpointId() { - return mHostEndpointId; + /** + * @return A unique identifier for the entity owning this transaction. + */ + long getOwnerId() { + if (Flags.offloadImplementation()) { + return ((long) mTransactionType << 32) | (0x00000000FFFFFFFFL & mOwnerId); + } else { + return mOwnerId; + } } /** @@ -215,15 +227,16 @@ abstract class ContextHubServiceTransaction { out.append(", messageSequenceNumber = "); out.append(mMessageSequenceNumber); } - if (mTransactionType == ContextHubTransaction.TYPE_RELIABLE_MESSAGE) { + if (mTransactionType == ContextHubTransaction.TYPE_RELIABLE_MESSAGE + || mTransactionType == ContextHubTransaction.TYPE_HUB_MESSAGE_REQUIRES_RESPONSE) { out.append(", nextRetryTime = "); out.append(mNextRetryTime); out.append(", timeoutTime = "); out.append(mTimeoutTime); out.append(", numCompletedStartCalls = "); out.append(mNumCompletedStartCalls); - out.append(", hostEndpointId = "); - out.append(mHostEndpointId); + out.append(", ownerId = "); + out.append(getOwnerId()); } out.append(")"); diff --git a/services/core/java/com/android/server/location/contexthub/ContextHubTransactionManager.java b/services/core/java/com/android/server/location/contexthub/ContextHubTransactionManager.java index ccfa61b400b6..214def4ec95a 100644 --- a/services/core/java/com/android/server/location/contexthub/ContextHubTransactionManager.java +++ b/services/core/java/com/android/server/location/contexthub/ContextHubTransactionManager.java @@ -84,9 +84,9 @@ import java.util.concurrent.atomic.AtomicInteger; protected final Map<Integer, ContextHubServiceTransaction> mReliableMessageTransactionMap = new HashMap<>(); - /** A set of host endpoint IDs that have an active pending transaction. */ + /** A set of IDs of transaction owners that have an active pending transaction. */ @GuardedBy("mReliableMessageLock") - protected final Set<Short> mReliableMessageHostEndpointIdActiveSet = new HashSet<>(); + protected final Set<Long> mReliableMessageOwnerIdActiveSet = new HashSet<>(); protected final AtomicInteger mNextAvailableId = new AtomicInteger(); @@ -355,27 +355,32 @@ import java.util.concurrent.atomic.AtomicInteger; /** * Creates a transaction to send a reliable message. * - * @param hostEndpointId The ID of the host endpoint sending the message. - * @param contextHubId The ID of the hub to send the message to. - * @param message The message to send. + * @param ownerId The ID of the transaction owner. + * @param contextHubId The ID of the hub to send the message to. + * @param message The message to send. * @param transactionCallback The callback of the transactions. - * @param packageName The host package associated with this transaction. + * @param packageName The host package associated with this transaction. * @return The generated transaction. */ /* package */ ContextHubServiceTransaction createMessageTransaction( - short hostEndpointId, int contextHubId, NanoAppMessage message, - IContextHubTransactionCallback transactionCallback, String packageName) { - return new ContextHubServiceTransaction(mNextAvailableId.getAndIncrement(), - ContextHubTransaction.TYPE_RELIABLE_MESSAGE, packageName, - mNextAvailableMessageSequenceNumber.getAndIncrement(), hostEndpointId) { + short ownerId, + int contextHubId, + NanoAppMessage message, + IContextHubTransactionCallback transactionCallback, + String packageName) { + return new ContextHubServiceTransaction( + mNextAvailableId.getAndIncrement(), + ContextHubTransaction.TYPE_RELIABLE_MESSAGE, + packageName, + mNextAvailableMessageSequenceNumber.getAndIncrement(), + ownerId) { @Override /* package */ int onTransact() { try { message.setIsReliable(/* isReliable= */ true); message.setMessageSequenceNumber(getMessageSequenceNumber()); - return mContextHubProxy.sendMessageToContextHub(hostEndpointId, contextHubId, - message); + return mContextHubProxy.sendMessageToContextHub(ownerId, contextHubId, message); } catch (RemoteException e) { Log.e(TAG, "RemoteException while trying to send a reliable message", e); return ContextHubTransaction.RESULT_FAILED_UNKNOWN; @@ -766,10 +771,10 @@ import java.util.concurrent.atomic.AtomicInteger; mReliableMessageTransactionMap.entrySet().iterator(); while (iter.hasNext()) { ContextHubServiceTransaction transaction = iter.next().getValue(); - short hostEndpointId = transaction.getHostEndpointId(); + long ownerId = transaction.getOwnerId(); int numCompletedStartCalls = transaction.getNumCompletedStartCalls(); if (numCompletedStartCalls == 0 - && mReliableMessageHostEndpointIdActiveSet.contains(hostEndpointId)) { + && mReliableMessageOwnerIdActiveSet.contains(ownerId)) { continue; } @@ -871,7 +876,7 @@ import java.util.concurrent.atomic.AtomicInteger; } else { iter.remove(); } - mReliableMessageHostEndpointIdActiveSet.remove(transaction.getHostEndpointId()); + mReliableMessageOwnerIdActiveSet.remove(transaction.getOwnerId()); } /** @@ -906,7 +911,7 @@ import java.util.concurrent.atomic.AtomicInteger; transaction.setTimeoutTime(now + RELIABLE_MESSAGE_TIMEOUT.toNanos()); } transaction.setNumCompletedStartCalls(numCompletedStartCalls + 1); - mReliableMessageHostEndpointIdActiveSet.add(transaction.getHostEndpointId()); + mReliableMessageOwnerIdActiveSet.add(transaction.getOwnerId()); } private int toStatsTransactionResult(@ContextHubTransaction.Result int result) { diff --git a/services/core/java/com/android/server/location/contexthub/ContextHubTransactionManagerOld.java b/services/core/java/com/android/server/location/contexthub/ContextHubTransactionManagerOld.java index a67fa308a6ea..657375d2cbd7 100644 --- a/services/core/java/com/android/server/location/contexthub/ContextHubTransactionManagerOld.java +++ b/services/core/java/com/android/server/location/contexthub/ContextHubTransactionManagerOld.java @@ -18,28 +18,14 @@ package com.android.server.location.contexthub; import android.chre.flags.Flags; import android.hardware.location.ContextHubTransaction; -import android.hardware.location.IContextHubTransactionCallback; -import android.hardware.location.NanoAppBinary; -import android.hardware.location.NanoAppMessage; import android.hardware.location.NanoAppState; -import android.os.RemoteException; import android.os.SystemClock; import android.util.Log; -import java.time.Duration; -import java.util.ArrayDeque; -import java.util.Collections; -import java.util.HashMap; -import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Map; -import java.util.Random; -import java.util.Set; -import java.util.concurrent.ScheduledFuture; -import java.util.concurrent.ScheduledThreadPoolExecutor; import java.util.concurrent.TimeUnit; -import java.util.concurrent.atomic.AtomicInteger; /** * Manages transactions at the Context Hub Service. @@ -326,10 +312,10 @@ import java.util.concurrent.atomic.AtomicInteger; mReliableMessageTransactionMap.entrySet().iterator(); while (iter.hasNext()) { ContextHubServiceTransaction transaction = iter.next().getValue(); - short hostEndpointId = transaction.getHostEndpointId(); + long ownerId = transaction.getOwnerId(); int numCompletedStartCalls = transaction.getNumCompletedStartCalls(); if (numCompletedStartCalls == 0 - && mReliableMessageHostEndpointIdActiveSet.contains(hostEndpointId)) { + && mReliableMessageOwnerIdActiveSet.contains(ownerId)) { continue; } @@ -394,7 +380,7 @@ import java.util.concurrent.atomic.AtomicInteger; } else { iter.remove(); } - mReliableMessageHostEndpointIdActiveSet.remove(transaction.getHostEndpointId()); + mReliableMessageOwnerIdActiveSet.remove(transaction.getOwnerId()); Log.d( TAG, @@ -436,7 +422,7 @@ import java.util.concurrent.atomic.AtomicInteger; transaction.setTimeoutTime(now + RELIABLE_MESSAGE_TIMEOUT.toNanos()); } transaction.setNumCompletedStartCalls(numCompletedStartCalls + 1); - mReliableMessageHostEndpointIdActiveSet.add(transaction.getHostEndpointId()); + mReliableMessageOwnerIdActiveSet.add(transaction.getOwnerId()); } @Override |