What's coming in Paint.NET v3.5.5: Performance!

There won’t be any new features this time around, of course, since it’s just a +0.0.1 release. There’s only 1 bug that I’ve found which I’ve decided to fix, which has to do with saving “large” 8-bit PNG/GIF/BMP images and is detailed over on the forum (summary: I was using 32-bit integer accumulators and they were overflowing; switching to 64-bit accumulators fixed it). Any plugin that makes use of the built-in quantization code will also be fixed.

So I’ve decided to add some more value to this release in the way of performance optimizations. The first optimization affects an admittedly small population of users: those who have Intel Atom-based nettops. The Intel Atom D510 and 330 chips are dual-core CPUs with HyperThreading and so they show up in Task Manager as 4 CPUs. Normally Paint.NET always uses multisampling to render the canvas. However, if the system has less than 4 CPUs it will use nearest neighbor while doing a zoom in/out with the mouse wheel. Since the Atom reports 4 cores, it was not benefitting from this, but it is now noticably zippier.

The second optimization is for everyone. One thing I’ve been wanting to do for awhile is to move some of the rendering kernels into C/C++ land. The reason for this is that the Visual C++ compiler can do a lot better static optimization than either the .NET JITter or NGEN.

With just a few hours of work today, I’ve managed to make Gaussian Blur about 42% faster. I’ve also applied this trick to the Normal, Multiply, and Overlay blend modes and am getting 15-20% faster performance. The “code” is almost exactly the same except with “uint” swapped for “unsigned __int32”, some marshalling logic, P/Invoke glue, etc. The bang-to-buck ratio here is great.

And of course, your mileage may vary (YMMV). These benchmarks were done on a quad-core Intel Core i7 at 4GHz running 64-bit Windows 7. I also ran them on my dual-core Atom 330, and the improvement was 35% for Gaussian Blur, and 30+% for the blend modes.

With v3.5.5 I will probably limit these optimizations to a few select areas in order to “test the waters.” If stability is good, as determined by the stream of crash logs I get (or don’t!), then I’ll bravely expand to other areas. I expect to release v3.5.5 by the middle of April.

Oh, yeah. On the Paint.NET v4.0 front, the decision has been made: it will require Win7/Vista minimum. I’ve already got most of the interop layer for Direct2D, DirectWrite, and Windows Imaging Component (WIC) written. The first feature to use these was a replacement of “my” super sampling code for WIC’s “Fant” resampling. This means that the quality of Image->Resize when shrinking an image has been greatly improved. I also have a version of the Curves adjustment that uses Direct2D instead of GDI+ for rendering its UI (this was mostly “prove to myself it actually works” code).

Please do remember that Paint.NET v4.0 probably won’t be available until late 2011 – you have plenty of time to enjoy XP with Paint.NET v3.5.x in the meantime if that’s the way you roll (and it’s not like I can delete it off your box once 4.0 ships, nor would I if I could). As a pre-emptive snark, in true Raymond Chen style: this was a decision I made after much deliberation with both quantitative and qualitative data, and spamming my comment box won’t change my mind. Your voice has already been heard. Thanks in advance.

Intel’s Xeon X5680 gives you 24 threads, empties bank account

The guys over at 2CPU are quick on the draw with a review of the brand new, can’t-even-find-it-yet Intel Xeon X5680. It’s the bigger brother to the Intel Core i7-980X, itself a monstrous 3.33GHz, 6-core CPU. The Xeon has the extra pins and needles and validation to let you hook up 2 of them for a total of 12 cores. With HyperThreading that leaves you with 24 tiny little CPU graphs in Task Manager.

Do. Want.

Apparently AMD has some crazy chips coming out with 8- and 12-cores for 4-processor configurations, albeit at very low clock speeds. Still, 48 cores is within spitting distance of giving Windows 7 / 2008 R2 the fits. I have a nagging feeling that this level of performance will never make its way down to the $300 netbook/nettop level 🙂 As-is, a brand-new dual Xeon X5680 will set you back $1,600 USD per CPU, putting a whole system in the $5K+ USD range. Well, if you could find anyone who’s selling it anyway.

But the real question is, how fast does it run Paint.NET!? One of these would certainly cut my build times, now that Paint.NET is acquiring a large amount of C++/CLI in order to properly support Direct2D and DirectWrite. Using the /MP switch with the Visual C++ compiler results in all 8 threads of my Core i7-920 @ 4.0GHz being pegged at 100% for a significant amount of time.

Core i7-920 @ 4.0GHz, struggling to build the latest PaintDotNet.SystemLayer.Native DLL’s

February 2010 usage statistics

