Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 80059ffc authored by Andrii Kulian's avatar Andrii Kulian Committed by Android (Google) Code Review
Browse files

Merge "Implement object pool for lifecycler"

parents 138686da 9c5ea9c1
Loading
Loading
Loading
Loading
+2 −2
Original line number Original line Diff line number Diff line
@@ -2557,8 +2557,8 @@ public final class ActivityThread extends ClientTransactionHandler {
                + " req=" + requestCode + " res=" + resultCode + " data=" + data);
                + " req=" + requestCode + " res=" + resultCode + " data=" + data);
        ArrayList<ResultInfo> list = new ArrayList<ResultInfo>();
        ArrayList<ResultInfo> list = new ArrayList<ResultInfo>();
        list.add(new ResultInfo(id, requestCode, resultCode, data));
        list.add(new ResultInfo(id, requestCode, resultCode, data));
        final ClientTransaction clientTransaction = new ClientTransaction(mAppThread, token);
        final ClientTransaction clientTransaction = ClientTransaction.obtain(mAppThread, token);
        clientTransaction.addCallback(new ActivityResultItem(list));
        clientTransaction.addCallback(ActivityResultItem.obtain(list));
        try {
        try {
            mAppThread.scheduleTransaction(clientTransaction);
            mAppThread.scheduleTransaction(clientTransaction);
        } catch (RemoteException e) {
        } catch (RemoteException e) {
+27 −6
Original line number Original line Diff line number Diff line
@@ -25,17 +25,15 @@ import android.os.IBinder;
import android.os.Parcel;
import android.os.Parcel;
import android.os.Trace;
import android.os.Trace;


import java.util.Objects;

/**
/**
 * Activity configuration changed callback.
 * Activity configuration changed callback.
 * @hide
 * @hide
 */
 */
public class ActivityConfigurationChangeItem extends ClientTransactionItem {
public class ActivityConfigurationChangeItem extends ClientTransactionItem {


    private final Configuration mConfiguration;
    private Configuration mConfiguration;

    public ActivityConfigurationChangeItem(Configuration configuration) {
        mConfiguration = configuration;
    }


    @Override
    @Override
    public void execute(ClientTransactionHandler client, IBinder token,
    public void execute(ClientTransactionHandler client, IBinder token,
@@ -47,6 +45,29 @@ public class ActivityConfigurationChangeItem extends ClientTransactionItem {
    }
    }




    // ObjectPoolItem implementation

    private ActivityConfigurationChangeItem() {}

    /** Obtain an instance initialized with provided params. */
    public static ActivityConfigurationChangeItem obtain(Configuration config) {
        ActivityConfigurationChangeItem instance =
                ObjectPool.obtain(ActivityConfigurationChangeItem.class);
        if (instance == null) {
            instance = new ActivityConfigurationChangeItem();
        }
        instance.mConfiguration = config;

        return instance;
    }

    @Override
    public void recycle() {
        mConfiguration = null;
        ObjectPool.recycle(this);
    }


    // Parcelable implementation
    // Parcelable implementation


    /** Write to Parcel. */
    /** Write to Parcel. */
@@ -80,7 +101,7 @@ public class ActivityConfigurationChangeItem extends ClientTransactionItem {
            return false;
            return false;
        }
        }
        final ActivityConfigurationChangeItem other = (ActivityConfigurationChangeItem) o;
        final ActivityConfigurationChangeItem other = (ActivityConfigurationChangeItem) o;
        return mConfiguration.equals(other.mConfiguration);
        return Objects.equals(mConfiguration, other.mConfiguration);
    }
    }


    @Override
    @Override
+25 −6
Original line number Original line Diff line number Diff line
@@ -27,6 +27,7 @@ import android.os.Parcelable;
import android.os.Trace;
import android.os.Trace;


import java.util.List;
import java.util.List;
import java.util.Objects;


/**
/**
 * Activity result delivery callback.
 * Activity result delivery callback.
@@ -34,11 +35,7 @@ import java.util.List;
 */
 */
public class ActivityResultItem extends ClientTransactionItem {
public class ActivityResultItem extends ClientTransactionItem {


    private final List<ResultInfo> mResultInfoList;
    private List<ResultInfo> mResultInfoList;

    public ActivityResultItem(List<ResultInfo> resultInfos) {
        mResultInfoList = resultInfos;
    }


    @Override
    @Override
    public int getPreExecutionState() {
    public int getPreExecutionState() {
@@ -54,6 +51,28 @@ public class ActivityResultItem extends ClientTransactionItem {
    }
    }




    // ObjectPoolItem implementation

    private ActivityResultItem() {}

    /** Obtain an instance initialized with provided params. */
    public static ActivityResultItem obtain(List<ResultInfo> resultInfoList) {
        ActivityResultItem instance = ObjectPool.obtain(ActivityResultItem.class);
        if (instance == null) {
            instance = new ActivityResultItem();
        }
        instance.mResultInfoList = resultInfoList;

        return instance;
    }

    @Override
    public void recycle() {
        mResultInfoList = null;
        ObjectPool.recycle(this);
    }


    // Parcelable implementation
    // Parcelable implementation


    /** Write to Parcel. */
    /** Write to Parcel. */
@@ -87,7 +106,7 @@ public class ActivityResultItem extends ClientTransactionItem {
            return false;
            return false;
        }
        }
        final ActivityResultItem other = (ActivityResultItem) o;
        final ActivityResultItem other = (ActivityResultItem) o;
        return mResultInfoList.equals(other.mResultInfoList);
        return Objects.equals(mResultInfoList, other.mResultInfoList);
    }
    }


    @Override
    @Override
+1 −1
Original line number Original line Diff line number Diff line
@@ -24,7 +24,7 @@ import android.os.IBinder;
 * Each of them can be prepared before scheduling and, eventually, executed.
 * Each of them can be prepared before scheduling and, eventually, executed.
 * @hide
 * @hide
 */
 */
public interface BaseClientRequest {
public interface BaseClientRequest extends ObjectPoolItem {


    /**
    /**
     * Prepare the client request before scheduling.
     * Prepare the client request before scheduling.
+36 −6
Original line number Original line Diff line number Diff line
@@ -37,7 +37,7 @@ import java.util.Objects;
 * @see ActivityLifecycleItem
 * @see ActivityLifecycleItem
 * @hide
 * @hide
 */
 */
public class ClientTransaction implements Parcelable {
public class ClientTransaction implements Parcelable, ObjectPoolItem {


    /** A list of individual callbacks to a client. */
    /** A list of individual callbacks to a client. */
    private List<ClientTransactionItem> mActivityCallbacks;
    private List<ClientTransactionItem> mActivityCallbacks;
@@ -54,11 +54,6 @@ public class ClientTransaction implements Parcelable {
    /** Target client activity. Might be null if the entire transaction is targeting an app. */
    /** Target client activity. Might be null if the entire transaction is targeting an app. */
    private IBinder mActivityToken;
    private IBinder mActivityToken;


    public ClientTransaction(IApplicationThread client, IBinder activityToken) {
        mClient = client;
        mActivityToken = activityToken;
    }

    /**
    /**
     * Add a message to the end of the sequence of callbacks.
     * Add a message to the end of the sequence of callbacks.
     * @param activityCallback A single message that can contain a lifecycle request/callback.
     * @param activityCallback A single message that can contain a lifecycle request/callback.
@@ -127,6 +122,41 @@ public class ClientTransaction implements Parcelable {
    }
    }




    // ObjectPoolItem implementation

    private ClientTransaction() {}

    /** Obtain an instance initialized with provided params. */
    public static ClientTransaction obtain(IApplicationThread client, IBinder activityToken) {
        ClientTransaction instance = ObjectPool.obtain(ClientTransaction.class);
        if (instance == null) {
            instance = new ClientTransaction();
        }
        instance.mClient = client;
        instance.mActivityToken = activityToken;

        return instance;
    }

    @Override
    public void recycle() {
        if (mActivityCallbacks != null) {
            int size = mActivityCallbacks.size();
            for (int i = 0; i < size; i++) {
                mActivityCallbacks.get(i).recycle();
            }
            mActivityCallbacks.clear();
        }
        if (mLifecycleStateRequest != null) {
            mLifecycleStateRequest.recycle();
            mLifecycleStateRequest = null;
        }
        mClient = null;
        mActivityToken = null;
        ObjectPool.recycle(this);
    }


    // Parcelable implementation
    // Parcelable implementation


    /** Write to Parcel. */
    /** Write to Parcel. */
Loading