我对webkit中timer理解:
- timer就是定时器, webkit整体的运作逻辑都是依赖timer来驱动的
- timer的实现各个平台的机制都不同, 因此webkit中需要能够将不同平台实现对接进来,平台依赖这部分主要用来触发最近一次timer
webkit中对timer的实现方式如下:
- TimerBase类表示每个具体的定时器, 包含了对该定时器的操作(比如启动一次, 循环, 激活, 停止等)
- 需要实现定时器的模板类(Timer)方式继承TimerBase, 模版类Timer的存在主要是用来指定回调函数
- 每个线程都有自己的定时器(多个Timer,继承TimerBase),用ThreadTimers通过线程私有数据来保存,防止线程间定时器的影响
- 由于timer的最终其实依赖平台来实现(porting),因此有一个对象来关联外部触发器,这个对象是SharedTimer
- 触发的方式是将ThreadTimers::sharedTimerFired设置到SharedTimer中,当下一个定时到来时这个函数会被触发,然后来完成定时器的触发
porting层的功能:
- porting层功能是设置下一次定时的时间(依赖平台), 当这次定时到来时触发定时器(调用ThreadTimers::sharedTimerFired)
- ThreadTimers::sharedTimerFired中完成本次定时器触发,并查找下一次需要触发的时间,设定到porting层
poring层需要实现的函数:
以下函数在webkit中有定义但是没有实现, 需要porting时自己去实现
- void setSharedTimerFiredFunction(void (*)()); //porting层保存触发函数及ThreadTimers::sharedTimerFired, 在ThreadTimers构造过程中主动设置
- void setSharedTimerFireInterval(double); //porting层保存下次需要触发的时间
- void stopSharedTimer(); //停止触发
定时器机制:
- android webkit java层的定时机制是通过在java层通过android.os.Handler来实现
- windows平台的定时机制通过WM_TIMER消息来实现