diff --git a/frameworks/native/runtime/connect_server_manager.cpp b/frameworks/native/runtime/connect_server_manager.cpp index 649aef3887..7caa0db24e 100644 --- a/frameworks/native/runtime/connect_server_manager.cpp +++ b/frameworks/native/runtime/connect_server_manager.cpp @@ -51,6 +51,7 @@ using SendLayoutMessage = void (*)(const std::string&); using StopServer = void (*)(const std::string&); using StoreMessage = void (*)(int32_t, const std::string&); using StoreInspectorInfo = void (*)(const std::string&, const std::string&); +using SetProfilerCallback = void (*)(const std::function &setArkUIStateProfilerStatus); using SetSwitchCallBack = void (*)(const std::function &setStatus, const std::function &createLayoutInfo, int32_t instanceId); using SetConnectCallback = void (*)(const std::function); @@ -221,9 +222,19 @@ bool ConnectServerManager::SendInstanceMessage(int32_t tid, int32_t instanceId, TAG_LOGE(AAFwkTag::JSRUNTIME, "ConnectServerManager::SendInstanceMessage failed to find symbol 'StoreMessage'"); return false; } - + + auto setProfilerCallback = reinterpret_cast( + dlsym(handlerConnectServerSo_, "SetProfilerCallback")); + if (setProfilerCallback == nullptr) { + TAG_LOGI(AAFwkTag::JSRUNTIME, + "ConnectServerManager::SendInstanceMessage failed to find symbol 'setProfilerCallback'"); + return false; + } + setSwitchCallBack([this](bool status) { setStatus_(status); }, [this](int32_t containerId) { createLayoutInfo_(containerId); }, instanceId); + + setProfilerCallback([this](bool status) { setArkUIStateProfilerStatus_(status); }); std::string message = GetInstanceMapMessage("addInstance", instanceId, instanceName, tid); storeMessage(instanceId, message); @@ -261,6 +272,16 @@ bool ConnectServerManager::AddInstance(int32_t tid, int32_t instanceId, const st setSwitchCallBack([this](bool status) { setStatus_(status); }, [this](int32_t containerId) { createLayoutInfo_(containerId); }, instanceId); + auto setProfilerCallback = reinterpret_cast( + dlsym(handlerConnectServerSo_, "SetProfilerCallback")); + if (setProfilerCallback == nullptr) { + TAG_LOGE(AAFwkTag::JSRUNTIME, + "ConnectServerManager::AddInstance failed to find symbol 'setProfilerCallback'"); + return false; + } + + setProfilerCallback([this](bool status) { setArkUIStateProfilerStatus_(status); }); + // Get the message including information of new instance, which will be send to IDE. std::string message = GetInstanceMapMessage("addInstance", instanceId, instanceName, tid); @@ -368,4 +389,22 @@ std::function ConnectServerManager::GetLayoutInspectorCallback() return createLayoutInfo_; } +void ConnectServerManager::SetStateProfilerCallback(const std::function &setArkUIStateProfilerStatus) +{ + setArkUIStateProfilerStatus_ = setArkUIStateProfilerStatus; +} + +void ConnectServerManager::SendArkUIStateProfilerMessage(const std::string &message) +{ + TAG_LOGI(AAFwkTag::JSRUNTIME, "ConnectServerManager SendArkUIStateProfilerMessage Start"); + auto sendProfilerMessage = reinterpret_cast(dlsym(handlerConnectServerSo_, "SendProfilerMessage")); + if (sendProfilerMessage == nullptr) { + TAG_LOGE(AAFwkTag::JSRUNTIME, + "ConnectServerManager::SendArkUIStateProfilerMessage failed to find symbol 'sendProfilerMessage'"); + return; + } + + sendProfilerMessage(message); +} + } // namespace OHOS::AbilityRuntime \ No newline at end of file diff --git a/frameworks/native/runtime/connect_server_manager.h b/frameworks/native/runtime/connect_server_manager.h index ded387736e..0c98c613b4 100644 --- a/frameworks/native/runtime/connect_server_manager.h +++ b/frameworks/native/runtime/connect_server_manager.h @@ -39,8 +39,10 @@ public: bool AddInstance(int32_t tid, int32_t instanceId, const std::string& instanceName = "PandaDebugger"); void RemoveInstance(int32_t instanceId); void SendInspector(const std::string& jsonTreeStr, const std::string& jsonSnapshotStr); + void SendArkUIStateProfilerMessage(const std::string &message); void SetLayoutInspectorCallback( const std::function &createLayoutInfo, const std::function &setStatus); + void SetStateProfilerCallback(const std::function &setArkUIStateProfilerStatus); std::function GetLayoutInspectorCallback(); bool StoreInstanceMessage( int32_t tid, int32_t instanceId, const std::string& instanceName = "PandaDebugger"); @@ -64,6 +66,7 @@ private: std::unordered_map> instanceMap_; std::function createLayoutInfo_; std::function setStatus_; + std::function setArkUIStateProfilerStatus_; ConnectServerManager(const ConnectServerManager&) = delete; ConnectServerManager(ConnectServerManager&&) = delete; ConnectServerManager& operator=(const ConnectServerManager&) = delete;