From c8701b6b36f3cc807678fc6f59308185f6f2edb9 Mon Sep 17 00:00:00 2001 From: Ramanpreet Nara Date: Mon, 21 Oct 2019 16:57:38 -0700 Subject: [PATCH] Make RCTLocalAssetImageLoader and RCTGIFImageDecoder TurboModule-compatible Summary: Couldn't make RCTImageEditingManager and RCTImageStoreManager TurboModule-compatible because their specs live in fb-internal code. I will tackle them in a subsequent diff. See T54946472. Changelog: [iOS][Added] Make RCTLocalAssetImageLoader and RCTGIFImageDecoder TurboModule-compatible Reviewed By: PeteTheHeat Differential Revision: D17936483 fbshipit-source-id: 2266c9ea1ca7ecd52717d9a963e39245da312312 --- ...IFImageDecoder.m => RCTGIFImageDecoder.mm} | 17 +++++++++++++---- ...ingManager.m => RCTImageEditingManager.mm} | 9 +++++++-- Libraries/Image/RCTImagePlugins.h | 4 ++++ Libraries/Image/RCTImagePlugins.mm | 4 ++++ ...StoreManager.m => RCTImageStoreManager.mm} | 17 +++++++++++------ ...geLoader.m => RCTLocalAssetImageLoader.mm} | 19 +++++++++++++++---- 6 files changed, 54 insertions(+), 16 deletions(-) rename Libraries/Image/{RCTGIFImageDecoder.m => RCTGIFImageDecoder.mm} (85%) rename Libraries/Image/{RCTImageEditingManager.m => RCTImageEditingManager.mm} (96%) rename Libraries/Image/{RCTImageStoreManager.m => RCTImageStoreManager.mm} (96%) rename Libraries/Image/{RCTLocalAssetImageLoader.m => RCTLocalAssetImageLoader.mm} (82%) diff --git a/Libraries/Image/RCTGIFImageDecoder.m b/Libraries/Image/RCTGIFImageDecoder.mm similarity index 85% rename from Libraries/Image/RCTGIFImageDecoder.m rename to Libraries/Image/RCTGIFImageDecoder.mm index 8b658fc2bd..ffa1a7527b 100644 --- a/Libraries/Image/RCTGIFImageDecoder.m +++ b/Libraries/Image/RCTGIFImageDecoder.mm @@ -9,9 +9,14 @@ #import #import - -#import #import +#import +#import + +#import "RCTImagePlugins.h" + +@interface RCTGIFImageDecoder() +@end @implementation RCTGIFImageDecoder @@ -32,14 +37,18 @@ RCT_EXPORT_MODULE() completionHandler:(RCTImageLoaderCompletionBlock)completionHandler { RCTAnimatedImage *image = [[RCTAnimatedImage alloc] initWithData:imageData scale:scale]; - + if (!image) { completionHandler(nil, nil); return ^{}; } - + completionHandler(nil, image); return ^{}; } @end + +Class RCTGIFImageDecoderCls() { + return RCTGIFImageDecoder.class; +} diff --git a/Libraries/Image/RCTImageEditingManager.m b/Libraries/Image/RCTImageEditingManager.mm similarity index 96% rename from Libraries/Image/RCTImageEditingManager.m rename to Libraries/Image/RCTImageEditingManager.mm index 5c0a6914ef..ca68318bd8 100644 --- a/Libraries/Image/RCTImageEditingManager.m +++ b/Libraries/Image/RCTImageEditingManager.mm @@ -7,8 +7,6 @@ #import -#import - #import #import #import @@ -16,6 +14,9 @@ #import #import #import +#import + +#import "RCTImagePlugins.h" @implementation RCTImageEditingManager @@ -79,3 +80,7 @@ RCT_EXPORT_METHOD(cropImage:(NSURLRequest *)imageRequest } @end + +Class RCTImageEditingManagerCls() { + return RCTImageEditingManager.class; +} diff --git a/Libraries/Image/RCTImagePlugins.h b/Libraries/Image/RCTImagePlugins.h index d50419461f..1b44dcc340 100644 --- a/Libraries/Image/RCTImagePlugins.h +++ b/Libraries/Image/RCTImagePlugins.h @@ -29,7 +29,11 @@ extern "C" { Class RCTImageClassProvider(const char *name); // Lookup functions +Class RCTGIFImageDecoderCls(void) __attribute__((used)); +Class RCTImageEditingManagerCls(void) __attribute__((used)); Class RCTImageLoaderCls(void) __attribute__((used)); +Class RCTImageStoreManagerCls(void) __attribute__((used)); +Class RCTLocalAssetImageLoaderCls(void) __attribute__((used)); #ifdef __cplusplus } diff --git a/Libraries/Image/RCTImagePlugins.mm b/Libraries/Image/RCTImagePlugins.mm index 708056f8e4..3cde9e9565 100644 --- a/Libraries/Image/RCTImagePlugins.mm +++ b/Libraries/Image/RCTImagePlugins.mm @@ -18,7 +18,11 @@ Class RCTImageClassProvider(const char *name) { static std::unordered_map sCoreModuleClassMap = { + {"GIFImageDecoder", RCTGIFImageDecoderCls}, + {"ImageEditingManager", RCTImageEditingManagerCls}, {"ImageLoader", RCTImageLoaderCls}, + {"ImageStoreManager", RCTImageStoreManagerCls}, + {"LocalAssetImageLoader", RCTLocalAssetImageLoaderCls}, }; auto p = sCoreModuleClassMap.find(name); diff --git a/Libraries/Image/RCTImageStoreManager.m b/Libraries/Image/RCTImageStoreManager.mm similarity index 96% rename from Libraries/Image/RCTImageStoreManager.m rename to Libraries/Image/RCTImageStoreManager.mm index 789da98851..c0a5969ec1 100644 --- a/Libraries/Image/RCTImageStoreManager.m +++ b/Libraries/Image/RCTImageStoreManager.mm @@ -7,17 +7,18 @@ #import -#import +#import +#import #import #import - #import #import #import - #import +#import "RCTImagePlugins.h" + static NSString *const RCTImageStoreURLScheme = @"rct-image-store"; @implementation RCTImageStoreManager @@ -140,14 +141,14 @@ RCT_EXPORT_METHOD(addImageFromBase64:(NSString *)base64String - (id)sendRequest:(NSURLRequest *)request withDelegate:(id)delegate { - __block atomic_bool cancelled = ATOMIC_VAR_INIT(NO); + __block auto cancelled = std::make_shared>(false); void (^cancellationBlock)(void) = ^{ - atomic_store(&cancelled, YES); + cancelled->store(true); }; // Dispatch async to give caller time to cancel the request dispatch_async(_methodQueue, ^{ - if (atomic_load(&cancelled)) { + if (cancelled->load()) { return; } @@ -238,3 +239,7 @@ RCT_EXPORT_METHOD(addImageFromBase64:(NSString *)base64String } @end + +Class RCTImageStoreManagerCls(void) { + return RCTImageStoreManager.class; +} diff --git a/Libraries/Image/RCTLocalAssetImageLoader.m b/Libraries/Image/RCTLocalAssetImageLoader.mm similarity index 82% rename from Libraries/Image/RCTLocalAssetImageLoader.m rename to Libraries/Image/RCTLocalAssetImageLoader.mm index 618e02a8ea..7a550581c4 100644 --- a/Libraries/Image/RCTLocalAssetImageLoader.m +++ b/Libraries/Image/RCTLocalAssetImageLoader.mm @@ -7,9 +7,16 @@ #import -#import +#import +#import #import +#import + +#import "RCTImagePlugins.h" + +@interface RCTLocalAssetImageLoader() +@end @implementation RCTLocalAssetImageLoader @@ -42,9 +49,9 @@ RCT_EXPORT_MODULE() partialLoadHandler:(RCTImageLoaderPartialLoadBlock)partialLoadHandler completionHandler:(RCTImageLoaderCompletionBlock)completionHandler { - __block atomic_bool cancelled = ATOMIC_VAR_INIT(NO); + __block auto cancelled = std::make_shared>(false); RCTExecuteOnMainQueue(^{ - if (atomic_load(&cancelled)) { + if (cancelled->load()) { return; } @@ -62,8 +69,12 @@ RCT_EXPORT_MODULE() }); return ^{ - atomic_store(&cancelled, YES); + cancelled->store(true); }; } @end + +Class RCTLocalAssetImageLoaderCls(void) { + return RCTLocalAssetImageLoader.class; +}