#include "battery_hal.h"
#endif
+extern "C" uint64_t uapi_ulp_systick_get_ms(void);
+
namespace OHOS {
NativeLauncher::NativeLauncher() {}
void NativeLauncher::InitNativeLauncher(LaunchMode mode)
{
+ uint64_t launcherStartMs = uapi_ulp_systick_get_ms();
+ uint64_t launcherLastStageMs = launcherStartMs;
+ auto logLauncherStage = [&](const char *stageName) {
+ uint64_t nowMs = uapi_ulp_systick_get_ms();
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,
+ "【开机流程】NativeLauncher阶段:%s,当前时间=%llu ms,阶段耗时=%llu ms,总耗时=%llu ms",
+ stageName,
+ (unsigned long long)nowMs,
+ (unsigned long long)(nowMs - launcherLastStageMs),
+ (unsigned long long)(nowMs - launcherStartMs));
+ launcherLastStageMs = nowMs;
+ };
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "【开机流程】进入InitNativeLauncher,mode=%d,t0=%llu ms",
+ mode, (unsigned long long)launcherStartMs);
+
#ifdef JS_ENABLE
ACELite::ProductAdapter::SetScreenSize(HORIZONTAL_RESOLUTION, VERTICAL_RESOLUTION);
ACELite::ProductAdapter::SetDefaultFontStyle(
DEFAULT_VECTOR_FONT_FILENAME, ACELite::ProductAdapter::GetDefaultFontSize());
#endif
WEARABLE_LOGI(WEARABLE_LOG_MODULE_LAUNCHER_FWK, "c %d", mode);
- if (mode == LaunchMode::SAFE_MODE)
- {
- GraphicStartUp::InitFontEngine(MEM_POOL_UI_FONT, MEM_POOL_UI_FONT_SIZE, OHOS::NEW_FONT_DIR, GILROY_BOLD_FONT); // 注册字体
- set_current_global_font_name(GILROY_BOLD_FONT);
- if (language::GetInstance()->InitLangues() == false)
- {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "InitLangues error");
- }
- /*加载安全模式Slice*/
- #ifdef FD230_650
- InitSafeModeSlice();
- #endif
- NativeAbility::GetInstance().SetDefaultSliceId(VIEW_SAFE_MODE);
- // PresenterTask::GetInstance()->Init();
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "safe_mode is enter!");
- }
- else if (mode == LaunchMode::NORMAL_MODE)
- {
+
+
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "【开机流程】启动模式:正常模式");
// 初始化语言
GraphicStartUp::InitFontEngine(MEM_POOL_UI_FONT, MEM_POOL_UI_FONT_SIZE, OHOS::VECTOR_FONT_DIR, HARMONYOS_VECTOR_FONT_FILENAME);
GraphicStartUp::InitFontEngine(MEM_POOL_UI_FONT, MEM_POOL_UI_FONT_SIZE, OHOS::NEW_FONT_DIR, GILROY_BOLD_FONT); // 注册字体
{
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "InitLangues error");
}
+ logLauncherStage("正常模式字体和语言初始化完成");
// 初始化所有预加载slice
NativeRegisterManager::GetInstance().InitAllNativesSlices();
+ logLauncherStage("预加载Slice初始化完成");
CallerLogModel::GetInstance()->InitPhoneService();
// 初始化默认首页
ScreenModels::GetInstance()->PreLoadAppimages();
+ logLauncherStage("基础业务模块初始化完成");
// 注册按键事件
RebootAndShutdownModel::GetInstance().RegisterAllKeyEvents();
+ logLauncherStage("按键事件注册完成");
// 开机检测充电状态
#ifdef SUPPORT_BATTERY_SERVICE
//更新主表盘配置
MainModel::GetInstance().InitDialState();
+ logLauncherStage("表盘配置初始化完成");
// 初始化屏幕亮度
cm_initScreenBrightness();
// 初始化压力测试
StressTestModel::GetInstance().LoadResultFromFile();
- }
+ logLauncherStage("屏幕与压力测试配置初始化完成");
+
// 注册开机时间
SystemLogData systemlog;
systemlog.timestamp = SystemLogModel::GetInstance()->GetCurrentTime();
SystemLogModel::GetInstance()->load_nextday_log();
// 读取popup_windows日志
SystemLogModel::GetInstance()->load_popup_windows_log();
+ logLauncherStage("系统日志恢复与开机记录完成");
/* ----------------------------- 650-0723patch合并 ---------------------------- */
// SportsModel::GetInstance()->Init();
RecentManager::GetInstance()->SetMaxSize(5); // 5: max number of recent apps.
PageTransitionMgr::GetInstance().SetRecentMinPeriod(1000); // 1000: min period
/* -------------------------------------------------------------------------- */
+ logLauncherStage("最近任务与页面切换策略初始化完成");
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,
+ "【开机流程】InitNativeLauncher结束,总耗时=%llu ms(注:最终开机完成以进入表盘界面为准)",
+ (unsigned long long)(uapi_ulp_systick_get_ms() - launcherStartMs));
}
// extern DialInfo_1 dialInfo_1[MAX_DIALNUM_1];
extern "C" uint8_t uapi_dev_runtime_get_lock_status(void);
+extern "C" uint64_t uapi_ulp_systick_get_ms(void);
namespace OHOS
{
static constexpr uint16_t MESLABLE_HEIGHT_TMP = 30;
static constexpr uint8_t FONT_SIZE_TMP = 24;
static constexpr uint8_t PULL_MIDDLE_VIEW_OPA = 0;
+ static bool g_bootWatchfaceReadyLogged = false;
#define DIALSTATE 1
#endif
AddViewToRootContainer(mainSwipeGroup);
+ if (!g_bootWatchfaceReadyLogged)
+ {
+ uint64_t bootCostMs = uapi_ulp_systick_get_ms();
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,
+ "【开机完成】已进入表盘主界面,开机耗时=%llu ms", (unsigned long long)bootCostMs);
+ g_bootWatchfaceReadyLogged = true;
+ }
}
void MainViewSample::UpdateStateShow() {
}
else if (&view == view_->GetButtonEnsure()) // 关机确认
{
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[PWR_FLOW] UI confirm shutdown");
view_->ChangeView(SHUTDOWNTIPVIEW, SHUTDOWNANIMATOR);
if (isShutDownOperation == true)
{
// uapi_poweroff_device(); // 关机
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[PWR_FLOW] Presenter OnAnimatorStop -> SHUTDOWN_TYPE");
shutdown_reboot_prejobs(SHUTDOWN_TYPE);
}
else
{
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[PWR_FLOW] Presenter OnAnimatorStop -> REBOOT_TYPE");
shutdown_reboot_prejobs(REBOOT_TYPE);
}
{
UNUSED(view);
WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "RebootAndShutdownPresenter::OnAnimatorStop");
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[PWR_FLOW] AnimatorStop: operationType=%d", OperationType);
switch (OperationType)
{
case 0:
// uapi_poweroff_device(); // 关机
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[PWR_FLOW] AnimatorStop -> shutdown_reboot_prejobs(SHUTDOWN_TYPE)");
shutdown_reboot_prejobs(SHUTDOWN_TYPE);
break;
case 1:
// uapi_reboot_device(); // 重启
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[PWR_FLOW] AnimatorStop -> shutdown_reboot_prejobs(REBOOT_TYPE)");
shutdown_reboot_prejobs(REBOOT_TYPE);
break;
case 2:
void ShutDownImageAnimatorView::ShutDownImageAnimator_Start(int type)
{
OperationType = type; // 保存操作类型:0 关机 1 重启 2 恢复出厂 3解绑恢复出厂
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[PWR_FLOW] AnimatorStart: operationType=%d", type);
shutDownImageAnimatorView->Start(); // 开始播放关机动画
OHOS::SystemLogData systemlog;
systemlog.timestamp = OHOS::SystemLogModel::GetInstance()->GetCurrentTime();
systemlog.type = type;
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[PWR_FLOW] report_log: type=%d ts=%u",
+ static_cast<int>(type), systemlog.timestamp);
#ifdef FD230_650
uapi_save_runtime_log_Time();
#endif
// 关机保存
void start_report_log(void)
{
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[PWR_FLOW] start_report_log: low_battery=%d",
+ g_low_battery_shutdown ? 1 : 0);
if (g_low_battery_shutdown) {
report_log(OHOS::SystemLogType::POWER_OFF_LOW_BATTERY);
g_low_battery_shutdown = false;
}
// 重启保存
-void stop_report_log(void) { report_log(OHOS::SystemLogType::RESTART); }
+void stop_report_log(void) {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[PWR_FLOW] stop_report_log: restart");
+ report_log(OHOS::SystemLogType::RESTART);
+}
// 恢复存储保存
void resume_report_log(void) { report_log(OHOS::SystemLogType::FACTORY_RESET); }
//关机
void uapi_poweroff_device(void)
{
- //重启前要保存时间
+ PRINT("[PWR_FLOW] uapi_poweroff_device: enter\r\n");
+ //重启前要保存时间
uapi_calendar_store_date();
+ PRINT("[PWR_FLOW] uapi_poweroff_device: calendar stored\r\n");
//关机保存
start_report_log();
+ PRINT("[PWR_FLOW] uapi_poweroff_device: power-off log reported\r\n");
osDelay(50);
//同步nand文件系统,重启mount速度快
reset_deal_with_fs();
+ PRINT("[PWR_FLOW] uapi_poweroff_device: fs synced\r\n");
osDelay(50);
// uapi_sys_shipmode(0);
// uint32_t irq = osal_irq_lock();
+ PRINT("[PWR_FLOW] uapi_poweroff_device: poweroff_bt_dsp_display\r\n");
poweroff_bt_dsp_display();
+ PRINT("[PWR_FLOW] uapi_poweroff_device: mcu_poweroff\r\n");
mcu_poweroff();
// osal_irq_restore(irq);
-
+ PRINT("[PWR_FLOW] uapi_poweroff_device: exit-unreachable\r\n");
}
//重启
void uapi_reboot_device(void)
{
+ PRINT("[PWR_FLOW] uapi_reboot_device: enter\r\n");
//重启前要保存时间
uapi_calendar_store_date();
+ PRINT("[PWR_FLOW] uapi_reboot_device: calendar stored\r\n");
//重启保存
stop_report_log();
+ PRINT("[PWR_FLOW] uapi_reboot_device: reboot log reported\r\n");
// mcu_os_sys_reset(NULL,NULL);
osDelay(50);
//同步nand文件系统,重启mount速度快
reset_deal_with_fs();
+ PRINT("[PWR_FLOW] uapi_reboot_device: fs synced\r\n");
osDelay(50);
+ PRINT("[PWR_FLOW] uapi_reboot_device: mcu_reset\r\n");
mcu_reset();
+ PRINT("[PWR_FLOW] uapi_reboot_device: exit-unreachable\r\n");
}
void shutdown_reboot_prejobs_task(void)
{
PRINT("shutdown_reboot_prejobs_task: Start, doing_shutdown_type=%d\r\n", doing_shutdown_type);
+ PRINT("[PWR_FLOW] prejobs_task: start, type=%d\r\n", doing_shutdown_type);
// 检查 doing_shutdown_type 是否有效
if(doing_shutdown_type != UPDATE_TYPE &&
if(doing_shutdown_type==UPDATE_TYPE)
{
PRINT("shutdown_reboot_prejobs_task: UPDATE_TYPE branch\r\n");
+ PRINT("[PWR_FLOW] prejobs_task: UPDATE_TYPE -> upg_reboot\r\n");
uapi_calendar_store_date();
PRINT("shutdown_reboot_prejobs_task: uapi_calendar_store_date() completed\r\n");
else if(doing_shutdown_type==SHUTDOWN_TYPE)
{
PRINT("shutdown_reboot_prejobs_task: SHUTDOWN_TYPE branch\r\n");
+ PRINT("[PWR_FLOW] prejobs_task: SHUTDOWN_TYPE -> uapi_poweroff_device\r\n");
uapi_poweroff_device();
}
else if(doing_shutdown_type==REBOOT_TYPE)
{
PRINT("shutdown_reboot_prejobs_task: REBOOT_TYPE branch\r\n");
+ PRINT("[PWR_FLOW] prejobs_task: REBOOT_TYPE -> uapi_reboot_device\r\n");
uapi_reboot_device();
}
else
void shutdown_reboot_prejobs(uint8_t type)
{
PRINT("shutdown_reboot_prejobs !\r\n");
+ PRINT("[PWR_FLOW] shutdown_reboot_prejobs: request type=%d\r\n", type);
start_shutdown_or_reboot(type);
if(ret != ERRCODE_SUCC)
{
PRINT("create shutdown_reboot_prejobs thread failed %d!\r\n",ret);
+ PRINT("[PWR_FLOW] shutdown_reboot_prejobs: thread create failed ret=%d\r\n", ret);
+ } else {
+ PRINT("[PWR_FLOW] shutdown_reboot_prejobs: thread created\r\n");
}
}
void start_shutdown_or_reboot(uint8_t type)
{
+ PRINT("[PWR_FLOW] start_shutdown_or_reboot: type=%d (prev=%d)\r\n", type, doing_shutdown_type);
doing_shutdown_type = type;
}