Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: new downsample mode #2760

Closed
wants to merge 4 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ class ImagePipelineConfig private constructor(builder: Builder) : ImagePipelineC
override val bitmapMemoryCacheEntryStateObserver: EntryStateObserver<CacheKey>?
override val cacheKeyFactory: CacheKeyFactory
override val context: Context
override val isDownsampleEnabled: Boolean
override val downsampleMode: DownsampleMode
override val fileCacheFactory: FileCacheFactory
override val encodedMemoryCacheParamsSupplier: Supplier<MemoryCacheParams>
override val executorSupplier: ExecutorSupplier
Expand Down Expand Up @@ -137,7 +137,7 @@ class ImagePipelineConfig private constructor(builder: Builder) : ImagePipelineC
context = checkNotNull(builder.context)
fileCacheFactory =
builder.fileCacheFactory ?: DiskStorageCacheFactory(DynamicDefaultDiskStorageFactory())
isDownsampleEnabled = builder.downsampleEnabled
downsampleMode = builder.downsampleMode
encodedMemoryCacheParamsSupplier =
builder.encodedMemoryCacheParamsSupplier ?: DefaultEncodedMemoryCacheParamsSupplier()
imageCacheStatsTracker =
Expand Down Expand Up @@ -200,6 +200,7 @@ class ImagePipelineConfig private constructor(builder: Builder) : ImagePipelineC
}
}


/** Contains default configuration that can be personalized for all the request */
class DefaultImageRequestConfig {
var isProgressiveRenderingEnabled = false
Expand All @@ -225,7 +226,8 @@ class ImagePipelineConfig private constructor(builder: Builder) : ImagePipelineC
private set

val context: Context
var downsampleEnabled = false

var downsampleMode = DownsampleMode.AUTO
private set

var encodedMemoryCacheParamsSupplier: Supplier<MemoryCacheParams>? = null
Expand Down Expand Up @@ -350,10 +352,19 @@ class ImagePipelineConfig private constructor(builder: Builder) : ImagePipelineC
this.fileCacheFactory = fileCacheFactory
}

fun isDownsampleEnabled(): Boolean = this.downsampleEnabled
fun isDownsampleEnabled(): Boolean = this.downsampleMode === DownsampleMode.ALWAYS

fun setDownsampleMode(downsampleMode: DownsampleMode): Builder = apply {
this.downsampleMode = downsampleMode
}

@Deprecated("Use the new setDownsampleMode() method")
fun setDownsampleEnabled(downsampleEnabled: Boolean): Builder = apply {
this.downsampleEnabled = downsampleEnabled
if (downsampleEnabled) {
setDownsampleMode(DownsampleMode.ALWAYS)
} else {
setDownsampleMode(DownsampleMode.AUTO)
}
}

fun isDiskCacheEnabled(): Boolean = this.diskCacheEnabled
Expand Down Expand Up @@ -559,3 +570,9 @@ class ImagePipelineConfig private constructor(builder: Builder) : ImagePipelineC
}
}
}

