15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/browser/profiler_message_filter.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/tracked_objects.h" 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/browser/profiler_controller_impl.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/browser/tcmalloc_internals_request_job.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/common/child_process_messages.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace content { 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)ProfilerMessageFilter::ProfilerMessageFilter(int process_type) 155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) : BrowserMessageFilter(ChildProcessMsgStart), 165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) process_type_(process_type) { 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ProfilerMessageFilter::OnChannelConnected(int32 peer_pid) { 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tracked_objects::ThreadData::Status status = 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tracked_objects::ThreadData::status(); 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Send(new ChildProcessMsg_SetProfilerStatus(status)); 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 25cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)bool ProfilerMessageFilter::OnMessageReceived(const IPC::Message& message) { 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool handled = true; 27cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) IPC_BEGIN_MESSAGE_MAP(ProfilerMessageFilter, message) 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC_MESSAGE_HANDLER(ChildProcessHostMsg_ChildProfilerData, 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OnChildProfilerData) 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(USE_TCMALLOC) 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC_MESSAGE_HANDLER(ChildProcessHostMsg_TcmallocStats, OnTcmallocStats) 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC_MESSAGE_UNHANDLED(handled = false) 34cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) IPC_END_MESSAGE_MAP() 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return handled; 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ProfilerMessageFilter::~ProfilerMessageFilter() {} 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ProfilerMessageFilter::OnChildProfilerData( 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int sequence_number, 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const tracked_objects::ProcessDataSnapshot& profiler_data) { 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProfilerControllerImpl::GetInstance()->OnProfilerDataCollected( 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sequence_number, profiler_data, process_type_); 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(USE_TCMALLOC) 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ProfilerMessageFilter::OnTcmallocStats(const std::string& output) { 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AboutTcmallocOutputs::GetInstance()->OnStatsForChildProcess( 507dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch peer_pid(), process_type_, output); 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 55