
(function(CanvasKit){
    CanvasKit.SkpFilePlayer = function(file_arraybuf) {
    // Create the instance of SkpDebugPlayer
    var player = new this.SkpDebugPlayer();
    // Convert file (an ArrayBuffer) into a typedarray,
    // otherwise fileMem.set() below seems to have no effect.
    var fileContents = new Uint8Array(file_arraybuf);
    var size = fileContents.byteLength;
    // Allocate memory in wasm to hold the skp file selected by the user.
    var fileMemPtr = this._malloc(size);
    // Make a typed array view of that memory
    var fileMem = new Uint8Array(CanvasKit.HEAPU8.buffer, fileMemPtr, size);
    // Copy the file into it
    fileMem.set(fileContents);
    // Hand off pointer to wasm
    var error = player.loadSkp(fileMemPtr, size);
    // Free the memory that was used to hold the file, since it is now represented as an SkPicture
    this._free(fileMemPtr)
    return {
        'error': error,
        'player': player
    };
  }

}(Module)); // When this file is loaded in, the high level object is "Module";
