blob: aa3d7ae3856f61aaca8bd724324d67a21ffe424c [file] [log] [blame]
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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.
*/
//
// Created by Darin on 2018/7/22.
//
#ifndef WEEXV8_WEEXENV_H
#define WEEXV8_WEEXENV_H
#include <mutex>
#ifdef USE_JS_RUNTIME
#include "js_runtime/weex/task/weex_task.h"
#include "js_runtime/weex/task/back_to_weex_core_queue.h"
#include "js_runtime/weex/task/timer_queue.h"
#include "base/crash/crash_handler.h"
#else
#include <task/weex_task.h>
#include <android/jsengine/task/weex_task.h>
#include "android/jsengine/task/back_to_weex_core_queue.h"
#include "android/jsengine/task/timer_queue.h"
#include "base/android/jsengine_ptr_container.h"
#endif
#include "android/jsengine/weex_ipc_server.h"
#include "android/jsengine/weex_ipc_client.h"
#include "js_action.h"
class WeexEnv {
public:
static WeexEnv *getEnv() {
static std::once_flag once_flag;
std::call_once(once_flag, [](){ env_ = new WeexEnv(); });
return env_;
}
WeexEnv();
~WeexEnv();
bool useWson();
void setUseWson(bool useWson);
WeexCore::ScriptBridge *scriptBridge();
void setScriptBridge(WeexCore::ScriptBridge *scriptBridge);
int getIpcClientFd() const {
return ipcClientFd_;
}
void setIpcClientFd(int ipcClientFd_) {
WeexEnv::ipcClientFd_ = ipcClientFd_;
}
int getIpcServerFd() const {
return ipcServerFd_;
}
void setIpcServerFd(int ipcServerFd_) {
WeexEnv::ipcServerFd_ = ipcServerFd_;
}
bool enableTrace() const {
return enableTrace_;
}
void setEnableTrace(bool enableTrace_) {
WeexEnv::enableTrace_ = enableTrace_;
}
JSAction* createJSAction(long ctxContainer);
JSAction* getJSAction(long ctxContainer);
void destroyJSAction(long ctxContainer);
void initIPC();
void initJSC(bool isMultiProgress);
void setEnableBackupThread(bool enable) {
this->enableBackupThread__ = enable;
}
bool enableBackupThread() {
return enableBackupThread__;
}
inline void enableHandleAlarmSignal(bool enable){
crashHandler->setEnableAlarmSignal(enable);
}
void jsc_init_finished() { isJscInitOk_ = true; };
bool is_jsc_init_finished() {return isJscInitOk_; }
ThreadLocker* locker() { return &thread_locker_; }
void init_crash_handler(std::string crashFileName);
bool is_app_crashed();
bool sendLog(int level, const char *tag,
const char *file,
unsigned long line,
const char *log);
public:
std::unique_ptr<BackToWeexCoreQueue> m_back_to_weex_core_thread;
volatile bool isMultiProcess = false;
std::unique_ptr<WeexIPCClient> m_ipc_client_;
std::deque<WeexTask *> m_task_cache_;
private:
static WeexEnv *env_;
volatile bool isJscInitOk_ = false;
volatile bool isUsingWson = true;
WeexCore::ScriptBridge *scriptBridge_;
bool enableBackupThread__ = false;
volatile int ipcClientFd_;
volatile int ipcServerFd_;
volatile bool enableTrace_;
volatile bool m_cache_task_;
public:
volatile bool can_m_cache_task_() const;
void set_m_cache_task_(volatile bool m_cache_task_);
private:
ThreadLocker thread_locker_;
std::unique_ptr<crash_handler::CrashHandlerInfo> crashHandler;
std::map<long, JSAction*> m_jsActionMap;
};
#endif //WEEXV8_WEEXENV_H