// Copyright 2016 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// Use the <code>chrome.processes</code> API to interact with the browser's
// processes.
namespace processes {
// The types of the browser processes.
enum ProcessType {
browser,
renderer,
extension,
notification,
plugin,
worker,
nacl,
service_worker,
utility,
gpu,
other
};
// An object that represents a Chrome task running on a process. Several tasks
// can share the same process.
dictionary TaskInfo {
// The title of the task.
DOMString title;
// Optional tab ID, if this task represents a tab running on a renderer
// process.
long? tabId;
};
// The Cache object contains information about the size and utilization of a
// cache used by the browser.
dictionary Cache {
// The size of the cache, in bytes.
double size;
// The part of the cache that is utilized, in bytes.
double liveSize;
};
// An object containing information about one of the browser's processes.
dictionary Process {
// Unique ID of the process provided by the browser.
long id;
// The ID of the process, as provided by the OS.
long osProcessId;
// The type of process.
ProcessType type;
// The profile which the process is associated with.
DOMString profile;
// The debugging port for Native Client processes. Zero for other process
// types and for NaCl processes that do not have debugging enabled.
long naclDebugPort;
// Array of TaskInfos representing the tasks running on this process.
TaskInfo[] tasks;
// The most recent measurement of the process's CPU usage, expressed as the
// percentage of a single CPU core used in total, by all of the process's
// threads. This gives a value from zero to CpuInfo.numOfProcessors*100,
// which can exceed 100% in multi-threaded processes.
// Only available when receiving the object as part of a callback from
// onUpdated or onUpdatedWithMemory.
double? cpu;
// The most recent measurement of the process network usage, in bytes per
// second. Only available when receiving the object as part of a callback
// from onUpdated or onUpdatedWithMemory.
double? network;
// The most recent measurement of the process private memory usage, in
// bytes. Only available when receiving the object as part of a callback
// from onUpdatedWithMemory or getProcessInfo with the includeMemory flag.
double? privateMemory;
// The most recent measurement of the process JavaScript allocated memory,
// in bytes. Only available when receiving the object as part of a callback
// from onUpdated or onUpdatedWithMemory.
double? jsMemoryAllocated;
// The most recent measurement of the process JavaScript memory used, in
// bytes. Only available when receiving the object as part of a callback
// from onUpdated or onUpdatedWithMemory.
double? jsMemoryUsed;
// The most recent measurement of the process's SQLite memory usage, in
// bytes. Only available when receiving the object as part of a callback
// from onUpdated or onUpdatedWithMemory.
double? sqliteMemory;
// The most recent information about the image cache for the process. Only
// available when receiving the object as part of a callback from onUpdated
// or onUpdatedWithMemory.
Cache? imageCache;
// The most recent information about the script cache for the process. Only
// available when receiving the object as part of a callback from onUpdated
// or onUpdatedWithMemory.
Cache? scriptCache;
// The most recent information about the CSS cache for the process. Only
// available when receiving the object as part of a callback from onUpdated
// or onUpdatedWithMemory.
Cache? cssCache;
};
// A callback to report the status of the termination.
// |didTerminate|: True if terminating the process was successful, and false
// otherwise.
callback TerminateCallback = void(boolean didTerminate);
// A callback to return the ID of the renderer process of a tab.
// |processId|: Process ID of the tab's renderer process.
callback GetProcessIdForTabCallback = void(long processId);
// A callback called when the processes information is collected.
// |processes|: A dictionary of $(ref:Process) objects for each requested
// process that is a live child process of the current browser process,
// indexed by process ID. Metrics requiring aggregation over time will not be
// populated in each Process object.
callback GetProcessInfoCallback = void(object processes);
interface Functions {
// Returns the ID of the renderer process for the specified tab.
// |tabId|: The ID of the tab for which the renderer process ID is to be
// returned.
static void getProcessIdForTab(
long tabId,
GetProcessIdForTabCallback callback);
// Terminates the specified renderer process. Equivalent to visiting
// about:crash, but without changing the tab's URL.
// |processId|: The ID of the process to be terminated.
static void terminate(
long processId,
optional TerminateCallback callback);
// Retrieves the process information for each process ID specified.
// |processIds|: The list of process IDs or single process ID for which
// to return the process information. An empty list indicates all processes
// are requested.
// |includeMemory|: True if detailed memory usage is required. Note,
// collecting memory usage information incurs extra CPU usage and should
// only be queried for when needed.
static void getProcessInfo(
(long or long[]) processIds,
boolean includeMemory,
GetProcessInfoCallback callback);
};
interface Events {
// Fired each time the Task Manager updates its process statistics,
// providing the dictionary of updated Process objects, indexed by process
// ID.
// |processes|: A dictionary of updated $(ref:Process) objects for each live
// process in the browser, indexed by process ID. Metrics requiring
// aggregation over time will be populated in each Process object.
static void onUpdated(object processes);
// Fired each time the Task Manager updates its process statistics,
// providing the dictionary of updated Process objects, indexed by process
// ID. Identical to onUpdate, with the addition of memory usage details
// included in each Process object. Note, collecting memory usage
// information incurs extra CPU usage and should only be listened for when
// needed.
// |processes|: A dictionary of updated $(ref:Process) objects for each live
// process in the browser, indexed by process ID. Memory usage details will
// be included in each Process object.
static void onUpdatedWithMemory(object processes);
// Fired each time a process is created, providing the corrseponding Process
// object.
// |process|: Details of the process that was created. Metrics requiring
// aggregation over time will not be populated in the object.
static void onCreated(Process process);
// Fired each time a process becomes unresponsive, providing the
// corrseponding Process object.
// |process|: Details of the unresponsive process. Metrics requiring
// aggregation over time will not be populated in the object. Only available
// for renderer processes.
static void onUnresponsive(Process process);
// Fired each time a process is terminated, providing the type of exit.
// |processId|: The ID of the process that exited.
// |exitType|: The type of exit that occurred for the process - normal,
// abnormal, killed, crashed. Only available for renderer processes.
// |exitCode|: The exit code if the process exited abnormally. Only
// available for renderer processes.
static void onExited(long processId, long exitType, long exitCode);
};
};