JITManager.h 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216
  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. #pragma once
  6. // We need real JITManager code when on _WIN32 or explict ENABLE_OOP_NATIVE_CODEGEN.
  7. // Otherwise we use a dummy JITManager which disables OOP JIT to reduce code noise.
  8. #if _WIN32 || ENABLE_OOP_NATIVE_CODEGEN
  9. class JITManager
  10. {
  11. public:
  12. HRESULT ConnectRpcServer(__in HANDLE jitProcessHandle, __in_opt void* serverSecurityDescriptor, __in UUID connectionUuid);
  13. bool IsConnected() const;
  14. bool IsJITServer() const;
  15. void SetIsJITServer();
  16. bool IsOOPJITEnabled() const;
  17. void EnableOOPJIT();
  18. HANDLE GetJITTargetHandle() const;
  19. HRESULT InitializeThreadContext(
  20. __in ThreadContextDataIDL * data,
  21. __out PPTHREADCONTEXT_HANDLE threadContextInfoAddress,
  22. __out intptr_t *prereservedRegionAddr);
  23. HRESULT CleanupThreadContext(
  24. __inout PPTHREADCONTEXT_HANDLE threadContextInfoAddress);
  25. HRESULT UpdatePropertyRecordMap(
  26. __in PTHREADCONTEXT_HANDLE threadContextInfoAddress,
  27. __in BVSparseNodeIDL * updatedPropsBVHead);
  28. HRESULT NewInterpreterThunkBlock(
  29. __in PSCRIPTCONTEXT_HANDLE scriptContextInfoAddress,
  30. __in boolean asmJsThunk,
  31. __out InterpreterThunkInfoIDL * thunkInfo);
  32. HRESULT AddDOMFastPathHelper(
  33. __in PSCRIPTCONTEXT_HANDLE scriptContextInfoAddress,
  34. __in intptr_t funcInfoAddr,
  35. __in int helper);
  36. HRESULT AddModuleRecordInfo(
  37. /* [in] */ PSCRIPTCONTEXT_HANDLE scriptContextInfoAddress,
  38. /* [in] */ unsigned int moduleId,
  39. /* [in] */ intptr_t localExportSlotsAddr);
  40. HRESULT SetWellKnownHostTypeId(
  41. __in PTHREADCONTEXT_HANDLE threadContextRoot,
  42. __in int typeId);
  43. HRESULT InitializeScriptContext(
  44. __in ScriptContextDataIDL * data,
  45. __in PTHREADCONTEXT_HANDLE threadContextInfoAddress,
  46. __out PPSCRIPTCONTEXT_HANDLE scriptContextInfoAddress);
  47. HRESULT CleanupProcess();
  48. HRESULT CleanupScriptContext(
  49. __inout PPSCRIPTCONTEXT_HANDLE scriptContextInfoAddress);
  50. HRESULT CloseScriptContext(
  51. __in PSCRIPTCONTEXT_HANDLE scriptContextInfoAddress);
  52. HRESULT FreeAllocation(
  53. __in PTHREADCONTEXT_HANDLE threadContextInfoAddress,
  54. __in intptr_t address);
  55. HRESULT SetIsPRNGSeeded(
  56. __in PSCRIPTCONTEXT_HANDLE scriptContextInfoAddress,
  57. __in boolean value);
  58. HRESULT IsNativeAddr(
  59. __in PTHREADCONTEXT_HANDLE threadContextInfoAddress,
  60. __in intptr_t address,
  61. __out boolean * result);
  62. HRESULT RemoteCodeGenCall(
  63. __in CodeGenWorkItemIDL *workItemData,
  64. __in PSCRIPTCONTEXT_HANDLE scriptContextInfoAddress,
  65. __out JITOutputIDL *jitData);
  66. #if DBG
  67. HRESULT IsInterpreterThunkAddr(
  68. __in PSCRIPTCONTEXT_HANDLE scriptContextInfoAddress,
  69. __in intptr_t address,
  70. __in boolean asmjsThunk,
  71. __out boolean * result);
  72. #endif
  73. HRESULT Shutdown();
  74. static JITManager * GetJITManager();
  75. static void HandleServerCallResult(HRESULT hr);
  76. private:
  77. JITManager();
  78. ~JITManager();
  79. HRESULT CreateBinding(
  80. __in HANDLE serverProcessHandle,
  81. __in_opt void* serverSecurityDescriptor,
  82. __in UUID* connectionUuid,
  83. __out RPC_BINDING_HANDLE* bindingHandle);
  84. RPC_BINDING_HANDLE m_rpcBindingHandle;
  85. HANDLE m_targetHandle;
  86. UUID m_jitConnectionId;
  87. bool m_oopJitEnabled;
  88. bool m_isJITServer;
  89. static JITManager s_jitManager;
  90. };
  91. #else // !ENABLE_OOP_NATIVE_CODEGEN
  92. class JITManager
  93. {
  94. public:
  95. HRESULT ConnectRpcServer(__in HANDLE jitProcessHandle, __in_opt void* serverSecurityDescriptor, __in UUID connectionUuid)
  96. { Assert(false); return E_FAIL; }
  97. bool IsConnected() const { return false; }
  98. bool IsJITServer() const { return false; }
  99. void SetIsJITServer() { Assert(false); }
  100. bool IsOOPJITEnabled() const { return false; }
  101. void EnableOOPJIT() { Assert(false); }
  102. HANDLE GetJITTargetHandle() const
  103. { Assert(false); return HANDLE(); }
  104. HRESULT InitializeThreadContext(
  105. __in ThreadContextDataIDL * data,
  106. __out PPTHREADCONTEXT_HANDLE threadContextInfoAddress,
  107. __out intptr_t *prereservedRegionAddr)
  108. { Assert(false); return E_FAIL; }
  109. HRESULT CleanupThreadContext(
  110. __inout PPTHREADCONTEXT_HANDLE threadContextInfoAddress)
  111. { Assert(false); return E_FAIL; }
  112. HRESULT UpdatePropertyRecordMap(
  113. __in PTHREADCONTEXT_HANDLE threadContextInfoAddress,
  114. __in BVSparseNodeIDL * updatedPropsBVHead)
  115. { Assert(false); return E_FAIL; }
  116. HRESULT AddDOMFastPathHelper(
  117. __in PSCRIPTCONTEXT_HANDLE scriptContextInfoAddress,
  118. __in intptr_t funcInfoAddr,
  119. __in int helper)
  120. { Assert(false); return E_FAIL; }
  121. HRESULT AddModuleRecordInfo(
  122. /* [in] */ PSCRIPTCONTEXT_HANDLE scriptContextInfoAddress,
  123. /* [in] */ unsigned int moduleId,
  124. /* [in] */ intptr_t localExportSlotsAddr)
  125. { Assert(false); return E_FAIL; }
  126. HRESULT SetWellKnownHostTypeId(
  127. __in PTHREADCONTEXT_HANDLE threadContextRoot,
  128. __in int typeId)
  129. { Assert(false); return E_FAIL; }
  130. HRESULT InitializeScriptContext(
  131. __in ScriptContextDataIDL * data,
  132. __in PTHREADCONTEXT_HANDLE threadContextInfoAddress,
  133. __out PPSCRIPTCONTEXT_HANDLE scriptContextInfoAddress)
  134. { Assert(false); return E_FAIL; }
  135. HRESULT CleanupProcess()
  136. { Assert(false); return E_FAIL; }
  137. HRESULT CleanupScriptContext(
  138. __inout PPSCRIPTCONTEXT_HANDLE scriptContextInfoAddress)
  139. { Assert(false); return E_FAIL; }
  140. HRESULT CloseScriptContext(
  141. __in PSCRIPTCONTEXT_HANDLE scriptContextInfoAddress)
  142. { Assert(false); return E_FAIL; }
  143. HRESULT FreeAllocation(
  144. __in PTHREADCONTEXT_HANDLE threadContextInfoAddress,
  145. __in intptr_t address)
  146. { Assert(false); return E_FAIL; }
  147. HRESULT SetIsPRNGSeeded(
  148. __in PSCRIPTCONTEXT_HANDLE scriptContextInfoAddress,
  149. __in boolean value)
  150. { Assert(false); return E_FAIL; }
  151. HRESULT IsNativeAddr(
  152. __in PTHREADCONTEXT_HANDLE threadContextInfoAddress,
  153. __in intptr_t address,
  154. __out boolean * result)
  155. { Assert(false); return E_FAIL; }
  156. HRESULT RemoteCodeGenCall(
  157. __in CodeGenWorkItemIDL *workItemData,
  158. __in PSCRIPTCONTEXT_HANDLE scriptContextInfoAddress,
  159. __out JITOutputIDL *jitData)
  160. { Assert(false); return E_FAIL; }
  161. HRESULT Shutdown()
  162. { Assert(false); return E_FAIL; }
  163. static JITManager * GetJITManager()
  164. { return &s_jitManager; }
  165. static void HandleServerCallResult(HRESULT hr);
  166. private:
  167. static JITManager s_jitManager;
  168. };
  169. #endif // !ENABLE_OOP_NATIVE_CODEGEN