打算寫個android的cache機制系列文章,目前部分主題還出於列提綱階段,慢慢完善吧。
1 安卓的焦點
當在Node List中找到新焦點時,檢查後發現如果與自己是兄弟姐妹,就把它push到stack裡面。當所有的兄弟姐妹都被找到,換句話說是父親的最後一個孩子被找到、並被放到stack裡面,pop出此stack.注意:此stack不同於Tracker的stack,Tracker的stack只push帶孩子的焦點。
這種方式是詭異的:焦點-子焦點-孫焦點--如果我儲存每一代的數字(比如自己是第1代,孩子是第2代,孫子是第3代),我能更快的斷定一個節點是否是此焦點的父親的孫節點。這種方法其他需求能找到孫節點的父親。
2 CachedNode是什嗎?是儲存Node的類
3 CachedFrame是什嗎? 是最重要的類,Cache引用的第一個節點總是Document,CachedFrame中儲存了所有Frame相關的資訊:
1 所有的Frame: WTF::Vector<CachedFrame> mCachedFrames,
2 所有節點(DOM::Node): WTF::Vector<CachedNode> mCachedNodes,
3 所有輸入框:WTF::Vector<CachedInput> mCachedTextInputs,
4 所有layer:WTF::Vector<CachedLayer> mCachedLayers;如果使用混合加速的話,
5 所有顏色:WTF::Vector<CachedColor> mCachedColors。
4 CachedRoot是什嗎?是CachedFrame的子類,
5 CachedHistory是什嗎?維護一個最近訪問的8個節點(Node)列表,用來代表曆史訪問。
WebViewCore::updateFrameCache()->
{
CachedRoot* m_temp = new CachedRoot();
}
buildCache(CachedRoot* root)->
BuildFrame
擷取Frame的Document:
Document* doc = frame->document();
Node* parent = doc;
把緩衝的父節點初始化設定為Frame的document:
cachedParentNode.init(parent);