Post

Replies

Boosts

Views

Activity

Reply to How to release memory leaked by CoreML Model
Sorry, what I mean is that the MLModel object is released, but the MTLIOAccelResource it has created during initialization leaks. I have also tried Xcode Memory Debugger, run the potential leaking code for several times. The result in the memory graph shows that the count of VM:IOAccelerator is not increasing, but the number of MTLIOAccelResource object is increasing. MTLIOAccelResource object is held by objects of class like AGXA10FamilyHeap, AGXA10FamilyBuffer, MTLIOMemoryInfo, MTLIOAccelPooledResource. I am not familiar with Metal, maybe I have to call some Metal related method to release the pooled resources, or is it a CoreML issue?
Oct ’20
Reply to How to release memory leaked by CoreML Model
Finally I found what is actually leaking, it's the MTLTexture. I profiled the app via Game Performance, checked what actually was happening when the leaking code was executing. I found that in the GPU section, a 48M MTLTexture was created, obviously it's the leak object. But how can I release the MTL texture created internally by the CoreML model. I have found a method called "CVMetalTextureCacheFlush", seems it may work from the naming, but how to retrieve the texture cache then? (there is no related method for the model to get a texture or texture cache)
Oct ’20
Reply to iOS13 UIImage imageNamed poor performance compared to iOS12
Under iOS12, the call stack is as below 	+[UIImage imageNamed:inBundle:withConfiguration:] 	-[_UIAssetManager imageNamed:configuration:] 	-[_UIAssetManager imageNamed:configuration:cachingOptions:attachCatalogImage:] 	-[_UIAssetManager imageNamed:configuration:cachingOptions:attachCatalogImage:]_block_invoke 	-[_UIAssetManager _lookUpObjectForTraitCollection:withAccessorWithAppearanceName:] 	-[UITraitCollection _enumerateThemeAppearanceNamesForLookup:] 	-[_UIAssetManager _lookUpObjectForTraitCollection:withAccessorWithAppearanceName:]_block_invoke 	-[_UIAssetManager imageNamed:configuration:cachingOptions:attachCatalogImage:]_block_invoke_2 	-[CUICatalog namedVectorGlyphWithName:scaleFactor:deviceIdiom:layoutDirection:glyphSize:glyphWeight:glyphPointSize:appearanceName:] 	-[CUICatalog _resolvedRenditionKeyFromThemeRef:withBaseKey:scaleFactor:deviceIdiom:deviceSubtype:displayGamut:layoutDirection:sizeClassHorizontal:sizeClassVertical:memoryClass:graphicsClass:graphicsFallBackOrder:deviceSubtypeFallBackOrder:adjustRenditionKeyWithBlock:] 	-[CUICatalog _private_resolvedRenditionKeyFromThemeRef:withBaseKey:scaleFactor:deviceIdiom:deviceSubtype:displayGamut:layoutDirection:sizeClassHorizontal:sizeClassVertical:memoryClass:graphicsClass:graphicsFallBackOrder:deviceSubtypeFallBackOrder:localizationIdentifier:adjustRenditionKeyWithBlock:] 	-[CUIStructuredThemeStore copyLookupKeySignatureForKey:] it's much faster than iOS13
Dec ’20
Reply to How to release memory leaked by CoreML Model
It seems that if I compile DeeplabV3FP16 model as objc class, the memory leak disappears, while as swift class, the memory leaks. My comparison codes as below Objc version @implementation ViewController (void)dealloc { 		[DeepLabV3Generator destroy]; } (void)viewDidLoad { 		[super viewDidLoad]; 		// Do any additional setup after loading the view. 		 		 		NSString *name = [NSString stringWithFormat:@"DeeplabV3-%tu", nameIndex]; 		nameIndex ++; 		CIImage *image = [[CIImage alloc]initWithImage:[UIImage imageNamed:name]]; 		CVPixelBufferRef pb; 		CVPixelBufferCreate(kCFAllocatorDefault, image.extent.size.width, image.extent.size.height, kCVPixelFormatType_32BGRA, NULL, &pb); 		[CIContext.context render:image toCVPixelBuffer:pb]; 		 		[DeepLabV3Generator.si loadDeeplabV3From:pb]; 		 		CVPixelBufferRelease(pb); } #import "DeepLabV3Generator.h" @implementation DeepLabV3Generator static DeepLabV3Generator* sharedInstance = nil; (DeepLabV3Generator*)si{ 		if(sharedInstance != nil){ 				return sharedInstance; 		} 		static dispatch_once_t onceToken; 		dispatch_once(&onceToken, ^{ 				sharedInstance = [[DeepLabV3Generator alloc]init]; 		}); 		 		return sharedInstance; } (void)destroy{ 		sharedInstance = nil; } (instancetype)init { 		self = [super init]; 		if (self) { 				NSError *error = nil; 				MLModelConfiguration *config = [MLModelConfiguration new]; 				self.v3 = [[DeepLabV3FP16 alloc]initWithConfiguration:config error:&error]; 		} 		return self; } (MLMultiArray *)loadDeeplabV3From:(CVPixelBufferRef)pixeBuffer{ 		NSError *error = nil; 		DeepLabV3FP16Output *output = [_v3 predictionFromImage:pixeBuffer error:&error]; 		if (error) { 				NSLog(@"error %@",error.localizedDescription); 		} 		return output.semanticPredictions; } Swift verisoin @objc class DeepLabV3Generator: NSObject { 		private static var sharedInstance : DeepLabV3Generator? 		@objc class func si() -> DeepLabV3Generator { // change class to final to prevent override 				guard let uwShared = sharedInstance else { 						sharedInstance = DeepLabV3Generator() 						return sharedInstance! 				} 				return uwShared 		} 		@objc class func destroy() { 				sharedInstance = nil 		} 		let v3 : DeepLabV3FP16 		 		private override init() { 				let config = MLModelConfiguration() 				config.computeUnits = .all 				v3 = try! DeepLabV3FP16(configuration: config) 		} 		@objc func loadDeeplabV3(from pixelBuffer:CVPixelBuffer) -> MLMultiArray? { 				let output = try! v3 .prediction(image: pixelBuffer) 				return output.semanticPredictions 		} }
Dec ’20
Reply to EXC_BREAKPOINT - libobjc.A.dylib object_getClass Crash on the main thread
I used this method when setting the layer's properties like .frame, to prevent implict frame animation from being called. @implementation CALayer (Animation) (void)disableAnimation:(VoidBlock)block{ [CATransaction begin]; [CATransaction setValue:(id)kCFBooleanTrue forKey:kCATransactionDisableActions]; block(); [CATransaction commit]; } @end Please read this post:, I think this is a bug on iOS17. I have no choice, but downgrade to Xcode14.3.1 and iOS16, stay away from current version of iOS17. Now the crash disappears.
Jan ’24
Reply to App crashes of type EXC_BREAKPOINT (SIGTRAP) SIGNAL 5 Trace/BPT trap on iOS17
Below are parts of similar crash reports with slightly different stack traces: 0 libobjc.A.dylib 0x18c44e838 object_getClass + 48 1 Foundation 0x1930807b4 _NSKeyValueObservationInfoGetObservances + 264 2 Foundation 0x19307fc7c NSKeyValueWillChangeWithPerThreadPendingNotifications + 232 3 QuartzCore 0x19572f14c CAAnimation_setter(CAAnimation*, unsigned int, _CAValueType, void const*) + 128 4 QuartzCore 0x19572f0a4 -[CAPropertyAnimation setKeyPath:] + 52 5 UIKitCore 0x1963e8fc8 -[UIImageView startAnimating] + 684 6 UIKitCore 0x1963e8ce4 -[UIActivityIndicatorView layoutSubviews] + 1128 7 UIKitCore 0x196329c04 -[UIView(CALayerDelegate) layoutSublayersOfLayer:] + 1528 8 QuartzCore 0x19573c7ec CA::Layer::layout_if_needed(CA::Transaction*) + 500 9 QuartzCore 0x19573c374 CA::Layer::layout_and_display_if_needed(CA::Transaction*) + 144 10 QuartzCore 0x195742860 CA::Context::commit_transaction(CA::Transaction*, double, double*) + 464 11 QuartzCore 0x19573bb80 CA::Transaction::commit() + 648 12 QuartzCore 0x19573b828 CA::Transaction::flush_as_runloop_observer(bool) + 88 13 CoreFoundation 0x1940ff7bc __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 36 14 CoreFoundation 0x1940fe1c4 __CFRunLoopDoObservers + 548 15 CoreFoundation 0x1940fd8e0 __CFRunLoopRun + 1028 16 CoreFoundation 0x1940fd3f8 CFRunLoopRunSpecific + 608 17 GraphicsServices 0x1d768b4f8 GSEventRunModal + 164 18 UIKitCore 0x1965238a0 -[UIApplication _run] + 888 19 UIKitCore 0x196522edc UIApplicationMain + 340 20 MyApp 0x1048431b0 main + 140 21 dyld 0x1b6e52dcc start + 2240 Thread 0 Crashed: 0 libobjc.A.dylib 0x18c44e838 object_getClass + 48 1 Foundation 0x1930807b4 _NSKeyValueObservationInfoGetObservances + 264 2 Foundation 0x19307fc7c NSKeyValueWillChangeWithPerThreadPendingNotifications + 232 3 QuartzCore 0x19572f14c CAAnimation_setter(CAAnimation*, unsigned int, _CAValueType, void const*) + 128 4 QuartzCore 0x195780354 -[CABasicAnimation setFromValue:] + 52 5 QuartzCore 0x195780200 CALayerCreateImplicitAnimation + 276 6 QuartzCore 0x195715f20 -[CALayer actionForKey:] + 420 7 QuartzCore 0x195715c84 CA::Layer::begin_change(CA::Transaction*, unsigned int, objc_object*, objc_object*&) + 204 8 QuartzCore 0x195716984 CA::Layer::setter(unsigned int, _CAValueType, void const*) + 792 9 QuartzCore 0x195716644 -[CALayer setOpacity:] + 56 10 MyApp 0x100972ae4 -[CALayer(Visbility) setSimHidden:] + 200 Thread 0 Crashed: 0 libobjc.A.dylib 0x18c44e838 object_getClass + 48 1 Foundation 0x1930807b4 _NSKeyValueObservationInfoGetObservances + 264 2 Foundation 0x19307fc7c NSKeyValueWillChangeWithPerThreadPendingNotifications + 232 3 QuartzCore 0x19572f14c CAAnimation_setter(CAAnimation*, unsigned int, _CAValueType, void const*) + 128 4 QuartzCore 0x19572f0a4 -[CAPropertyAnimation setKeyPath:] + 52 5 QuartzCore 0x19572f050 +[CAPropertyAnimation animationWithKeyPath:] + 36 6 UIKitCore 0x196448c8c __67-[_UIViewAdditiveAnimationAction runActionForKey:object:arguments:]_block_invoke_2 + 384 7 UIKitCore 0x196448a3c -[_UIViewAdditiveAnimationAction runActionForKey:object:arguments:] + 1968 8 QuartzCore 0x195704dec CA::Layer::set_bounds(CA::Rect const&, bool) + 436 9 QuartzCore 0x195704c0c -[CALayer setBounds:] + 132 10 QuartzCore 0x1957048ac -[CALayer setFrame:] + 416 11 UIKitCore 0x1963102fc -[UIView _backing_setFrame:] + 240 12 UIKitCore 0x19630e7e8 -[UIView(Geometry) setFrame:] + 296 13 UIKitCore 0x19630fa38 -[UIImageView _setViewGeometry:forMetric:] + 160 14 UIKitCore 0x196367104 -[UIButtonLegacyVisualProvider layoutSubviews] + 108 15 UIKitCore 0x196367058 -[UIButton layoutSubviews] + 40 16 UIKitCore 0x196329c04 -[UIView(CALayerDelegate) layoutSublayersOfLayer:] + 1528 17 QuartzCore 0x19573c7ec CA::Layer::layout_if_needed(CA::Transaction*) + 500 18 UIKitCore 0x19632ccb4 -[UIView(Hierarchy) layoutBelowIfNeeded] + 296 19 MyApp 0x10465973c __74-[KKAssetBrowseCollectionViewController willOpenAssetThumbnailCompletion:]_block_invoke + 328
Mar ’24
Reply to Xcode16RC present PHPickerViewController layout error & cell non-Interactive.
To add some additional information: even if I change modalPresentationStyle to UIModalPresentationPageSheet or UIModalPresentationFormSheet (and set preferredContentSize), after the presentation animation, the final page still appears as shown in the screenshot. If I change it to UIModalPresentationCustom and add a custom transitionDelegate, manually specifying that the PHPickerViewController only covers half of the screen, all the buttons and cells within the picker are still non-interactive.
Sep ’24