Upstream version 5.34.92.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
16 namespace content {
17
18 ChildHistogramMessageFilter::ChildHistogramMessageFilter()
19     : channel_(NULL),
20       io_message_loop_(ChildProcess::current()->io_message_loop_proxy()) {
21 }
22
23 ChildHistogramMessageFilter::~ChildHistogramMessageFilter() {
24 }
25
26 void ChildHistogramMessageFilter::OnFilterAdded(IPC::Channel* channel) {
27   channel_ = channel;
28 }
29
30 void ChildHistogramMessageFilter::OnFilterRemoved() {
31 }
32
33 bool ChildHistogramMessageFilter::OnMessageReceived(
34     const IPC::Message& message) {
35   bool handled = true;
36   IPC_BEGIN_MESSAGE_MAP(ChildHistogramMessageFilter, message)
37     IPC_MESSAGE_HANDLER(ChildProcessMsg_GetChildHistogramData,
38                         OnGetChildHistogramData)
39     IPC_MESSAGE_UNHANDLED(handled = false)
40   IPC_END_MESSAGE_MAP()
41   return handled;
42 }
43
44 void ChildHistogramMessageFilter::SendHistograms(int sequence_number) {
45   io_message_loop_->PostTask(
46       FROM_HERE, base::Bind(&ChildHistogramMessageFilter::UploadAllHistograms,
47                             this, sequence_number));
48 }
49
50 void ChildHistogramMessageFilter::OnGetChildHistogramData(int sequence_number) {
51   UploadAllHistograms(sequence_number);
52 }
53
54 void ChildHistogramMessageFilter::UploadAllHistograms(int sequence_number) {
55   if (!histogram_delta_serialization_) {
56     histogram_delta_serialization_.reset(
57         new base::HistogramDeltaSerialization("ChildProcess"));
58   }
59
60   std::vector<std::string> deltas;
61   histogram_delta_serialization_->PrepareAndSerializeDeltas(&deltas);
62   channel_->Send(
63       new ChildProcessHostMsg_ChildHistogramData(sequence_number, deltas));
64
65   static int count = 0;
66   count++;
67   DHISTOGRAM_COUNTS("Histogram.ChildProcessHistogramSentCount", count);
68 }
69
70 }  // namespace content