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"
15 #include "ipc/ipc_sender.h"
19 ChildHistogramMessageFilter::ChildHistogramMessageFilter()
21 io_message_loop_(ChildProcess::current()->io_message_loop_proxy()) {
24 ChildHistogramMessageFilter::~ChildHistogramMessageFilter() {
27 void ChildHistogramMessageFilter::OnFilterAdded(IPC::Sender* sender) {
31 void ChildHistogramMessageFilter::OnFilterRemoved() {
34 bool ChildHistogramMessageFilter::OnMessageReceived(
35 const IPC::Message& message) {
37 IPC_BEGIN_MESSAGE_MAP(ChildHistogramMessageFilter, message)
38 IPC_MESSAGE_HANDLER(ChildProcessMsg_GetChildHistogramData,
39 OnGetChildHistogramData)
40 IPC_MESSAGE_UNHANDLED(handled = false)
45 void ChildHistogramMessageFilter::SendHistograms(int sequence_number) {
46 io_message_loop_->PostTask(
47 FROM_HERE, base::Bind(&ChildHistogramMessageFilter::UploadAllHistograms,
48 this, sequence_number));
51 void ChildHistogramMessageFilter::OnGetChildHistogramData(int sequence_number) {
52 UploadAllHistograms(sequence_number);
55 void ChildHistogramMessageFilter::UploadAllHistograms(int sequence_number) {
56 if (!histogram_delta_serialization_) {
57 histogram_delta_serialization_.reset(
58 new base::HistogramDeltaSerialization("ChildProcess"));
61 std::vector<std::string> deltas;
62 histogram_delta_serialization_->PrepareAndSerializeDeltas(&deltas);
64 new ChildProcessHostMsg_ChildHistogramData(sequence_number, deltas));
69 LOCAL_HISTOGRAM_COUNTS("Histogram.ChildProcessHistogramSentCount", count);
73 } // namespace content