Home | History | Annotate | Download | only in task_manager
      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