Files
ark_js_runtime/ecmascript/tooling/interface/js_debugger_manager.h
T
wengchangcheng 9ea13c48f9 Descriptor: debugger refactor [ part-1 ]
details:
1. delete unused method
2. modify file dir
3. add event channel for every domain
4. implement domain function in agent and delete js_backend
5. modify dispatchTable to static
6. modify debugger_api
7. modify js_debugger and add debugger_executor
issue: https://gitee.com/openharmony/ark_js_runtime/issues/I58LOO

Signed-off-by: wengchangcheng <wengchangcheng@huawei.com>
Change-Id: I7747bf3ad66e9a180d6179e45be5bcaf4161b29b
2022-06-01 23:00:13 +08:00

115 lines
3.1 KiB
C++

/*
* Copyright (c) 2022 Huawei Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#ifndef ECMASCRIPT_TOOLING_INTERFACE_JS_DEBUGGER_MANAGER_H
#define ECMASCRIPT_TOOLING_INTERFACE_JS_DEBUGGER_MANAGER_H
#include "libpandabase/os/library_loader.h"
#include "ecmascript/interpreter/frame_handler.h"
#include "ecmascript/napi/include/jsnapi.h"
#include "ecmascript/tooling/interface/notification_manager.h"
namespace panda::ecmascript::tooling {
class ProtocolHandler;
class JsDebuggerManager {
public:
using LibraryHandle = os::library_loader::LibraryHandle;
using ObjectUpdaterFunc =
std::function<void(const FrameHandler *, std::string_view, const Local<JSValueRef> &)>;
JsDebuggerManager() = default;
~JsDebuggerManager()
{
delete notificationManager_;
}
NO_COPY_SEMANTIC(JsDebuggerManager);
NO_MOVE_SEMANTIC(JsDebuggerManager);
void Initialize()
{
notificationManager_ = new NotificationManager();
}
NotificationManager *GetNotificationManager() const
{
return notificationManager_;
}
void SetDebugMode(bool isDebugMode)
{
isDebugMode_ = isDebugMode;
}
bool IsDebugMode() const
{
return isDebugMode_;
}
void SetDebuggerHandler(ProtocolHandler *debuggerHandler)
{
debuggerHandler_ = debuggerHandler;
}
ProtocolHandler *GetDebuggerHandler() const
{
return debuggerHandler_;
}
void SetDebugLibraryHandle(LibraryHandle handle)
{
debuggerLibraryHandle_ = std::move(handle);
}
const LibraryHandle &GetDebugLibraryHandle() const
{
return debuggerLibraryHandle_;
}
void SetEvalFrameHandler(std::shared_ptr<FrameHandler> frameHandler)
{
frameHandler_ = frameHandler;
}
const std::shared_ptr<FrameHandler> &GetEvalFrameHandler() const
{
return frameHandler_;
}
void SetLocalScopeUpdater(ObjectUpdaterFunc *updaterFunc)
{
updaterFunc_ = updaterFunc;
}
void NotifyLocalScopeUpdated(std::string_view varName, const Local<JSValueRef> &value)
{
if (updaterFunc_ != nullptr) {
(*updaterFunc_)(frameHandler_.get(), varName, value);
}
}
private:
bool isDebugMode_ {false};
ProtocolHandler *debuggerHandler_ {nullptr};
LibraryHandle debuggerLibraryHandle_ {nullptr};
NotificationManager *notificationManager_ {nullptr};
ObjectUpdaterFunc *updaterFunc_ {nullptr};
std::shared_ptr<FrameHandler> frameHandler_;
};
} // panda::ecmascript::tooling
#endif // ECMASCRIPT_TOOLING_INTERFACE_JS_DEBUGGER_MANAGER_H