I was hoping to publish stats for January, but there was a problem with the web server logs not importing correctly for awhile. Everything’s cleared up though, so here we go!

Right now my primary interest is in planning for Paint.NET v4.0 with respect to determining system requirements. In other words, will it be possible to drop support for XP? The reason I’m trying to answer this is because I want to pervasively use Direct2D, DirectWrite, and DirectCompute while also not incurring an onerous development and testing burden. I want to render everything at high quality, and to use hardware acceleration where possible. These APIs are not available on XP. It appears to be feasible to write a Direct2D-to-GDI+ translation layer, but the other two APIs are not nearly so simple. I cannot justify dropping XP support if everyone’s still using it, or if there isn’t enough of a benefit. This decision must be guided by quantitative data, and not my desire to play with the latest and greatest along with fatigue from supporting ancient systems. One simple solution would be to just keep the last v3.x release available for download until XP support has dwindled far enough. Time will tell.

Anyway, hopes and dreams aside (please upgrade to Windows 7!), let’s see the stats!

The last few months have been huge for Paint.NET since the release of v3.5. The greatly improved performance and Aero UI theme have been very popular, and the “Install When I Exit” update mode has netted me more than a few e-mails full of thanks, praise, and smiley faces (glad you all like it!). I have not been working on new code or features, and instead have focused on relaxing and planning for v4.0. I plan to resume in earnest when Visual Studio 2010 is released; until then, I’m trying to finish Mass Effect 2 (renegade ftw) and BioShock 2. Anyone played Heavy Rain? Talk about mixed feelings; at least it didn’t suffer nearly the same fate as Indigo Prophecy with its awesome beginning that was quickly slaughtered by nonsensical, random plot twists and overly ridiculous quick time event sequences (they should have called it “Dance Dance Simon Revolution”). Oh, and I finally managed to get my Core i7 overclocked to 4.0 GHz by installing this beast.

Overall, usage of Paint.NET is up by a whopping 45%! The other two areas I’ve been hoping for big gains are in 64-bit and Windows 7, and boy are they on a roll! There are 212% more 64-bit users than last July, and Windows 7 is zipping up like a rocket and already claiming over 18% of the user base. Popularity with Russian users is way up, with most other languages staying about the same (technically English is down but this is probably just a result of the increase in the Russian stat).

Window Server 2003 continues to have a negligible number of users. I see no reason to discontinue support (e.g. hard block at install time), as it’s basically the same platform as Windows XP. I do not test with it though, so it’s a “best faith” effort. I don’t have separate stats for Windows 7 and Windows Server 2008 since they report the same version number (6.1.7600), and I don’t track the OS edition (workstation vs. server) with my update manifests.

Here are some ugly pie charts:

And lastly, here are the raw numbers. Please note that “hits” refers to update manifest text files, not web site traffic in a browser. They are the result of an installation of Paint.NET being active and checking to see what the latest version is. Paint.NET doesn’t check for updates unless it’s open (no TSR’s), and it checks every 5 days at most (longer if it hasn’t been opened in more than 5 days, of course).

July 2009 February 2010
Total hits 2,979,631 3,922,732
Hits per day 96,117 140,097
32-bit 94.45% 87.72%
64-bit 5.55% 12.28%
Windows XP 64.97% 56.43%
Windows 2003 0.32% 0.24%
Windows Vista / 2008 32.14% 25.02%
Windows 7 / 2008 R2 2.57% 18.31%
English 42.30% 38.86%
non-English 57.70% 61.14%
German 15.75% 15.34%
French 6.80% 7.76%
Portuguese 6.05% 4.85%
Spanish 6.01% 5.90%
Japanese 2.12% 2.24%
Italian 2.99% 3.56%
Polish 1.52% 1.54%
Netherlands (Dutch) 1.26% 1.37%
Russian 5.41% 9.48%
Chinese (Simplified) 0.83% 0.67%
Chinese (Traditional) 0.60% 0.46%
Turkish 4.32% 3.68%
Korean 0.46% 0.31%
All other languages 1.23% 0.93%
Have translations 83.31% 79.48%
Don’t have translations 16.69% 20.52%

Bold indicates that Paint.NET ships with the translation. Korean had a translation in v3.36, but not in v3.5+. For Russian, the reverse is true.

Paint.NET v3.5.4 is now available

This is another small update that fixes a few bugs. It also optimizes the Image->Flatten command for multiple CPUs/cores.

You can either use the built-in updater from the Utilities menu, or go to the website and download it. There’s no need to uninstall the old version; that will be taken care of automatically.

