Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(274)

Side by Side Diff: media/cast/logging/logging_raw.cc

Issue 136903003: cast: Wire upp logging to be sent over RTCP between receiver and sender. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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 "media/cast/logging/logging_raw.h" 5 #include "media/cast/logging/logging_raw.h"
6 6
7 #include "base/logging.h" 7 #include "base/logging.h"
8 #include "base/metrics/histogram.h" 8 #include "base/metrics/histogram.h"
9 #include "base/time/time.h" 9 #include "base/time/time.h"
10 10
11 namespace media { 11 namespace media {
12 namespace cast { 12 namespace cast {
13 13
14 LoggingRaw::LoggingRaw() 14 LoggingRaw::LoggingRaw(bool is_sender)
15 : frame_map_(), 15 : is_sender_(is_sender),
16 frame_map_(),
16 packet_map_(), 17 packet_map_(),
17 generic_map_(), 18 generic_map_(),
18 weak_factory_(this) {} 19 weak_factory_(this) {}
19 20
20 LoggingRaw::~LoggingRaw() {} 21 LoggingRaw::~LoggingRaw() {}
21 22
22 void LoggingRaw::InsertFrameEvent(const base::TimeTicks& time_of_event, 23 void LoggingRaw::InsertFrameEvent(const base::TimeTicks& time_of_event,
23 CastLoggingEvent event, 24 CastLoggingEvent event,
24 uint32 rtp_timestamp, 25 uint32 rtp_timestamp,
25 uint32 frame_id) { 26 uint32 frame_id) {
26 InsertBaseFrameEvent(time_of_event, event, frame_id, rtp_timestamp); 27 InsertBaseFrameEvent(time_of_event, event, frame_id, rtp_timestamp);
28
29 InsertRtcpFrameEvent(time_of_event, event, rtp_timestamp, base::TimeDelta());
27 } 30 }
28 31
29 void LoggingRaw::InsertFrameEventWithSize(const base::TimeTicks& time_of_event, 32 void LoggingRaw::InsertFrameEventWithSize(const base::TimeTicks& time_of_event,
30 CastLoggingEvent event, 33 CastLoggingEvent event,
31 uint32 rtp_timestamp, 34 uint32 rtp_timestamp,
32 uint32 frame_id, 35 uint32 frame_id,
33 int size) { 36 int size) {
34 InsertBaseFrameEvent(time_of_event, event, frame_id, rtp_timestamp); 37 InsertBaseFrameEvent(time_of_event, event, frame_id, rtp_timestamp);
35 // Now insert size. 38 // Now insert size.
36 FrameRawMap::iterator it = frame_map_.find(rtp_timestamp); 39 FrameRawMap::iterator it = frame_map_.find(rtp_timestamp);
37 DCHECK(it != frame_map_.end()); 40 DCHECK(it != frame_map_.end());
38 it->second.size = size; 41 it->second.size = size;
39 } 42 }
40 43
41 void LoggingRaw::InsertFrameEventWithDelay(const base::TimeTicks& time_of_event, 44 void LoggingRaw::InsertFrameEventWithDelay(const base::TimeTicks& time_of_event,
42 CastLoggingEvent event, 45 CastLoggingEvent event,
43 uint32 rtp_timestamp, 46 uint32 rtp_timestamp,
44 uint32 frame_id, 47 uint32 frame_id,
45 base::TimeDelta delay) { 48 base::TimeDelta delay) {
46 InsertBaseFrameEvent(time_of_event, event, frame_id, rtp_timestamp); 49 InsertBaseFrameEvent(time_of_event, event, frame_id, rtp_timestamp);
47 // Now insert delay. 50 // Now insert delay.
48 FrameRawMap::iterator it = frame_map_.find(rtp_timestamp); 51 FrameRawMap::iterator it = frame_map_.find(rtp_timestamp);
49 DCHECK(it != frame_map_.end()); 52 DCHECK(it != frame_map_.end());
50 it->second.delay_delta = delay; 53 it->second.delay_delta = delay;
54
55 InsertRtcpFrameEvent(time_of_event, event, rtp_timestamp, delay);
51 } 56 }
52 57
53 void LoggingRaw::InsertBaseFrameEvent(const base::TimeTicks& time_of_event, 58 void LoggingRaw::InsertBaseFrameEvent(const base::TimeTicks& time_of_event,
54 CastLoggingEvent event, 59 CastLoggingEvent event,
55 uint32 frame_id, 60 uint32 frame_id,
56 uint32 rtp_timestamp) { 61 uint32 rtp_timestamp) {
57 // Is this a new event? 62 // Is this a new event?
58 FrameRawMap::iterator it = frame_map_.find(rtp_timestamp); 63 FrameRawMap::iterator it = frame_map_.find(rtp_timestamp);
59 if (it == frame_map_.end()) { 64 if (it == frame_map_.end()) {
60 // Create a new map entry. 65 // Create a new map entry.
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
100 BasePacketInfo base_info; 105 BasePacketInfo base_info;
101 base_info.size = size; 106 base_info.size = size;
102 base_info.timestamp.push_back(time_of_event); 107 base_info.timestamp.push_back(time_of_event);
103 base_info.type.push_back(event); 108 base_info.type.push_back(event);
104 it->second.packet_map.insert(std::make_pair(packet_id, base_info)); 109 it->second.packet_map.insert(std::make_pair(packet_id, base_info));
105 } else { 110 } else {
106 packet_it->second.timestamp.push_back(time_of_event); 111 packet_it->second.timestamp.push_back(time_of_event);
107 packet_it->second.type.push_back(event); 112 packet_it->second.type.push_back(event);
108 } 113 }
109 } 114 }
115 if (event == kAudioPacketReceived) {
116 // TOOD audio or video
mikhal1 2014/01/14 19:57:18 nit:todo format
pwestin 2014/01/17 23:46:17 That todo was done
117 ReceiverRtcpEvent rtcp_event;
118 rtcp_event.type = event;
119 rtcp_event.timestamp = time_of_event;
120 rtcp_event.packet_id = packet_id;
121 audio_rtcp_map_.insert(std::make_pair(rtp_timestamp, rtcp_event));
122 } else if (event == kVideoPacketReceived) {
123 ReceiverRtcpEvent rtcp_event;
124 rtcp_event.type = event;
125 rtcp_event.timestamp = time_of_event;
126 rtcp_event.packet_id = packet_id;
127 video_rtcp_map_.insert(std::make_pair(rtp_timestamp, rtcp_event));
128 }
110 } 129 }
111 130
112 void LoggingRaw::InsertGenericEvent(const base::TimeTicks& time_of_event, 131 void LoggingRaw::InsertGenericEvent(const base::TimeTicks& time_of_event,
113 CastLoggingEvent event, int value) { 132 CastLoggingEvent event, int value) {
114 GenericEvent event_data; 133 GenericEvent event_data;
115 event_data.value.push_back(value); 134 event_data.value.push_back(value);
116 event_data.timestamp.push_back(time_of_event); 135 event_data.timestamp.push_back(time_of_event);
117 // Is this a new event? 136 // Is this a new event?
118 GenericRawMap::iterator it = generic_map_.find(event); 137 GenericRawMap::iterator it = generic_map_.find(event);
119 if (it == generic_map_.end()) { 138 if (it == generic_map_.end()) {
120 // Create new entry. 139 // Create new entry.
121 generic_map_.insert(std::make_pair(event, event_data)); 140 generic_map_.insert(std::make_pair(event, event_data));
122 } else { 141 } else {
123 // Insert to existing entry. 142 // Insert to existing entry.
124 it->second.value.push_back(value); 143 it->second.value.push_back(value);
125 it->second.timestamp.push_back(time_of_event); 144 it->second.timestamp.push_back(time_of_event);
126 } 145 }
127 } 146 }
128 147
148 void LoggingRaw::InsertRtcpFrameEvent(const base::TimeTicks& time_of_event,
149 CastLoggingEvent event,
150 uint32 rtp_timestamp,
151 base::TimeDelta delay) {
152 ReceiverRtcpEvent rtcp_event;
153 if (is_sender_) {
154 if (event != kVideoFrameCaptured &&
155 event != kVideoFrameSentToEncoder &&
156 event != kVideoFrameEncoded) {
157 // Not interested in other events.
158 return;
159 }
160 VideoRtcpRawMap::iterator it = video_rtcp_map_.find(rtp_timestamp);
161 if (it == video_rtcp_map_.end()) {
162 // We don't this frame (RTP timestamp) in our map.
mikhal1 2014/01/14 19:57:18 rephrase
pwestin 2014/01/17 23:46:17 Done.
163 rtcp_event.type = event;
164 video_rtcp_map_.insert(std::make_pair(rtp_timestamp, rtcp_event));
165 } else {
166 // We already have this frame (RTP timestamp) in our map.
167 // Only update events that are later in the chain.
168 if (event == kVideoFrameCaptured) {
169 return; // First event in chain can not be late by definition.
mikhal1 2014/01/14 19:57:18 But can two frames have the same event? How can th
pwestin 2014/01/17 23:46:17 Correct but events could be reordered in theory.
mikhal1 2014/01/17 23:48:13 Could you add a comment pls? On 2014/01/17 23:46:1
pwestin 2014/01/17 23:57:23 Done.
170 }
171 if (it->second.type == kVideoFrameEncoded) {
172 return; // Last event in chain should not be updated.
173 }
174 // Update existing entry.
175 it->second.type = event;
176 }
177 } else {
178 // We are a cast receiver.
179 switch (event) {
180 case kAudioPlayoutDelay:
181 rtcp_event.delay_delta = delay;
182 case kAudioFrameDecoded:
183 case kAudioAckSent:
184 rtcp_event.type = event;
185 rtcp_event.timestamp = time_of_event;
186 audio_rtcp_map_.insert(std::make_pair(rtp_timestamp, rtcp_event));
187 break;
188 case kVideoRenderDelay:
189 rtcp_event.delay_delta = delay;
190 case kVideoFrameDecoded:
191 case kVideoAckSent:
192 rtcp_event.type = event;
193 rtcp_event.timestamp = time_of_event;
194 video_rtcp_map_.insert(std::make_pair(rtp_timestamp, rtcp_event));
195 break;
196 default:
197 break;
198 }
199 }
200 }
201
129 FrameRawMap LoggingRaw::GetFrameData() const { 202 FrameRawMap LoggingRaw::GetFrameData() const {
130 return frame_map_; 203 return frame_map_;
131 } 204 }
132 205
133 PacketRawMap LoggingRaw::GetPacketData() const { 206 PacketRawMap LoggingRaw::GetPacketData() const {
134 return packet_map_; 207 return packet_map_;
135 } 208 }
136 209
137 GenericRawMap LoggingRaw::GetGenericData() const { 210 GenericRawMap LoggingRaw::GetGenericData() const {
138 return generic_map_; 211 return generic_map_;
139 } 212 }
140 213
214 AudioRtcpRawMap LoggingRaw::GetAndResetAudioRtcpData() {
215 AudioRtcpRawMap return_map;
216 audio_rtcp_map_.swap(return_map);
217 return return_map;
218 }
219
220 VideoRtcpRawMap LoggingRaw::GetAndResetVideoRtcpData() {
221 VideoRtcpRawMap return_map;
222 video_rtcp_map_.swap(return_map);
223 return return_map;
224 }
225
141 void LoggingRaw::Reset() { 226 void LoggingRaw::Reset() {
142 frame_map_.clear(); 227 frame_map_.clear();
143 packet_map_.clear(); 228 packet_map_.clear();
144 generic_map_.clear(); 229 generic_map_.clear();
145 } 230 }
146 231
147 } // namespace cast 232 } // namespace cast
148 } // namespace media 233 } // namespace media
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698