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 14namespace task_manager { 15 16RendererResource::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 34RendererResource::~RendererResource() { 35} 36 37void 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 53WebKit::WebCache::ResourceTypeStats 54RendererResource::GetWebCoreCacheStats() const { 55 return stats_; 56} 57 58float RendererResource::GetFPS() const { 59 return fps_; 60} 61 62size_t RendererResource::GetV8MemoryAllocated() const { 63 return v8_memory_allocated_; 64} 65 66size_t RendererResource::GetV8MemoryUsed() const { 67 return v8_memory_used_; 68} 69 70void RendererResource::NotifyResourceTypeStats( 71 const WebKit::WebCache::ResourceTypeStats& stats) { 72 stats_ = stats; 73 pending_stats_update_ = false; 74} 75 76void RendererResource::NotifyFPS(float fps) { 77 fps_ = fps; 78 pending_fps_update_ = false; 79} 80 81void 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 88base::ProcessHandle RendererResource::GetProcess() const { 89 return process_; 90} 91 92int RendererResource::GetUniqueChildProcessId() const { 93 return unique_process_id_; 94} 95 96Resource::Type RendererResource::GetType() const { 97 return RENDERER; 98} 99 100int RendererResource::GetRoutingID() const { 101 return render_view_host_->GetRoutingID(); 102} 103 104bool RendererResource::ReportsCacheStats() const { 105 return true; 106} 107 108bool RendererResource::ReportsFPS() const { 109 return true; 110} 111 112bool RendererResource::ReportsV8MemoryStats() const { 113 return true; 114} 115 116bool RendererResource::CanInspect() const { 117 return true; 118} 119 120void RendererResource::Inspect() const { 121 DevToolsWindow::OpenDevToolsWindow(render_view_host_); 122} 123 124bool RendererResource::SupportNetworkUsage() const { 125 return true; 126} 127 128void 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