|  | // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 
|  | // Use of this source code is governed by a BSD-style license that can be | 
|  | // found in the LICENSE file. | 
|  |  | 
|  | #ifndef CONTENT_BROWSER_TCMALLOC_INTERNALS_REQUEST_JOB_H_ | 
|  | #define CONTENT_BROWSER_TCMALLOC_INTERNALS_REQUEST_JOB_H_ | 
|  |  | 
|  | #include <map> | 
|  | #include "base/basictypes.h" | 
|  | #include "base/memory/singleton.h" | 
|  | #include "base/process.h" | 
|  | #include "build/build_config.h"  // USE_TCMALLOC | 
|  | #include "content/public/common/process_type.h" | 
|  | #include "net/url_request/url_request_simple_job.h" | 
|  |  | 
|  | namespace content { | 
|  |  | 
|  | class AboutTcmallocOutputs { | 
|  | public: | 
|  | // Returns the singleton instance. | 
|  | static AboutTcmallocOutputs* GetInstance(); | 
|  |  | 
|  | // Records the output for a specified header string. | 
|  | void SetOutput(const std::string& header, const std::string& output); | 
|  |  | 
|  | void DumpToHTMLTable(std::string* data); | 
|  |  | 
|  | // Callback for output returned from a child process.  Adds | 
|  | // the output for a canonical process-specific header string that | 
|  | // incorporates the pid. | 
|  | void OnStatsForChildProcess(base::ProcessId pid, | 
|  | ProcessType process_type, | 
|  | const std::string& output); | 
|  |  | 
|  | private: | 
|  | AboutTcmallocOutputs(); | 
|  | ~AboutTcmallocOutputs(); | 
|  |  | 
|  | // A map of header strings (e.g. "Browser", "Renderer PID 123") | 
|  | // to the tcmalloc output collected for each process. | 
|  | typedef std::map<std::string, std::string> AboutTcmallocOutputsType; | 
|  | AboutTcmallocOutputsType outputs_; | 
|  |  | 
|  | friend struct DefaultSingletonTraits<AboutTcmallocOutputs>; | 
|  |  | 
|  | DISALLOW_COPY_AND_ASSIGN(AboutTcmallocOutputs); | 
|  | }; | 
|  |  | 
|  | class TcmallocInternalsRequestJob : public net::URLRequestSimpleJob { | 
|  | public: | 
|  | TcmallocInternalsRequestJob(net::URLRequest* request, | 
|  | net::NetworkDelegate* network_delegate); | 
|  |  | 
|  | virtual int GetData(std::string* mime_type, | 
|  | std::string* charset, | 
|  | std::string* data, | 
|  | const net::CompletionCallback& callback) const OVERRIDE; | 
|  |  | 
|  | protected: | 
|  | virtual ~TcmallocInternalsRequestJob() {} | 
|  |  | 
|  | private: | 
|  | DISALLOW_IMPLICIT_CONSTRUCTORS(TcmallocInternalsRequestJob); | 
|  | }; | 
|  |  | 
|  | }  // namespace content | 
|  |  | 
|  | #endif  // CONTENT_BROWSER_TCMALLOC_INTERNALS_REQUEST_JOB_H_ |