* Copyright (c) 2024 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 OHOS_ABILITY_RUNTIME_CJ_ENVSETUP_H
#define OHOS_ABILITY_RUNTIME_CJ_ENVSETUP_H
#include <string>
#include <functional>
#include <map>
namespace OHOS {
using UpdateStackInfoFuncType = void(*)(unsigned long long, void *, unsigned int);
struct CJErrorObject {
const char* name;
const char* message;
const char* stack;
};
struct CJUncaughtExceptionInfo {
const char* hapPath;
std::function<void(const char* summary, const CJErrorObject errorObj)> uncaughtTask;
};
struct CJEventReportInfo {
const char* hapPath;
std::function<void(const char* domain, const char* event, size_t hiSysEventType,
const std::map<std::string, std::string>& params)> reportInfoTask;
};
enum SanitizerKind {
NONE,
ASAN,
TSAN,
HWASAN,
};
struct CJEnvMethods {
void (*initCJAppNS)(const std::string& path) = nullptr;
void (*initCJSDKNS)(const std::string& path) = nullptr;
void (*initCJSysNS)(const std::string& path) = nullptr;
void (*initCJChipSDKNS)(const std::string& path) = nullptr;
bool (*startRuntime)() = nullptr;
bool (*startUIScheduler)() = nullptr;
void* (*loadCJModule)(const char* dllName) = nullptr;
void* (*loadLibrary)(uint32_t kind, const char* dllName) = nullptr;
void* (*getSymbol)(void* handle, const char* symbol) = nullptr;
void* (*loadCJLibrary)(const char* dllName) = nullptr;
bool (*startDebugger)() = nullptr;
void (*registerCJUncaughtExceptionHandler)(const CJUncaughtExceptionInfo& uncaughtExceptionInfo) = nullptr;
void (*setSanitizerKindRuntimeVersion)(SanitizerKind kind) = nullptr;
bool (*checkLoadCJLibrary)() = nullptr;
void (*registerArkVMInRuntime)(unsigned long long arkVM) = nullptr;
void (*registerStackInfoCallbacks)(UpdateStackInfoFuncType uFunc) = nullptr;
void (*setAppVersion)(std::string& version) = nullptr;
void (*dumpHeapSnapshot) (int fd) = nullptr;
void (*forceFullGC) () = nullptr;
void (*registerEventHandler)(const CJEventReportInfo& reportInfo) = nullptr;
void (*setMainNAPIEnv)(void* env) = nullptr;
void* (*getMainNAPIEnv)() = nullptr;
};
class CJEnv {
public:
static CJEnvMethods* LoadInstance();
};
}
#endif