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::ProcessHandle GetProcess() const OVERRIDE;
27  virtual int GetUniqueChildProcessId() const OVERRIDE;
28  virtual Type GetType() const OVERRIDE;
29  virtual int GetRoutingID() const OVERRIDE;
30
31  virtual bool ReportsCacheStats() const OVERRIDE;
32  virtual blink::WebCache::ResourceTypeStats GetWebCoreCacheStats() const
33      OVERRIDE;
34  virtual bool ReportsFPS() const OVERRIDE;
35  virtual float GetFPS() const OVERRIDE;
36  virtual bool ReportsV8MemoryStats() const OVERRIDE;
37  virtual size_t GetV8MemoryAllocated() const OVERRIDE;
38  virtual size_t GetV8MemoryUsed() const OVERRIDE;
39
40  // RenderResources are always inspectable.
41  virtual bool CanInspect() const OVERRIDE;
42  virtual void Inspect() const OVERRIDE;
43
44  // RenderResources always provide the network usage.
45  virtual bool SupportNetworkUsage() const OVERRIDE;
46  virtual void SetSupportNetworkUsage() OVERRIDE { }
47
48  virtual void Refresh() OVERRIDE;
49
50  virtual void NotifyResourceTypeStats(
51      const blink::WebCache::ResourceTypeStats& stats) OVERRIDE;
52
53  virtual void NotifyFPS(float fps) OVERRIDE;
54
55  virtual void NotifyV8HeapStats(size_t v8_memory_allocated,
56                                 size_t v8_memory_used) OVERRIDE;
57
58  content::RenderViewHost* render_view_host() const {
59    return render_view_host_;
60  }
61
62 private:
63  base::ProcessHandle process_;
64  int pid_;
65  int unique_process_id_;
66
67  // RenderViewHost we use to fetch stats.
68  content::RenderViewHost* render_view_host_;
69  // The stats_ field holds information about resource usage in the renderer
70  // process and so it is updated asynchronously by the Refresh() call.
71  blink::WebCache::ResourceTypeStats stats_;
72  // This flag is true if we are waiting for the renderer to report its stats.
73  bool pending_stats_update_;
74
75  // The fps_ field holds the renderer frames per second.
76  float fps_;
77  // This flag is true if we are waiting for the renderer to report its FPS.
78  bool pending_fps_update_;
79
80  // We do a similar dance to gather the V8 memory usage in a process.
81  size_t v8_memory_allocated_;
82  size_t v8_memory_used_;
83  bool pending_v8_memory_allocated_update_;
84
85  DISALLOW_COPY_AND_ASSIGN(RendererResource);
86};
87
88}  // namespace task_manager
89
90#endif  // CHROME_BROWSER_TASK_MANAGER_RENDERER_RESOURCE_H_
91