Changes and fixes since v3.5.3:

  • Improved performance of the Image->Flatten command by making it multithreaded.
  • Fixed the File->Save As dialog not opening to the correct folder.
  • Fixed a crash with certain plugins and their use of the File Open dialog.
  • Fixed a very rare crash with the toolbar’s font list.

By the way, this comic is completely true.

Upgraded the blog

Whew, that was interesting.

Anyway the blog is now upgraded to the latest WordPress, has a new theme, etc. blah blah blah. So if you saw weird stuff earlier today, that’s what was going on.

New things to look forward to include February usage stats, and a version 3.5.4 update. I was going to post January stats, but the web logs had some problem so I’m going to wait and do them for February instead.

Paint.NET v3.5.3 is now available

This update fixes a few small bugs.

You can either use the built-in updater, or go to the website and download it. There’s no need to uninstall the old version; that will be taken care of automatically.

Changes and fixes since v3.5.2:

  • Fixed DirectDraw Surface (.dds) file format support for CPUs which do not have SSE2 (Pentium III, Athlon XP)
  • Fixed an issue with the File->Save dialog related to file type plugins that were only written for opening (importing).
  • Fixed some crashes which were supposed to be "out of memory" errors.
  • Fixed a race condition with the New Image, Canvas Size, and Resize dialogs. If you typed extremely fast you could cause a crash by typing a negative number and immediately pressing OK or Enter.
  • Fixed a File->Save dialog issue in Win7/Vista where it could ask you about overwriting the wrong file.

More Thoughts on Apple’s iPad

In my previous post, I lambasted the Apple iPad as a useless device.

Miguel de Icaza has a really good post praising the iPad:

This is a whole new space in which we can research, a new space that we can explore and where we can create a whole new class of computer/user interactions. With the new form factor, we can now create applications that just made no sense on the iPhone.

It is fascinating*.

And you know what? I agree with him: for developers who’re interested in writing touch-centric UI, the iPad is potentially a great* device.

Most people, however, will not be interested in this first revision of the iPad and should absolutely wait at least for iPad 2 or the next major OS revision. The feature set is still puny, and I think it’s far too expensive for what you get.

Personally, I’m not interested in writing an iPad application, but that’s because I’m more interested in what Windows 7 and multitouch can offer. It might have something to do with the fact that Paint.NET is a Windows app.

* not magical

Apple's iPad is a "magical device" … really!?

While watching all that iPad announcement hoopla, I kept thinking about this parody video that makes fun of Microsoft Paint:

http://www.youtube.com/watch?v=Hxx2KcPWWZg

Now, go to http://www.apple.com/ipad/ and click on the “watch the iPad video” link. See any similarities?

I kept waiting for Jobs to say something like, “haha just kidding, did you really think this is why we gathered all of you here today?” … except he didn’t. They’re completely serious about it. The apple.com home page says it is a “magical device”. Magical? Really? Unicorns and wizards are magical. They’re fun, but also fictional and nobody* actually takes them seriously.

magical!

That image is not edited with Paint.NET or Photoshop — they really had that slide up!

I’ll skip all of the obvious feminine hygiene references and jokes.

It’s a really big iPod Touch, and it has some wickedly good looking, and probably even well-written, UI.

But it can’t multitask. It doesn’t have a webcam for video calls. You still need a full PC/Mac to sync with. Apple, while publicly dissing them, has completely missed the point of netbooks: they are very cheap, and you can use all your existing stuff (apps, data, and devices) with them. If you drop it or lose it or break it, it’s not a big problem for the most part. Netbooks aren’t new or revolutionary devices: they’re simply a new price point.

I don’t believe that people want a third device. It isn’t something I would want to use everyday … why would I pay $500+ for it? Why would I buy a $30/month 3G data plan for it? Why should I have an iPhone in my pocket, and both an iPad and MacBook (or whatever) in my backpack? If I have a laptop and an iPhone, then I don’t need an iPad.

Any plausible reason that myself or my coworkers could come up with for actually buying an iPad was something that we could already do — and do better — on our iPhones, laptops, or desktops, or was just not possible with the iPad:

  • eBook reader? It’ll honestly be really good at that. But at a minimum of $500, I’d rather get the Amazon Kindle (it’s what, $200?). Or, and this is my personal preference, I’ll just buy the paperback for $10. I guess I’m old fashioned. Then again, my book shelf has been filling itself with books on physics and cosmology lately.
  • Taking notes in class? Except you still need a PC/Mac to sync with, and college kids don’t have oodles of money to throw at these things. So, I think they’ll skip it and just get a laptop. And there’s no stylus for free form note drawing, which I personally would need for any type of mathematics.
  • Can I plug it into my Mac/PC to use as a drawing tablet? Nope.
  • How about a Remote Desktop terminal so you can hook up to your main desktop/workstation while at the coffee shop or wherever? Sweet. A native iPad Remote Desktop app is very plausible. Except you have to buy a keyboard dock at that point, and you still won’t have a mouse. Why not just use your existing laptop? Or buy a $250 netbook?
  • A really big remote control for my home theater PC? Too expensive. Could be cool though.
  • How about docking it to my PC to use as an additional monitor? Nope.
  • Gaming! That must be it! Except I already have an iPhone. And an XBOX and a PS3. I really don’t need to play geoDefense on a larger screen, or Mass Effect 2 on a smaller one.
  • Install Windows 7. Nope, I don’t think you can do that 🙂

