JsrtExternalArrayBuffer.cpp 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. //-------------------------------------------------------------------------------------------------------
  2. // Copyright (C) Microsoft. All rights reserved.
  3. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information.
  4. //-------------------------------------------------------------------------------------------------------
  5. #include "JsrtPch.h"
  6. #include "JsrtExternalArrayBuffer.h"
  7. namespace Js
  8. {
  9. JsrtExternalArrayBuffer::JsrtExternalArrayBuffer(byte *buffer, uint32 length, JsFinalizeCallback finalizeCallback, void *callbackState, DynamicType *type)
  10. : ExternalArrayBuffer(buffer, length, type), finalizeCallback(finalizeCallback), callbackState(callbackState)
  11. {
  12. }
  13. JsrtExternalArrayBuffer* JsrtExternalArrayBuffer::New(byte *buffer, uint32 length, JsFinalizeCallback finalizeCallback, void *callbackState, DynamicType *type)
  14. {
  15. Recycler* recycler = type->GetScriptContext()->GetRecycler();
  16. return RecyclerNewFinalized(recycler, JsrtExternalArrayBuffer, buffer, length, finalizeCallback, callbackState, type);
  17. }
  18. void JsrtExternalArrayBuffer::Finalize(bool isShutdown)
  19. {
  20. if (finalizeCallback != nullptr && !isDetached)
  21. {
  22. finalizeCallback(callbackState);
  23. }
  24. }
  25. ArrayBufferDetachedStateBase* JsrtExternalArrayBuffer::CreateDetachedState(BYTE* buffer, DECLSPEC_GUARD_OVERFLOW uint32 bufferLength)
  26. {
  27. return HeapNew(JsrtExternalArrayBufferDetachedState, buffer, bufferLength, finalizeCallback, callbackState);
  28. };
  29. JsrtExternalArrayBuffer::JsrtExternalArrayBufferDetachedState::JsrtExternalArrayBufferDetachedState(
  30. BYTE* buffer, uint32 bufferLength, JsFinalizeCallback finalizeCallback, void *callbackState)
  31. : ExternalArrayBufferDetachedState(buffer, bufferLength), finalizeCallback(finalizeCallback), callbackState(callbackState)
  32. {}
  33. void JsrtExternalArrayBuffer::JsrtExternalArrayBufferDetachedState::ClearSelfOnly()
  34. {
  35. HeapDelete(this);
  36. }
  37. void JsrtExternalArrayBuffer::JsrtExternalArrayBufferDetachedState::DiscardState()
  38. {
  39. if (finalizeCallback != nullptr)
  40. {
  41. finalizeCallback(callbackState);
  42. }
  43. finalizeCallback = nullptr;
  44. }
  45. ArrayBuffer* JsrtExternalArrayBuffer::JsrtExternalArrayBufferDetachedState::Create(JavascriptLibrary* library)
  46. {
  47. ArrayBuffer* arr = JsrtExternalArrayBuffer::New(buffer, bufferLength, finalizeCallback, callbackState, library->GetArrayBufferType());
  48. JS_ETW(EventWriteJSCRIPT_RECYCLER_ALLOCATE_OBJECT(arr));
  49. return arr;
  50. }
  51. }