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

Commit aeff37f3 authored by Edgar Arriaga's avatar Edgar Arriaga
Browse files

Split some pinner deps to their own files

To improve pinner service maintainability as service has grown significantly.

Test: atest FrameworksServicesTests_pinner_service:com.android.server.PinnerServiceTest
Flag: EXEMPT refactor
Bug: 340935152
Change-Id: I7650fea57cf71a2409c1db82000cdb10abf342e6
parent 844c7087
Loading
Loading
Loading
Loading
+27 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2024 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.pinner;

/* package */ abstract class PinRangeSource {
    /**
     * Retrieve a range to pin.
     *
     * @param outPinRange Receives the pin region
     * @return True if we filled in outPinRange or false if we're out of pin entries
     */
    abstract boolean read(PinnerService.PinRange outPinRange);
}
 No newline at end of file
+37 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2024 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.pinner;

/* package */ class PinRangeSourceStatic extends PinRangeSource {
    private final int mPinStart;
    private final int mPinLength;
    private boolean mDone = false;

    PinRangeSourceStatic(int pinStart, int pinLength) {
        mPinStart = pinStart;
        mPinLength = pinLength;
    }

    @Override
    boolean read(PinnerService.PinRange outPinRange) {
        outPinRange.start = mPinStart;
        outPinRange.length = mPinLength;
        boolean done = mDone;
        mDone = true;
        return !done;
    }
}
 No newline at end of file
+43 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2024 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.pinner;

import java.io.DataInputStream;
import java.io.IOException;
import java.io.InputStream;

/* package */ final class PinRangeSourceStream extends PinRangeSource {
    private final DataInputStream mStream;
    private boolean mDone = false;

    PinRangeSourceStream(InputStream stream) {
        mStream = new DataInputStream(stream);
    }

    @Override
    boolean read(PinnerService.PinRange outPinRange) {
        if (!mDone) {
            try {
                outPinRange.start = mStream.readInt();
                outPinRange.length = mStream.readInt();
            } catch (IOException ex) {
                mDone = true;
            }
        }
        return !mDone;
    }
}
 No newline at end of file
+61 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2024 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.pinner;

import com.android.internal.annotations.VisibleForTesting;

import java.util.ArrayList;

@VisibleForTesting
public final class PinnedFile implements AutoCloseable {
    private long mAddress;
    final long mapSize;
    final String fileName;
    public final long bytesPinned;

    // Whether this file was pinned using a pinlist
    boolean used_pinlist;

    // User defined group name for pinner accounting
    String groupName = "";
    ArrayList<PinnedFile> pinnedDeps = new ArrayList<>();

    public PinnedFile(long address, long mapSize, String fileName, long bytesPinned) {
        mAddress = address;
        this.mapSize = mapSize;
        this.fileName = fileName;
        this.bytesPinned = bytesPinned;
    }

    @Override
    public void close() {
        if (mAddress >= 0) {
            PinnerUtils.safeMunmap(mAddress, mapSize);
            mAddress = -1;
        }
        for (PinnedFile dep : pinnedDeps) {
            if (dep != null) {
                dep.close();
            }
        }
    }

    @Override
    public void finalize() {
        close();
    }
}
 No newline at end of file
Loading