第二人生的源码分析(七十四)LLStartUp类维护启动状态机
源码 分析 启动 维护 第二 人生 状态机
2023-09-14 09:10:42 时间
像第二人生这么复杂的大型程序,从你双击程序开始,直到它运行到真正的图形界面出来为止,经历的过程是漫长而复杂的,总共经历的状态就有
22个,意思就是说每个状态里只会做一件事情,如果做那件事情不成功就会运行失败。那么第二人生采用这种状态机有什么好处呢?在我看来采用状态机的好处是利于把复杂的过程分解,利于把漫长的状态提示给用户,利于开发人员调试和分析,利于程序跳转到不同的状态。下面就来先看这个类的声明代码:
#001 class LLStartUp
#002 {
#003 public:
判断是否可以全屏运行程序。
#004
static bool canGoFullscreen();
#005
// returns true if we are far enough along in startup to allow
#006
// going full screen
#007
设置状态变量。
#008
// Always use this to set gStartupState so changes are logged
#009
static void setStartupState( S32 state );
获取当前状态变量。
#010
static S32 getStartupState() { return gStartupState; };
#011
让游览器显示
URL串的内容。
#012
static bool dispatchURL();
#013
// if we have a SLURL or sim string ("Ahern/123/45") that started
#014
// the viewer, dispatch it
#015
保存
SL的URL命令。
#016
static std::string sSLURLCommand;
#017
// *HACK: On startup, if we were passed a secondlife://app/do/foo
#018
// command URL, store it for later processing.
#019
#020 protected:
保存启动运行状态。
#021
static S32 gStartupState; // Do not set directly, use LLStartup::setStartupState
#022 };
下面再来分析几个函数的实现代码:
#001 bool LLStartUp::canGoFullscreen()
#002 {
只有大于
STATE_WORLD_INIT状态,也就是渲染第二人生时才允许全屏显示。
#003
return gStartupState >= STATE_WORLD_INIT;
#004 }
调用这个函数来保存不同时候的状态,并且把这个状态输出到调试窗口,方便开发人员查找出错的原因。
#001 // static
#002 void LLStartUp::setStartupState( S32 state )
#003 {
#004
llinfos << "Startup state changing from " << gStartupState << " to " << state << llendl;
#005
gStartupState = state;
#006 }
相关文章
- 【Redis源码】Redis 启动过程分析
- jmeter+ant+jenkins 接口自动化测试持续集成(送源码)
- 6.S081/6.828: xv6源码分析--networking
- 【Selenium 自学系列】(一)看源码分析交互原理
- ThingsBoard 源码编译
- react源码分析:实现react时间分片
- golang源码分析:goc集成测试覆盖率实现原理(2)
- vue源码分析-基础的数据代理检测_2023-03-01
- 佛萨奇2.0开发魔豹联盟智能合约源码
- Java集合Set接口详解——含源码分析
- 从源码层次了解 React 生命周期:更新
- react源码分析:实现react时间分片
- selenium源码通读·6 |webdriver/common/alert.py-Alert类分析
- selenium源码通读·8 |webdriver/common/keys.py-Keys类分析
- 什么是NFT数字藏品系统开发丨NFT数字藏品系统开发案例及源码分析
- 2. 「snabbdom@3.5.1 源码分析」h函数 和 虚拟DOM
- 禾匠商城小程序微擎版V3_3.1.53完整源码包+小程序前端
- SpringBoot源码分析系列之一:如何启动内嵌Tomcat
- 【Android 安全】DEX 加密 ( Application 替换 | Android 应用启动原理 | LoadedApk 源码分析 )
- 【Android 插件化】Hook 插件化框架 ( 从 Hook 应用角度分析 Activity 启动流程 二 | AMS 进程相关源码 | 主进程相关源码 )
- 【Android 事件分发】事件分发源码分析 ( ViewGroup 事件传递机制 五 )
- 【Android 启动过程】Activity 启动源码分析 ( AMS -> ActivityThread、AMS 线程阶段 )
- 【Android 插件化】VirtualApp 源码分析 ( 启动应用源码分析 | HomePresenterImpl 启动应用方法 | VirtualCore 启动插件应用最终方法 )
- 【Android 逆向】整体加固脱壳 ( 脱壳起点 : 整体加固脱壳 | Dalvik 脱壳机制 : 利用 DexClassLoader 加载过程进行脱壳 | 相关源码分析 )
- 分析PPPD in Linux Kernel: A Source Code Analysis(linuxpppd源码)
- Linux网络源码分析:深入理解操作系统核心技术(linux网络源码)
- des加密解密源码C#key值问题分析
- mysqld_safe启动脚本源码阅读、分析