protected override void AddItem(FullDataItem <T> item)
        {
            var meta = this.GetFileMetaData(item.Item.FileIndex);

            item.Item.TemplateId = this.AddTemplate(item.Template);

            if (!meta.BaseTime.HasValue)
            {
                meta.BaseTime = item.Item.Time;
            }

            item.Item.ProcessId       = meta.ProcessIds.Put(item.Item.ProcessId);
            item.Item.ThreadId        = meta.ThreadIds.Put(item.Item.ThreadId);
            item.Item.ActivityIdIndex = meta.ActivityIds.Put(item.ActivityId);

            if (this.Properties.CompressEnabled)
            {
                if (!item.Item.Compress(meta.BaseTime.Value, out CompressedDataItem8 compressed))
                {
                    if (item.Item.Compress(meta.BaseTime.Value, out CompressedDataItem16 compressed16))
                    {
                        compressed16.State = CompressState.Compressed16;
                        this.CompressedItems16.Add(compressed16);

                        compressed.State = CompressState.Compressed16;
                        compressed.Index = this.CompressedItems16.Count - 1;
                    }
                    else
                    {
                        // item.Item.Id is changed in this call.
                        this.AddItem(item);
                        compressed.State = CompressState.NotCompressed;
                        compressed.Index = this.InternalItems.Count - 1;
                    }
                }

                this.CompressedItems8.Add(compressed);
                var index = this.CompressedItems8.Count - 1;
                this.AddParameters(item.Item.Parameters);
                item.Item.Id = index;

                Debug.Assert(index == this.Parameters.Count - 1, "compressed item list doesn't match parameters list");
            }
            else
            {
                base.AddItem(item);
            }
        }
示例#2
0
 protected virtual void AddItem(FullDataItem <T> item)
 {
     this.localHashTableStringPool.Intern(item.Item.Parameters);
     this.internalItems.Add(item.Item);
     item.Item.Id = this.InternalItems.Count - 1;
 }