public MeminfoViewData(ProcessMeminfo meminfo, ProcessEntry process) { this.Pid = meminfo.Pid; this.processName = process?.Name ?? "-"; this.PssTotal = meminfo.Total.PssTotal; this.PssNativeHeap = meminfo.NativeHeap.PssTotal; this.PssDalvikHeap = meminfo.DalvikHeap.PssTotal; this.UssTotal = meminfo.Total.PrivateDirty + meminfo.Total.PrivateClean; this.UssEGL = meminfo.EglMtrack.PrivateDirty + meminfo.EglMtrack.PrivateClean; this.UssGL = meminfo.GlMtrack.PrivateDirty + meminfo.GlMtrack.PrivateClean; }
void UpdateProcessMeminfo() { var device = this.sumacon.DeviceManager.ActiveDevice; var selectedProcesses = this.GetSelectedProcesses(); if (device != null && selectedProcesses != null) { selectedProcesses = selectedProcesses.OrderBy(p => p.Pid).Take(this.kProcessMeminfoMax); // 今回なくなったものは消す、増えたものはとりあえず0で出しておく(後ほど値設定) var newMeminfoList = selectedProcesses.Select(p => new MeminfoViewData(device.Processes[p.Pid])); var removes = this.meminfoList.Except(newMeminfoList, new MeminfoViewDataEqualityComparer()).ToArray(); foreach (var m in removes) { this.meminfoList.Remove(m); } var adds = newMeminfoList.Except(this.meminfoList, new MeminfoViewDataEqualityComparer()).ToArray(); foreach (var m in adds) { this.meminfoList.Add(new MeminfoViewData(device.Processes[m.Pid])); } foreach (var p in selectedProcesses) { ProcessMeminfo.GetAsync(device, p, meminfo => { this.SafeInvoke(() => { // あれば上書き、もうなくなってたら何もしない var viewData = new MeminfoViewData(meminfo, device.Processes[meminfo.Pid]); for (int i = 0; i < this.meminfoList.Count; i++) { if (this.meminfoList[i].Pid == meminfo.Pid) { this.meminfoList[i] = viewData; return; } } }); }); } } else { this.meminfoList.Clear(); } }