The list goes on and on. There’s nothing I can do on my iPhone or PC (laptop or desktop) that I can do better on the iPad. Nor is there anything the iPad can do that my other devices can’t. It’s too expensive, and there’s really no killer app. It does, however, have beautiful software, so I would like to give kudos to the software engineers who’ve worked on it.

I just don’t see the point. I’m still hoping for the “just kidding!” slide. I think they should’ve just extended Mac OS X to work better with a touch-only interface, and to scale down to even lower-end hardware. Add an iPhone emulator and extend the AppStore to Mac apps. Tada … I think that would sell.

Maybe they’ll prove me wrong. Maybe their stock price will hit $500. Or we could appeal to Occam’s Razor and observe that the Steve Jobs Reality Distortion Field has, apparently, been fully upgraded. Just like the Enterprise in-between every Star Trek movie …

* ok some people do … maybe they are the target market for the iPad?

Help test .NET Framework 4.0 Beta 2!

As I blogged about the other day, Paint.NET will be adopting .NET 4.0 fairly rapidly after its eventual release. The current release of Paint.NET, v3.5.2, makes use of .NET 3.5 SP1.

Scott Hanselman just blogged about how you can help to test out .NET 4.0 Beta 2 by setting a registry key so that it pops up in your Windows Update. The goal there is to test the deployment (aka installation) to help ensure things continue to go smoothly later this year when it’s rolled out to everyone.

It’s actually pretty easy and straightforward to do this… he’s got a .REG file you can download which pretty much does the whole thing for you.

Now, here’s where we can use big words like transitivity … by helping to test out .NET 4.0 Beta 2, you are in effect also helping out Paint.NET! I’m finally getting over this cold that seems to have hit everyone here in the Seattle area, and one of my next goals is to pop in that Visual Studio 2010 Beta 2 DVD and see how Paint.NET copes with the big scary framework upgrade…

You can also just go and install .NET 4.0 Beta 2 directly. However, Paint.NET won’t use it just yet.

I’ve also been doing a lot of deep thinking about what needs to be done for Paint.NET v4.0. There’s going to be a lot of changes under the hood in order to enable a whole lot of things that everyone’s been wanting for awhile, including and especially myself (please don’t ask what – at this point it’s just research, hope, and speculation). Many whiteboard markers are giving their lives for it …

Heads up: Paint.NET will require XP SP3 / Vista SP1 later this year

I’ve blogged about system requirements before. So far I’ve been content to leave the minimum version of Windows set to XP SP2, based both on user feedback and lack of necessity. It has come at the cost of adding about 2MB to the download package, but the work had already been completed and it was useful.

However, that will have to change soon. Later this year, Paint.NET will move to .NET 4.0. I am planning to do this before the increasingly mythic release of Paint.NET v4.0, and shortly after the public release of .NET 4.0 (whenever that ends up being). If you check out the download page for Microsoft .NET Framework 4.0 Beta 2, you will see that it requires XP SP3 or Vista SP1.

For many users this won’t be an issue. The updates are free*, and if you’re lucky then they’ll be automatically applied on some nice lazy weekend when you’re out sleeping, drinking, or fishing. Maybe even all three! Although if you haven’t updated yet, then please do so soon.

Many computers’ updates, especially those within the walls of corporate environments or educational institutions, are more conservatively applied (and with good reason). For those administrators in charge of such things, consider this blog post as my request to make sure all your XP boxes are at SP3, and that all your Vista boxes are at SP1 or SP2. There will then be one less obstacle toward getting .NET 4.0 installed, and thus one step closer toward the Paint.NET update which will require it.

While the minimum for Vista users will be SP1, I still recommend SP2 of course. That will help ensure you have the latest updates and security fixes as well as allowing you to install the Platform Update which includes DirectWrite, something that Paint.NET makes good use of if available.

For your convenience, here are download links for the service packs:

You can also just open up Windows Update and have it download and install things until it’s done.

* free in the sense that Microsoft does not charge for them.