// private void PushFrame2LaterFrameList(MercuryEventBase e) { if (e != null) { MEObjDeliver evt = (MEObjDeliver)e; FrapWrap frap = ObjectCachePool.instance.Fetch <FrapWrap>(); frap.frameID = (uint)evt.args[0]; frap.data = evt.args[1]; e.Release(); if (Utility.LinkedListInsert(_laterFrames, frap, FrapWrap.FrapWrapInsertComparsionFunc)) { if (_lastFrameNeedToTrace < frap.frameID) { _lastFrameNeedToTrace = (int)frap.frameID; // record last frame while tracing the newest frame. } } else { // release duplicated data AbstractSmartObj obj = (AbstractSmartObj)frap.data; if (obj != null) { obj.Release(); } frap.Release(); } } }
private void ProcessLaterFrames() { if (_laterFrames.Count > 0) { LinkedListNode <FrapWrap> node = _laterFrames.First; while (node != null && node.Value != null) { FrapWrap frap = node.Value; MEObjDeliver e = ObjectCachePool.instance.Fetch <MEObjDeliver>(); e.args[0] = frap.frameID; e.args[1] = frap.data; e.opcode = (int)EObjDeliverOPCode.E_OP_HANDLE_FRAMEPACK; Mercury.instance.Broadcast(EventTokenTable.et_framewindow, this, e); ReportProgress(); frap.Release(); node = node.Next; } _laterFrames.Clear(); } }