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_RENDERER_RESOURCE_H_
6#define CHROME_BROWSER_TASK_MANAGER_RENDERER_RESOURCE_H_
7
8#include "base/basictypes.h"
9#include "chrome/browser/task_manager/resource_provider.h"
10
11namespace content {
12class RenderViewHost;
13}
14
15namespace task_manager {
16
17// Base class for various types of render process resources that provides common
18// functionality like stats tracking.
19class RendererResource : public Resource {
20 public:
21  RendererResource(base::ProcessHandle process,
22                   content::RenderViewHost* render_view_host);
23  virtual ~RendererResource();
24
25  // Resource methods:
26  virtual base::string16 GetProfileName() const OVERRIDE;
27  virtual base::ProcessHandle GetProcess() const OVERRIDE;
28  virtual int GetUniqueChildProcessId() const OVERRIDE;
29  virtual Type GetType() const OVERRIDE;
30  virtual int GetRoutingID() const OVERRIDE;
31
32  virtual bool ReportsCacheStats() const OVERRIDE;
33  virtual blink::WebCache::ResourceTypeStats GetWebCoreCacheStats() const
34      OVERRIDE;
35  virtual bool ReportsV8MemoryStats() const OVERRIDE;
36  virtual size_t GetV8MemoryAllocated() const OVERRIDE;
37  virtual size_t GetV8MemoryUsed() const OVERRIDE;
38
39  // RenderResources always provide the network usage.
40  virtual bool SupportNetworkUsage() const OVERRIDE;
41  virtual void SetSupportNetworkUsage() OVERRIDE { }
42
43  virtual void Refresh() OVERRIDE;
44
45  virtual void NotifyResourceTypeStats(
46      const blink::WebCache::ResourceTypeStats& stats) OVERRIDE;
47
48  virtual void NotifyV8HeapStats(size_t v8_memory_allocated,
49                                 size_t v8_memory_used) OVERRIDE;
50
51  content::RenderViewHost* render_view_host() const {
52    return render_view_host_;
53  }
54
55 private:
56  base::ProcessHandle process_;
57  int pid_;
58  int unique_process_id_;
59
60  // RenderViewHost we use to fetch stats.
61  content::RenderViewHost* render_view_host_;
62  // The stats_ field holds information about resource usage in the renderer
63  // process and so it is updated asynchronously by the Refresh() call.
64  blink::WebCache::ResourceTypeStats stats_;
65  // This flag is true if we are waiting for the renderer to report its stats.
66  bool pending_stats_update_;
67
68  // We do a similar dance to gather the V8 memory usage in a process.
69  size_t v8_memory_allocated_;
70  size_t v8_memory_used_;
71  bool pending_v8_memory_allocated_update_;
72
73  DISALLOW_COPY_AND_ASSIGN(RendererResource);
74};
75
76}  // namespace task_manager
77
78#endif  // CHROME_BROWSER_TASK_MANAGER_RENDERER_RESOURCE_H_
79