1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
|
// Copyright 2013 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.
#include "chrome/browser/task_manager/renderer_resource.h"
#include "base/basictypes.h"
#include "chrome/browser/devtools/devtools_window.h"
#include "chrome/browser/task_manager/task_manager.h"
#include "chrome/common/render_messages.h"
#include "content/public/browser/render_process_host.h"
#include "content/public/browser/render_view_host.h"
namespace task_manager {
RendererResource::RendererResource(base::ProcessHandle process,
content::RenderViewHost* render_view_host)
: content::RenderViewHostObserver(render_view_host),
process_(process),
render_view_host_(render_view_host),
pending_stats_update_(false),
fps_(0.0f),
pending_fps_update_(false),
v8_memory_allocated_(0),
v8_memory_used_(0),
pending_v8_memory_allocated_update_(false) {
// We cache the process and pid as when a Tab/BackgroundContents is closed the
// process reference becomes NULL and the TaskManager still needs it.
pid_ = base::GetProcId(process_);
unique_process_id_ = render_view_host_->GetProcess()->GetID();
memset(&stats_, 0, sizeof(stats_));
}
RendererResource::~RendererResource() {
}
void RendererResource::Refresh() {
if (!pending_stats_update_) {
render_view_host_->Send(new ChromeViewMsg_GetCacheResourceStats);
pending_stats_update_ = true;
}
if (!pending_fps_update_) {
render_view_host_->Send(
new ChromeViewMsg_GetFPS(render_view_host_->GetRoutingID()));
pending_fps_update_ = true;
}
if (!pending_v8_memory_allocated_update_) {
render_view_host_->Send(new ChromeViewMsg_GetV8HeapStats);
pending_v8_memory_allocated_update_ = true;
}
}
WebKit::WebCache::ResourceTypeStats
RendererResource::GetWebCoreCacheStats() const {
return stats_;
}
float RendererResource::GetFPS() const {
return fps_;
}
size_t RendererResource::GetV8MemoryAllocated() const {
return v8_memory_allocated_;
}
size_t RendererResource::GetV8MemoryUsed() const {
return v8_memory_used_;
}
void RendererResource::NotifyResourceTypeStats(
const WebKit::WebCache::ResourceTypeStats& stats) {
stats_ = stats;
pending_stats_update_ = false;
}
void RendererResource::NotifyFPS(float fps) {
fps_ = fps;
pending_fps_update_ = false;
}
void RendererResource::NotifyV8HeapStats(
size_t v8_memory_allocated, size_t v8_memory_used) {
v8_memory_allocated_ = v8_memory_allocated;
v8_memory_used_ = v8_memory_used;
pending_v8_memory_allocated_update_ = false;
}
base::ProcessHandle RendererResource::GetProcess() const {
return process_;
}
int RendererResource::GetUniqueChildProcessId() const {
return unique_process_id_;
}
TaskManager::Resource::Type RendererResource::GetType() const {
return RENDERER;
}
int RendererResource::GetRoutingID() const {
return render_view_host_->GetRoutingID();
}
bool RendererResource::ReportsCacheStats() const {
return true;
}
bool RendererResource::ReportsFPS() const {
return true;
}
bool RendererResource::ReportsV8MemoryStats() const {
return true;
}
bool RendererResource::CanInspect() const {
return true;
}
void RendererResource::Inspect() const {
DevToolsWindow::OpenDevToolsWindow(render_view_host_);
}
bool RendererResource::SupportNetworkUsage() const {
return true;
}
void RendererResource::RenderViewHostDestroyed(
content::RenderViewHost* render_view_host) {
// We should never get here. We should get deleted first.
// Use this CHECK to help diagnose http://crbug.com/165138.
CHECK(false);
}
} // namespace task_manager
|