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