diff --git a/common_components/heap/collector/trace_collector.cpp b/common_components/heap/collector/trace_collector.cpp index e2117d78421f17e39a6989db7a8527dc1165dfcf..6e6961a592a3191f3a0fad691be1598be879f105 100755 --- a/common_components/heap/collector/trace_collector.cpp +++ b/common_components/heap/collector/trace_collector.cpp @@ -237,7 +237,7 @@ void TraceCollector::EnumConcurrencyModelRoots(RootSet& rootSet) const void TraceCollector::EnumStaticRoots(RootSet& rootSet) const { const RefFieldVisitor& visitor = [&rootSet, this](RefField<>& root) { EnumRefFieldRoot(root, rootSet); }; - VisitRoots(visitor); + VisitRoots(visitor, true); } class MergeMutatorRootsScope { diff --git a/common_components/heap/heap_visitor.cpp b/common_components/heap/heap_visitor.cpp index f65696ac35f8faa5a2792430080bfd655b480ac8..eda41591b4c5e77d52ae8359a4d724a8959ab46c 100755 --- a/common_components/heap/heap_visitor.cpp +++ b/common_components/heap/heap_visitor.cpp @@ -43,58 +43,58 @@ void RegisterSweepStaticRootsHook(SweepStaticRootsHookFunc func) } -void VisitRoots(const RefFieldVisitor &visitor) +void VisitRoots(const RefFieldVisitor &visitor, bool isMark) { VisitDynamicGlobalRoots(visitor); VisitDynamicLocalRoots(visitor); VisitBaseRoots(visitor); - // if (isMark) { - // if (g_visitStaticRootsHook != nullptr) { - // g_visitStaticRootsHook(visitor); - // } - // } else { - // if (g_updateStaticRootsHook != nullptr) { - // g_updateStaticRootsHook(visitor); - // } - // } + if (isMark) { + if (g_visitStaticRootsHook != nullptr) { + g_visitStaticRootsHook(visitor); + } + } else { + if (g_updateStaticRootsHook != nullptr) { + g_updateStaticRootsHook(visitor); + } + } } void VisitWeakRoots(const WeakRefFieldVisitor &visitor) { VisitDynamicWeakGlobalRoots(visitor); VisitDynamicWeakLocalRoots(visitor); - // if (g_updateStaticRootsHook != nullptr) { - // g_updateStaticRootsHook(visitor); - // } - // if (g_sweepStaticRootsHook != nullptr) { - // g_sweepStaticRootsHook(visitor); - // } + if (g_updateStaticRootsHook != nullptr) { + g_updateStaticRootsHook(visitor); + } + if (g_sweepStaticRootsHook != nullptr) { + g_sweepStaticRootsHook(visitor); + } } -void VisitGlobalRoots(const RefFieldVisitor &visitor) +void VisitGlobalRoots(const RefFieldVisitor &visitor, bool isMark) { VisitDynamicGlobalRoots(visitor); VisitBaseRoots(visitor); - // if (isMark) { - // if (g_visitStaticRootsHook != nullptr) { - // g_visitStaticRootsHook(visitor); - // } - // } else { - // if (g_updateStaticRootsHook != nullptr) { - // g_updateStaticRootsHook(visitor); - // } - // } + if (isMark) { + if (g_visitStaticRootsHook != nullptr) { + g_visitStaticRootsHook(visitor); + } + } else { + if (g_updateStaticRootsHook != nullptr) { + g_updateStaticRootsHook(visitor); + } + } } void VisitWeakGlobalRoots(const WeakRefFieldVisitor &visitor) { VisitDynamicWeakGlobalRoots(visitor); - // if (g_updateStaticRootsHook != nullptr) { - // g_updateStaticRootsHook(visitor); - // } - // if (g_sweepStaticRootsHook != nullptr) { - // g_sweepStaticRootsHook(visitor); - // } + if (g_updateStaticRootsHook != nullptr) { + g_updateStaticRootsHook(visitor); + } + if (g_sweepStaticRootsHook != nullptr) { + g_sweepStaticRootsHook(visitor); + } } // Visit specific mutator's root. diff --git a/common_components/heap/verification.cpp b/common_components/heap/verification.cpp index 7ee2c041414d31e59851a1f437f884d498a80a30..086e5733f367076836c03a196be4beb5f903648c 100755 --- a/common_components/heap/verification.cpp +++ b/common_components/heap/verification.cpp @@ -50,7 +50,7 @@ */ namespace common { -void VisitRoots(const RefFieldVisitor& visitorFunc); +void VisitRoots(const RefFieldVisitor& visitorFunc, bool isMark); void VisitWeakRoots(const WeakRefFieldVisitor& visitorFunc); #define CONTEXT " at " << __FILE__ << ":" << __LINE__ << std::endl @@ -332,7 +332,7 @@ public: MarkStack roots; RefFieldVisitor refVisitor = [&](RefField<>& ref) { visitor.VerifyRef(nullptr, ref); }; - VisitRoots(refVisitor); + VisitRoots(refVisitor, true); } void IterateWeakRoot(VerifyVisitor& visitor) @@ -401,7 +401,7 @@ private: void EnumStrongRoots(const std::function&)>& markFunc) { - VisitRoots(markFunc); + VisitRoots(markFunc, true); } void Trace(MarkStack& markStack) {} diff --git a/common_components/heap/w_collector/w_collector.cpp b/common_components/heap/w_collector/w_collector.cpp index df0932a0919a295c461202246fb3f780948ec9bb..648ba80a413d34e0d1aeefd4bd32b8b221e00b4d 100755 --- a/common_components/heap/w_collector/w_collector.cpp +++ b/common_components/heap/w_collector/w_collector.cpp @@ -378,7 +378,7 @@ void WCollector::RemarkAndPreforwardStaticRoots(WorkStack& workStack) markObject(oldObj); } }; - VisitRoots(visitor); + VisitRoots(visitor, false); // inline MergeAllocBufferRoots MutatorManager &mutatorManager = MutatorManager::Instance(); bool worldStopped = mutatorManager.WorldStopped(); @@ -709,7 +709,7 @@ void WCollector::EnumRootsFlip(WorkStack& rootSet) TransitionToGCPhase(GCPhase::GC_PHASE_ENUM, true); const RefFieldVisitor& visitor = [this, &rootSet](RefField<>& root) { EnumRefFieldRoot(root, rootSet); }; - VisitGlobalRoots(visitor); + VisitGlobalRoots(visitor, true); MergeAllocBufferRoots(rootSet); }; FlipFunction enumMutatorRoot = [this, &rootSet, &stackMutex](Mutator &mutator) { diff --git a/ecmascript/dfx/hprof/heap_snapshot.cpp b/ecmascript/dfx/hprof/heap_snapshot.cpp index f36545b249548e8955c59fe9a2f76619e1601679..511a0c5b1eff79bdb9d23eca7ec17e5ba235a7fa 100755 --- a/ecmascript/dfx/hprof/heap_snapshot.cpp +++ b/ecmascript/dfx/hprof/heap_snapshot.cpp @@ -1319,16 +1319,16 @@ void HeapSnapshot::HandleCMCGCRoots(Node *syntheticRoot, CUnorderedSetWriteToLeakStackTraceFd(buffer); heapProfiler->CloseLeakStackTraceFd(); } else { - common::VisitRoots(visitor); + common::VisitRoots(visitor, false); } heapProfiler->ClearHandleBackTrace(); #else - common::VisitRoots(visitor); + common::VisitRoots(visitor, false); #endif // ENABLE_LOCAL_HANDLE_LEAK_DETECT } diff --git a/ecmascript/mem/cmc_gc/hooks.cpp b/ecmascript/mem/cmc_gc/hooks.cpp index 15d43ffcd866942ada6c2e60f5cb5121524f7abe..c4e7ce8e45d11c5b0dbe45977c1f6d8ede894bce 100644 --- a/ecmascript/mem/cmc_gc/hooks.cpp +++ b/ecmascript/mem/cmc_gc/hooks.cpp @@ -107,11 +107,6 @@ private: void VisitBaseRoots(const RefFieldVisitor &visitorFunc) { - // todo 梁婷婷 - if (!panda::ecmascript::Runtime::HasInstance()) { - return; - } - BaseClassRoots &baseClassRoots = BaseRuntime::GetInstance()->GetBaseClassRoots(); // When visit roots, the language of the object is not used, so using the visitorFunc will work for // both dynamic and static. diff --git a/libark_jsruntime.map b/libark_jsruntime.map index b01cda142864a327e92eddee2b47514580a3b1b5..8516394e47ec6cbbe318c17259aed7b582a19408 100644 --- a/libark_jsruntime.map +++ b/libark_jsruntime.map @@ -100,6 +100,7 @@ panda::JsiFastNativeScope::*; panda::JSExecutionScope::*; common::BaseRuntime::*; + common::BaseObject::*; common::HeapAllocator::*; common::VisitDynamicGlobalRoots*; common::VisitDynamicWeakGlobalRoots*;