Beispiel #1
0
 public GroupInfoDetails(
     Guid iid, bool shared,
     AppMemoryUsageLevel cLevel, ulong cLimit, ulong pCommit, ulong tCommit,
     AppResourceGroupExecutionState ex, AppResourceGroupEnergyQuotaState eq,
     IList <AppResourceGroupBackgroundTaskReport> tasks, IList <ProcessInfoDetails> p)
 {
     InstanceId         = iid;
     IsShared           = shared;
     CommitUsageLevel   = cLevel;
     CommitUsageLimit   = cLimit;
     PrivateCommitUsage = pCommit;
     TotalCommitUsage   = tCommit;
     ExecutionState     = ex;
     EnergyQuotaState   = eq;
     BgTasks            = tasks;
     Processes          = p;
 }
Beispiel #2
0
        private AppInfoDetails CreateDetailsFromDiagnostics(AppRowInfo ari)
        {
            Debug.WriteLine("CreateDetailsFromDiagnostics: aumid={0}, name={1}",
                            ari.Adi.AppInfo.AppUserModelId, ari.Adi.AppInfo.DisplayInfo.DisplayName);

            AppInfoDetails appDetails = null;

            try
            {
                // Create an AppInfoDetails from this AppRowInfo.AppDiagnosticInfo.
                IList <GroupInfoDetails>     groupDetails = new List <GroupInfoDetails>();
                IList <AppResourceGroupInfo> groups       = ari.Adi.GetResourceGroups();
                if (groups != null && groups.Count > 0)
                {
                    foreach (AppResourceGroupInfo group in groups)
                    {
                        Debug.WriteLine("group Id: {0}", group.InstanceId);

                        IList <ProcessInfoDetails>    pDetails = new List <ProcessInfoDetails>();
                        IList <ProcessDiagnosticInfo> pInfos   = group.GetProcessDiagnosticInfos();
                        if (pInfos != null && pInfos.Count > 0)
                        {
                            foreach (ProcessDiagnosticInfo pInfo in pInfos)
                            {
                                TimeSpan kernel = TimeSpan.Zero;
                                TimeSpan user   = TimeSpan.Zero;

                                ulong npp    = 0;
                                ulong pp     = 0;
                                ulong pFault = 0;
                                ulong pFile  = 0;
                                ulong pNpp   = 0;
                                ulong pPP    = 0;
                                ulong ppFile = 0;
                                ulong pVirt  = 0;
                                ulong pWSet  = 0;
                                ulong ppc    = 0;
                                ulong vm     = 0;
                                ulong ws     = 0;

                                long br = 0;
                                long bw = 0;
                                long ob = 0;
                                long oo = 0;
                                long ro = 0;
                                long wo = 0;

                                ProcessCpuUsageReport pcReport = pInfo.CpuUsage.GetReport();
                                if (pcReport != null)
                                {
                                    kernel = pcReport.KernelTime;
                                    user   = pcReport.UserTime;
                                }
                                ProcessMemoryUsageReport pmReport = pInfo.MemoryUsage.GetReport();
                                if (pmReport != null)
                                {
                                    npp    = pmReport.NonPagedPoolSizeInBytes;
                                    pp     = pmReport.PagedPoolSizeInBytes;
                                    pFault = pmReport.PageFaultCount;
                                    pFile  = pmReport.PageFileSizeInBytes;
                                    pNpp   = pmReport.PeakNonPagedPoolSizeInBytes;
                                    pPP    = pmReport.PeakPagedPoolSizeInBytes;
                                    ppFile = pmReport.PeakPageFileSizeInBytes;
                                    pVirt  = pmReport.PeakVirtualMemorySizeInBytes;
                                    pWSet  = pmReport.PeakWorkingSetSizeInBytes;
                                    ppc    = pmReport.PrivatePageCount;
                                    vm     = pmReport.VirtualMemorySizeInBytes;
                                    ws     = pmReport.WorkingSetSizeInBytes;
                                }
                                ProcessDiskUsageReport pdReport = pInfo.DiskUsage.GetReport();
                                if (pdReport != null)
                                {
                                    br = pdReport.BytesReadCount;
                                    bw = pdReport.BytesWrittenCount;
                                    ob = pdReport.OtherBytesCount;
                                    oo = pdReport.OtherOperationCount;
                                    ro = pdReport.ReadOperationCount;
                                    wo = pdReport.WriteOperationCount;
                                }

                                ProcessInfoDetails pDetail = new ProcessInfoDetails(
                                    pInfo.ProcessId, pInfo.ExecutableFileName, pInfo.ProcessStartTime,
                                    kernel, user,
                                    npp, pp, pFault, pFile, pNpp, pPP, ppFile, pVirt, pWSet, ppc, vm, ws,
                                    br, bw, ob, oo, ro, wo);
                                pDetails.Add(pDetail);
                            }
                        }

                        AppMemoryUsageLevel usageLevel = AppMemoryUsageLevel.Low;
                        ulong commitLimit   = 0;
                        ulong privateCommit = 0;
                        ulong totalCommit   = 0;
                        AppResourceGroupExecutionState   ex = AppResourceGroupExecutionState.Unknown;
                        AppResourceGroupEnergyQuotaState eq = AppResourceGroupEnergyQuotaState.Unknown;

                        AppResourceGroupMemoryReport mReport = group.GetMemoryReport();
                        AppResourceGroupStateReport  sReport = group.GetStateReport();
                        IList <AppResourceGroupBackgroundTaskReport> bgReports = new List <AppResourceGroupBackgroundTaskReport>();
                        bgReports = group.GetBackgroundTaskReports();

                        if (mReport != null)
                        {
                            usageLevel    = mReport.CommitUsageLevel;
                            commitLimit   = mReport.CommitUsageLimit;
                            privateCommit = mReport.PrivateCommitUsage;
                            totalCommit   = mReport.TotalCommitUsage;
                        }
                        if (sReport != null)
                        {
                            ex = sReport.ExecutionState;
                            eq = sReport.EnergyQuotaState;
                        }
                        GroupInfoDetails groupDetail = new GroupInfoDetails(
                            group.InstanceId, group.IsShared,
                            usageLevel, commitLimit, privateCommit, totalCommit,
                            ex, eq,
                            bgReports, pDetails);
                        groupDetails.Add(groupDetail);
                    }

                    // We'll save time and get the cached Logo from the ARI, and get the rest of the data from the ADI.
                    appDetails = new AppInfoDetails(
                        ari.Logo,
                        ari.Adi.AppInfo.AppUserModelId, ari.Adi.AppInfo.Id, ari.Adi.AppInfo.PackageFamilyName,
                        ari.Adi.AppInfo.DisplayInfo.DisplayName, ari.Adi.AppInfo.DisplayInfo.Description,
                        groupDetails);
                }
            }
            catch (Exception ex)
            {
                Debug.WriteLine(ex.ToString());
            }
            return(appDetails);
        }