Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(286)

Unified Diff: chrome/browser/task_manager/task_manager.h

Issue 2197483003: Move the Mac Task Manager to the new backend code. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: mark Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/task_manager/task_manager.h
diff --git a/chrome/browser/task_manager/task_manager.h b/chrome/browser/task_manager/task_manager.h
deleted file mode 100644
index 7c13130b2646e01ab8ce062fc2af18ef617c6f7b..0000000000000000000000000000000000000000
--- a/chrome/browser/task_manager/task_manager.h
+++ /dev/null
@@ -1,559 +0,0 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CHROME_BROWSER_TASK_MANAGER_TASK_MANAGER_H_
-#define CHROME_BROWSER_TASK_MANAGER_TASK_MANAGER_H_
-
-#include <stddef.h>
-#include <stdint.h>
-
-#include <map>
-#include <memory>
-#include <vector>
-
-#include "base/callback_forward.h"
-#include "base/gtest_prod_util.h"
-#include "base/macros.h"
-#include "base/memory/ref_counted.h"
-#include "base/memory/singleton.h"
-#include "base/observer_list.h"
-#include "base/strings/string16.h"
-#include "build/build_config.h"
-#include "chrome/browser/task_manager/resource_provider.h"
-#include "gpu/ipc/common/memory_stats.h"
-#include "third_party/WebKit/public/web/WebCache.h"
-
-// -----------------------------------------------------------------------------
-// DEPRECATED:
-// - This is currently enabled only on MacOSX, and will be removed soon (See
-// crbug.com/528486).
-// - Please don't add any new stuff here. See the new implementation in
-// //src/chrome/browser/task_management.
-// -----------------------------------------------------------------------------
-#if !defined(OS_MACOSX)
-#error "The old task manager is deprecated on non-macos platforms."
-#endif // defined(OS_MACOSX)
-
-class PrefRegistrySimple;
-class PrivateWorkingSetSnapshot;
-class TaskManagerModel;
-class TaskManagerModelGpuDataManagerObserver;
-
-namespace base {
-class ProcessMetrics;
-}
-
-namespace content {
-class WebContents;
-}
-
-namespace extensions {
-class Extension;
-}
-
-namespace gfx {
-class ImageSkia;
-}
-
-namespace net {
-class URLRequest;
-}
-
-// This class is a singleton.
-class TaskManager {
- public:
- // Returns true if the process at the specified index is the browser process.
- bool IsBrowserProcess(int index) const;
-
- // Terminates the process at the specified index.
- void KillProcess(int index);
-
- // Activates the browser tab associated with the process in the specified
- // index.
- void ActivateProcess(int index);
-
- // These methods are invoked by the resource providers to add/remove resources
- // to the Task Manager. Note that the resources are owned by the
- // ResourceProviders and are not valid after StopUpdating() has been called
- // on the ResourceProviders.
- void AddResource(task_manager::Resource* resource);
- void RemoveResource(task_manager::Resource* resource);
-
- void OnWindowClosed();
-
- // Invoked when a change to a resource has occurred that should cause any
- // observers to completely refresh themselves (for example, the creation of
- // a background resource in a process). Results in all observers receiving
- // OnModelChanged() events.
- void ModelChanged();
-
- // Returns the singleton instance (and initializes it if necessary).
- static TaskManager* GetInstance();
-
- TaskManagerModel* model() const { return model_.get(); }
-
- private:
- FRIEND_TEST_ALL_PREFIXES(TaskManagerTest, Basic);
- FRIEND_TEST_ALL_PREFIXES(TaskManagerTest, Resources);
- FRIEND_TEST_ALL_PREFIXES(TaskManagerTest, RefreshCalled);
- FRIEND_TEST_ALL_PREFIXES(TaskManagerWindowControllerTest, Init);
- FRIEND_TEST_ALL_PREFIXES(TaskManagerWindowControllerTest, Sort);
- FRIEND_TEST_ALL_PREFIXES(TaskManagerWindowControllerTest,
- SelectionAdaptsToSorting);
- FRIEND_TEST_ALL_PREFIXES(TaskManagerWindowControllerTest,
- EnsureNewPrimarySortColumn);
- FRIEND_TEST_ALL_PREFIXES(TaskManagerWindowControllerTest,
- EnsureOneColumnVisible);
-
- // Obtain an instance via GetInstance().
- TaskManager();
- friend struct base::DefaultSingletonTraits<TaskManager>;
-
- ~TaskManager();
-
- // The model used for gathering and processing task data. It is ref counted
- // because it is passed as a parameter to MessageLoop::InvokeLater().
- scoped_refptr<TaskManagerModel> model_;
-
- DISALLOW_COPY_AND_ASSIGN(TaskManager);
-};
-
-class TaskManagerModelObserver {
- public:
- virtual ~TaskManagerModelObserver() {}
-
- // Invoked when the model has been completely changed.
- virtual void OnModelChanged() = 0;
-
- // Invoked when a range of items has changed.
- virtual void OnItemsChanged(int start, int length) = 0;
-
- // Invoked when new items are added.
- virtual void OnItemsAdded(int start, int length) = 0;
-
- // Invoked when a range of items has been removed.
- virtual void OnItemsRemoved(int start, int length) = 0;
-
- // Invoked when a range of items is to be immediately removed. It differs
- // from OnItemsRemoved by the fact that the item is still in the task manager,
- // so it can be queried for and found.
- virtual void OnItemsToBeRemoved(int start, int length) {}
-
- // Invoked when the initialization of the model has been finished and
- // periodical updates is started. The first periodical update will be done
- // in a few seconds. (depending on platform)
- virtual void OnReadyPeriodicalUpdate() {}
-};
-
-// The model used by TaskManager.
-//
-// TaskManagerModel caches the values from all task_manager::Resources. This is
-// done so the UI sees a consistant view of the resources until it is told a
-// value has been updated.
-class TaskManagerModel : public base::RefCountedThreadSafe<TaskManagerModel> {
- public:
- // (start, length)
- typedef std::pair<int, int> GroupRange;
-
- explicit TaskManagerModel(TaskManager* task_manager);
-
- void AddObserver(TaskManagerModelObserver* observer);
- void RemoveObserver(TaskManagerModelObserver* observer);
-
- // Returns number of registered resources.
- int ResourceCount() const;
- // Returns number of registered groups.
- int GroupCount() const;
-
- // Methods to return raw resource information.
- int GetNaClDebugStubPort(int index) const;
- int64_t GetNetworkUsage(int index) const;
- double GetCPUUsage(int index) const;
- int GetIdleWakeupsPerSecond(int index) const;
- base::ProcessId GetProcessId(int index) const;
- base::ProcessHandle GetProcess(int index) const;
-
- // Catchall method that calls off to the appropriate GetResourceXXX method
- // based on |col_id|. |col_id| is an IDS_ value used to identify the column.
- base::string16 GetResourceById(int index, int col_id) const;
-
- // Methods to return formatted resource information.
- const base::string16& GetResourceTitle(int index) const;
- const base::string16& GetResourceProfileName(int index) const;
- base::string16 GetResourceNaClDebugStubPort(int index) const;
- base::string16 GetResourceNetworkUsage(int index) const;
- base::string16 GetResourceCPUUsage(int index) const;
- base::string16 GetResourcePrivateMemory(int index) const;
- base::string16 GetResourceSharedMemory(int index) const;
- base::string16 GetResourcePhysicalMemory(int index) const;
- base::string16 GetResourceProcessId(int index) const;
- base::string16 GetResourceGDIHandles(int index) const;
- base::string16 GetResourceUSERHandles(int index) const;
- base::string16 GetResourceWebCoreImageCacheSize(int index) const;
- base::string16 GetResourceWebCoreScriptsCacheSize(int index) const;
- base::string16 GetResourceWebCoreCSSCacheSize(int index) const;
- base::string16 GetResourceVideoMemory(int index) const;
- base::string16 GetResourceSqliteMemoryUsed(int index) const;
- base::string16 GetResourceIdleWakeupsPerSecond(int index) const;
- base::string16 GetResourceV8MemoryAllocatedSize(int index) const;
-
- // Gets the private memory (in bytes) that should be displayed for the passed
- // resource index. Caches the result since this calculation can take time on
- // some platforms.
- bool GetPrivateMemory(int index, size_t* result) const;
-
- // Gets the shared memory (in bytes) that should be displayed for the passed
- // resource index. Caches the result since this calculation can take time on
- // some platforms.
- bool GetSharedMemory(int index, size_t* result) const;
-
- // Gets the physical memory (in bytes) that should be displayed for the passed
- // resource index.
- bool GetPhysicalMemory(int index, size_t* result) const;
-
- // On Windows, get the current and peak number of GDI handles in use.
- void GetGDIHandles(int index, size_t* current, size_t* peak) const;
-
- // On Windows, get the current and peak number of USER handles in use.
- void GetUSERHandles(int index, size_t* current, size_t* peak) const;
-
- // Gets the statuses of webkit. Return false if the resource for the given row
- // isn't a renderer.
- bool GetWebCoreCacheStats(int index,
- blink::WebCache::ResourceTypeStats* result) const;
-
- // Gets the GPU memory allocated of the given page.
- bool GetVideoMemory(int index,
- size_t* video_memory,
- bool* has_duplicates) const;
-
- // Gets the sqlite memory (in byte). Return false if the resource for the
- // given row doesn't report information.
- bool GetSqliteMemoryUsedBytes(int index, size_t* result) const;
-
- // Gets the amount of memory allocated for javascript. Returns false if the
- // resource for the given row isn't a renderer.
- bool GetV8Memory(int index, size_t* result) const;
-
- // Gets the amount of memory used for javascript. Returns false if the
- // resource for the given row isn't a renderer.
- bool GetV8MemoryUsed(int index, size_t* result) const;
-
- // Returns true if resource for the given row can be activated.
- bool CanActivate(int index) const;
-
- // Returns true if the resource is first/last in its group (resources
- // rendered by the same process are groupped together).
- bool IsResourceFirstInGroup(int index) const;
- bool IsResourceLastInGroup(int index) const;
-
- // Returns icon to be used for resource (for example a favicon).
- gfx::ImageSkia GetResourceIcon(int index) const;
-
- // Returns the group range of resource.
- GroupRange GetGroupRangeForResource(int index) const;
-
- // Returns an index of groups to which the resource belongs.
- int GetGroupIndexForResource(int index) const;
-
- // Returns an index of resource which belongs to the |group_index|th group
- // and which is the |index_in_group|th resource in group.
- int GetResourceIndexForGroup(int group_index, int index_in_group) const;
-
- // Compares values in column |col_id| and rows |row1|, |row2|.
- // Returns -1 if value in |row1| is less than value in |row2|,
- // 0 if they are equal, and 1 otherwise.
- int CompareValues(int row1, int row2, int col_id) const;
-
- // Returns the unique child process ID generated by Chromium, not the OS
- // process id. This is used to identify processes internally and for
- // extensions. It is not meant to be displayed to the user.
- int GetUniqueChildProcessId(int index) const;
-
- // Returns the type of the given resource.
- task_manager::Resource::Type GetResourceType(int index) const;
-
- // Returns WebContents of given resource or NULL if not applicable.
- content::WebContents* GetResourceWebContents(int index) const;
-
- void AddResource(task_manager::Resource* resource);
- void RemoveResource(task_manager::Resource* resource);
-
- void StartUpdating();
- void StopUpdating();
-
- // Listening involves calling StartUpdating on all resource providers. This
- // causes all of them to subscribe to notifications and enumerate current
- // resources. It differs from StartUpdating that it doesn't start the
- // Refresh timer. The end result is that we have a full view of resources, but
- // don't spend unneeded time updating, unless we have a real need to.
- void StartListening();
- void StopListening();
-
- void Clear(); // Removes all items.
-
- // Sends OnModelChanged() to all observers to inform them of significant
- // changes to the model.
- void ModelChanged();
-
- // Updates the values for all rows.
- void Refresh();
-
- // Do a bulk repopulation of the physical_memory data on platforms where that
- // is faster.
- void RefreshPhysicalMemoryFromWorkingSetSnapshot();
-
- void NotifyVideoMemoryUsageStats(
- const gpu::VideoMemoryUsageStats& video_memory_usage_stats);
-
- void NotifyBytesRead(const net::URLRequest& request, int64_t bytes_read);
-
- void RegisterOnDataReadyCallback(const base::Closure& callback);
-
- void NotifyDataReady();
-
- private:
- friend class base::RefCountedThreadSafe<TaskManagerModel>;
- friend class TaskManagerBrowserTest;
- FRIEND_TEST_ALL_PREFIXES(ProcessesApiTest, ProcessesVsTaskManager);
- FRIEND_TEST_ALL_PREFIXES(TaskManagerTest, RefreshCalled);
- FRIEND_TEST_ALL_PREFIXES(TaskManagerWindowControllerTest,
- SelectionAdaptsToSorting);
-
- enum UpdateState {
- IDLE = 0, // Currently not updating.
- TASK_PENDING, // An update task is pending.
- STOPPING // A update task is pending and it should stop the update.
- };
-
- // The delay between updates of the information (in ms).
- // Match Activity Monitor's default refresh rate.
- static const int kUpdateTimeMs = 2000;
-
- // Values cached per resource. Values are validated on demand. The is_XXX
- // members indicate if a value is valid.
- struct PerResourceValues {
- PerResourceValues();
- PerResourceValues(const PerResourceValues& other);
- ~PerResourceValues();
-
- bool is_title_valid;
- base::string16 title;
-
- bool is_profile_name_valid;
- base::string16 profile_name;
-
- // No is_network_usage since default (0) is fine.
- int64_t network_usage;
-
- bool is_process_id_valid;
- base::ProcessId process_id;
-
- bool is_webcore_stats_valid;
- blink::WebCache::ResourceTypeStats webcore_stats;
-
- bool is_sqlite_memory_bytes_valid;
- size_t sqlite_memory_bytes;
-
- bool is_v8_memory_valid;
- size_t v8_memory_allocated;
- size_t v8_memory_used;
- };
-
- // Values cached per process. Values are validated on demand. The is_XXX
- // members indicate if a value is valid.
- struct PerProcessValues {
- PerProcessValues();
- PerProcessValues(const PerProcessValues& other);
- ~PerProcessValues();
-
- bool is_cpu_usage_valid;
- double cpu_usage;
-
- bool is_idle_wakeups_valid;
- int idle_wakeups;
-
- bool is_private_and_shared_valid;
- size_t private_bytes;
- size_t shared_bytes;
-
- bool is_physical_memory_valid;
- size_t physical_memory;
-
- bool is_video_memory_valid;
- size_t video_memory;
- bool video_memory_has_duplicates;
-
- bool is_gdi_handles_valid;
- size_t gdi_handles;
- size_t gdi_handles_peak;
-
- bool is_user_handles_valid;
- size_t user_handles;
- size_t user_handles_peak;
-
- bool is_nacl_debug_stub_port_valid;
- int nacl_debug_stub_port;
- };
-
- typedef std::vector<task_manager::Resource*> ResourceList;
- typedef std::vector<scoped_refptr<task_manager::ResourceProvider> >
- ResourceProviderList;
- typedef std::map<base::ProcessHandle, ResourceList> GroupMap;
- typedef std::map<base::ProcessHandle, base::ProcessMetrics*> MetricsMap;
- typedef std::map<task_manager::Resource*, int64_t> ResourceValueMap;
- typedef std::map<task_manager::Resource*,
- PerResourceValues> PerResourceCache;
- typedef std::map<base::ProcessHandle, PerProcessValues> PerProcessCache;
-
- // This struct is used to exchange information between the io and ui threads.
- struct BytesReadParam {
- BytesReadParam(int origin_pid,
- int child_id,
- int route_id,
- int64_t byte_count)
- : origin_pid(origin_pid),
- child_id(child_id),
- route_id(route_id),
- byte_count(byte_count) {}
-
- // The process ID that triggered the request. For plugin requests this
- // will differ from the renderer process ID.
- int origin_pid;
-
- // The child ID of the process this request was routed through.
- int child_id;
-
- int route_id;
- int64_t byte_count;
- };
-
- ~TaskManagerModel();
-
- // Callback from the timer to refresh. Invokes Refresh() as appropriate.
- void RefreshCallback();
-
- void RefreshVideoMemoryUsageStats();
-
- // Returns the network usage (in bytes per seconds) for the specified
- // resource. That's the value retrieved at the last timer's tick.
- int64_t GetNetworkUsageForResource(task_manager::Resource* resource) const;
-
- // Called on the UI thread when some bytes are read.
- void BytesRead(BytesReadParam param);
-
- void MultipleBytesRead(const std::vector<BytesReadParam>* params);
-
- // Notifies the UI thread about all the bytes read. Allows for coalescing
- // multiple bytes read into a single task for the UI thread. This is important
- // for when downloading a lot of data on the IO thread, since posting a Task
- // for each one is expensive.
- void NotifyMultipleBytesRead();
-
- // Called on the IO thread to start/stop updating byte counts.
- void SetUpdatingByteCount(bool is_updating);
-
- // Returns the network usage (in byte per second) that should be displayed for
- // the passed |resource|. -1 means the information is not available for that
- // resource.
- int64_t GetNetworkUsage(task_manager::Resource* resource) const;
-
- // Returns the CPU usage (in %) that should be displayed for the passed
- // |resource|.
- double GetCPUUsage(task_manager::Resource* resource) const;
-
- // Returns the idle wakeups that should be displayed for the passed
- // |resource|.
- int GetIdleWakeupsPerSecond(task_manager::Resource* resource) const;
-
- // Given a number, this function returns the formatted string that should be
- // displayed in the task manager's memory cell.
- base::string16 GetMemCellText(int64_t number) const;
-
- // Verifies the private and shared memory for |handle| is valid in
- // |per_process_cache_|. Returns true if the data in |per_process_cache_| is
- // valid.
- bool CachePrivateAndSharedMemory(base::ProcessHandle handle) const;
-
- // Verifies |webcore_stats| in |per_resource_cache_|, returning true on
- // success.
- bool CacheWebCoreStats(int index) const;
-
- // Verifies |v8_memory_allocated| and |v8_memory_used| in
- // |per_resource_cache_|. Returns true if valid, false if not valid.
- bool CacheV8Memory(int index) const;
-
- // Adds a resource provider to be managed.
- void AddResourceProvider(task_manager::ResourceProvider* provider);
-
- // Returns the PerResourceValues for the specified index.
- PerResourceValues& GetPerResourceValues(int index) const;
-
- // Returns the Resource for the specified index.
- task_manager::Resource* GetResource(int index) const;
-
- // The list of providers to the task manager. They are ref counted.
- ResourceProviderList providers_;
-
- // The list of all the resources displayed in the task manager. They are owned
- // by the ResourceProviders.
- ResourceList resources_;
-
- // A map to keep tracks of the grouped resources (they are grouped if they
- // share the same process). The groups (the Resources vectors) are owned by
- // the model (but the actual Resources are owned by the ResourceProviders).
- GroupMap group_map_;
-
- // A map to retrieve the process metrics for a process. The ProcessMetrics are
- // owned by the model.
- MetricsMap metrics_map_;
-
- // A map that keeps track of the number of bytes read per process since last
- // tick. The Resources are owned by the ResourceProviders.
- ResourceValueMap current_byte_count_map_;
-
- // A map that contains the video memory usage for a process
- gpu::VideoMemoryUsageStats video_memory_usage_stats_;
-
- // Set to true when we've requested video stats and false once we get them.
- bool pending_video_memory_usage_stats_update_;
-
- // An observer waiting for video memory usage stats updates from the GPU
- // process
- std::unique_ptr<TaskManagerModelGpuDataManagerObserver>
- video_memory_usage_stats_observer_;
-
- base::ObserverList<TaskManagerModelObserver> observer_list_;
-
- // How many calls to StartUpdating have been made without matching calls to
- // StopUpdating.
- int update_requests_;
-
- // How many calls to StartListening have been made without matching calls to
- // StopListening.
- int listen_requests_;
-
- // Whether we are currently in the process of updating.
- UpdateState update_state_;
-
- // Whether the IO thread is currently in the process of updating; accessed
- // only on the IO thread.
- bool is_updating_byte_count_;
-
- // Buffer for coalescing BytesReadParam so we don't have to post a task on
- // each NotifyBytesRead() call.
- std::vector<BytesReadParam> bytes_read_buffer_;
-
- std::vector<base::Closure> on_data_ready_callbacks_;
-
- // All per-Resource values are stored here.
- mutable PerResourceCache per_resource_cache_;
-
- // All per-Process values are stored here.
- mutable PerProcessCache per_process_cache_;
-
- DISALLOW_COPY_AND_ASSIGN(TaskManagerModel);
-};
-
-#endif // CHROME_BROWSER_TASK_MANAGER_TASK_MANAGER_H_
« no previous file with comments | « chrome/browser/task_manager/tab_contents_information.cc ('k') | chrome/browser/task_manager/task_manager.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698