OLD | NEW |
1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2009 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 "base/histogram.h" |
5 #include "base/message_loop.h" | 6 #include "base/message_loop.h" |
| 7 #include "chrome/common/ipc_logging.h" |
6 #include "chrome/common/render_messages.h" | 8 #include "chrome/common/render_messages.h" |
7 #include "chrome/renderer/audio_message_filter.h" | 9 #include "chrome/renderer/audio_message_filter.h" |
8 | 10 |
| 11 namespace { |
| 12 |
| 13 void RecordReceiveLatency(base::TimeDelta latency) { |
| 14 static ThreadSafeHistogram histogram("Audio.IPC_Renderer_ReceiveLatency", |
| 15 1, 500, 100); |
| 16 histogram.AddTime(latency); |
| 17 } |
| 18 |
| 19 void RecordProcessTime(base::TimeDelta latency) { |
| 20 static ThreadSafeHistogram histogram("Audio.IPC_Renderer_ProcessTime", |
| 21 1, 100, 100); |
| 22 histogram.AddTime(latency); |
| 23 } |
| 24 |
| 25 } // namespace |
| 26 |
9 AudioMessageFilter::AudioMessageFilter(int32 route_id) | 27 AudioMessageFilter::AudioMessageFilter(int32 route_id) |
10 : channel_(NULL), | 28 : channel_(NULL), |
11 route_id_(route_id), | 29 route_id_(route_id), |
12 message_loop_(NULL) { | 30 message_loop_(NULL) { |
13 } | 31 } |
14 | 32 |
15 AudioMessageFilter::~AudioMessageFilter() { | 33 AudioMessageFilter::~AudioMessageFilter() { |
16 } | 34 } |
17 | 35 |
18 // Called on the IPC thread. | 36 // Called on the IPC thread. |
(...skipping 29 matching lines...) Expand all Loading... |
48 } | 66 } |
49 | 67 |
50 void AudioMessageFilter::OnFilterRemoved() { | 68 void AudioMessageFilter::OnFilterRemoved() { |
51 channel_ = NULL; | 69 channel_ = NULL; |
52 } | 70 } |
53 | 71 |
54 void AudioMessageFilter::OnChannelClosing() { | 72 void AudioMessageFilter::OnChannelClosing() { |
55 channel_ = NULL; | 73 channel_ = NULL; |
56 } | 74 } |
57 | 75 |
58 void AudioMessageFilter::OnRequestPacket(int stream_id) { | 76 void AudioMessageFilter::OnRequestPacket(const IPC::Message& msg, |
| 77 int stream_id) { |
59 Delegate* delegate = delegates_.Lookup(stream_id); | 78 Delegate* delegate = delegates_.Lookup(stream_id); |
60 if (!delegate) { | 79 if (!delegate) { |
61 DLOG(WARNING) << "Got audio packet request for a non-existent or removed" | 80 DLOG(WARNING) << "Got audio packet request for a non-existent or removed" |
62 " audio renderer."; | 81 " audio renderer."; |
63 return; | 82 return; |
64 } | 83 } |
| 84 |
| 85 #ifdef IPC_MESSAGE_LOG_ENABLED |
| 86 IPC::Logging* logger = IPC::Logging::current(); |
| 87 if (logger->Enabled()) { |
| 88 RecordReceiveLatency(base::Time::FromInternalValue(msg.received_time()) - |
| 89 base::Time::FromInternalValue(msg.sent_time())); |
| 90 } |
| 91 #endif |
| 92 |
65 delegate->OnRequestPacket(); | 93 delegate->OnRequestPacket(); |
| 94 |
| 95 #ifdef IPC_MESSAGE_LOG_ENABLED |
| 96 if (logger->Enabled()) { |
| 97 RecordProcessTime(base::Time::Now() - |
| 98 base::Time::FromInternalValue(msg.received_time())); |
| 99 } |
| 100 #endif |
66 } | 101 } |
67 | 102 |
68 void AudioMessageFilter::OnStreamCreated(int stream_id, | 103 void AudioMessageFilter::OnStreamCreated(int stream_id, |
69 base::SharedMemoryHandle handle, | 104 base::SharedMemoryHandle handle, |
70 int length) { | 105 int length) { |
71 Delegate* delegate = delegates_.Lookup(stream_id); | 106 Delegate* delegate = delegates_.Lookup(stream_id); |
72 if (!delegate) { | 107 if (!delegate) { |
73 DLOG(WARNING) << "Got audio stream event for a non-existent or removed" | 108 DLOG(WARNING) << "Got audio stream event for a non-existent or removed" |
74 " audio renderer."; | 109 " audio renderer."; |
75 return; | 110 return; |
(...skipping 24 matching lines...) Expand all Loading... |
100 delegate->OnVolume(left, right); | 135 delegate->OnVolume(left, right); |
101 } | 136 } |
102 | 137 |
103 int32 AudioMessageFilter::AddDelegate(Delegate* delegate) { | 138 int32 AudioMessageFilter::AddDelegate(Delegate* delegate) { |
104 return delegates_.Add(delegate); | 139 return delegates_.Add(delegate); |
105 } | 140 } |
106 | 141 |
107 void AudioMessageFilter::RemoveDelegate(int32 id) { | 142 void AudioMessageFilter::RemoveDelegate(int32 id) { |
108 delegates_.Remove(id); | 143 delegates_.Remove(id); |
109 } | 144 } |
OLD | NEW |