| // Copyright (c) 2018, the R8 project authors. Please see the AUTHORS file | |
| // for details. All rights reserved. Use of this source code is governed by a | |
| // BSD-style license that can be found in the LICENSE file. | |
| package com.android.tools.r8; | |
| import com.android.tools.r8.keepanno.annotations.KeepForApi; | |
| import java.nio.ByteBuffer; | |
| /** Interface to enable manual memory management for a pool of byte buffers. */ | |
| @KeepForApi | |
| public interface ByteBufferProvider { | |
| /** | |
| * Acquire unique ownership of a {@link ByteBuffer}. | |
| * | |
| * <p>The buffer must have an array backing and must have capacity of at least the requested | |
| * {@param capacity} value. The buffer must be positioned at position zero. | |
| * | |
| * <p>The buffer is owned by the caller until it is explicitly given back by a call to {@link | |
| * ByteBufferProvider::releaseByteBuffer}. | |
| * | |
| * <p>Requests for byte buffers can happen in parallel with no guarantees of thread or order. | |
| */ | |
| default ByteBuffer acquireByteBuffer(int capacity) { | |
| return ByteBuffer.allocate(capacity); | |
| } | |
| /** | |
| * Release ownership of a previously acquired byte buffer. | |
| * | |
| * <p>After a byte buffer is released it is free to be reclaimed or reused by other requests. | |
| * | |
| * <p>The release of a buffer will only happen once for each acquired buffer and it will happen | |
| * only on the same thread that acquired it. | |
| */ | |
| default void releaseByteBuffer(ByteBuffer buffer) { | |
| // Implicitly reclaimed by GC. | |
| } | |
| } |