| // Copyright 2021 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| module crosapi.mojom; |
| |
| import "mojo/public/mojom/base/process_id.mojom"; |
| import "mojo/public/mojom/base/string16.mojom"; |
| import "mojo/public/mojom/base/time.mojom"; |
| import "mojo/public/mojom/base/unguessable_token.mojom"; |
| import "ui/gfx/image/mojom/image.mojom"; |
| |
| [Stable, Extensible] |
| enum TaskType { |
| [Default] kUnknown = 0, |
| |
| /* Singleton processes that don't belong to a particular tab. */ |
| kBrowser, /* The main browser process. */ |
| kGpu, /* A graphics process. */ |
| kZygote, /* A Linux zygote process. */ |
| kUtility, /* A browser utility process. */ |
| |
| /* Per-Tab processes. */ |
| kRenderer, /* A normal WebContents renderer process. */ |
| kExtension, /* An extension or app process. */ |
| |
| /* Plugin processes.*/ |
| kGuest, /* A browser plugin guest process. */ |
| kPlugin, /* A plugin process. */ |
| kNacl, /* A NativeClient loader or broker process. */ |
| kSandboxHelper, /* A sandbox helper process. */ |
| kDedicatedWorker, /* A dedicated worker running on the renderer process. */ |
| kSharedWorker, /* A shared worker running on the renderer process. */ |
| kServiceWorker, /* A service worker running on the renderer process. */ |
| }; |
| |
| // A struct mirroring blink::MemoryCache::TypeStatistic. |
| [Stable] |
| struct WebCacheResourceTypeStat { |
| uint64 count; |
| uint64 size; |
| uint64 decoded_size; |
| }; |
| |
| // A struct mirroring blink::MemoryCache::Statistics. |
| [Stable] |
| struct WebCacheResourceTypeStats { |
| WebCacheResourceTypeStat images; |
| WebCacheResourceTypeStat css_style_sheets; |
| WebCacheResourceTypeStat scripts; |
| WebCacheResourceTypeStat xsl_style_sheets; |
| WebCacheResourceTypeStat fonts; |
| WebCacheResourceTypeStat other; |
| }; |
| |
| // A struct represent a task from lacros. |
| [Stable] |
| struct Task { |
| // Uuid that uniquely identifies the task. |
| string task_uuid; |
| // Type of lacros task. |
| TaskType type; |
| // Title of task. |
| mojo_base.mojom.String16 title; |
| // Process id of task. |
| mojo_base.mojom.ProcessId process_id; |
| // Icon of task. |
| gfx.mojom.ImageSkia? icon; |
| // Profile name of task. |
| mojo_base.mojom.String16 profile_name; |
| // Sqlite used memory in bytes. |
| int64 used_sqlite_memory; |
| // Allocated v8 memory in bytes. |
| int64 v8_memory_allocated; |
| // Used v8 memory in bytes. |
| int64 v8_memory_used; |
| // Webkit resource cache statistics. |
| WebCacheResourceTypeStats? web_cache_stats; |
| // Keep-alive counter if task is in an event page. |
| int64 keep_alive_count; |
| // The instantaneous rate, in bytes per second, of network usage |
| // (sent and received), as measured over the last refresh cycle. |
| int64 network_usage_rate; |
| // The cumulative number of bytes of network use (sent and received) |
| // over the tasks lifetime. |
| int64 cumulative_network_usage; |
| }; |
| |
| // A struct representing a lacros task group, which is a group of tasks |
| // whiche share the same process, and the resources associated with it. |
| [Stable] |
| struct TaskGroup { |
| // Process id of the task group. |
| mojo_base.mojom.ProcessId process_id; |
| // CPU usage over the most recent refresh cycle. The value is in the range |
| // zero to base::SysInfo::NumberOfProcessors() * 100%. |
| double platform_independent_cpu_usage; |
| // Current memory footprint in bytes. |
| int64 memory_footprint_bytes; |
| // Current swapped memory in bytes. |
| int64 swapped_mem_bytes; |
| // GPU memory usage in bytes. |
| int64 gpu_memory_bytes; |
| // True if this process' GPU resource count is inflated because it is counting |
| // other processes' resources. |
| bool gpu_memory_has_duplicates; |
| // Network usage (in bytes per second) during the current refresh cycle |
| // for the process. |
| int64 per_process_network_usage_rate; |
| // A continuously updating sum of all bytes that have been downloaded and |
| // uploaded by all tasks in this process. |
| int64 cumulative_per_process_network_usage; |
| // Whether the process in a backgrounded process. |
| bool is_backgrounded; |
| // NaCl GDB debug stub port. |
| int64 nacl_debug_stub_port; |
| // Number of file descriptors currently open by the process. |
| int64 open_fd_count; |
| // Number of average idle CPU wakeups per second since the last refresh cycle. |
| int64 idle_wakeups_per_second; |
| }; |
| |
| // Interface for task manager provider. Implemented by lacros-chrome. Used by |
| // ash-chrome to get lacros task data remotely. |
| // Next version: 3 |
| // Next method id: 5 |
| [Stable, Uuid="c5073375-8e4b-43c3-85ca-8813adeb0324"] |
| interface TaskManagerProvider { |
| // Deprecated. Use SetRefreshFlags instead. |
| DeprecatedSetRefreshArgs@0(mojo_base.mojom.TimeDelta refresh_interval, |
| int64 refresh_flags); |
| |
| // Gets browser's task data needed for task manager. |
| // Returns task data and task group data. |
| // Note: SetRefreshFlags must be called before to set the desired refresh |
| // interval and refresh flags. |
| GetTaskManagerTasks@1() |
| => (array<Task> task_results, array<TaskGroup> task_group_results); |
| |
| // Notifies Lacros that task manager is closed in ash. |
| OnTaskManagerClosed@2(); |
| |
| // Sets the desired refresh flags, which must be set before calling |
| // GetTaskManagerTasks. |
| // |refresh_flags| specify the enabled resources types, which is a bit flags |
| // from RefreshType enum defined in: |
| // chrome/browser/task_manager/task_manager_observer.h |
| [MinVersion=1] |
| SetRefreshFlags@3(int64 refresh_flags); |
| |
| // Activates a lacros task. |
| // |task_uuid|: task_uuid of the lacros Task to be activated. |
| [MinVersion=2] |
| ActivateTask@4(string task_uuid); |
| }; |
| |
| // Interface for task manager. Implemented by ash-chrome. |
| // Next version: 2 |
| // Next method id: 2 |
| [Stable, Uuid="c5073375-8e4b-43c3-85ca-8813adeb0324"] |
| interface TaskManager { |
| // A crosapi client can register itself as a task manager provider. This |
| // provides ash a mechanism to get task manager data from lacros. |
| // The provider is uniquely identified by |token|. |
| RegisterTaskManagerProvider@0( |
| pending_remote<TaskManagerProvider> provider, |
| mojo_base.mojom.UnguessableToken token); |
| |
| // Shows the Task Manager window, or re-activates an existing one. |
| [MinVersion=1] |
| ShowTaskManager@1(); |
| }; |