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

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

Issue 130423007: Cast:Updating logging stats (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
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 | Annotate | Revision Log
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/memory/linked_ptr.h" 5 #include "base/memory/linked_ptr.h"
6 #include "base/memory/scoped_ptr.h" 6 #include "base/memory/scoped_ptr.h"
7 #include "media/cast/logging/logging_stats.h" 7 #include "media/cast/logging/logging_stats.h"
8 8
9 namespace media { 9 namespace media {
10 namespace cast { 10 namespace cast {
11 11
12 LoggingStats::LoggingStats() 12 LoggingStats::LoggingStats()
13 : frame_stats_(), 13 : frame_stats_(),
14 packet_stats_(), 14 packet_stats_(),
15 generic_stats_(), 15 generic_stats_() {
16 start_time_() {
17 memset(counts_, 0, sizeof(counts_));
18 memset(start_time_, 0, sizeof(start_time_));
19 } 16 }
20 17
21 LoggingStats::~LoggingStats() {} 18 LoggingStats::~LoggingStats() {}
22 19
23 void LoggingStats::Reset() { 20 void LoggingStats::Reset() {
24 frame_stats_.clear(); 21 frame_stats_.clear();
25 packet_stats_.clear(); 22 packet_stats_.clear();
26 generic_stats_.clear(); 23 generic_stats_.clear();
27 memset(counts_, 0, sizeof(counts_));
28 } 24 }
29 25
30 void LoggingStats::InsertFrameEvent(const base::TimeTicks& time_of_event, 26 void LoggingStats::InsertFrameEvent(const base::TimeTicks& time_of_event,
31 CastLoggingEvent event, 27 CastLoggingEvent event,
32 uint32 rtp_timestamp, 28 uint32 rtp_timestamp,
33 uint32 frame_id) { 29 uint32 frame_id) {
34 InsertBaseFrameEvent(time_of_event, event, frame_id, rtp_timestamp); 30 InsertBaseFrameEvent(time_of_event, event, frame_id, rtp_timestamp);
35 } 31 }
36 32
37 void LoggingStats::InsertFrameEventWithSize( 33 void LoggingStats::InsertFrameEventWithSize(
38 const base::TimeTicks& time_of_event, 34 const base::TimeTicks& time_of_event,
39 CastLoggingEvent event, 35 CastLoggingEvent event,
40 uint32 rtp_timestamp, 36 uint32 rtp_timestamp,
41 uint32 frame_id, 37 uint32 frame_id,
42 int frame_size) { 38 int frame_size) {
43 InsertBaseFrameEvent(time_of_event, event, frame_id, rtp_timestamp); 39 InsertBaseFrameEvent(time_of_event, event, frame_id, rtp_timestamp);
44 // Update size. 40 // Update size.
45 FrameStatsMap::iterator it = frame_stats_.find(event); 41 FrameStatsMap::iterator it = frame_stats_.find(event);
46 DCHECK(it != frame_stats_.end()); 42 DCHECK(it != frame_stats_.end());
47 it->second->bitrate_kbps += frame_size; 43 it->second->size_sum += frame_size;
48 } 44 }
49 45
50 void LoggingStats::InsertFrameEventWithDelay( 46 void LoggingStats::InsertFrameEventWithDelay(
51 const base::TimeTicks& time_of_event, 47 const base::TimeTicks& time_of_event,
52 CastLoggingEvent event, 48 CastLoggingEvent event,
53 uint32 rtp_timestamp, 49 uint32 rtp_timestamp,
54 uint32 frame_id, 50 uint32 frame_id,
55 base::TimeDelta delay) { 51 base::TimeDelta delay) {
56 InsertBaseFrameEvent(time_of_event, event, frame_id, rtp_timestamp); 52 InsertBaseFrameEvent(time_of_event, event, frame_id, rtp_timestamp);
57 // Update size. 53 // Update size.
58 FrameStatsMap::iterator it = frame_stats_.find(event); 54 FrameStatsMap::iterator it = frame_stats_.find(event);
59 DCHECK(it != frame_stats_.end()); 55 DCHECK(it != frame_stats_.end());
60 // Using the average delay as a counter, will divide by the counter when 56 // Using the average delay as a counter, will divide by the counter when
imcheng 2014/01/22 21:03:37 Remove comment
mikhal1 2014/01/23 19:53:11 Done.
61 // triggered. 57 // triggered.
62 it->second->avg_delay_ms += delay.InMilliseconds(); 58 it->second->sum_delay += delay;
63 if (delay.InMilliseconds() > it->second->max_delay_ms) 59 if (delay > it->second->max_delay || it->second->event_counter == 1)
64 it->second->max_delay_ms = delay.InMilliseconds(); 60 it->second->max_delay = delay;
65 if ((delay.InMilliseconds() < it->second->min_delay_ms) || 61 if (delay < it->second->min_delay || it->second->event_counter == 1)
66 (counts_[event] == 1) ) 62 it->second->min_delay = delay;
67 it->second->min_delay_ms = delay.InMilliseconds();
68 } 63 }
69 64
70 void LoggingStats::InsertBaseFrameEvent(const base::TimeTicks& time_of_event, 65 void LoggingStats::InsertBaseFrameEvent(const base::TimeTicks& time_of_event,
imcheng 2014/01/22 21:03:37 Maybe have this function return a pointer to the F
mikhal1 2014/01/23 19:53:11 Was deliberating about that one too. I will still
imcheng 2014/01/23 21:17:18 In the case of inserting, map::insert returns a pa
71 CastLoggingEvent event, 66 CastLoggingEvent event,
72 uint32 frame_id, 67 uint32 frame_id,
73 uint32 rtp_timestamp) { 68 uint32 rtp_timestamp) {
74 // Does this belong to an existing event? 69 // Does this belong to an existing event?
75 FrameStatsMap::iterator it = frame_stats_.find(event); 70 FrameStatsMap::iterator it = frame_stats_.find(event);
76 if (it == frame_stats_.end()) { 71 if (it == frame_stats_.end()) {
77 // New event. 72 // New event.
78 start_time_[event] = time_of_event;
79 linked_ptr<FrameLogStats> stats(new FrameLogStats()); 73 linked_ptr<FrameLogStats> stats(new FrameLogStats());
74 stats->first_event_time = time_of_event;
75 stats->last_event_time = time_of_event;
76 stats->event_counter = 1;
80 frame_stats_.insert(std::make_pair(event, stats)); 77 frame_stats_.insert(std::make_pair(event, stats));
78 } else {
79 it->second->last_event_time = time_of_event;
80 ++it->second->event_counter;
imcheng 2014/01/22 21:03:37 nit: Does this work? I am paranoid about operator
mikhal1 2014/01/23 19:53:11 my tests implies this works, but I'm adding a pare
imcheng 2014/01/23 21:17:18 Thanks! On 2014/01/23 19:53:11, mikhal1 wrote:
81 } 81 }
82
83 ++counts_[event];
84 } 82 }
85 83
86 void LoggingStats::InsertPacketEvent(const base::TimeTicks& time_of_event, 84 void LoggingStats::InsertPacketEvent(const base::TimeTicks& time_of_event,
87 CastLoggingEvent event, 85 CastLoggingEvent event,
88 uint32 rtp_timestamp, 86 uint32 rtp_timestamp,
89 uint32 frame_id, 87 uint32 frame_id,
90 uint16 packet_id, 88 uint16 packet_id,
91 uint16 max_packet_id, 89 uint16 max_packet_id,
92 size_t size) { 90 size_t size) {
93 // Does this packet belong to an existing event? 91 // Does this packet belong to an existing event?
94 PacketStatsMap::iterator it = packet_stats_.find(event); 92 PacketStatsMap::iterator it = packet_stats_.find(event);
95 if (it == packet_stats_.end()) { 93 if (it == packet_stats_.end()) {
96 // New event. 94 // New event.
97 start_time_[event] = time_of_event; 95 linked_ptr<PacketLogStats> stats(new PacketLogStats());
98 packet_stats_.insert(std::make_pair(event, size)); 96 stats->first_event_time = time_of_event;
97 stats->last_event_time = time_of_event;
98 stats->size_sum = size;
99 stats->event_counter = 1;
100 packet_stats_.insert(std::make_pair(event, stats));
99 } else { 101 } else {
100 // Add to existing. 102 // Add to an existing event.
101 it->second += size; 103 it->second->size_sum += size;
104 ++it->second->event_counter;
imcheng 2014/01/22 21:03:37 Same as above regarding operator precedence.
mikhal1 2014/01/23 19:53:11 Done.
102 } 105 }
103 ++counts_[event];
104 } 106 }
105 107
106 void LoggingStats::InsertGenericEvent(const base::TimeTicks& time_of_event, 108 void LoggingStats::InsertGenericEvent(const base::TimeTicks& time_of_event,
107 CastLoggingEvent event, int value) { 109 CastLoggingEvent event, int value) {
108 // Does this event belong to an existing event? 110 // Does this event belong to an existing event?
109 GenericStatsMap::iterator it = generic_stats_.find(event); 111 GenericStatsMap::iterator it = generic_stats_.find(event);
110 if (it == generic_stats_.end()) { 112 if (it == generic_stats_.end()) {
111 // New event. 113 // New event.
112 start_time_[event] = time_of_event; 114 linked_ptr<GenericLogStats> stats(new GenericLogStats());
113 generic_stats_.insert(std::make_pair(event, value)); 115 stats->first_event_time = time_of_event;
116 stats->last_event_time = time_of_event;
117 stats->sum = value;
118 stats->min = value;
119 stats->max = value;
120 stats->event_counter = 1;
121 generic_stats_.insert(std::make_pair(event, stats));
114 } else { 122 } else {
115 // Add to existing (will be used to compute average). 123 // Add to existing event.
116 it->second += value; 124 it->second->sum += value;
125 ++it->second->event_counter;
imcheng 2014/01/22 21:03:37 Same as above regarding operator precedence.
mikhal1 2014/01/23 19:53:11 Done.
126 it->second->last_event_time = time_of_event;
127 if (it->second->min > value) {
128 it->second->min = value;
129 } else if (it->second->max < value) {
130 it->second->max = value;
131 }
117 } 132 }
118 ++counts_[event];
119 } 133 }
120 134
121 const FrameStatsMap* LoggingStats::GetFrameStatsData( 135 const FrameStatsMap* LoggingStats::GetFrameStatsData() const {
122 const base::TimeTicks& now) {
123 // Compute framerate and bitrate (when available).
124 FrameStatsMap::iterator it;
125 for (it = frame_stats_.begin(); it != frame_stats_.end(); ++it) {
126 base::TimeDelta time_diff = now - start_time_[it->first];
127 it->second->framerate_fps = counts_[it->first] / time_diff.InSecondsF();
128 if (it->second->bitrate_kbps > 0) {
129 it->second->bitrate_kbps = (8 / 1000) * it->second->bitrate_kbps /
130 time_diff.InSecondsF();
131 }
132 if (it->second->avg_delay_ms > 0)
133 it->second->avg_delay_ms /= counts_[it->first];
134 }
135 return &frame_stats_; 136 return &frame_stats_;
136 } 137 }
137 138
138 const PacketStatsMap* LoggingStats::GetPacketStatsData( 139 const PacketStatsMap* LoggingStats::GetPacketStatsData() const {
139 const base::TimeTicks& now) {
140 PacketStatsMap::iterator it;
141 for (it = packet_stats_.begin(); it != packet_stats_.end(); ++it) {
142 if (counts_[it->first] == 0) continue;
143 base::TimeDelta time_diff = now - start_time_[it->first];
144 it->second = (8 / 1000) * it->second / time_diff.InSecondsF();
145 }
146 return &packet_stats_; 140 return &packet_stats_;
147 } 141 }
148 142
149 const GenericStatsMap* LoggingStats::GetGenericStatsData() { 143 const GenericStatsMap* LoggingStats::GetGenericStatsData() const {
150 // Compute averages.
151 GenericStatsMap::iterator it;
152 for (it = generic_stats_.begin(); it != generic_stats_.end(); ++it) {
153 it->second /= counts_[ it->first];
154 }
155 return &generic_stats_; 144 return &generic_stats_;
156 } 145 }
157 146
158 } // namespace cast 147 } // namespace cast
159 } // namespace media 148 } // namespace media
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698