| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "content/child/child_histogram_message_filter.h" | 5 #include "content/child/child_histogram_message_filter.h" |
| 6 | 6 |
| 7 #include <ctype.h> | 7 #include <ctype.h> |
| 8 | 8 |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/location.h" | 10 #include "base/location.h" |
| 11 #include "base/metrics/histogram_delta_serialization.h" | 11 #include "base/metrics/histogram_delta_serialization.h" |
| 12 #include "base/metrics/persistent_histogram_allocator.h" | |
| 13 #include "base/single_thread_task_runner.h" | 12 #include "base/single_thread_task_runner.h" |
| 14 #include "content/child/child_process.h" | 13 #include "content/child/child_process.h" |
| 15 #include "content/common/child_process_messages.h" | 14 #include "content/common/child_process_messages.h" |
| 16 #include "ipc/ipc_sender.h" | 15 #include "ipc/ipc_sender.h" |
| 17 | 16 |
| 18 namespace content { | 17 namespace content { |
| 19 | 18 |
| 20 ChildHistogramMessageFilter::ChildHistogramMessageFilter() | 19 ChildHistogramMessageFilter::ChildHistogramMessageFilter() |
| 21 : sender_(NULL), | 20 : sender_(NULL), |
| 22 io_task_runner_(ChildProcess::current()->io_task_runner()) { | 21 io_task_runner_(ChildProcess::current()->io_task_runner()) { |
| 23 } | 22 } |
| 24 | 23 |
| 25 ChildHistogramMessageFilter::~ChildHistogramMessageFilter() { | 24 ChildHistogramMessageFilter::~ChildHistogramMessageFilter() { |
| 26 } | 25 } |
| 27 | 26 |
| 28 void ChildHistogramMessageFilter::OnFilterAdded(IPC::Sender* sender) { | 27 void ChildHistogramMessageFilter::OnFilterAdded(IPC::Sender* sender) { |
| 29 sender_ = sender; | 28 sender_ = sender; |
| 30 } | 29 } |
| 31 | 30 |
| 32 void ChildHistogramMessageFilter::OnFilterRemoved() { | 31 void ChildHistogramMessageFilter::OnFilterRemoved() { |
| 33 } | 32 } |
| 34 | 33 |
| 35 bool ChildHistogramMessageFilter::OnMessageReceived( | 34 bool ChildHistogramMessageFilter::OnMessageReceived( |
| 36 const IPC::Message& message) { | 35 const IPC::Message& message) { |
| 37 bool handled = true; | 36 bool handled = true; |
| 38 IPC_BEGIN_MESSAGE_MAP(ChildHistogramMessageFilter, message) | 37 IPC_BEGIN_MESSAGE_MAP(ChildHistogramMessageFilter, message) |
| 39 IPC_MESSAGE_HANDLER(ChildProcessMsg_SetHistogramMemory, | 38 IPC_MESSAGE_HANDLER(ChildProcessMsg_GetChildHistogramData, |
| 40 OnSetHistogramMemory) | |
| 41 IPC_MESSAGE_HANDLER(ChildProcessMsg_GetChildNonPersistentHistogramData, | |
| 42 OnGetChildHistogramData) | 39 OnGetChildHistogramData) |
| 43 IPC_MESSAGE_UNHANDLED(handled = false) | 40 IPC_MESSAGE_UNHANDLED(handled = false) |
| 44 IPC_END_MESSAGE_MAP() | 41 IPC_END_MESSAGE_MAP() |
| 45 return handled; | 42 return handled; |
| 46 } | 43 } |
| 47 | 44 |
| 48 void ChildHistogramMessageFilter::OnSetHistogramMemory( | |
| 49 const base::SharedMemoryHandle& memory_handle, | |
| 50 int memory_size) { | |
| 51 // This message must be received only once. Multiple calls to create a global | |
| 52 // allocator will cause a CHECK() failure. | |
| 53 base::GlobalHistogramAllocator::CreateWithSharedMemoryHandle(memory_handle, | |
| 54 memory_size); | |
| 55 | |
| 56 base::PersistentHistogramAllocator* global_allocator = | |
| 57 base::GlobalHistogramAllocator::Get(); | |
| 58 if (global_allocator) | |
| 59 global_allocator->CreateTrackingHistograms(global_allocator->Name()); | |
| 60 } | |
| 61 | |
| 62 void ChildHistogramMessageFilter::SendHistograms(int sequence_number) { | 45 void ChildHistogramMessageFilter::SendHistograms(int sequence_number) { |
| 63 io_task_runner_->PostTask( | 46 io_task_runner_->PostTask( |
| 64 FROM_HERE, base::Bind(&ChildHistogramMessageFilter::UploadAllHistograms, | 47 FROM_HERE, base::Bind(&ChildHistogramMessageFilter::UploadAllHistograms, |
| 65 this, sequence_number)); | 48 this, sequence_number)); |
| 66 } | 49 } |
| 67 | 50 |
| 68 void ChildHistogramMessageFilter::OnGetChildHistogramData(int sequence_number) { | 51 void ChildHistogramMessageFilter::OnGetChildHistogramData(int sequence_number) { |
| 69 UploadAllHistograms(sequence_number); | 52 UploadAllHistograms(sequence_number); |
| 70 } | 53 } |
| 71 | 54 |
| (...skipping 12 matching lines...) Expand all Loading... |
| 84 new ChildProcessHostMsg_ChildHistogramData(sequence_number, deltas)); | 67 new ChildProcessHostMsg_ChildHistogramData(sequence_number, deltas)); |
| 85 | 68 |
| 86 #ifndef NDEBUG | 69 #ifndef NDEBUG |
| 87 static int count = 0; | 70 static int count = 0; |
| 88 count++; | 71 count++; |
| 89 LOCAL_HISTOGRAM_COUNTS("Histogram.ChildProcessHistogramSentCount", count); | 72 LOCAL_HISTOGRAM_COUNTS("Histogram.ChildProcessHistogramSentCount", count); |
| 90 #endif | 73 #endif |
| 91 } | 74 } |
| 92 | 75 |
| 93 } // namespace content | 76 } // namespace content |
| OLD | NEW |