Skip to content

Commit af0cd29

Browse files
committed
Merge remote-tracking branch 'origin/main' into feature/v8-10.3.22-perf
2 parents 97d7465 + c2c8aa8 commit af0cd29

File tree

4 files changed

+20
-101
lines changed

4 files changed

+20
-101
lines changed

package.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
{
22
"name": "@nativescript/android",
3-
"description": "NativeScript Runtime for Android",
4-
"version": "8.4.0-alpha.6",
3+
"description": "NativeScript for Android using v8",
4+
"version": "8.4.0",
55
"repository": {
66
"type": "git",
7-
"url": "https://github.com/NativeScript/android-runtime.git"
7+
"url": "https://github.com/NativeScript/android.git"
88
},
99
"files": [
1010
"**/*"

test-app/runtime/src/main/cpp/MetadataReader.cpp

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,15 @@ MetadataReader::MetadataReader(uint32_t nodesLength, uint8_t* nodeData, uint32_t
1717
m_root = BuildTree();
1818
}
1919

20+
// helper debug function when need to convert a metadata node to its full name
21+
//std::string toFullName(MetadataTreeNode* p) {
22+
// std::string final = p->name;
23+
// while((p = p->parent) && !p->name.empty()) {
24+
// final.insert(0,p->name + ".");
25+
// };
26+
// return final;
27+
//}
28+
2029
MetadataTreeNode* MetadataReader::BuildTree() {
2130
MetadataTreeNodeRawData* rootNodeData = reinterpret_cast<MetadataTreeNodeRawData*>(m_nodeData);
2231

@@ -43,21 +52,22 @@ MetadataTreeNode* MetadataReader::BuildTree() {
4352
node->children = new vector<MetadataTreeNode*>;
4453
MetadataTreeNodeRawData* childNodeData = rootNodeData + curNodeData->firstChildId;
4554
while (true) {
55+
56+
uint16_t childNodeDataId = childNodeData - rootNodeData;
57+
// node (and its next siblings) already visited, so we don't need to visit it again
58+
if (m_v[childNodeDataId] != emptyNode) {
59+
break;
60+
}
61+
4662
MetadataTreeNode* childNode = new MetadataTreeNode;
4763
childNode->parent = node;
4864
childNode->name = ReadName(childNodeData->offsetName);
4965
childNode->offsetValue = childNodeData->offsetValue;
5066

5167
node->children->push_back(childNode);
5268

53-
uint16_t childNodeDataId = childNodeData - rootNodeData;
54-
5569
m_v[childNodeDataId] = childNode;
5670

57-
if (childNodeDataId == childNodeData->nextSiblingId) {
58-
break;
59-
}
60-
6171
childNodeData = rootNodeData + childNodeData->nextSiblingId;
6272
}
6373
}

test-app/runtime/src/main/cpp/ObjectManager.cpp

Lines changed: 1 addition & 85 deletions
Original file line numberDiff line numberDiff line change
@@ -266,41 +266,6 @@ void ObjectManager::Link(const Local<Object> &object, uint32_t javaObjectID, jcl
266266
m_idToObject.insert(make_pair(javaObjectID, objectHandle));
267267
}
268268

269-
void ObjectManager::LinkWithExtraData(const v8::Local<v8::Object>& object, uint32_t javaObjectID, jclass clazz, void* data) {
270-
if (!IsJsRuntimeObject(object)) {
271-
string errMsg("Trying to link invalid 'this' to a Java object");
272-
throw NativeScriptException(errMsg);
273-
}
274-
275-
auto isolate = m_isolate;
276-
277-
DEBUG_WRITE("Linking js object: %d and java instance id: %d", object->GetIdentityHash(),
278-
javaObjectID);
279-
280-
auto jsInstanceInfo = new JSInstanceInfo(false/*isJavaObjWeak*/, javaObjectID, clazz);
281-
282-
auto objectHandle = new Persistent<Object>(isolate, object);
283-
auto state = new ObjectWeakCallbackState(this, jsInstanceInfo, objectHandle);
284-
285-
// subscribe for JS GC event
286-
if (m_markingMode == JavaScriptMarkingMode::None) {
287-
objectHandle->SetWeak(state, JSObjectFinalizerStatic, WeakCallbackType::kFinalizer);
288-
} else {
289-
objectHandle->SetWeak(state, JSObjectWeakCallbackStatic, WeakCallbackType::kFinalizer);
290-
}
291-
292-
auto jsInfoIdx = static_cast<int>(MetadataNodeKeys::JsInfo);
293-
294-
auto jsInfo = External::New(isolate, jsInstanceInfo);
295-
296-
//link
297-
object->SetInternalField(jsInfoIdx, jsInfo);
298-
299-
V8SetPrivateValue(isolate, object, String::NewFromUtf8(isolate,"object_with_extra_data").ToLocalChecked(), External::New(isolate, data));
300-
301-
m_idToObject.insert(make_pair(javaObjectID, objectHandle));
302-
}
303-
304269
bool ObjectManager::CloneLink(const Local<Object> &src, const Local<Object> &dest) {
305270
auto jsInfo = GetJSInstanceInfo(src);
306271

@@ -387,55 +352,6 @@ void ObjectManager::JSObjectFinalizer(Isolate *isolate, ObjectWeakCallbackState
387352
}
388353

389354

390-
void ObjectManager::JSObjectFinalizerStaticWithExtraData(const WeakCallbackInfo<ObjectWeakCallbackState> &data) {
391-
ObjectWeakCallbackState *callbackState = data.GetParameter();
392-
393-
ObjectManager *thisPtr = callbackState->thisPtr;
394-
395-
auto isolate = data.GetIsolate();
396-
397-
thisPtr->JSObjectFinalizerWithExtraData(isolate, callbackState);
398-
}
399-
400-
void ObjectManager::JSObjectFinalizerWithExtraData(Isolate *isolate, ObjectWeakCallbackState *callbackState) {
401-
HandleScope handleScope(m_isolate);
402-
Persistent<Object> *po = callbackState->target;
403-
auto jsInstanceInfo = GetJSInstanceInfoFromRuntimeObject(po->Get(m_isolate));
404-
405-
if (jsInstanceInfo == nullptr) {
406-
po->Reset();
407-
delete po;
408-
delete callbackState;
409-
return;
410-
}
411-
412-
auto javaObjectID = jsInstanceInfo->JavaObjectID;
413-
JEnv env;
414-
jboolean isJavaInstanceAlive = env.CallBooleanMethod(m_javaRuntimeObject,
415-
MAKE_INSTANCE_WEAK_AND_CHECK_IF_ALIVE_METHOD_ID,
416-
javaObjectID);
417-
if (isJavaInstanceAlive) {
418-
// If the Java instance is alive, keep the JavaScript instance alive.
419-
po->SetWeak(callbackState, JSObjectFinalizerStatic, WeakCallbackType::kFinalizer);
420-
} else {
421-
// If the Java instance is dead, this JavaScript instance can be let die.
422-
delete jsInstanceInfo;
423-
auto jsInfoIdx = static_cast<int>(MetadataNodeKeys::JsInfo);
424-
po->Get(m_isolate)->SetInternalField(jsInfoIdx, Undefined(m_isolate));
425-
v8::Local<v8::Value> out;
426-
V8GetPrivateValue(isolate, po->Get(m_isolate), String::NewFromUtf8(isolate,"object_with_extra_data").ToLocalChecked(), out);
427-
V8SetPrivateValue(isolate, po->Get(m_isolate), String::NewFromUtf8(isolate,"object_with_extra_data").ToLocalChecked(), Undefined(m_isolate));
428-
if(!out.IsEmpty() && out->IsExternal()) {
429-
auto data = out.As<v8::External>()->Value();
430-
free(data);
431-
}
432-
po->Reset();
433-
m_idToObject.erase(javaObjectID);
434-
delete po;
435-
delete callbackState;
436-
}
437-
}
438-
439355
/*
440356
* When JS GC happens change state of the java counterpart to mirror state of JS object and REVIVE the JS object unconditionally
441357
* "Regular" js objects are pushed into the "regular objects" array
@@ -466,7 +382,7 @@ void ObjectManager::JSObjectWeakCallback(Isolate *isolate, ObjectWeakCallbackSta
466382

467383
if (hasImplObj) {
468384
if (jsInstanceInfo->IsJavaObjectWeak) {
469-
m_implObjWeak.push_back(PersistentObjectIdPair(po, javaObjectID));
385+
m_implObjWeak.emplace_back(po, javaObjectID);
470386
} else {
471387
m_implObjStrong.insert(make_pair(javaObjectID, po));
472388
jsInstanceInfo->IsJavaObjectWeak = true;

test-app/runtime/src/main/cpp/ObjectManager.h

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,6 @@ class ObjectManager {
3737

3838
void Link(const v8::Local<v8::Object>& object, uint32_t javaObjectID, jclass clazz);
3939

40-
void LinkWithExtraData(const v8::Local<v8::Object>& object, uint32_t javaObjectID, jclass clazz, void* data);
41-
4240
void ReleaseNativeCounterpart(v8::Local<v8::Object>& object);
4341

4442
bool CloneLink(const v8::Local<v8::Object>& src, const v8::Local<v8::Object>& dest);
@@ -167,15 +165,10 @@ class ObjectManager {
167165

168166
static void JSObjectFinalizerStatic(const v8::WeakCallbackInfo<ObjectWeakCallbackState>& data);
169167

170-
static void JSObjectFinalizerStaticWithExtraData(const v8::WeakCallbackInfo<ObjectWeakCallbackState> &data);
171-
172-
173168
void JSObjectWeakCallback(v8::Isolate* isolate, ObjectWeakCallbackState* callbackState);
174169

175170
void JSObjectFinalizer(v8::Isolate* isolate, ObjectWeakCallbackState* callbackState);
176171

177-
void JSObjectFinalizerWithExtraData(v8::Isolate* isolate, ObjectWeakCallbackState* callbackState);
178-
179172
bool HasImplObject(v8::Isolate* isolate, const v8::Local<v8::Object>& obj);
180173

181174
jweak GetJavaObjectByID(uint32_t javaObjectID);

0 commit comments

Comments
 (0)