Skip to content

Commit 2ef1961

Browse files
committed
fix: release build with v8
1 parent d10f7b0 commit 2ef1961

File tree

18 files changed

+399
-205
lines changed

18 files changed

+399
-205
lines changed
Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
Added Properties 54
22
Ignored Properties 2 duplicates.
3-
Added Methods 81316
4-
Ignored Methods 3300 duplicates.
5-
Added Fields 54583
6-
Ignored Fields 16676 duplicates.
3+
Added Methods 81318
4+
Ignored Methods 3302 duplicates.
5+
Added Fields 54585
6+
Ignored Fields 16678 duplicates.

test-app/runtime/src/main/cpp/napi/hermes/jsr.cpp

Lines changed: 35 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ JSR::JSR() {
1111
threadSafeRuntime = facebook::hermes::makeThreadSafeHermesRuntime(config);
1212
rt = (facebook::hermes::HermesRuntime *)&threadSafeRuntime->getUnsafeRuntime();
1313
}
14+
std::unordered_map<napi_env, JSR*> JSR::env_to_jsr_cache;
1415

1516
napi_status js_create_runtime(napi_runtime* runtime) {
1617
if (runtime == nullptr) return napi_invalid_arg;
@@ -22,23 +23,35 @@ napi_status js_create_runtime(napi_runtime* runtime) {
2223
return napi_ok;
2324
}
2425

25-
napi_status jsr_lock_runtime(napi_runtime runtime) {
26-
runtime->hermes->threadSafeRuntime->lock();
26+
napi_status js_lock_env(napi_env env) {
27+
auto itFound = JSR::env_to_jsr_cache.find(env);
28+
if (itFound == JSR::env_to_jsr_cache.end()) {
29+
return napi_invalid_arg;
30+
}
31+
32+
itFound->second->lock();
33+
2734
return napi_ok;
2835
}
2936

30-
napi_status jsr_unlock_runtime(napi_runtime runtime) {
31-
runtime->hermes->threadSafeRuntime->unlock();
37+
napi_status js_unlock_env(napi_env env) {
38+
auto itFound = JSR::env_to_jsr_cache.find(env);
39+
if (itFound == JSR::env_to_jsr_cache.end()) {
40+
return napi_invalid_arg;
41+
}
42+
43+
itFound->second->unlock();
44+
3245
return napi_ok;
3346
}
34-
3547
napi_status js_create_napi_env(napi_env* env, napi_runtime runtime) {
3648
if (env == nullptr) return napi_invalid_arg;
49+
JSR::env_to_jsr_cache.insert(std::make_pair(*env, runtime->hermes));
50+
3751
return runtime->hermes->rt->createNapiEnv( env);
3852
}
3953

4054
napi_status js_free_napi_env(napi_env env) {
41-
// return jsr_env_unref(env);
4255
return napi_ok;
4356
}
4457

@@ -64,3 +77,19 @@ napi_status js_execute_pending_jobs(napi_env env) {
6477
bool result;
6578
return jsr_drain_microtasks(env, 0, &result);
6679
}
80+
81+
napi_status js_get_engine_ptr(napi_env env, int64_t *engine_ptr) {
82+
return napi_ok;
83+
}
84+
85+
napi_status js_adjust_external_memory(napi_env env, int64_t changeInBytes, int64_t* externalMemory) {
86+
return napi_ok;
87+
}
88+
89+
napi_status js_cache_script(napi_env env, const char *source, const char *file) {
90+
return napi_ok;
91+
}
92+
napi_status js_run_cached_script(napi_env env, const char * file, napi_value script, void* cache, napi_value *result) {
93+
return napi_ok;
94+
}
95+

test-app/runtime/src/main/cpp/napi/hermes/jsr.h

Lines changed: 33 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,20 @@ class JSR {
1616
JSR();
1717
std::unique_ptr<facebook::jsi::ThreadSafeRuntime> threadSafeRuntime;
1818
facebook::hermes::HermesRuntime* rt;
19+
std::recursive_mutex js_mutex;
20+
void lock() {
21+
js_mutex.lock();
22+
}
23+
void unlock() {
24+
js_mutex.unlock();
25+
}
26+
27+
static std::unordered_map<napi_env, JSR *> env_to_jsr_cache;
1928
};
2029

2130
napi_status js_create_runtime(napi_runtime* runtime);
22-
napi_status jsr_lock_runtime(napi_runtime runtime);
23-
napi_status jsr_unlock_runtime(napi_runtime runtime);
31+
napi_status js_lock_env(napi_env env);
32+
napi_status js_unlock_env(napi_env env);
2433
napi_status js_create_napi_env(napi_env* env, napi_runtime runtime);
2534
napi_status js_free_napi_env(napi_env env);
2635
napi_status js_free_runtime(napi_runtime runtime);
@@ -30,8 +39,29 @@ napi_status js_execute_script(napi_env env,
3039
napi_value *result);
3140

3241
napi_status js_execute_pending_jobs(napi_env env);
33-
3442
napi_status js_get_engine_ptr(napi_env env, int64_t *engine_ptr);
43+
napi_status js_adjust_external_memory(napi_env env, int64_t changeInBytes, int64_t* externalMemory);
44+
napi_status js_cache_script(napi_env env, const char *source, const char *file);
45+
napi_status js_run_cached_script(napi_env env, const char * file, napi_value script, void* cache, napi_value *result);
46+
47+
class NapiScope {
48+
public:
49+
explicit NapiScope(napi_env env)
50+
: env_(env)
51+
{
52+
js_lock_env(env_);
53+
napi_open_handle_scope(env_, &napiHandleScope_);
54+
}
55+
56+
~NapiScope() {
57+
js_unlock_env(env_);
58+
napi_close_handle_scope(env_, napiHandleScope_);
59+
}
60+
61+
private:
62+
napi_env env_;
63+
napi_handle_scope napiHandleScope_;
64+
};
3565

3666
#define JSEnterScope
3767
#define JSEnter

test-app/runtime/src/main/cpp/napi/jsc/jsr.cpp

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,14 @@ napi_status js_create_napi_env(napi_env* env, napi_runtime runtime) {
2828

2929
}
3030

31+
napi_status js_lock_env(napi_env env) {
32+
return napi_ok;
33+
}
34+
35+
napi_status js_unlock_env(napi_env env) {
36+
return napi_ok;
37+
}
38+
3139
napi_status js_free_napi_env(napi_env env) {
3240
if (env == nullptr) return napi_invalid_arg;
3341
delete env;
@@ -56,3 +64,16 @@ napi_status js_get_engine_ptr(napi_env env, int64_t *engine_ptr) {
5664
*engine_ptr = (int64_t) 0;
5765
return napi_ok;
5866
}
67+
68+
napi_status js_adjust_external_memory(napi_env env, int64_t changeInBytes, int64_t *externalMemory) {
69+
return napi_ok;
70+
}
71+
72+
napi_status js_cache_script(napi_env env, const char *source, const char *file) {
73+
return napi_ok;
74+
}
75+
76+
napi_status js_run_cached_script(napi_env env, const char *file, napi_value script, void *cache,
77+
napi_value *result) {
78+
return napi_ok;
79+
}

test-app/runtime/src/main/cpp/napi/jsc/jsr.h

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ typedef struct NapiRuntime *napi_runtime;
1111

1212
napi_status js_create_runtime(napi_runtime* runtime);
1313
napi_status js_create_napi_env(napi_env* env, napi_runtime runtime);
14+
napi_status js_lock_env(napi_env env);
15+
napi_status js_unlock_env(napi_env env);
1416
napi_status js_free_napi_env(napi_env env);
1517
napi_status js_free_runtime(napi_runtime runtime);
1618
napi_status js_execute_script(napi_env env,
@@ -19,11 +21,28 @@ napi_status js_execute_script(napi_env env,
1921
napi_value *result);
2022

2123
napi_status js_execute_pending_jobs(napi_env env);
22-
2324
napi_status js_get_engine_ptr(napi_env env, int64_t *engine_ptr);
25+
napi_status js_adjust_external_memory(napi_env env, int64_t changeInBytes, int64_t* externalMemory);
26+
napi_status js_cache_script(napi_env env, const char *source, const char *file);
27+
napi_status js_run_cached_script(napi_env env, const char * file, napi_value script, void* cache, napi_value *result);
28+
29+
class NapiScope {
30+
public:
31+
explicit NapiScope(napi_env env)
32+
: env_(env)
33+
{
34+
napi_open_handle_scope(env_, &napiHandleScope_);
35+
}
36+
37+
~NapiScope() {
38+
napi_close_handle_scope(env_, napiHandleScope_);
39+
}
40+
41+
private:
42+
napi_env env_;
43+
napi_handle_scope napiHandleScope_;
44+
};
2445

2546
#define JSEnterScope
26-
#define JSEnter
27-
#define JSLeave
2847

2948
#endif //TEST_APP_JSR_H
Lines changed: 56 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,76 @@
11
#include "jsr.h"
22

3-
napi_status js_create_runtime(napi_runtime *runtime)
4-
{
3+
JSR::JSR() = default;
4+
5+
std::unordered_map<napi_env, JSR *> JSR::env_to_jsr_cache;
6+
7+
napi_status js_create_runtime(napi_runtime *runtime) {
58
return qjs_create_runtime(runtime);
69
}
7-
napi_status js_create_napi_env(napi_env *env, napi_runtime runtime)
8-
{
9-
return qjs_create_napi_env(env, runtime);
10+
11+
napi_status js_create_napi_env(napi_env *env, napi_runtime runtime) {
12+
napi_status status = qjs_create_napi_env(env, runtime);
13+
14+
JSR::env_to_jsr_cache.insert(std::make_pair(*env, new JSR()));
15+
return status;
16+
}
17+
18+
napi_status js_lock_env(napi_env env) {
19+
auto itFound = JSR::env_to_jsr_cache.find(env);
20+
if (itFound == JSR::env_to_jsr_cache.end()) {
21+
return napi_invalid_arg;
22+
}
23+
24+
itFound->second->lock();
25+
26+
return napi_ok;
1027
}
11-
napi_status js_free_napi_env(napi_env env)
12-
{
28+
29+
napi_status js_unlock_env(napi_env env) {
30+
auto itFound = JSR::env_to_jsr_cache.find(env);
31+
if (itFound == JSR::env_to_jsr_cache.end()) {
32+
return napi_invalid_arg;
33+
}
34+
35+
itFound->second->unlock();
36+
37+
return napi_ok;
38+
}
39+
40+
napi_status js_free_napi_env(napi_env env) {
41+
auto itFound = JSR::env_to_jsr_cache.find(env);
42+
if (itFound != JSR::env_to_jsr_cache.end()) {
43+
delete itFound->second;
44+
JSR::env_to_jsr_cache.erase(env);
45+
}
1346
return qjs_free_napi_env(env);
1447
}
15-
napi_status js_free_runtime(napi_runtime runtime)
16-
{
48+
49+
napi_status js_free_runtime(napi_runtime runtime) {
1750
return qjs_free_runtime(runtime);
1851
}
52+
1953
napi_status js_execute_script(napi_env env,
2054
napi_value script,
2155
const char *file,
22-
napi_value *result)
23-
{
56+
napi_value *result) {
2457
return qjs_execute_script(env, script, file, result);
2558
}
2659

27-
napi_status js_execute_pending_jobs(napi_env env)
28-
{
60+
napi_status js_execute_pending_jobs(napi_env env) {
2961
return qjs_execute_pending_jobs(env);
3062
}
3163

32-
napi_status js_adjust_external_memory(napi_env env, int64_t changeInBytes, int64_t* externalMemory) {
64+
napi_status
65+
js_adjust_external_memory(napi_env env, int64_t changeInBytes, int64_t *externalMemory) {
66+
return napi_ok;
67+
}
68+
69+
napi_status js_cache_script(napi_env env, const char *source, const char *file) {
70+
return napi_ok;
71+
}
72+
73+
napi_status js_run_cached_script(napi_env env, const char *file, napi_value script, void *cache,
74+
napi_value *result) {
3375
return napi_ok;
3476
}

test-app/runtime/src/main/cpp/napi/quickjs/jsr.h

Lines changed: 38 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,27 @@
44

55
#ifndef TEST_APP_JSR_H
66
#define TEST_APP_JSR_H
7-
87
#include "js_native_api.h"
8+
#include "mutex"
9+
10+
class JSR {
11+
public:
12+
JSR();
13+
std::recursive_mutex js_mutex;
14+
void lock() {
15+
js_mutex.lock();
16+
}
17+
void unlock() {
18+
js_mutex.unlock();
19+
}
20+
21+
static std::unordered_map<napi_env, JSR *> env_to_jsr_cache;
22+
};
923

1024
napi_status js_create_runtime(napi_runtime* runtime);
1125
napi_status js_create_napi_env(napi_env* env, napi_runtime runtime);
26+
napi_status js_lock_env(napi_env env);
27+
napi_status js_unlock_env(napi_env env);
1228
napi_status js_free_napi_env(napi_env env);
1329
napi_status js_free_runtime(napi_runtime runtime);
1430
napi_status js_execute_script(napi_env env,
@@ -20,9 +36,28 @@ napi_status js_execute_pending_jobs(napi_env env);
2036

2137
napi_status js_get_engine_ptr(napi_env env, int64_t *engine_ptr);
2238
napi_status js_adjust_external_memory(napi_env env, int64_t changeInBytes, int64_t* externalMemory);
39+
napi_status js_cache_script(napi_env env, const char *source, const char *file);
40+
napi_status js_run_cached_script(napi_env env, const char * file, napi_value script, void* cache, napi_value *result);
41+
42+
class NapiScope {
43+
public:
44+
explicit NapiScope(napi_env env)
45+
: env_(env)
46+
{
47+
js_lock_env(env_);
48+
napi_open_handle_scope(env_, &napiHandleScope_);
49+
}
50+
51+
~NapiScope() {
52+
js_unlock_env(env_);
53+
napi_close_handle_scope(env_, napiHandleScope_);
54+
}
55+
56+
private:
57+
napi_env env_;
58+
napi_handle_scope napiHandleScope_;
59+
};
2360

2461
#define JSEnterScope
25-
#define JSEnter
26-
#define JSLeave
2762

2863
#endif //TEST_APP_JSR_H

0 commit comments

Comments
 (0)