光标显示的主要逻辑在FrameSelect.cpp文件中。FrameSelection::caretBlinkTimerFired函数即为光标的定时器,来控制光标闪烁。该定时器会调用invalidateCaretRect()来触发重绘请求。同时还会对m_caretPaint的值取反。m_caretPaint变量控制重绘过程中CaretBase::paintCaret 函数是否被调用。CaretBase::paintCaret 函数即为光标的实际绘制函数。这就造成了光标的闪烁效果。
在invalidateCaretRect()函数中会取光标位置为无效区域来向CC请求重绘。CC会通过LayerTreeHost::updateLayers函数来计算重绘涉及到的renderlayer及renderblock