private void ReadLogFileChunk_Gc(BinaryReader reader) { Gc gc; gc = new Gc(this); gc.Generation = reader.ReadInt32(); gc.TimeT = reader.ReadInt64(); gc.Timestamp = Util.ConvertTimeT(gc.TimeT); gc.PreGcLiveBytes = reader.ReadInt64(); gc.PreGcLiveObjects = reader.ReadInt32(); int n; n = reader.ReadInt32(); RawGcData [] raw; raw = new RawGcData [n]; for (int i = 0; i < n; ++i) { raw [i].BacktraceCode = reader.ReadUInt32(); raw [i].ObjectStats.Read(reader); } combsort_raw_gc_data(raw); gc.PostGcLiveBytes = reader.ReadInt64(); gc.PostGcLiveObjects = reader.ReadInt32(); gcs [i_gc] = gc; raw_gc_data [i_gc] = raw; ++i_gc; if (gc.Generation >= 0) { Spew("GC {0}: collected {1} bytes, {2} to {3}", gc.Generation, gc.FreedBytes, gc.PreGcLiveBytes, gc.PostGcLiveBytes); } }
static void combsort_raw_gc_data (RawGcData [] data) { int start = 0; int size = data.Length; int gap = size; while (true) { gap = new_gap (gap); bool swapped = false; int end = start + size - gap; for (int i = start; i < end; i++) { int j = i + gap; if (data [i].BacktraceCode > data [j].BacktraceCode) { RawGcData tmp; tmp = data [i]; data [i] = data [j]; data [j] = tmp; swapped = true; } } if (gap == 1 && !swapped) break; } }
private void ReadLogFileChunk_Gc (BinaryReader reader) { Gc gc; gc = new Gc (this); gc.Generation = reader.ReadInt32 (); gc.TimeT = reader.ReadInt64 (); gc.Timestamp = Util.ConvertTimeT (gc.TimeT); gc.PreGcLiveBytes = reader.ReadInt64 (); gc.PreGcLiveObjects = reader.ReadInt32 (); int n; n = reader.ReadInt32 (); RawGcData [] raw; raw = new RawGcData [n]; for (int i = 0; i < n; ++i) { raw [i].BacktraceCode = reader.ReadUInt32 (); raw [i].ObjectStats.Read (reader); } combsort_raw_gc_data (raw); gc.PostGcLiveBytes = reader.ReadInt64 (); gc.PostGcLiveObjects = reader.ReadInt32 (); gcs [i_gc] = gc; raw_gc_data [i_gc] = raw; ++i_gc; if (gc.Generation >= 0) Spew ("GC {0}: collected {1} bytes, {2} to {3}", gc.Generation, gc.FreedBytes, gc.PreGcLiveBytes, gc.PostGcLiveBytes); }