/* * Copyright (c) 2015-present, Facebook, Inc. * All rights reserved. * * This source code is licensed under the BSD-style license found in the * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. */ package com.facebook.imagepipeline.memory; import javax.annotation.concurrent.Immutable; import com.facebook.common.internal.Preconditions; import com.facebook.common.memory.MemoryTrimmableRegistry; import com.facebook.common.memory.NoOpMemoryTrimmableRegistry; /** * Configuration class for pools. */ @Immutable public class PoolConfig { // There are a lot of parameters in this class. Please follow strict alphabetical order. private final PoolParams mBitmapPoolParams; private final PoolStatsTracker mBitmapPoolStatsTracker; private final PoolParams mFlexByteArrayPoolParams; private final MemoryTrimmableRegistry mMemoryTrimmableRegistry; private final PoolParams mNativeMemoryChunkPoolParams; private final PoolStatsTracker mNativeMemoryChunkPoolStatsTracker; private final PoolParams mSmallByteArrayPoolParams; private final PoolStatsTracker mSmallByteArrayPoolStatsTracker; private PoolConfig(Builder builder) { mBitmapPoolParams = builder.mBitmapPoolParams == null ? DefaultBitmapPoolParams.get() : builder.mBitmapPoolParams; mBitmapPoolStatsTracker = builder.mBitmapPoolStatsTracker == null ? NoOpPoolStatsTracker.getInstance() : builder.mBitmapPoolStatsTracker; mFlexByteArrayPoolParams = builder.mFlexByteArrayPoolParams == null ? DefaultFlexByteArrayPoolParams.get() : builder.mFlexByteArrayPoolParams; mMemoryTrimmableRegistry = builder.mMemoryTrimmableRegistry == null ? NoOpMemoryTrimmableRegistry.getInstance() : builder.mMemoryTrimmableRegistry; mNativeMemoryChunkPoolParams = builder.mNativeMemoryChunkPoolParams == null ? DefaultNativeMemoryChunkPoolParams.get() : builder.mNativeMemoryChunkPoolParams; mNativeMemoryChunkPoolStatsTracker = builder.mNativeMemoryChunkPoolStatsTracker == null ? NoOpPoolStatsTracker.getInstance() : builder.mNativeMemoryChunkPoolStatsTracker; mSmallByteArrayPoolParams = builder.mSmallByteArrayPoolParams == null ? DefaultByteArrayPoolParams.get() : builder.mSmallByteArrayPoolParams; mSmallByteArrayPoolStatsTracker = builder.mSmallByteArrayPoolStatsTracker == null ? NoOpPoolStatsTracker.getInstance() : builder.mSmallByteArrayPoolStatsTracker; } public PoolParams getBitmapPoolParams() { return mBitmapPoolParams; } public PoolStatsTracker getBitmapPoolStatsTracker() { return mBitmapPoolStatsTracker; } public MemoryTrimmableRegistry getMemoryTrimmableRegistry() { return mMemoryTrimmableRegistry; } public PoolParams getNativeMemoryChunkPoolParams() { return mNativeMemoryChunkPoolParams; } public PoolStatsTracker getNativeMemoryChunkPoolStatsTracker() { return mNativeMemoryChunkPoolStatsTracker; } public PoolParams getFlexByteArrayPoolParams() { return mFlexByteArrayPoolParams; } public PoolParams getSmallByteArrayPoolParams() { return mSmallByteArrayPoolParams; } public PoolStatsTracker getSmallByteArrayPoolStatsTracker() { return mSmallByteArrayPoolStatsTracker; } public static Builder newBuilder() { return new Builder(); } public static class Builder { private PoolParams mBitmapPoolParams; private PoolStatsTracker mBitmapPoolStatsTracker; private PoolParams mFlexByteArrayPoolParams; private MemoryTrimmableRegistry mMemoryTrimmableRegistry; private PoolParams mNativeMemoryChunkPoolParams; private PoolStatsTracker mNativeMemoryChunkPoolStatsTracker; private PoolParams mSmallByteArrayPoolParams; private PoolStatsTracker mSmallByteArrayPoolStatsTracker; private Builder() { } public Builder setBitmapPoolParams(PoolParams bitmapPoolParams) { mBitmapPoolParams = Preconditions.checkNotNull(bitmapPoolParams); return this; } public Builder setBitmapPoolStatsTracker( PoolStatsTracker bitmapPoolStatsTracker) { mBitmapPoolStatsTracker = Preconditions.checkNotNull(bitmapPoolStatsTracker); return this; } public Builder setFlexByteArrayPoolParams(PoolParams flexByteArrayPoolParams) { mFlexByteArrayPoolParams = flexByteArrayPoolParams; return this; } public Builder setMemoryTrimmableRegistry(MemoryTrimmableRegistry memoryTrimmableRegistry) { mMemoryTrimmableRegistry = memoryTrimmableRegistry; return this; } public Builder setNativeMemoryChunkPoolParams(PoolParams nativeMemoryChunkPoolParams) { mNativeMemoryChunkPoolParams = Preconditions.checkNotNull(nativeMemoryChunkPoolParams); return this; } public Builder setNativeMemoryChunkPoolStatsTracker( PoolStatsTracker nativeMemoryChunkPoolStatsTracker) { mNativeMemoryChunkPoolStatsTracker = Preconditions.checkNotNull(nativeMemoryChunkPoolStatsTracker); return this; } public Builder setSmallByteArrayPoolParams(PoolParams commonByteArrayPoolParams) { mSmallByteArrayPoolParams = Preconditions.checkNotNull(commonByteArrayPoolParams); return this; } public Builder setSmallByteArrayPoolStatsTracker( PoolStatsTracker smallByteArrayPoolStatsTracker) { mSmallByteArrayPoolStatsTracker = Preconditions.checkNotNull(smallByteArrayPoolStatsTracker); return this; } public PoolConfig build() { return new PoolConfig(this); } } }