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 #include "content/child/child_histogram_message_filter.h"
10 #include "base/message_loop/message_loop.h"
11 #include "base/metrics/histogram_delta_serialization.h"
12 #include "content/child/child_process.h"
13 #include "content/child/child_thread.h"
14 #include "content/common/child_process_messages.h"
18 ChildHistogramMessageFilter::ChildHistogramMessageFilter()
20 io_message_loop_(ChildProcess::current()->io_message_loop_proxy()) {
23 ChildHistogramMessageFilter::~ChildHistogramMessageFilter() {
26 void ChildHistogramMessageFilter::OnFilterAdded(IPC::Channel* channel) {
30 void ChildHistogramMessageFilter::OnFilterRemoved() {
33 bool ChildHistogramMessageFilter::OnMessageReceived(
34 const IPC::Message& message) {
36 IPC_BEGIN_MESSAGE_MAP(ChildHistogramMessageFilter, message)
37 IPC_MESSAGE_HANDLER(ChildProcessMsg_GetChildHistogramData,
38 OnGetChildHistogramData)
39 IPC_MESSAGE_UNHANDLED(handled = false)
44 void ChildHistogramMessageFilter::SendHistograms(int sequence_number) {
45 io_message_loop_->PostTask(
46 FROM_HERE, base::Bind(&ChildHistogramMessageFilter::UploadAllHistograms,
47 this, sequence_number));
50 void ChildHistogramMessageFilter::OnGetChildHistogramData(int sequence_number) {
51 UploadAllHistograms(sequence_number);
54 void ChildHistogramMessageFilter::UploadAllHistograms(int sequence_number) {
55 if (!histogram_delta_serialization_) {
56 histogram_delta_serialization_.reset(
57 new base::HistogramDeltaSerialization("ChildProcess"));
60 std::vector<std::string> deltas;
61 histogram_delta_serialization_->PrepareAndSerializeDeltas(&deltas);
63 new ChildProcessHostMsg_ChildHistogramData(sequence_number, deltas));
67 DHISTOGRAM_COUNTS("Histogram.ChildProcessHistogramSentCount", count);
70 } // namespace content