diff --git a/framework/ios/base/bridge/HippyBridge+PerformanceAPI.mm b/framework/ios/base/bridge/HippyBridge+PerformanceAPI.mm index 32189a6188f..8d8783eff40 100644 --- a/framework/ios/base/bridge/HippyBridge+PerformanceAPI.mm +++ b/framework/ios/base/bridge/HippyBridge+PerformanceAPI.mm @@ -48,25 +48,34 @@ - (void)updatePerfRecordsOnRootContentDidAppear:(NSNumber *)rootTag { auto domManager = scope->GetDomManager().lock(); auto performance = scope->GetPerformance(); if (domManager && performance) { - auto entry = performance->PerformanceNavigation(hippy::kPerfNavigationHippyInit); - if (!entry) { - return; - } uint32_t rootId = rootTag.unsignedIntValue; - entry->SetHippyRunApplicationEnd(domManager->GetDomStartTimePoint(rootId)); - entry->SetHippyDomStart(domManager->GetDomStartTimePoint(rootId)); - entry->SetHippyDomEnd(domManager->GetDomEndTimePoint(rootId)); - entry->SetHippyFirstFrameStart(domManager->GetDomEndTimePoint(rootId)); - entry->SetHippyFirstFrameEnd(footstone::TimePoint::SystemNow()); - + std::weak_ptr weak_domManager = domManager; + std::weak_ptr weak_performance = performance; + std::vector> ops = {[rootId, weak_domManager, weak_performance] { + auto domManager = weak_domManager.lock(); + auto performance = weak_performance.lock(); + if (!domManager || !performance) { + return; + } + auto entry = performance->PerformanceNavigation(hippy::kPerfNavigationHippyInit); + if (!entry) { + return; + } + entry->SetHippyRunApplicationEnd(domManager->GetDomStartTimePoint(rootId)); + entry->SetHippyDomStart(domManager->GetDomStartTimePoint(rootId)); + entry->SetHippyDomEnd(domManager->GetDomEndTimePoint(rootId)); + entry->SetHippyFirstFrameStart(domManager->GetDomEndTimePoint(rootId)); + entry->SetHippyFirstFrameEnd(footstone::TimePoint::SystemNow()); #if HIPPY_DEBUG - int64_t totalFPTime = (entry->GetHippyFirstFrameEnd() - entry->GetHippyNativeInitStart()).ToMilliseconds(); - int64_t nativeInit = (entry->GetHippyNativeInitEnd() - entry->GetHippyNativeInitStart()).ToMilliseconds(); - int64_t runApplication = (entry->GetHippyRunApplicationEnd() - entry->GetHippyRunApplicationStart()).ToMilliseconds(); - int64_t domCreate = (entry->GetHippyDomEnd() - entry->GetHippyDomStart()).ToMilliseconds(); - int64_t firstFrame = (entry->GetHippyFirstFrameEnd() - entry->GetHippyFirstFrameStart()).ToMilliseconds(); - HippyLogTrace(@"Hippy FP=%lld, detail: %lld, %lld, %lld, %lld", totalFPTime, nativeInit, runApplication, domCreate, firstFrame); + int64_t totalFPTime = (entry->GetHippyFirstFrameEnd() - entry->GetHippyNativeInitStart()).ToMilliseconds(); + int64_t nativeInit = (entry->GetHippyNativeInitEnd() - entry->GetHippyNativeInitStart()).ToMilliseconds(); + int64_t runApplication = (entry->GetHippyRunApplicationEnd() - entry->GetHippyRunApplicationStart()).ToMilliseconds(); + int64_t domCreate = (entry->GetHippyDomEnd() - entry->GetHippyDomStart()).ToMilliseconds(); + int64_t firstFrame = (entry->GetHippyFirstFrameEnd() - entry->GetHippyFirstFrameStart()).ToMilliseconds(); + HippyLogTrace(@"Hippy FP=%lld, detail: %lld, %lld, %lld, %lld", totalFPTime, nativeInit, runApplication, domCreate, firstFrame); #endif /* HIPPY_DEBUG */ + }}; + domManager->PostTask(hippy::Scene(std::move(ops))); } }