Upstream version 10.39.225.0
[platform/framework/web/crosswalk.git] / src / content / child / child_histogram_message_filter.cc
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.
4
5 #include "content/child/child_histogram_message_filter.h"
6
7 #include <ctype.h>
8
9 #include "base/bind.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"
16
17 namespace content {
18
19 ChildHistogramMessageFilter::ChildHistogramMessageFilter()
20     : sender_(NULL),
21       io_message_loop_(ChildProcess::current()->io_message_loop_proxy()) {
22 }
23
24 ChildHistogramMessageFilter::~ChildHistogramMessageFilter() {
25 }
26
27 void ChildHistogramMessageFilter::OnFilterAdded(IPC::Sender* sender) {
28   sender_ = sender;
29 }
30
31 void ChildHistogramMessageFilter::OnFilterRemoved() {
32 }
33
34 bool ChildHistogramMessageFilter::OnMessageReceived(
35     const IPC::Message& message) {
36   bool handled = true;
37   IPC_BEGIN_MESSAGE_MAP(ChildHistogramMessageFilter, message)
38     IPC_MESSAGE_HANDLER(ChildProcessMsg_GetChildHistogramData,
39                         OnGetChildHistogramData)
40     IPC_MESSAGE_UNHANDLED(handled = false)
41   IPC_END_MESSAGE_MAP()
42   return handled;
43 }
44
45 void ChildHistogramMessageFilter::SendHistograms(int sequence_number) {
46   io_message_loop_->PostTask(
47       FROM_HERE, base::Bind(&ChildHistogramMessageFilter::UploadAllHistograms,
48                             this, sequence_number));
49 }
50
51 void ChildHistogramMessageFilter::OnGetChildHistogramData(int sequence_number) {
52   UploadAllHistograms(sequence_number);
53 }
54
55 void ChildHistogramMessageFilter::UploadAllHistograms(int sequence_number) {
56   if (!histogram_delta_serialization_) {
57     histogram_delta_serialization_.reset(
58         new base::HistogramDeltaSerialization("ChildProcess"));
59   }
60
61   std::vector<std::string> deltas;
62   histogram_delta_serialization_->PrepareAndSerializeDeltas(&deltas);
63   sender_->Send(
64       new ChildProcessHostMsg_ChildHistogramData(sequence_number, deltas));
65
66 #ifndef NDEBUG
67   static int count = 0;
68   count++;
69   LOCAL_HISTOGRAM_COUNTS("Histogram.ChildProcessHistogramSentCount", count);
70 #endif
71 }
72
73 }  // namespace content