예제 #1
0
        /// <summary>
        /// Creates a new instance of a Barista Runtime.
        /// </summary>
        public BaristaRuntime(IJavaScriptEngine engine, IBaristaContextFactory contextFactory, JavaScriptRuntimeSafeHandle runtimeHandle)
            : base(engine, runtimeHandle)
        {
            m_contextFactory = contextFactory ?? throw new ArgumentNullException(nameof(contextFactory));

            JavaScriptMemoryAllocationCallback runtimeMemoryAllocationChanging = (IntPtr callbackState, JavaScriptMemoryEventType allocationEvent, UIntPtr allocationSize) =>
            {
                try
                {
                    return(OnRuntimeMemoryAllocationChanging(callbackState, allocationEvent, allocationSize));
                }
                catch
                {
                    //Do Nothing.
                    return(true);
                }
            };

            m_runtimeMemoryAllocationChangingDelegateHandle = GCHandle.Alloc(runtimeMemoryAllocationChanging);
            Engine.JsSetRuntimeMemoryAllocationCallback(runtimeHandle, IntPtr.Zero, runtimeMemoryAllocationChanging);

            JavaScriptBeforeCollectCallback beforeCollectCallback = (IntPtr callbackState) =>
            {
                try
                {
                    OnBeforeCollect(IntPtr.Zero, callbackState);
                }
                catch
                {
                    //Do Nothing.
                }
            };

            m_beforeCollectCallbackDelegateHandle = GCHandle.Alloc(beforeCollectCallback);
            Engine.JsSetRuntimeBeforeCollectCallback(runtimeHandle, IntPtr.Zero, beforeCollectCallback);
        }
예제 #2
0
 internal static extern JavaScriptErrorCode JsSetRuntimeMemoryAllocationCallback(JavaScriptRuntime runtime, IntPtr callbackState, JavaScriptMemoryAllocationCallback allocationCallback);
예제 #3
0
 internal static extern JavaScriptErrorCode JsSetRuntimeMemoryAllocationCallback(JavaScriptRuntime runtime, IntPtr callbackState, JavaScriptMemoryAllocationCallback allocationCallback);
예제 #4
0
 /// <summary>
 ///     Sets a memory allocation callback for specified runtime
 /// </summary>
 /// <remarks>
 ///     <para>
 ///     Registering a memory allocation callback will cause the runtime to call back to the host
 ///     whenever it acquires memory from, or releases memory to, the OS. The callback routine is
 ///     called before the runtime memory manager allocates a block of memory. The allocation will
 ///     be rejected if the callback returns false. The runtime memory manager will also invoke the
 ///     callback routine after freeing a block of memory, as well as after allocation failures.
 ///     </para>
 ///     <para>
 ///     The callback is invoked on the current runtime execution thread, therefore execution is
 ///     blocked until the callback completes.
 ///     </para>
 ///     <para>
 ///     The return value of the callback is not stored; previously rejected allocations will not
 ///     prevent the runtime from invoking the callback again later for new memory allocations.
 ///     </para>
 /// </remarks>
 /// <param name="callbackState">
 ///     User provided state that will be passed back to the callback.
 /// </param>
 /// <param name="allocationCallback">
 ///     Memory allocation callback to be called for memory allocation events.
 /// </param>
 public void SetMemoryAllocationCallback(IntPtr callbackState, JavaScriptMemoryAllocationCallback allocationCallback)
 {
     Native.ThrowIfError(Native.JsSetRuntimeMemoryAllocationCallback(this, callbackState, allocationCallback));
 }
예제 #5
0
 /// <summary>
 /// Sets a memory allocation callback for specified runtime
 /// </summary>
 /// <remarks>
 /// <para>
 /// Registering a memory allocation callback will cause the runtime to call back to the host 
 /// whenever it acquires memory from, or releases memory to, the OS. The callback routine is
 /// called before the runtime memory manager allocates a block of memory. The allocation will
 /// be rejected if the callback returns false. The runtime memory manager will also invoke the
 /// callback routine after freeing a block of memory, as well as after allocation failures. 
 /// </para>
 /// <para>
 /// The callback is invoked on the current runtime execution thread, therefore execution is 
 /// blocked until the callback completes.
 /// </para>
 /// <para>
 /// The return value of the callback is not stored; previously rejected allocations will not
 /// prevent the runtime from invoking the callback again later for new memory allocations.
 /// </para>
 /// </remarks>
 /// <param name="callbackState">
 /// User provided state that will be passed back to the callback.
 /// </param>
 /// <param name="allocationCallback">
 /// Memory allocation callback to be called for memory allocation events.
 /// </param>
 public void SetMemoryAllocationCallback(IntPtr callbackState, JavaScriptMemoryAllocationCallback allocationCallback)
 {
     Native.ThrowIfError(Native.JsSetRuntimeMemoryAllocationCallback(this, callbackState, allocationCallback));
 }