Cocoon 2.2.0 – V8 Update is here!

We have some important updates. The main one is the new Canvas+ Android Javascript V8 virtual machine integration.

Canvas+ Android V8 update

Canvas+ Android uses the v8 Javascript engine internally. We haven’t updated it in a long time as it requires quite a big code update inside Cocoon. As the previous version was a bit old already (v3.5), after the summer we decided to take the time to update v8 to a more recent version (v5.4) and now it’s ready to be used in the latest Canvas+ plugin v2.6.0 that is available in Cocoon v2.2.0.

What can I expect from this update?

The main two things that you’ll notice with this update are:

  • Better performance in JS. This version delivers a number of key improvements in memory footprint and startup speed. These primarily help accelerate initial script execution and reduce page load.
  • ECMAScript ES6 support.

Better performance includes many different specific performance improvements like:

  • TypedArray performance improvements. TypedArrays are heavily used in rendering engines. For example, engines often create typed arrays (such as Float32Array) in JavaScript and pass them to WebGL after applying transformations.
  • Idle garbage collection scheduling. Garbage collection operations are scheduled during idle times on the main thread which unblocks the compositor and results in smoother rendering.
  • Improvements in specific Javascript features: executing loops like for-in, Object.assign, Promise and RegExp instantiation, calling Object.prototype.hasOwnProperty, Math.floor, Math.round and Math.ceil, Array.prototype.push, Object.keys, Array.prototype.join & Array.prototype.toString, Flattening repeat strings e.g. ‘.’.repeat(1000), etc

There are a lot more things, theseare just the main ones. You can read further in the V8 release notes here.

As v2.6.0 includes lots of new features and is quite an update we have also released a new v2.5.x branch release, Canvas+ v2.5.4 that includes the previous V8 version but with all the bug fixes that are also included in v2.6.0 so in case you find any issues with v2.6.0, you can still switch back to v2.5.4.

If you want to use v2.5.4, you’ll need to manually set that Canvas+ plugin version in you project config.xml:

<plugin name="com.ludei.canvasplus.android" spec="2.5.4"/>

The V8 update is a Canvas+ Android only feature.

New Cocoon v2.2.0

We have released a new Cocoon v2.2.0 that includes fixes and updates in all the Cocoon core plugins and Canvas+ v2.6.0. When choosing Cocoon v2.2.0 you’ll be automatically using the updated plugin set. The main plugin improvements are:

  • Canvas+ 2.6.0 with bug fixes and the V8 update
  • Webview+ update with lots of bug fixes for the iOS Webview+ and Developer App integration.

As always, you can use this Cocoon version by just changing the Cocoon version in your project:

Of course you can still use previous versions of Cocoon and you’ll only be using 2.2.0 automatically in case you have set the Cocoon version to latest.

Architecture selection

This is something that has been requested several times in the past. At the moment when building a Cocoon app for Android both, armv7 and x86 where being built, since this release you can select if you want to build armv7, x86 or both architectures.

This will save both final APK size and also compilation time so you no longer need to wait twice the time in case you only need one architecture or you are just testing.

2.5.4 & 2.6.0 Bugfixes and improvements

Apart from the Canvas+ Android v8 update we have been working on bug fixes for both Canvas+ Android and iOS.

These are the main ones:

  • Now the Canvas+ internal webview uses the accelerated environment by default in iOS.
  • Reduced APK size as ARM architecture has been removed from Canvas+ Android 2.6.0.
  • Fixed hang when the App is suspended and an Audio pause is received.
  • Updated iOS device ID list reported by getDeviceInfo().
  • Fixed iOS internal webview so JS execution is not paused when the webview is not showing.
  • Fix crash when texture is disposed twice: this happens when texture loader thinks that texture is still alive but the new image was not loaded or is empty, and tries to dispose the current texture. (ie. When using image.src=“” to dispose images)
  • Fixed Local Storage data write to the internal plist with proper encoding. This might cause local storage corruption.
  • Fixed issue with font-size and line-height in fonts definition parsing.
  • Enable NPOT textures by default. This will be noticeable in some memory saving when allocating textures that are not POT.
  • Audio loading issues. Some audios might not be loaded correctly with slow connections.

Let us know what you think about this new update!