1 // Copyright (c) 2012 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.
5 #ifndef CONTENT_BROWSER_TCMALLOC_INTERNALS_REQUEST_JOB_H_
6 #define CONTENT_BROWSER_TCMALLOC_INTERNALS_REQUEST_JOB_H_
9 #include "base/basictypes.h"
10 #include "base/memory/singleton.h"
11 #include "base/process.h"
12 #include "build/build_config.h" // USE_TCMALLOC
13 #include "content/public/common/process_type.h"
14 #include "net/url_request/url_request_simple_job.h"
18 class AboutTcmallocOutputs
{
20 // Returns the singleton instance.
21 static AboutTcmallocOutputs
* GetInstance();
23 // Records the output for a specified header string.
24 void SetOutput(const std::string
& header
, const std::string
& output
);
26 void DumpToHTMLTable(std::string
* data
);
28 // Callback for output returned from a child process. Adds
29 // the output for a canonical process-specific header string that
30 // incorporates the pid.
31 void OnStatsForChildProcess(base::ProcessId pid
,
32 ProcessType process_type
,
33 const std::string
& output
);
36 AboutTcmallocOutputs();
37 ~AboutTcmallocOutputs();
39 // A map of header strings (e.g. "Browser", "Renderer PID 123")
40 // to the tcmalloc output collected for each process.
41 typedef std::map
<std::string
, std::string
> AboutTcmallocOutputsType
;
42 AboutTcmallocOutputsType outputs_
;
44 friend struct DefaultSingletonTraits
<AboutTcmallocOutputs
>;
46 DISALLOW_COPY_AND_ASSIGN(AboutTcmallocOutputs
);
49 class TcmallocInternalsRequestJob
: public net::URLRequestSimpleJob
{
51 TcmallocInternalsRequestJob(net::URLRequest
* request
,
52 net::NetworkDelegate
* network_delegate
);
54 virtual int GetData(std::string
* mime_type
,
57 const net::CompletionCallback
& callback
) const OVERRIDE
;
60 virtual ~TcmallocInternalsRequestJob() {}
63 DISALLOW_IMPLICIT_CONSTRUCTORS(TcmallocInternalsRequestJob
);
66 } // namespace content
68 #endif // CONTENT_BROWSER_TCMALLOC_INTERNALS_REQUEST_JOB_H_