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

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

Powered by Google App Engine
This is Rietveld 408576698