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

Unified Diff: content/renderer/media/render_media_log.cc

Issue 2815303006: Convert MediaLog from being ref counted to owned by WebMediaPlayer. (Closed)
Patch Set: Rebase. 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « content/renderer/media/render_media_log.h ('k') | content/renderer/media/render_media_log_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/renderer/media/render_media_log.cc
diff --git a/content/renderer/media/render_media_log.cc b/content/renderer/media/render_media_log.cc
index 1169f685b5a81ec6885ef39e92a8cb96195c0301..981e38d823fc342be2ec23ba13c3eecfa1b58f48 100644
--- a/content/renderer/media/render_media_log.cc
+++ b/content/renderer/media/render_media_log.cc
@@ -47,9 +47,23 @@ RenderMediaLog::RenderMediaLog(const GURL& security_origin)
task_runner_(base::ThreadTaskRunnerHandle::Get()),
tick_clock_(new base::DefaultTickClock()),
last_ipc_send_time_(tick_clock_->NowTicks()),
- ipc_send_pending_(false) {
+ ipc_send_pending_(false),
+ weak_factory_(this) {
DCHECK(RenderThread::Get())
<< "RenderMediaLog must be constructed on the render thread";
+ // Pre-bind the WeakPtr on the right thread since we'll receive calls from
+ // other threads and don't want races.
+ weak_this_ = weak_factory_.GetWeakPtr();
+}
+
+RenderMediaLog::~RenderMediaLog() {
+ DCHECK(task_runner_->BelongsToCurrentThread());
+
+ // There's no further chance to handle this, so send them now. This should not
+ // be racy since nothing should have a pointer to the media log on another
+ // thread by this point.
+ if (ipc_send_pending_)
+ SendQueuedMediaEvents();
}
void RenderMediaLog::AddEvent(std::unique_ptr<media::MediaLogEvent> event) {
@@ -104,7 +118,8 @@ void RenderMediaLog::AddEvent(std::unique_ptr<media::MediaLogEvent> event) {
if (delay_for_next_ipc_send > base::TimeDelta()) {
task_runner_->PostDelayedTask(
- FROM_HERE, base::Bind(&RenderMediaLog::SendQueuedMediaEvents, this),
+ FROM_HERE,
+ base::Bind(&RenderMediaLog::SendQueuedMediaEvents, weak_this_),
delay_for_next_ipc_send);
return;
}
@@ -115,7 +130,8 @@ void RenderMediaLog::AddEvent(std::unique_ptr<media::MediaLogEvent> event) {
return;
}
task_runner_->PostTask(
- FROM_HERE, base::Bind(&RenderMediaLog::SendQueuedMediaEvents, this));
+ FROM_HERE,
+ base::Bind(&RenderMediaLog::SendQueuedMediaEvents, weak_this_));
}
std::string RenderMediaLog::GetLastErrorMessage() {
@@ -137,7 +153,7 @@ void RenderMediaLog::RecordRapporWithSecurityOrigin(const std::string& metric) {
if (!task_runner_->BelongsToCurrentThread()) {
task_runner_->PostTask(
FROM_HERE, base::Bind(&RenderMediaLog::RecordRapporWithSecurityOrigin,
- this, metric));
+ weak_this_, metric));
return;
}
@@ -168,10 +184,10 @@ void RenderMediaLog::SendQueuedMediaEvents() {
last_ipc_send_time_ = tick_clock_->NowTicks();
}
- RenderThread::Get()->Send(new ViewHostMsg_MediaLogEvents(events_to_send));
-}
+ if (events_to_send.empty())
+ return;
-RenderMediaLog::~RenderMediaLog() {
+ RenderThread::Get()->Send(new ViewHostMsg_MediaLogEvents(events_to_send));
}
void RenderMediaLog::SetTickClockForTesting(
« no previous file with comments | « content/renderer/media/render_media_log.h ('k') | content/renderer/media/render_media_log_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698