xref: /aosp_15_r20/external/skia/modules/canvaskit/htmlcanvas/util.js (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
1*c8dee2aaSAndroid Build Coastguard Worker
2*c8dee2aaSAndroid Build Coastguard Worker// General purpose utility functions go in this file.
3*c8dee2aaSAndroid Build Coastguard Worker
4*c8dee2aaSAndroid Build Coastguard Worker
5*c8dee2aaSAndroid Build Coastguard Workerfunction allAreFinite(args) {
6*c8dee2aaSAndroid Build Coastguard Worker  for (var i = 0; i < args.length; i++) {
7*c8dee2aaSAndroid Build Coastguard Worker    if (args[i] !== undefined && !Number.isFinite(args[i])) {
8*c8dee2aaSAndroid Build Coastguard Worker      return false;
9*c8dee2aaSAndroid Build Coastguard Worker    }
10*c8dee2aaSAndroid Build Coastguard Worker  }
11*c8dee2aaSAndroid Build Coastguard Worker  return true;
12*c8dee2aaSAndroid Build Coastguard Worker}
13*c8dee2aaSAndroid Build Coastguard Worker
14*c8dee2aaSAndroid Build Coastguard Workerfunction toBase64String(bytes) {
15*c8dee2aaSAndroid Build Coastguard Worker  if (typeof Buffer !== 'undefined') { // Are we on node?
16*c8dee2aaSAndroid Build Coastguard Worker    return Buffer.from(bytes).toString('base64');
17*c8dee2aaSAndroid Build Coastguard Worker  } else {
18*c8dee2aaSAndroid Build Coastguard Worker    // From https://stackoverflow.com/a/25644409
19*c8dee2aaSAndroid Build Coastguard Worker    // because the naive solution of
20*c8dee2aaSAndroid Build Coastguard Worker    //     btoa(String.fromCharCode.apply(null, bytes));
21*c8dee2aaSAndroid Build Coastguard Worker    // would occasionally throw "Maximum call stack size exceeded"
22*c8dee2aaSAndroid Build Coastguard Worker    var CHUNK_SIZE = 0x8000; //arbitrary number
23*c8dee2aaSAndroid Build Coastguard Worker    var index = 0;
24*c8dee2aaSAndroid Build Coastguard Worker    var length = bytes.length;
25*c8dee2aaSAndroid Build Coastguard Worker    var result = '';
26*c8dee2aaSAndroid Build Coastguard Worker    var slice;
27*c8dee2aaSAndroid Build Coastguard Worker    while (index < length) {
28*c8dee2aaSAndroid Build Coastguard Worker      slice = bytes.slice(index, Math.min(index + CHUNK_SIZE, length));
29*c8dee2aaSAndroid Build Coastguard Worker      result += String.fromCharCode.apply(null, slice);
30*c8dee2aaSAndroid Build Coastguard Worker      index += CHUNK_SIZE;
31*c8dee2aaSAndroid Build Coastguard Worker    }
32*c8dee2aaSAndroid Build Coastguard Worker    return btoa(result);
33*c8dee2aaSAndroid Build Coastguard Worker  }
34*c8dee2aaSAndroid Build Coastguard Worker}
35*c8dee2aaSAndroid Build Coastguard Worker
36