I’ve been trying to track down why my Core Image applications crash on some El Capitan machines, and today I’ve found it.
The 32-Bit version of Core Image is broken, for one app, I managed to track it down to CIDiscBlur specifically and from there I could create a sample application. After experimenting with various things, I decided to build the application in 64-Bit, voila it worked.
However the downside is that Core Image takes approximately 20x longer to render the full resolution to disk when using 64-Bit.
If you’re using Core Image within your application, you’ll be want to move to 64-Bit as soon as you can, all our CI based apps are non-functional.
The weird thing is, these crashes only seem to occur on some machines. Out of 3 we have now running El Capitan, only one exhibits the crashes, yet I’ve received enough crash reports from customers to know that this is an issue.
I have one customer where writing files to and removing them from special folder.temporary is a problem.
Have you tried a 64-Bit build?
Not with this customer.
I want to give 64bit a good pounding here before I jump ship.
Its a big jump because with 64 bit comes the dumping of OS X 10.6 which I have faithfully supported for some time even though Xojo doesn’t.
Looking good so far though, even if I am hard pushed to see a notable speed (or any other) difference.
Jeff, I know what you mean, I too want to give 64-Bit more testing before I convert over my apps, but with this discovery I don’t see much choice. I have apps which don’t work for some customers who’ve upgraded and 64-Bit seems to be the way to solve it.
With a bit more tinkering, I’ve gotten the speed closer, I can only presume that some of the optimizations in Core Image for 32-Bit do not exist for 64-Bit.
Sam Rowlands, this slowness in 64-bit also seen in one of my projects, I thought even that was a mistake of mine and it could be optimized but could not improve anything so far!
I don’t know if it will help or not, but in my case, the Core Image filter was taking about 3 seconds on 32-Bit (on the machine that it worked on) and 70 seconds in 64-Bit. I also noticed that memory usage of the working 32-Bit app climbed to just under 1gb, while the 64-Bit app used 14 GBs of RAM!
As it’s a blur filter I’m using; I scaled the image size and the blur size down, processed and then scaled the image back up again. With this technique I managed to not only reduce it back to around 3 seconds, but reduced memory usage and it produced results that close enough to the naked eye. If you use a difference filter you can see slight differences.
So IMHO, the 64-Bit version of CIDiscBlur is not optimized as well as the 32-Bit version.
Now to move the rest of the application over to 64-Bit is going to take me a short while (due to the amount of declares I use).