enum class DownsampleMode {
ALWAYS,
AUTO,
NEVER
}
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ interface ImagePipelineConfigInterface {
val cacheKeyFactory: CacheKeyFactory
val context: Context
val fileCacheFactory: FileCacheFactory
val isDownsampleEnabled: Boolean
val downsampleMode: DownsampleMode
val isDiskCacheEnabled: Boolean
val encodedMemoryCacheParamsSupplier: Supplier<MemoryCacheParams>
val executorSupplier: ExecutorSupplier
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -340,7 +340,7 @@ class ImagePipelineExperiments private constructor(builder: Builder) {
byteArrayPool: ByteArrayPool,
imageDecoder: ImageDecoder,
progressiveJpegConfig: ProgressiveJpegConfig,
downsampleEnabled: Boolean,
downsampleMode: DownsampleMode,
resizeAndRotateEnabledForNetwork: Boolean,
decodeCancellationEnabled: Boolean,
executorSupplier: ExecutorSupplier,
Expand Down Expand Up @@ -368,7 +368,7 @@ class ImagePipelineExperiments private constructor(builder: Builder) {
byteArrayPool: ByteArrayPool,
imageDecoder: ImageDecoder,
progressiveJpegConfig: ProgressiveJpegConfig,
downsampleEnabled: Boolean,
downsampleMode: DownsampleMode,
resizeAndRotateEnabledForNetwork: Boolean,
decodeCancellationEnabled: Boolean,
executorSupplier: ExecutorSupplier,
Expand All @@ -393,7 +393,7 @@ class ImagePipelineExperiments private constructor(builder: Builder) {
byteArrayPool!!,
imageDecoder!!,
progressiveJpegConfig!!,
downsampleEnabled,
downsampleMode,
resizeAndRotateEnabledForNetwork,
decodeCancellationEnabled,
executorSupplier!!,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -361,7 +361,7 @@ private ProducerFactory getProducerFactory() {
mConfig.getPoolFactory().getSmallByteArrayPool(),
getImageDecoder(),
mConfig.getProgressiveJpegConfig(),
mConfig.isDownsampleEnabled(),
mConfig.getDownsampleMode(),
mConfig.isResizeAndRotateEnabledForNetwork(),
mConfig.getExperiments().isDecodeCancellationEnabled(),
mConfig.getExecutorSupplier(),
Expand Down Expand Up @@ -399,7 +399,7 @@ private ProducerSequenceFactory getProducerSequenceFactory() {
mConfig.isResizeAndRotateEnabledForNetwork(),
mConfig.getExperiments().isWebpSupportEnabled(),
mThreadHandoffProducerQueue,
mConfig.isDownsampleEnabled(),
mConfig.getDownsampleMode(),
useBitmapPrepareToDraw,
mConfig.getExperiments().isPartialImageCachingEnabled(),
mConfig.isDiskCacheEnabled(),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,7 @@ public class ProducerFactory {
protected final ByteArrayPool mByteArrayPool;
protected final ImageDecoder mImageDecoder;
protected final ProgressiveJpegConfig mProgressiveJpegConfig;
protected final boolean mDownsampleEnabled;
protected final DownsampleMode mDownsampleMode;
protected final boolean mResizeAndRotateEnabledForNetwork;
protected final boolean mDecodeCancellationEnabled;

Expand Down Expand Up @@ -120,7 +120,7 @@ public ProducerFactory(
ByteArrayPool byteArrayPool,
ImageDecoder imageDecoder,
ProgressiveJpegConfig progressiveJpegConfig,
boolean downsampleEnabled,
DownsampleMode downsampleMode,
sunnylqm marked this conversation as resolved.
Show resolved Hide resolved
boolean resizeAndRotateEnabledForNetwork,
boolean decodeCancellationEnabled,
ExecutorSupplier executorSupplier,
Expand All @@ -145,7 +145,7 @@ public ProducerFactory(
mByteArrayPool = byteArrayPool;
mImageDecoder = imageDecoder;
mProgressiveJpegConfig = progressiveJpegConfig;
mDownsampleEnabled = downsampleEnabled;
mDownsampleMode = downsampleMode;
mResizeAndRotateEnabledForNetwork = resizeAndRotateEnabledForNetwork;
mDecodeCancellationEnabled = decodeCancellationEnabled;

Expand All @@ -171,7 +171,35 @@ public ProducerFactory(
mKeepCancelledFetchAsLowPriority = keepCancelledFetchAsLowPriority;
}

public static AddImageTransformMetaDataProducer newAddImageTransformMetaDataProducer(
@Deprecated
public ProducerFactory(
Context context,
ByteArrayPool byteArrayPool,
ImageDecoder imageDecoder,
ProgressiveJpegConfig progressiveJpegConfig,
boolean downsampleEnabled,
boolean resizeAndRotateEnabledForNetwork,
boolean decodeCancellationEnabled,
ExecutorSupplier executorSupplier,
PooledByteBufferFactory pooledByteBufferFactory,
MemoryCache<CacheKey, CloseableImage> bitmapMemoryCache,
MemoryCache<CacheKey, PooledByteBuffer> encodedMemoryCache,
BufferedDiskCache defaultBufferedDiskCache,
BufferedDiskCache smallImageBufferedDiskCache,
CacheKeyFactory cacheKeyFactory,
PlatformBitmapFactory platformBitmapFactory,
int bitmapPrepareToDrawMinSizeBytes,
int bitmapPrepareToDrawMaxSizeBytes,
boolean bitmapPrepareToDrawForPrefetch,
int maxBitmapSize,
CloseableReferenceFactory closeableReferenceFactory,
boolean keepCancelledFetchAsLowPriority,
int trackedKeysSize) {
this(context, byteArrayPool, imageDecoder, progressiveJpegConfig, downsampleEnabled ? DownsampleMode.ALWAYS : DownsampleMode.AUTO, resizeAndRotateEnabledForNetwork, decodeCancellationEnabled, executorSupplier, pooledByteBufferFactory, null, encodedMemoryCache, smallImageBufferedDiskCache, smallImageBufferedDiskCache, cacheKeyFactory, platformBitmapFactory, bitmapPrepareToDrawMinSizeBytes, bitmapPrepareToDrawMaxSizeBytes, bitmapPrepareToDrawForPrefetch, maxBitmapSize, closeableReferenceFactory, keepCancelledFetchAsLowPriority, trackedKeysSize);
}


public static AddImageTransformMetaDataProducer newAddImageTransformMetaDataProducer(
Producer<EncodedImage> inputProducer) {
return new AddImageTransformMetaDataProducer(inputProducer);
}
Expand Down Expand Up @@ -206,7 +234,7 @@ public DecodeProducer newDecodeProducer(Producer<EncodedImage> inputProducer) {
mExecutorSupplier.forDecode(),
mImageDecoder,
mProgressiveJpegConfig,
mDownsampleEnabled,
mDownsampleMode,
mResizeAndRotateEnabledForNetwork,
mDecodeCancellationEnabled,
inputProducer,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ class ProducerSequenceFactory(
private val resizeAndRotateEnabledForNetwork: Boolean,
private val webpSupportEnabled: Boolean,
private val threadHandoffProducerQueue: ThreadHandoffProducerQueue,
private val downSampleEnabled: Boolean,
private val downsampleMode: DownsampleMode,
private val useBitmapPrepareToDraw: Boolean,
private val partialImageCachingEnabled: Boolean,
private val diskCacheEnabled: Boolean,
Expand Down Expand Up @@ -276,7 +276,7 @@ class ProducerSequenceFactory(
networkFetchToEncodedMemorySequence =
producerFactory.newResizeAndRotateProducer(
networkFetchToEncodedMemorySequence,
resizeAndRotateEnabledForNetwork && !downSampleEnabled,
resizeAndRotateEnabledForNetwork && downsampleMode != DownsampleMode.NEVER,
imageTranscoderFactory)
return networkFetchToEncodedMemorySequence
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ import com.facebook.fresco.middleware.HasExtraData
import com.facebook.imageformat.DefaultImageFormats
import com.facebook.imagepipeline.common.ImageDecodeOptions
import com.facebook.imagepipeline.core.CloseableReferenceFactory
import com.facebook.imagepipeline.core.DownsampleMode
import com.facebook.imagepipeline.decoder.DecodeException
import com.facebook.imagepipeline.decoder.ImageDecoder
import com.facebook.imagepipeline.decoder.ProgressiveJpegConfig
Expand Down Expand Up @@ -49,7 +50,7 @@ class DecodeProducer(
val executor: Executor,
val imageDecoder: ImageDecoder,
val progressiveJpegConfig: ProgressiveJpegConfig,
val downsampleEnabled: Boolean,
val downsampleMode: DownsampleMode,
val downsampleEnabledForNetwork: Boolean,
val decodeCancellationEnabled: Boolean,
val inputProducer: Producer<EncodedImage?>,
Expand Down Expand Up @@ -391,7 +392,8 @@ class DecodeProducer(
producerContext.putExtra(HasExtraData.KEY_IMAGE_FORMAT, encodedImage.imageFormat.name)
encodedImage.source = request.sourceUri?.toString()

if (downsampleEnabled || !statusHasFlag(status, IS_RESIZING_DONE)) {
val isResizingDone = statusHasFlag(status, IS_RESIZING_DONE)
if (downsampleMode == DownsampleMode.ALWAYS || (downsampleMode == DownsampleMode.AUTO && !isResizingDone)) {
if (downsampleEnabledForNetwork || !UriUtil.isNetworkUri(request.sourceUri)) {
encodedImage.sampleSize =
DownsampleUtil.determineSampleSize(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,7 @@ public void setUp() {
true,
false,
mThreadHandoffProducerQueue,
false,
DownsampleMode.AUTO,
false,
false,
true,
Expand Down Expand Up @@ -371,7 +371,7 @@ private void internalUseSequenceFactoryWithBitmapPrepare() {
true,
false,
mThreadHandoffProducerQueue,
false,
DownsampleMode.AUTO,
/* useBitmapPrepareToDraw */ true,
false,
true,
Expand All @@ -395,7 +395,7 @@ private void internalUseSequenceFactoryWithCustomSequence(
true,
false,
mThreadHandoffProducerQueue,
false,
DownsampleMode.AUTO,
false,
false,
true,
Expand Down