Upstream version 9.38.198.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / task_manager / resource_provider.h
1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #ifndef CHROME_BROWSER_TASK_MANAGER_RESOURCE_PROVIDER_H_
6 #define CHROME_BROWSER_TASK_MANAGER_RESOURCE_PROVIDER_H_
7
8 #include "base/basictypes.h"
9 #include "base/memory/ref_counted.h"
10 #include "base/process/process_handle.h"
11 #include "base/strings/string16.h"
12 #include "third_party/WebKit/public/web/WebCache.h"
13
14 class PrefRegistrySimple;
15 class TaskManagerModel;
16
17 namespace content {
18 class WebContents;
19 }
20
21 namespace extensions {
22 class Extension;
23 }
24
25 namespace gfx {
26 class ImageSkia;
27 }
28
29 namespace task_manager {
30
31 #define TASKMANAGER_RESOURCE_TYPE_LIST(def) \
32     def(BROWSER)         /* The main browser process. */ \
33     def(RENDERER)        /* A normal WebContents renderer process. */ \
34     def(EXTENSION)       /* An extension or app process. */ \
35     def(NOTIFICATION)    /* A notification process. */ \
36     def(GUEST)           /* A browser plugin guest process. */ \
37     def(PLUGIN)          /* A plugin process. */ \
38     def(WORKER)          /* A web worker process. */ \
39     def(NACL)            /* A NativeClient loader or broker process. */ \
40     def(UTILITY)         /* A browser utility process. */ \
41     def(ZYGOTE)          /* A Linux zygote process. */ \
42     def(SANDBOX_HELPER)  /* A sandbox helper process. */ \
43     def(GPU)             /* A graphics process. */
44
45 #define TASKMANAGER_RESOURCE_TYPE_LIST_ENUM(a)   a,
46 #define TASKMANAGER_RESOURCE_TYPE_LIST_AS_STRING(a)   case a: return #a;
47
48 // A resource represents one row in the task manager.
49 // Resources from similar processes are grouped together by the task manager.
50 class Resource {
51  public:
52   virtual ~Resource() {}
53
54   enum Type {
55     UNKNOWN = 0,
56     TASKMANAGER_RESOURCE_TYPE_LIST(TASKMANAGER_RESOURCE_TYPE_LIST_ENUM)
57   };
58
59   virtual base::string16 GetTitle() const = 0;
60   virtual base::string16 GetProfileName() const = 0;
61   virtual gfx::ImageSkia GetIcon() const = 0;
62   virtual base::ProcessHandle GetProcess() const = 0;
63   virtual int GetUniqueChildProcessId() const = 0;
64   virtual Type GetType() const = 0;
65   virtual int GetRoutingID() const;
66
67   virtual bool ReportsCacheStats() const;
68   virtual blink::WebCache::ResourceTypeStats GetWebCoreCacheStats() const;
69
70   virtual bool ReportsSqliteMemoryUsed() const;
71   virtual size_t SqliteMemoryUsedBytes() const;
72
73   virtual bool ReportsV8MemoryStats() const;
74   virtual size_t GetV8MemoryAllocated() const;
75   virtual size_t GetV8MemoryUsed() const;
76
77   // A helper function for ActivateProcess when selected resource refers
78   // to a Tab or other window containing web contents.  Returns NULL by
79   // default because not all resources have an associated web contents.
80   virtual content::WebContents* GetWebContents() const;
81
82   // Whether this resource does report the network usage accurately.
83   // This controls whether 0 or N/A is displayed when no bytes have been
84   // reported as being read. This is because some plugins do not report the
85   // bytes read and we don't want to display a misleading 0 value in that
86   // case.
87   virtual bool SupportNetworkUsage() const = 0;
88
89   // Called when some bytes have been read and support_network_usage returns
90   // false (meaning we do have network usage support).
91   virtual void SetSupportNetworkUsage() = 0;
92
93   // The TaskManagerModel periodically refreshes its data and call this
94   // on all live resources.
95   virtual void Refresh() {}
96
97   virtual void NotifyResourceTypeStats(
98       const blink::WebCache::ResourceTypeStats& stats) {}
99   virtual void NotifyV8HeapStats(size_t v8_memory_allocated,
100                                  size_t v8_memory_used) {}
101
102   static const char* GetResourceTypeAsString(const Type type) {
103     switch (type) {
104       TASKMANAGER_RESOURCE_TYPE_LIST(TASKMANAGER_RESOURCE_TYPE_LIST_AS_STRING)
105       default: return "UNKNOWN";
106     }
107   }
108
109  protected:
110   Resource() {}
111
112  private:
113   DISALLOW_COPY_AND_ASSIGN(Resource);
114 };
115
116 #undef TASKMANAGER_RESOURCE_TYPE_LIST
117 #undef TASKMANAGER_RESOURCE_TYPE_LIST_ENUM
118 #undef TASKMANAGER_RESOURCE_TYPE_LIST_AS_STRING
119
120 // ResourceProviders are responsible for adding/removing resources to the task
121 // manager. The task manager notifies the ResourceProvider that it is ready
122 // to receive resource creation/termination notifications with a call to
123 // StartUpdating(). At that point, the resource provider should call
124 // AddResource with all the existing resources, and after that it should call
125 // AddResource/RemoveResource as resources are created/terminated.
126 // The provider remains the owner of the resource objects and is responsible
127 // for deleting them (when StopUpdating() is called).
128 // After StopUpdating() is called the provider should also stop reporting
129 // notifications to the task manager.
130 // Note: ResourceProviders have to be ref counted as they are used in
131 // MessageLoop::InvokeLater().
132 class ResourceProvider : public base::RefCountedThreadSafe<ResourceProvider> {
133  public:
134   // Should return the resource associated to the specified ids, or NULL if
135   // the resource does not belong to this provider.
136   virtual Resource* GetResource(int origin_pid,
137                                 int child_id,
138                                 int route_id) = 0;
139   virtual void StartUpdating() = 0;
140   virtual void StopUpdating() = 0;
141
142  protected:
143   friend class base::RefCountedThreadSafe<ResourceProvider>;
144
145   virtual ~ResourceProvider() {}
146 };
147
148 }  // namespace task_manager
149
150 #endif  // CHROME_BROWSER_TASK_MANAGER_RESOURCE_PROVIDER_H_