* Don't use JSON to send the result of `ipcRenderer.sendSync`.
- Change the return type of AtomViewHostMsg_Message_Sync from `base::string16`
  to `base::ListValue`
- Adjust lib/browser/api/web-contents.js and /lib/renderer/api/ipc-renderer.js
  to wrap/unwrap return values to/from array, instead of
  serializing/deserializing JSON.
This change can greatly improve `ipcRenderer.sendSync` calls where the return
value contains Buffer instances, because those are converted to Array before
being serialized to JSON(which has no efficient way of representing byte
arrays).
A simple benchmark where remote.require('fs') was used to read a 16mb file got
at least 5x faster, not to mention it used a lot less memory.  This difference
tends increases with larger buffers.
* Don't base64 encode Buffers
* Don't allocate V8ValueConverter on the heap
* Replace hidden global.sandbox with NodeBindings::IsInitialized()
* Refactoring: check NodeBindings::IsInitialized() in V8ValueConverter
* Refactor problematic test to make it more reliable
* Add tests for NaN and Infinity
		
	
			
		
			
				
	
	
		
			36 lines
		
	
	
	
		
			604 B
			
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			36 lines
		
	
	
	
		
			604 B
			
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
exports.print = function (obj) {
 | 
						|
  return obj.constructor.name
 | 
						|
}
 | 
						|
 | 
						|
exports.echo = function (obj) {
 | 
						|
  return obj
 | 
						|
}
 | 
						|
 | 
						|
const typedArrays = {
 | 
						|
  Int8Array,
 | 
						|
  Uint8Array,
 | 
						|
  Uint8ClampedArray,
 | 
						|
  Int16Array,
 | 
						|
  Uint16Array,
 | 
						|
  Int32Array,
 | 
						|
  Uint32Array,
 | 
						|
  Float32Array,
 | 
						|
  Float64Array
 | 
						|
}
 | 
						|
 | 
						|
exports.typedArray = function (type, values) {
 | 
						|
  const constructor = typedArrays[type]
 | 
						|
  const array = new constructor(values.length)
 | 
						|
  for (let i = 0; i < values.length; ++i) {
 | 
						|
    array[i] = values[i]
 | 
						|
  }
 | 
						|
  return array
 | 
						|
}
 | 
						|
 | 
						|
exports.getNaN = function () {
 | 
						|
  return NaN
 | 
						|
}
 | 
						|
 | 
						|
exports.getInfinity = function () {
 | 
						|
  return Infinity
 | 
						|
}
 |