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

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

Issue 184813009: Cast Streaming API end-to-end browser_test. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix LoggingImplTest + REBASE Created 6 years, 9 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 | Annotate | Revision Log
« no previous file with comments | « media/cast/logging/logging_impl.h ('k') | media/cast/logging/logging_impl_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 "base/big_endian.h" 5 #include "base/big_endian.h"
6 #include "base/debug/trace_event.h" 6 #include "base/debug/trace_event.h"
7 #include "media/cast/logging/logging_impl.h" 7 #include "media/cast/logging/logging_impl.h"
8 8
9 namespace media { 9 namespace media {
10 namespace cast { 10 namespace cast {
11 11
12 LoggingImpl::LoggingImpl( 12 LoggingImpl::LoggingImpl(const CastLoggingConfig& config)
13 scoped_refptr<base::SingleThreadTaskRunner> main_thread_proxy, 13 : config_(config), raw_(), stats_() {
14 const CastLoggingConfig& config) 14 // LoggingImpl can be constructed on any thread, but its methods should all be
15 : main_thread_proxy_(main_thread_proxy), 15 // called on the same thread.
16 config_(config), 16 thread_checker_.DetachFromThread();
17 raw_(), 17 }
18 stats_() {}
19 18
20 LoggingImpl::~LoggingImpl() {} 19 LoggingImpl::~LoggingImpl() {}
21 20
22 void LoggingImpl::InsertFrameEvent(const base::TimeTicks& time_of_event, 21 void LoggingImpl::InsertFrameEvent(const base::TimeTicks& time_of_event,
23 CastLoggingEvent event, uint32 rtp_timestamp, 22 CastLoggingEvent event, uint32 rtp_timestamp,
24 uint32 frame_id) { 23 uint32 frame_id) {
25 DCHECK(main_thread_proxy_->RunsTasksOnCurrentThread()); 24 DCHECK(thread_checker_.CalledOnValidThread());
26 if (config_.enable_raw_data_collection) { 25 if (config_.enable_raw_data_collection) {
27 raw_.InsertFrameEvent(time_of_event, event, rtp_timestamp, frame_id); 26 raw_.InsertFrameEvent(time_of_event, event, rtp_timestamp, frame_id);
28 } 27 }
29 if (config_.enable_stats_data_collection) { 28 if (config_.enable_stats_data_collection) {
30 stats_.InsertFrameEvent(time_of_event, event, rtp_timestamp, frame_id); 29 stats_.InsertFrameEvent(time_of_event, event, rtp_timestamp, frame_id);
31 } 30 }
32 if (config_.enable_tracing) { 31 if (config_.enable_tracing) {
33 std::string event_string = CastLoggingToString(event); 32 std::string event_string = CastLoggingToString(event);
34 TRACE_EVENT_INSTANT2(event_string.c_str(), "FE", TRACE_EVENT_SCOPE_THREAD, 33 TRACE_EVENT_INSTANT2(event_string.c_str(), "FE", TRACE_EVENT_SCOPE_THREAD,
35 "rtp_timestamp", rtp_timestamp, "frame_id", frame_id); 34 "rtp_timestamp", rtp_timestamp, "frame_id", frame_id);
36 } 35 }
37 } 36 }
38 37
39 void LoggingImpl::InsertFrameEventWithSize(const base::TimeTicks& time_of_event, 38 void LoggingImpl::InsertFrameEventWithSize(const base::TimeTicks& time_of_event,
40 CastLoggingEvent event, 39 CastLoggingEvent event,
41 uint32 rtp_timestamp, 40 uint32 rtp_timestamp,
42 uint32 frame_id, int frame_size) { 41 uint32 frame_id, int frame_size) {
43 DCHECK(main_thread_proxy_->RunsTasksOnCurrentThread()); 42 DCHECK(thread_checker_.CalledOnValidThread());
44 if (config_.enable_raw_data_collection) { 43 if (config_.enable_raw_data_collection) {
45 raw_.InsertFrameEventWithSize(time_of_event, event, rtp_timestamp, frame_id, 44 raw_.InsertFrameEventWithSize(time_of_event, event, rtp_timestamp, frame_id,
46 frame_size); 45 frame_size);
47 } 46 }
48 if (config_.enable_stats_data_collection) { 47 if (config_.enable_stats_data_collection) {
49 stats_.InsertFrameEventWithSize(time_of_event, event, rtp_timestamp, 48 stats_.InsertFrameEventWithSize(time_of_event, event, rtp_timestamp,
50 frame_id, frame_size); 49 frame_id, frame_size);
51 } 50 }
52 51
53 if (config_.enable_tracing) { 52 if (config_.enable_tracing) {
54 std::string event_string = CastLoggingToString(event); 53 std::string event_string = CastLoggingToString(event);
55 TRACE_EVENT_INSTANT2(event_string.c_str(), "FES", TRACE_EVENT_SCOPE_THREAD, 54 TRACE_EVENT_INSTANT2(event_string.c_str(), "FES", TRACE_EVENT_SCOPE_THREAD,
56 "rtp_timestamp", rtp_timestamp, "frame_size", 55 "rtp_timestamp", rtp_timestamp, "frame_size",
57 frame_size); 56 frame_size);
58 } 57 }
59 } 58 }
60 59
61 void LoggingImpl::InsertFrameEventWithDelay( 60 void LoggingImpl::InsertFrameEventWithDelay(
62 const base::TimeTicks& time_of_event, CastLoggingEvent event, 61 const base::TimeTicks& time_of_event, CastLoggingEvent event,
63 uint32 rtp_timestamp, uint32 frame_id, base::TimeDelta delay) { 62 uint32 rtp_timestamp, uint32 frame_id, base::TimeDelta delay) {
64 DCHECK(main_thread_proxy_->RunsTasksOnCurrentThread()); 63 DCHECK(thread_checker_.CalledOnValidThread());
65 if (config_.enable_raw_data_collection) { 64 if (config_.enable_raw_data_collection) {
66 raw_.InsertFrameEventWithDelay(time_of_event, event, rtp_timestamp, 65 raw_.InsertFrameEventWithDelay(time_of_event, event, rtp_timestamp,
67 frame_id, delay); 66 frame_id, delay);
68 } 67 }
69 if (config_.enable_stats_data_collection) { 68 if (config_.enable_stats_data_collection) {
70 stats_.InsertFrameEventWithDelay(time_of_event, event, rtp_timestamp, 69 stats_.InsertFrameEventWithDelay(time_of_event, event, rtp_timestamp,
71 frame_id, delay); 70 frame_id, delay);
72 } 71 }
73 72
74 if (config_.enable_tracing) { 73 if (config_.enable_tracing) {
75 std::string event_string = CastLoggingToString(event); 74 std::string event_string = CastLoggingToString(event);
76 TRACE_EVENT_INSTANT2(event_string.c_str(), "FED", TRACE_EVENT_SCOPE_THREAD, 75 TRACE_EVENT_INSTANT2(event_string.c_str(), "FED", TRACE_EVENT_SCOPE_THREAD,
77 "rtp_timestamp", rtp_timestamp, "delay", 76 "rtp_timestamp", rtp_timestamp, "delay",
78 delay.InMilliseconds()); 77 delay.InMilliseconds());
79 } 78 }
80 } 79 }
81 80
82 void LoggingImpl::InsertPacketListEvent(const base::TimeTicks& time_of_event, 81 void LoggingImpl::InsertPacketListEvent(const base::TimeTicks& time_of_event,
83 CastLoggingEvent event, 82 CastLoggingEvent event,
84 const PacketList& packets) { 83 const PacketList& packets) {
85 DCHECK(main_thread_proxy_->RunsTasksOnCurrentThread()); 84 DCHECK(thread_checker_.CalledOnValidThread());
86 for (unsigned int i = 0; i < packets.size(); ++i) { 85 for (unsigned int i = 0; i < packets.size(); ++i) {
87 const Packet& packet = packets[i]; 86 const Packet& packet = packets[i];
88 // Parse basic properties. 87 // Parse basic properties.
89 uint32 rtp_timestamp; 88 uint32 rtp_timestamp;
90 uint16 packet_id, max_packet_id; 89 uint16 packet_id, max_packet_id;
91 const uint8* packet_data = &packet[0]; 90 const uint8* packet_data = &packet[0];
92 base::BigEndianReader big_endian_reader( 91 base::BigEndianReader big_endian_reader(
93 reinterpret_cast<const char*>(packet_data + 4), 4); 92 reinterpret_cast<const char*>(packet_data + 4), 4);
94 big_endian_reader.ReadU32(&rtp_timestamp); 93 big_endian_reader.ReadU32(&rtp_timestamp);
95 base::BigEndianReader cast_big_endian_reader( 94 base::BigEndianReader cast_big_endian_reader(
96 reinterpret_cast<const char*>(packet_data + 12 + 2), 4); 95 reinterpret_cast<const char*>(packet_data + 12 + 2), 4);
97 cast_big_endian_reader.ReadU16(&packet_id); 96 cast_big_endian_reader.ReadU16(&packet_id);
98 cast_big_endian_reader.ReadU16(&max_packet_id); 97 cast_big_endian_reader.ReadU16(&max_packet_id);
99 // rtp_timestamp is enough - no need for frame_id as well. 98 // rtp_timestamp is enough - no need for frame_id as well.
100 InsertPacketEvent(time_of_event, event, rtp_timestamp, kFrameIdUnknown, 99 InsertPacketEvent(time_of_event, event, rtp_timestamp, kFrameIdUnknown,
101 packet_id, max_packet_id, packet.size()); 100 packet_id, max_packet_id, packet.size());
102 } 101 }
103 } 102 }
104 103
105 void LoggingImpl::InsertPacketEvent(const base::TimeTicks& time_of_event, 104 void LoggingImpl::InsertPacketEvent(const base::TimeTicks& time_of_event,
106 CastLoggingEvent event, 105 CastLoggingEvent event,
107 uint32 rtp_timestamp, uint32 frame_id, 106 uint32 rtp_timestamp, uint32 frame_id,
108 uint16 packet_id, uint16 max_packet_id, 107 uint16 packet_id, uint16 max_packet_id,
109 size_t size) { 108 size_t size) {
110 DCHECK(main_thread_proxy_->RunsTasksOnCurrentThread()); 109 DCHECK(thread_checker_.CalledOnValidThread());
111 if (config_.enable_raw_data_collection) { 110 if (config_.enable_raw_data_collection) {
112 raw_.InsertPacketEvent(time_of_event, event, rtp_timestamp, frame_id, 111 raw_.InsertPacketEvent(time_of_event, event, rtp_timestamp, frame_id,
113 packet_id, max_packet_id, size); 112 packet_id, max_packet_id, size);
114 } 113 }
115 if (config_.enable_stats_data_collection) { 114 if (config_.enable_stats_data_collection) {
116 stats_.InsertPacketEvent(time_of_event, event, rtp_timestamp, frame_id, 115 stats_.InsertPacketEvent(time_of_event, event, rtp_timestamp, frame_id,
117 packet_id, max_packet_id, size); 116 packet_id, max_packet_id, size);
118 } 117 }
119 if (config_.enable_tracing) { 118 if (config_.enable_tracing) {
120 std::string event_string = CastLoggingToString(event); 119 std::string event_string = CastLoggingToString(event);
121 TRACE_EVENT_INSTANT2(event_string.c_str(), "PE", TRACE_EVENT_SCOPE_THREAD, 120 TRACE_EVENT_INSTANT2(event_string.c_str(), "PE", TRACE_EVENT_SCOPE_THREAD,
122 "rtp_timestamp", rtp_timestamp, "packet_id", 121 "rtp_timestamp", rtp_timestamp, "packet_id",
123 packet_id); 122 packet_id);
124 } 123 }
125 } 124 }
126 125
127 void LoggingImpl::InsertGenericEvent(const base::TimeTicks& time_of_event, 126 void LoggingImpl::InsertGenericEvent(const base::TimeTicks& time_of_event,
128 CastLoggingEvent event, int value) { 127 CastLoggingEvent event, int value) {
129 DCHECK(main_thread_proxy_->RunsTasksOnCurrentThread()); 128 DCHECK(thread_checker_.CalledOnValidThread());
130 if (config_.enable_raw_data_collection) { 129 if (config_.enable_raw_data_collection) {
131 raw_.InsertGenericEvent(time_of_event, event, value); 130 raw_.InsertGenericEvent(time_of_event, event, value);
132 } 131 }
133 if (config_.enable_stats_data_collection) { 132 if (config_.enable_stats_data_collection) {
134 stats_.InsertGenericEvent(time_of_event, event, value); 133 stats_.InsertGenericEvent(time_of_event, event, value);
135 } 134 }
136 135
137 if (config_.enable_tracing) { 136 if (config_.enable_tracing) {
138 std::string event_string = CastLoggingToString(event); 137 std::string event_string = CastLoggingToString(event);
139 TRACE_EVENT_INSTANT1(event_string.c_str(), "GE", TRACE_EVENT_SCOPE_THREAD, 138 TRACE_EVENT_INSTANT1(event_string.c_str(), "GE", TRACE_EVENT_SCOPE_THREAD,
140 "value", value); 139 "value", value);
141 } 140 }
142 } 141 }
143 142
144 void LoggingImpl::AddRawEventSubscriber(RawEventSubscriber* subscriber) { 143 void LoggingImpl::AddRawEventSubscriber(RawEventSubscriber* subscriber) {
144 DCHECK(thread_checker_.CalledOnValidThread());
145 raw_.AddSubscriber(subscriber); 145 raw_.AddSubscriber(subscriber);
146 } 146 }
147 147
148 void LoggingImpl::RemoveRawEventSubscriber(RawEventSubscriber* subscriber) { 148 void LoggingImpl::RemoveRawEventSubscriber(RawEventSubscriber* subscriber) {
149 DCHECK(thread_checker_.CalledOnValidThread());
149 raw_.RemoveSubscriber(subscriber); 150 raw_.RemoveSubscriber(subscriber);
150 } 151 }
151 152
152 FrameStatsMap LoggingImpl::GetFrameStatsData(EventMediaType media_type) const { 153 FrameStatsMap LoggingImpl::GetFrameStatsData(EventMediaType media_type) const {
153 DCHECK(main_thread_proxy_->RunsTasksOnCurrentThread()); 154 DCHECK(thread_checker_.CalledOnValidThread());
154 return stats_.GetFrameStatsData(media_type); 155 return stats_.GetFrameStatsData(media_type);
155 } 156 }
156 157
157 PacketStatsMap LoggingImpl::GetPacketStatsData( 158 PacketStatsMap LoggingImpl::GetPacketStatsData(
158 EventMediaType media_type) const { 159 EventMediaType media_type) const {
159 DCHECK(main_thread_proxy_->RunsTasksOnCurrentThread()); 160 DCHECK(thread_checker_.CalledOnValidThread());
160 return stats_.GetPacketStatsData(media_type); 161 return stats_.GetPacketStatsData(media_type);
161 } 162 }
162 163
163 GenericStatsMap LoggingImpl::GetGenericStatsData() const { 164 GenericStatsMap LoggingImpl::GetGenericStatsData() const {
164 DCHECK(main_thread_proxy_->RunsTasksOnCurrentThread()); 165 DCHECK(thread_checker_.CalledOnValidThread());
165 return stats_.GetGenericStatsData(); 166 return stats_.GetGenericStatsData();
166 } 167 }
167 168
168 void LoggingImpl::ResetStats() { 169 void LoggingImpl::ResetStats() {
169 DCHECK(main_thread_proxy_->RunsTasksOnCurrentThread()); 170 DCHECK(thread_checker_.CalledOnValidThread());
170 stats_.Reset(); 171 stats_.Reset();
171 } 172 }
172 173
173 } // namespace cast 174 } // namespace cast
174 } // namespace media 175 } // namespace media
OLDNEW
« no previous file with comments | « media/cast/logging/logging_impl.h ('k') | media/cast/logging/logging_impl_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698