Skip to content

Commit 1f95c9b

Browse files
p-sunfacebook-github-bot
authored andcommitted
iOS: Fix logging lifecycle when image is scrolled out and immediately back in
Reviewed By: fkgozali Differential Revision: D21619910 fbshipit-source-id: b94073afaacad45e12d22d593184cea97612fa26
1 parent 7929f67 commit 1f95c9b

4 files changed

+17
-16
lines changed

Libraries/Image/RCTImageLoader.mm

+3-3
Original file line numberDiff line numberDiff line change
@@ -801,15 +801,15 @@ - (void)trackURLImageVisibilityForRequest:(RCTImageURLLoaderRequest *)loaderRequ
801801
}
802802
}
803803

804-
- (void)trackURLImageRequestDidCancel:(RCTImageURLLoaderRequest *)loaderRequest
804+
- (void)trackURLImageRequestDidDestroy:(RCTImageURLLoaderRequest *)loaderRequest
805805
{
806806
if (!loaderRequest) {
807807
return;
808808
}
809809

810810
id<RCTImageURLLoader> loadHandler = [self imageURLLoaderForURL:loaderRequest.imageURL];
811-
if ([loadHandler respondsToSelector:@selector(trackURLImageRequestDidCancel:)]) {
812-
[(id<RCTImageURLLoaderWithAttribution>)loadHandler trackURLImageRequestDidCancel:loaderRequest];
811+
if ([loadHandler respondsToSelector:@selector(trackURLImageRequestDidDestroy:)]) {
812+
[(id<RCTImageURLLoaderWithAttribution>)loadHandler trackURLImageRequestDidDestroy:loaderRequest];
813813
}
814814
}
815815

Libraries/Image/RCTImageLoaderWithAttributionProtocol.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ RCT_EXTERN void RCTEnableImageLoadingPerfInstrumentation(BOOL enabled);
4747
/**
4848
* Image instrumentation - notify that the request was cancelled.
4949
*/
50-
- (void)trackURLImageRequestDidCancel:(RCTImageURLLoaderRequest *)loaderRequest;
50+
- (void)trackURLImageRequestDidDestroy:(RCTImageURLLoaderRequest *)loaderRequest;
5151

5252
/**
5353
* Image instrumentation - notify that the native image view was destroyed.

Libraries/Image/RCTImageURLLoaderWithAttribution.h

+2-2
Original file line numberDiff line numberDiff line change
@@ -66,9 +66,9 @@ struct ImageURLLoaderAttribution {
6666
- (void)trackURLImageVisibilityForRequest:(RCTImageURLLoaderRequest *)loaderRequest imageView:(UIView *)imageView;
6767

6868
/**
69-
* Image instrumentation - notify that the request was cancelled.
69+
* Image instrumentation - notify that the request was destroyed.
7070
*/
71-
- (void)trackURLImageRequestDidCancel:(RCTImageURLLoaderRequest *)loaderRequest;
71+
- (void)trackURLImageRequestDidDestroy:(RCTImageURLLoaderRequest *)loaderRequest;
7272

7373
/**
7474
* Image instrumentation - notify that the native image view was destroyed.

Libraries/Image/RCTImageView.mm

+11-10
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ @implementation RCTImageView
8080
BOOL _needsReload;
8181

8282
RCTUIImageViewAnimated *_imageView;
83-
83+
8484
RCTImageURLLoaderRequest *_loaderRequest;
8585
}
8686

@@ -219,23 +219,23 @@ - (void)setResizeMode:(RCTResizeMode)resizeMode
219219
- (void)cancelImageLoad
220220
{
221221
[_loaderRequest cancel];
222-
[_imageLoader trackURLImageRequestDidCancel:_loaderRequest];
223-
224-
_loaderRequest = nil;
225222
_pendingImageSource = nil;
226223
}
227224

228-
- (void)clearImage
225+
- (void)cancelAndClearImageLoad
229226
{
230227
[self cancelImageLoad];
231-
self.image = nil;
232-
_imageSource = nil;
228+
229+
[_imageLoader trackURLImageRequestDidDestroy:_loaderRequest];
230+
_loaderRequest = nil;
233231
}
234232

235233
- (void)clearImageIfDetached
236234
{
237235
if (!self.window) {
238-
[self clearImage];
236+
[self cancelAndClearImageLoad];
237+
self.image = nil;
238+
_imageSource = nil;
239239
}
240240
}
241241

@@ -291,7 +291,7 @@ - (BOOL)shouldChangeImageSource
291291

292292
- (void)reloadImage
293293
{
294-
[self cancelImageLoad];
294+
[self cancelAndClearImageLoad];
295295
_needsReload = NO;
296296

297297
RCTImageSource *source = [self imageSourceForSize:self.frame.size];
@@ -347,7 +347,7 @@ - (void)reloadImage
347347
completionBlock:completionHandler];
348348
_loaderRequest = loaderRequest;
349349
} else {
350-
[self clearImage];
350+
[self cancelAndClearImageLoad];
351351
}
352352
}
353353

@@ -467,6 +467,7 @@ - (void)didMoveToWindow
467467
// prioritise image requests that are actually on-screen, this removes
468468
// requests that have gotten "stuck" from the queue, unblocking other images
469469
// from loading.
470+
// Do not clear _loaderRequest because this component can be visible again without changing image source
470471
[self cancelImageLoad];
471472
} else if ([self shouldChangeImageSource]) {
472473
[self reloadImage];

0 commit comments

Comments
 (0)