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/profiles/profile.h"
     10 #include "chrome/browser/task_manager/resource_provider.h"
     11 #include "chrome/browser/task_manager/task_manager_util.h"
     12 #include "chrome/common/render_messages.h"
     13 #include "content/public/browser/render_process_host.h"
     14 #include "content/public/browser/render_view_host.h"
     15 
     16 namespace task_manager {
     17 
     18 RendererResource::RendererResource(base::ProcessHandle process,
     19                                    content::RenderViewHost* render_view_host)
     20     : process_(process),
     21       render_view_host_(render_view_host),
     22       pending_stats_update_(false),
     23       v8_memory_allocated_(0),
     24       v8_memory_used_(0),
     25       pending_v8_memory_allocated_update_(false) {
     26   // We cache the process and pid as when a Tab/BackgroundContents is closed the
     27   // process reference becomes NULL and the TaskManager still needs it.
     28   pid_ = base::GetProcId(process_);
     29   unique_process_id_ = render_view_host_->GetProcess()->GetID();
     30   memset(&stats_, 0, sizeof(stats_));
     31 }
     32 
     33 RendererResource::~RendererResource() {
     34 }
     35 
     36 void RendererResource::Refresh() {
     37   if (!pending_stats_update_) {
     38     render_view_host_->Send(new ChromeViewMsg_GetCacheResourceStats);
     39     pending_stats_update_ = true;
     40   }
     41   if (!pending_v8_memory_allocated_update_) {
     42     render_view_host_->Send(new ChromeViewMsg_GetV8HeapStats);
     43     pending_v8_memory_allocated_update_ = true;
     44   }
     45 }
     46 
     47 blink::WebCache::ResourceTypeStats
     48 RendererResource::GetWebCoreCacheStats() const {
     49   return stats_;
     50 }
     51 
     52 size_t RendererResource::GetV8MemoryAllocated() const {
     53   return v8_memory_allocated_;
     54 }
     55 
     56 size_t RendererResource::GetV8MemoryUsed() const {
     57   return v8_memory_used_;
     58 }
     59 
     60 void RendererResource::NotifyResourceTypeStats(
     61     const blink::WebCache::ResourceTypeStats& stats) {
     62   stats_ = stats;
     63   pending_stats_update_ = false;
     64 }
     65 
     66 void RendererResource::NotifyV8HeapStats(
     67     size_t v8_memory_allocated, size_t v8_memory_used) {
     68   v8_memory_allocated_ = v8_memory_allocated;
     69   v8_memory_used_ = v8_memory_used;
     70   pending_v8_memory_allocated_update_ = false;
     71 }
     72 
     73 base::string16 RendererResource::GetProfileName() const {
     74   return util::GetProfileNameFromInfoCache(Profile::FromBrowserContext(
     75       render_view_host_->GetProcess()->GetBrowserContext()));
     76 }
     77 
     78 base::ProcessHandle RendererResource::GetProcess() const {
     79   return process_;
     80 }
     81 
     82 int RendererResource::GetUniqueChildProcessId() const {
     83   return unique_process_id_;
     84 }
     85 
     86 Resource::Type RendererResource::GetType() const {
     87   return RENDERER;
     88 }
     89 
     90 int RendererResource::GetRoutingID() const {
     91   return render_view_host_->GetRoutingID();
     92 }
     93 
     94 bool RendererResource::ReportsCacheStats() const {
     95   return true;
     96 }
     97 
     98 bool RendererResource::ReportsV8MemoryStats() const {
     99   return true;
    100 }
    101 
    102 bool RendererResource::CanInspect() const {
    103   return true;
    104 }
    105 
    106 void RendererResource::Inspect() const {
    107   DevToolsWindow::OpenDevToolsWindow(render_view_host_);
    108 }
    109 
    110 bool RendererResource::SupportNetworkUsage() const {
    111   return true;
    112 }
    113 
    114 }  // namespace task_manager
    115