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

Side by Side Diff: content/renderer/media/render_media_log.cc

Issue 2660003003: Add MediaError.message (Closed)
Patch Set: --flakiness by using std::map, update virtual/stable/[win,mac] global interface listing too Created 3 years, 8 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 (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "content/renderer/media/render_media_log.h" 5 #include "content/renderer/media/render_media_log.h"
6 6
7 #include <sstream> 7 #include <sstream>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/location.h" 10 #include "base/location.h"
(...skipping 10 matching lines...) Expand all
21 #define MEDIA_EVENT_LOG_UTILITY DVLOG(1) 21 #define MEDIA_EVENT_LOG_UTILITY DVLOG(1)
22 #endif 22 #endif
23 23
24 namespace { 24 namespace {
25 25
26 // Print an event to the chromium log. 26 // Print an event to the chromium log.
27 void Log(media::MediaLogEvent* event) { 27 void Log(media::MediaLogEvent* event) {
28 if (event->type == media::MediaLogEvent::PIPELINE_ERROR || 28 if (event->type == media::MediaLogEvent::PIPELINE_ERROR ||
29 event->type == media::MediaLogEvent::MEDIA_ERROR_LOG_ENTRY) { 29 event->type == media::MediaLogEvent::MEDIA_ERROR_LOG_ENTRY) {
30 LOG(ERROR) << "MediaEvent: " 30 LOG(ERROR) << "MediaEvent: "
31 << media::MediaLog::MediaEventToLogString(*event); 31 << media::MediaLog::MediaEventToLogString(*event, true);
32 } else if (event->type != media::MediaLogEvent::BUFFERED_EXTENTS_CHANGED && 32 } else if (event->type != media::MediaLogEvent::BUFFERED_EXTENTS_CHANGED &&
33 event->type != media::MediaLogEvent::PROPERTY_CHANGE && 33 event->type != media::MediaLogEvent::PROPERTY_CHANGE &&
34 event->type != media::MediaLogEvent::WATCH_TIME_UPDATE && 34 event->type != media::MediaLogEvent::WATCH_TIME_UPDATE &&
35 event->type != media::MediaLogEvent::NETWORK_ACTIVITY_SET) { 35 event->type != media::MediaLogEvent::NETWORK_ACTIVITY_SET) {
36 MEDIA_EVENT_LOG_UTILITY << "MediaEvent: " 36 MEDIA_EVENT_LOG_UTILITY
37 << media::MediaLog::MediaEventToLogString(*event); 37 << "MediaEvent: "
38 << media::MediaLog::MediaEventToLogString(*event, true);
38 } 39 }
39 } 40 }
40 41
42 // Limit the number of recent MEDIA_ERROR_LOG_ENTRY retained for use in
43 // GetErrorMessages(). Older entries are dropped to make room for newer ones.
44 const int kMaxErrorLogEntries = 20;
45
41 } // namespace 46 } // namespace
42 47
43 namespace content { 48 namespace content {
44 49
45 RenderMediaLog::RenderMediaLog(const GURL& security_origin) 50 RenderMediaLog::RenderMediaLog(const GURL& security_origin)
46 : security_origin_(security_origin), 51 : security_origin_(security_origin),
47 task_runner_(base::ThreadTaskRunnerHandle::Get()), 52 task_runner_(base::ThreadTaskRunnerHandle::Get()),
48 tick_clock_(new base::DefaultTickClock()), 53 tick_clock_(new base::DefaultTickClock()),
49 last_ipc_send_time_(tick_clock_->NowTicks()), 54 last_ipc_send_time_(tick_clock_->NowTicks()),
50 ipc_send_pending_(false) { 55 ipc_send_pending_(false) {
(...skipping 20 matching lines...) Expand all
71 // SendQueuedMediaEvents() will enqueue the most recent event of this 76 // SendQueuedMediaEvents() will enqueue the most recent event of this
72 // kind, if any, prior to sending the event batch. 77 // kind, if any, prior to sending the event batch.
73 break; 78 break;
74 79
75 case media::MediaLogEvent::DURATION_SET: 80 case media::MediaLogEvent::DURATION_SET:
76 // Similar to the extents changed message, this may fire many times for 81 // Similar to the extents changed message, this may fire many times for
77 // badly muxed media. Suppress within our rate limits here. 82 // badly muxed media. Suppress within our rate limits here.
78 last_duration_changed_event_.swap(event); 83 last_duration_changed_event_.swap(event);
79 break; 84 break;
80 85
81 // Hold onto the most recent PIPELINE_ERROR and MEDIA_LOG_ERROR_ENTRY for 86 // Hold onto the most recent PIPELINE_ERROR and (potentially multiple,
82 // use in GetLastErrorMessage(). 87 // capped number of) MEDIA_LOG_ERROR_ENTRY for use in GetErrorMessages().
83 case media::MediaLogEvent::PIPELINE_ERROR: 88 case media::MediaLogEvent::PIPELINE_ERROR:
84 queued_media_events_.push_back(*event); 89 queued_media_events_.push_back(*event);
85 last_pipeline_error_.swap(event); 90 last_pipeline_error_.swap(event);
86 break; 91 break;
87 case media::MediaLogEvent::MEDIA_ERROR_LOG_ENTRY: 92 case media::MediaLogEvent::MEDIA_ERROR_LOG_ENTRY:
88 queued_media_events_.push_back(*event); 93 queued_media_events_.push_back(*event);
89 last_media_error_log_entry_.swap(event); 94 recent_media_error_log_entries_.push_back(std::move(event));
95 if (recent_media_error_log_entries_.size() > kMaxErrorLogEntries)
96 recent_media_error_log_entries_.pop_front();
90 break; 97 break;
91 98
92 // Just enqueue all other event types for throttled transmission. 99 // Just enqueue all other event types for throttled transmission.
93 default: 100 default:
94 queued_media_events_.push_back(*event); 101 queued_media_events_.push_back(*event);
95 } 102 }
96 103
97 if (ipc_send_pending_) 104 if (ipc_send_pending_)
98 return; 105 return;
99 106
(...skipping 11 matching lines...) Expand all
111 118
112 // It's been more than a second so send ASAP. 119 // It's been more than a second so send ASAP.
113 if (task_runner_->BelongsToCurrentThread()) { 120 if (task_runner_->BelongsToCurrentThread()) {
114 SendQueuedMediaEvents(); 121 SendQueuedMediaEvents();
115 return; 122 return;
116 } 123 }
117 task_runner_->PostTask( 124 task_runner_->PostTask(
118 FROM_HERE, base::Bind(&RenderMediaLog::SendQueuedMediaEvents, this)); 125 FROM_HERE, base::Bind(&RenderMediaLog::SendQueuedMediaEvents, this));
119 } 126 }
120 127
121 std::string RenderMediaLog::GetLastErrorMessage() { 128 std::map<std::string, std::vector<std::string>>
129 RenderMediaLog::GetErrorMessages() {
122 base::AutoLock auto_lock(lock_); 130 base::AutoLock auto_lock(lock_);
123 131
124 // Return the conditional concatenation of the last pipeline error and the 132 std::map<std::string, std::vector<std::string>> result;
125 // last media error log.
126 std::stringstream result;
127 if (last_pipeline_error_) { 133 if (last_pipeline_error_) {
128 result << MediaEventToLogString(*last_pipeline_error_) 134 result[EventTypeToString(last_pipeline_error_->type)].push_back(
129 << (last_media_error_log_entry_ ? ", " : ""); 135 MediaEventToLogString(*last_pipeline_error_, false));
130 } 136 }
131 if (last_media_error_log_entry_) 137
132 result << MediaEventToLogString(*last_media_error_log_entry_); 138 for (const auto& entry : recent_media_error_log_entries_) {
133 return result.str(); 139 result[EventTypeToString(entry->type)].push_back(
140 MediaEventToLogString(*entry, false));
141 }
142
143 return result;
134 } 144 }
135 145
136 void RenderMediaLog::RecordRapporWithSecurityOrigin(const std::string& metric) { 146 void RenderMediaLog::RecordRapporWithSecurityOrigin(const std::string& metric) {
137 if (!task_runner_->BelongsToCurrentThread()) { 147 if (!task_runner_->BelongsToCurrentThread()) {
138 task_runner_->PostTask( 148 task_runner_->PostTask(
139 FROM_HERE, base::Bind(&RenderMediaLog::RecordRapporWithSecurityOrigin, 149 FROM_HERE, base::Bind(&RenderMediaLog::RecordRapporWithSecurityOrigin,
140 this, metric)); 150 this, metric));
141 return; 151 return;
142 } 152 }
143 153
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
180 tick_clock_.swap(tick_clock); 190 tick_clock_.swap(tick_clock);
181 last_ipc_send_time_ = tick_clock_->NowTicks(); 191 last_ipc_send_time_ = tick_clock_->NowTicks();
182 } 192 }
183 193
184 void RenderMediaLog::SetTaskRunnerForTesting( 194 void RenderMediaLog::SetTaskRunnerForTesting(
185 const scoped_refptr<base::SingleThreadTaskRunner>& task_runner) { 195 const scoped_refptr<base::SingleThreadTaskRunner>& task_runner) {
186 task_runner_ = task_runner; 196 task_runner_ = task_runner;
187 } 197 }
188 198
189 } // namespace content 199 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698