blob: 33e691a9fa9a8bcbdc055b0224cfcda9bea8541e [file] [log] [blame]
Kevin Lubickf5ea37f2019-02-28 10:06:18 -05001// Adds compile-time JS functions to augment the CanvasKit interface.
2// Specifically, anything that should only be on the Skottie builds of canvaskit.
3
4
Florin Malita71a23d42019-02-28 17:48:31 -05005CanvasKit.MakeManagedAnimation = function(json, assets) {
Kevin Lubickf5ea37f2019-02-28 10:06:18 -05006 if (!CanvasKit._MakeManagedAnimation) {
7 throw 'Not compiled with MakeManagedAnimation';
8 }
Florin Malita71a23d42019-02-28 17:48:31 -05009 if (!assets) {
10 return CanvasKit._MakeManagedAnimation(json, 0, nullptr, nullptr, nullptr);
Kevin Lubickf5ea37f2019-02-28 10:06:18 -050011 }
Florin Malita71a23d42019-02-28 17:48:31 -050012 var assetNamePtrs = [];
13 var assetDataPtrs = [];
14 var assetSizes = [];
Kevin Lubickf5ea37f2019-02-28 10:06:18 -050015
Florin Malita71a23d42019-02-28 17:48:31 -050016 var assetKeys = Object.keys(assets || {});
17 for (var i = 0; i < assetKeys.length; i++) {
18 var key = assetKeys[i];
19 var buffer = assets[key];
Kevin Lubickf5ea37f2019-02-28 10:06:18 -050020 var data = new Uint8Array(buffer);
21
22 var iptr = CanvasKit._malloc(data.byteLength);
23 CanvasKit.HEAPU8.set(data, iptr);
Florin Malita71a23d42019-02-28 17:48:31 -050024 assetDataPtrs.push(iptr);
25 assetSizes.push(data.byteLength);
Kevin Lubickf5ea37f2019-02-28 10:06:18 -050026
27 // lengthBytesUTF8 and stringToUTF8Array are defined in the emscripten
28 // JS. See https://kripken.github.io/emscripten-site/docs/api_reference/preamble.js.html#stringToUTF8
29 // Add 1 for null terminator
30 var strLen = lengthBytesUTF8(key) + 1;
31 var strPtr = CanvasKit._malloc(strLen);
32
33 stringToUTF8(key, strPtr, strLen);
Florin Malita71a23d42019-02-28 17:48:31 -050034 assetNamePtrs.push(strPtr);
Kevin Lubick88aff5f2019-02-28 16:05:09 -050035 }
36
Kevin Lubickf5ea37f2019-02-28 10:06:18 -050037 // Not entirely sure if it matters, but the uintptr_t are 32 bits
38 // we want to copy our array of uintptr_t into the right size memory.
Florin Malita71a23d42019-02-28 17:48:31 -050039 var namesPtr = copy1dArray(assetNamePtrs, CanvasKit.HEAPU32);
40 var assetsPtr = copy1dArray(assetDataPtrs, CanvasKit.HEAPU32);
41 var assetSizesPtr = copy1dArray(assetSizes, CanvasKit.HEAPU32);
Kevin Lubickf5ea37f2019-02-28 10:06:18 -050042
Florin Malita71a23d42019-02-28 17:48:31 -050043 var anim = CanvasKit._MakeManagedAnimation(json, assetKeys.length, namesPtr,
44 assetsPtr, assetSizesPtr);
Kevin Lubick88aff5f2019-02-28 16:05:09 -050045
Florin Malita71a23d42019-02-28 17:48:31 -050046 // We leave the asset data arrays and string data live and assume
Kevin Lubickf5ea37f2019-02-28 10:06:18 -050047 // it is now owned by the C++ code
Florin Malita71a23d42019-02-28 17:48:31 -050048 CanvasKit._free(namesPtr);
49 CanvasKit._free(assetsPtr);
50 CanvasKit._free(assetSizesPtr);
Kevin Lubickf5ea37f2019-02-28 10:06:18 -050051
Kevin Lubickf5ea37f2019-02-28 10:06:18 -050052 return anim;
53};