blob: cf80266a8e8bb443fccaf8e930802793f5f665f0 [file] [log] [blame]
// 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 java.nio.ByteBuffer;
/** Interface to enable manual memory management for a pool of byte buffers. */
@KeepForSubclassing
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.
}
}