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

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

Issue 1515433002: Replace uses of raw uint32's with a type-checked RtpTimeTicks data type. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Forgot to include a comment change in cast_messages.h. Created 5 years 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 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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/encoding_event_subscriber.h" 5 #include "media/cast/logging/encoding_event_subscriber.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <cstring> 8 #include <cstring>
9 #include <utility> 9 #include <utility>
10 10
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
42 } 42 }
43 43
44 } 44 }
45 45
46 namespace media { 46 namespace media {
47 namespace cast { 47 namespace cast {
48 48
49 EncodingEventSubscriber::EncodingEventSubscriber( 49 EncodingEventSubscriber::EncodingEventSubscriber(
50 EventMediaType event_media_type, 50 EventMediaType event_media_type,
51 size_t max_frames) 51 size_t max_frames)
52 : event_media_type_(event_media_type), 52 : event_media_type_(event_media_type), max_frames_(max_frames) {
53 max_frames_(max_frames), 53 Reset();
54 frame_event_storage_index_(0), 54 }
55 packet_event_storage_index_(0),
56 seen_first_rtp_timestamp_(false),
57 first_rtp_timestamp_(0u) {}
58 55
59 EncodingEventSubscriber::~EncodingEventSubscriber() { 56 EncodingEventSubscriber::~EncodingEventSubscriber() {
60 DCHECK(thread_checker_.CalledOnValidThread()); 57 DCHECK(thread_checker_.CalledOnValidThread());
61 } 58 }
62 59
63 void EncodingEventSubscriber::OnReceiveFrameEvent( 60 void EncodingEventSubscriber::OnReceiveFrameEvent(
64 const FrameEvent& frame_event) { 61 const FrameEvent& frame_event) {
65 DCHECK(thread_checker_.CalledOnValidThread()); 62 DCHECK(thread_checker_.CalledOnValidThread());
66 63
67 if (event_media_type_ != frame_event.media_type) 64 if (event_media_type_ != frame_event.media_type)
68 return; 65 return;
69 66
70 RtpTimestamp relative_rtp_timestamp = 67 const RtpTimeDelta relative_rtp_timestamp =
71 GetRelativeRtpTimestamp(frame_event.rtp_timestamp); 68 GetRelativeRtpTimestamp(frame_event.rtp_timestamp);
72 FrameEventMap::iterator it = frame_event_map_.find(relative_rtp_timestamp); 69 FrameEventMap::iterator it = frame_event_map_.find(relative_rtp_timestamp);
73 linked_ptr<AggregatedFrameEvent> event_proto; 70 linked_ptr<AggregatedFrameEvent> event_proto;
74 71
75 // Look up existing entry. If not found, create a new entry and add to map. 72 // Look up existing entry. If not found, create a new entry and add to map.
76 if (it == frame_event_map_.end()) { 73 if (it == frame_event_map_.end()) {
77 event_proto.reset(new AggregatedFrameEvent); 74 event_proto.reset(new AggregatedFrameEvent);
78 event_proto->set_relative_rtp_timestamp(relative_rtp_timestamp); 75 event_proto->set_relative_rtp_timestamp(
76 relative_rtp_timestamp.lower_32_bits());
79 frame_event_map_.insert( 77 frame_event_map_.insert(
80 std::make_pair(relative_rtp_timestamp, event_proto)); 78 std::make_pair(relative_rtp_timestamp, event_proto));
81 } else { 79 } else {
82 event_proto = it->second; 80 event_proto = it->second;
83 if (event_proto->event_type_size() >= kMaxEventsPerProto) { 81 if (event_proto->event_type_size() >= kMaxEventsPerProto) {
84 DVLOG(2) << "Too many events in frame " << frame_event.rtp_timestamp 82 DVLOG(2) << "Too many events in frame " << frame_event.rtp_timestamp
85 << ". Using new frame event proto."; 83 << ". Using new frame event proto.";
86 AddFrameEventToStorage(event_proto); 84 AddFrameEventToStorage(event_proto);
87 event_proto.reset(new AggregatedFrameEvent); 85 event_proto.reset(new AggregatedFrameEvent);
88 event_proto->set_relative_rtp_timestamp(relative_rtp_timestamp); 86 event_proto->set_relative_rtp_timestamp(
87 relative_rtp_timestamp.lower_32_bits());
89 it->second = event_proto; 88 it->second = event_proto;
90 } 89 }
91 } 90 }
92 91
93 event_proto->add_event_type(ToProtoEventType(frame_event.type)); 92 event_proto->add_event_type(ToProtoEventType(frame_event.type));
94 event_proto->add_event_timestamp_ms( 93 event_proto->add_event_timestamp_ms(
95 (frame_event.timestamp - base::TimeTicks()).InMilliseconds()); 94 (frame_event.timestamp - base::TimeTicks()).InMilliseconds());
96 95
97 if (frame_event.type == FRAME_CAPTURE_END) { 96 if (frame_event.type == FRAME_CAPTURE_END) {
98 if (frame_event.media_type == VIDEO_EVENT && 97 if (frame_event.media_type == VIDEO_EVENT &&
(...skipping 27 matching lines...) Expand all
126 DCHECK(frame_event_storage_.size() <= max_frames_); 125 DCHECK(frame_event_storage_.size() <= max_frames_);
127 } 126 }
128 127
129 void EncodingEventSubscriber::OnReceivePacketEvent( 128 void EncodingEventSubscriber::OnReceivePacketEvent(
130 const PacketEvent& packet_event) { 129 const PacketEvent& packet_event) {
131 DCHECK(thread_checker_.CalledOnValidThread()); 130 DCHECK(thread_checker_.CalledOnValidThread());
132 131
133 if (event_media_type_ != packet_event.media_type) 132 if (event_media_type_ != packet_event.media_type)
134 return; 133 return;
135 134
136 RtpTimestamp relative_rtp_timestamp = 135 const RtpTimeDelta relative_rtp_timestamp =
137 GetRelativeRtpTimestamp(packet_event.rtp_timestamp); 136 GetRelativeRtpTimestamp(packet_event.rtp_timestamp);
138 PacketEventMap::iterator it = 137 PacketEventMap::iterator it =
139 packet_event_map_.find(relative_rtp_timestamp); 138 packet_event_map_.find(relative_rtp_timestamp);
140 linked_ptr<AggregatedPacketEvent> event_proto; 139 linked_ptr<AggregatedPacketEvent> event_proto;
141 BasePacketEvent* base_packet_event_proto = NULL; 140 BasePacketEvent* base_packet_event_proto = NULL;
142 141
143 // Look up existing entry. If not found, create a new entry and add to map. 142 // Look up existing entry. If not found, create a new entry and add to map.
144 if (it == packet_event_map_.end()) { 143 if (it == packet_event_map_.end()) {
145 event_proto.reset(new AggregatedPacketEvent); 144 event_proto.reset(new AggregatedPacketEvent);
146 event_proto->set_relative_rtp_timestamp(relative_rtp_timestamp); 145 event_proto->set_relative_rtp_timestamp(
146 relative_rtp_timestamp.lower_32_bits());
147 packet_event_map_.insert( 147 packet_event_map_.insert(
148 std::make_pair(relative_rtp_timestamp, event_proto)); 148 std::make_pair(relative_rtp_timestamp, event_proto));
149 base_packet_event_proto = GetNewBasePacketEvent( 149 base_packet_event_proto = GetNewBasePacketEvent(
150 event_proto.get(), packet_event.packet_id, packet_event.size); 150 event_proto.get(), packet_event.packet_id, packet_event.size);
151 } else { 151 } else {
152 // Found existing entry, now look up existing BasePacketEvent using packet 152 // Found existing entry, now look up existing BasePacketEvent using packet
153 // ID. If not found, create a new entry and add to proto. 153 // ID. If not found, create a new entry and add to proto.
154 event_proto = it->second; 154 event_proto = it->second;
155 RepeatedPtrField<BasePacketEvent>* field = 155 RepeatedPtrField<BasePacketEvent>* field =
156 event_proto->mutable_base_packet_event(); 156 event_proto->mutable_base_packet_event();
157 for (RepeatedPtrField<BasePacketEvent>::pointer_iterator base_it = 157 for (RepeatedPtrField<BasePacketEvent>::pointer_iterator base_it =
158 field->pointer_begin(); 158 field->pointer_begin();
159 base_it != field->pointer_end(); 159 base_it != field->pointer_end();
160 ++base_it) { 160 ++base_it) {
161 if ((*base_it)->packet_id() == packet_event.packet_id) { 161 if ((*base_it)->packet_id() == packet_event.packet_id) {
162 base_packet_event_proto = *base_it; 162 base_packet_event_proto = *base_it;
163 break; 163 break;
164 } 164 }
165 } 165 }
166 if (!base_packet_event_proto) { 166 if (!base_packet_event_proto) {
167 if (event_proto->base_packet_event_size() >= kMaxPacketsPerFrame) { 167 if (event_proto->base_packet_event_size() >= kMaxPacketsPerFrame) {
168 DVLOG(3) << "Too many packets in AggregatedPacketEvent " 168 DVLOG(3) << "Too many packets in AggregatedPacketEvent "
169 << packet_event.rtp_timestamp << ". " 169 << packet_event.rtp_timestamp << ". "
170 << "Using new packet event proto."; 170 << "Using new packet event proto.";
171 AddPacketEventToStorage(event_proto); 171 AddPacketEventToStorage(event_proto);
172 event_proto.reset(new AggregatedPacketEvent); 172 event_proto.reset(new AggregatedPacketEvent);
173 event_proto->set_relative_rtp_timestamp(relative_rtp_timestamp); 173 event_proto->set_relative_rtp_timestamp(
174 relative_rtp_timestamp.lower_32_bits());
174 it->second = event_proto; 175 it->second = event_proto;
175 } 176 }
176 177
177 base_packet_event_proto = GetNewBasePacketEvent( 178 base_packet_event_proto = GetNewBasePacketEvent(
178 event_proto.get(), packet_event.packet_id, packet_event.size); 179 event_proto.get(), packet_event.packet_id, packet_event.size);
179 } else if (base_packet_event_proto->event_type_size() >= 180 } else if (base_packet_event_proto->event_type_size() >=
180 kMaxEventsPerProto) { 181 kMaxEventsPerProto) {
181 DVLOG(3) << "Too many events in packet " 182 DVLOG(3) << "Too many events in packet "
182 << packet_event.rtp_timestamp << ", " 183 << packet_event.rtp_timestamp << ", "
183 << packet_event.packet_id << ". Using new packet event proto."; 184 << packet_event.packet_id << ". Using new packet event proto.";
184 AddPacketEventToStorage(event_proto); 185 AddPacketEventToStorage(event_proto);
185 event_proto.reset(new AggregatedPacketEvent); 186 event_proto.reset(new AggregatedPacketEvent);
186 event_proto->set_relative_rtp_timestamp(relative_rtp_timestamp); 187 event_proto->set_relative_rtp_timestamp(
188 relative_rtp_timestamp.lower_32_bits());
187 it->second = event_proto; 189 it->second = event_proto;
188 base_packet_event_proto = GetNewBasePacketEvent( 190 base_packet_event_proto = GetNewBasePacketEvent(
189 event_proto.get(), packet_event.packet_id, packet_event.size); 191 event_proto.get(), packet_event.packet_id, packet_event.size);
190 } 192 }
191 } 193 }
192 194
193 base_packet_event_proto->add_event_type( 195 base_packet_event_proto->add_event_type(
194 ToProtoEventType(packet_event.type)); 196 ToProtoEventType(packet_event.type));
195 base_packet_event_proto->add_event_timestamp_ms( 197 base_packet_event_proto->add_event_timestamp_ms(
196 (packet_event.timestamp - base::TimeTicks()).InMilliseconds()); 198 (packet_event.timestamp - base::TimeTicks()).InMilliseconds());
(...skipping 18 matching lines...) Expand all
215 217
216 // Flush all events. 218 // Flush all events.
217 TransferFrameEvents(frame_event_map_.size()); 219 TransferFrameEvents(frame_event_map_.size());
218 TransferPacketEvents(packet_event_map_.size()); 220 TransferPacketEvents(packet_event_map_.size());
219 std::sort(frame_event_storage_.begin(), frame_event_storage_.end(), 221 std::sort(frame_event_storage_.begin(), frame_event_storage_.end(),
220 &IsRtpTimestampLessThan<linked_ptr<AggregatedFrameEvent> >); 222 &IsRtpTimestampLessThan<linked_ptr<AggregatedFrameEvent> >);
221 std::sort(packet_event_storage_.begin(), packet_event_storage_.end(), 223 std::sort(packet_event_storage_.begin(), packet_event_storage_.end(),
222 &IsRtpTimestampLessThan<linked_ptr<AggregatedPacketEvent> >); 224 &IsRtpTimestampLessThan<linked_ptr<AggregatedPacketEvent> >);
223 225
224 metadata->set_is_audio(event_media_type_ == AUDIO_EVENT); 226 metadata->set_is_audio(event_media_type_ == AUDIO_EVENT);
225 metadata->set_first_rtp_timestamp(first_rtp_timestamp_); 227 metadata->set_first_rtp_timestamp(first_rtp_timestamp_.lower_32_bits());
226 metadata->set_num_frame_events(frame_event_storage_.size()); 228 metadata->set_num_frame_events(frame_event_storage_.size());
227 metadata->set_num_packet_events(packet_event_storage_.size()); 229 metadata->set_num_packet_events(packet_event_storage_.size());
228 metadata->set_reference_timestamp_ms_at_unix_epoch( 230 metadata->set_reference_timestamp_ms_at_unix_epoch(
229 (base::TimeTicks::UnixEpoch() - base::TimeTicks()).InMilliseconds()); 231 (base::TimeTicks::UnixEpoch() - base::TimeTicks()).InMilliseconds());
230 frame_events->swap(frame_event_storage_); 232 frame_events->swap(frame_event_storage_);
231 packet_events->swap(packet_event_storage_); 233 packet_events->swap(packet_event_storage_);
232 Reset(); 234 Reset();
233 } 235 }
234 236
235 void EncodingEventSubscriber::TransferFrameEvents(size_t max_num_entries) { 237 void EncodingEventSubscriber::TransferFrameEvents(size_t max_num_entries) {
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
270 void EncodingEventSubscriber::AddPacketEventToStorage( 272 void EncodingEventSubscriber::AddPacketEventToStorage(
271 const linked_ptr<AggregatedPacketEvent>& packet_event_proto) { 273 const linked_ptr<AggregatedPacketEvent>& packet_event_proto) {
272 if (packet_event_storage_.size() >= max_frames_) 274 if (packet_event_storage_.size() >= max_frames_)
273 packet_event_storage_[packet_event_storage_index_] = packet_event_proto; 275 packet_event_storage_[packet_event_storage_index_] = packet_event_proto;
274 else 276 else
275 packet_event_storage_.push_back(packet_event_proto); 277 packet_event_storage_.push_back(packet_event_proto);
276 278
277 packet_event_storage_index_ = (packet_event_storage_index_ + 1) % max_frames_; 279 packet_event_storage_index_ = (packet_event_storage_index_ + 1) % max_frames_;
278 } 280 }
279 281
280 RtpTimestamp EncodingEventSubscriber::GetRelativeRtpTimestamp( 282 RtpTimeDelta EncodingEventSubscriber::GetRelativeRtpTimestamp(
281 RtpTimestamp rtp_timestamp) { 283 RtpTimeTicks rtp_timestamp) {
282 if (!seen_first_rtp_timestamp_) { 284 if (!seen_first_rtp_timestamp_) {
283 seen_first_rtp_timestamp_ = true; 285 seen_first_rtp_timestamp_ = true;
284 first_rtp_timestamp_ = rtp_timestamp; 286 first_rtp_timestamp_ = rtp_timestamp;
285 } 287 }
286 288
287 return rtp_timestamp - first_rtp_timestamp_; 289 return rtp_timestamp - first_rtp_timestamp_;
288 } 290 }
289 291
290 void EncodingEventSubscriber::Reset() { 292 void EncodingEventSubscriber::Reset() {
291 frame_event_map_.clear(); 293 frame_event_map_.clear();
292 frame_event_storage_.clear(); 294 frame_event_storage_.clear();
293 frame_event_storage_index_ = 0; 295 frame_event_storage_index_ = 0;
294 packet_event_map_.clear(); 296 packet_event_map_.clear();
295 packet_event_storage_.clear(); 297 packet_event_storage_.clear();
296 packet_event_storage_index_ = 0; 298 packet_event_storage_index_ = 0;
297 seen_first_rtp_timestamp_ = false; 299 seen_first_rtp_timestamp_ = false;
298 first_rtp_timestamp_ = 0u; 300 first_rtp_timestamp_ = RtpTimeTicks();
299 } 301 }
300 302
301 } // namespace cast 303 } // namespace cast
302 } // namespace media 304 } // namespace media
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698