gecko-dev/widget/ProcInfo.h

80 строки
1.9 KiB
C++

/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
#ifndef __mozilla_ProcInfo_h
#define __mozilla_ProcInfo_h
#include <base/process.h>
#include <stdint.h>
#include "mozilla/dom/ipc/IdType.h"
namespace mozilla {
// Process types
enum class ProcType {
// These must match the ones in ContentParent.h and E10SUtils.jsm
Web,
File,
Extension,
Privileged,
WebLargeAllocation,
// GPU process (only on Windows)
Gpu,
// RDD process (Windows and macOS)
Rdd,
// Socket process
Socket,
// Main process
Browser,
// Unknown type of process
Unknown
};
struct ThreadInfo {
// Thread Id.
base::ProcessId tid = 0;
// Thread name, if any.
nsString name;
// User time in ns.
uint64_t cpuUser = 0;
// System time in ns.
uint64_t cpuKernel = 0;
};
struct ProcInfo {
// Process Id
base::ProcessId pid = 0;
// Child Id as defined by Firefox when a child process is created.
dom::ContentParentId childId;
// Process type
ProcType type;
// Process filename (without the path name).
nsString filename;
// VMS in bytes.
uint64_t virtualMemorySize = 0;
// RSS in bytes.
int64_t residentSetSize = 0;
// User time in ns.
uint64_t cpuUser = 0;
// System time in ns.
uint64_t cpuKernel = 0;
// Threads owned by this process.
nsTArray<ThreadInfo> threads;
};
typedef MozPromise<ProcInfo, nsresult, true> ProcInfoPromise;
/*
* GetProcInfo() uses a background thread to perform system calls.
*
* Depending on the platform, this call can be quite expensive and the
* promise may return after several ms.
*/
RefPtr<ProcInfoPromise> GetProcInfo(base::ProcessId pid, int32_t childId,
const ProcType& type);
} // namespace mozilla
#endif // ProcInfo_h