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

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

Issue 1236543007: MSE: Log buffered audio splice generation to media-internals (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 5 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 "base/bind.h" 7 #include "base/bind.h"
8 #include "base/location.h" 8 #include "base/location.h"
9 #include "base/logging.h" 9 #include "base/logging.h"
10 #include "base/single_thread_task_runner.h" 10 #include "base/single_thread_task_runner.h"
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
48 base::Passed(&event))); 48 base::Passed(&event)));
49 } 49 }
50 50
51 void RenderMediaLog::AddEventInternal(scoped_ptr<media::MediaLogEvent> event) { 51 void RenderMediaLog::AddEventInternal(scoped_ptr<media::MediaLogEvent> event) {
52 DCHECK(task_runner_->BelongsToCurrentThread()); 52 DCHECK(task_runner_->BelongsToCurrentThread());
53 53
54 Log(event.get()); 54 Log(event.get());
55 55
56 // If there is an event waiting to be sent, there must be a send task pending. 56 // If there is an event waiting to be sent, there must be a send task pending.
57 const bool delayed_ipc_send_pending = 57 const bool delayed_ipc_send_pending =
58 !queued_media_events_.empty() || last_buffered_extents_changed_event_; 58 !queued_media_events_.empty() || last_buffered_extents_changed_event_ ||
59 last_buffered_audio_splice_stats_changed_event_;
59 60
60 // Keep track of the latest buffered extents properties to avoid sending 61 // Keep track of the latest buffered extents properties to avoid sending
61 // thousands of events over IPC. See http://crbug.com/352585 for details. 62 // thousands of events over IPC. See http://crbug.com/352585 for details.
62 if (event->type == media::MediaLogEvent::BUFFERED_EXTENTS_CHANGED) 63 if (event->type == media::MediaLogEvent::BUFFERED_EXTENTS_CHANGED) {
63 last_buffered_extents_changed_event_.swap(event); 64 last_buffered_extents_changed_event_.swap(event);
64 else 65 } else if (event->type ==
66 media::MediaLogEvent::BUFFERED_AUDIO_SPLICE_STATISTICS_CHANGED) {
67 last_buffered_audio_splice_stats_changed_event_.swap(event);
68 } else {
65 queued_media_events_.push_back(*event); 69 queued_media_events_.push_back(*event);
70 }
66 71
67 if (delayed_ipc_send_pending) 72 if (delayed_ipc_send_pending)
68 return; 73 return;
69 74
70 // Delay until it's been a second since the last ipc message was sent. 75 // Delay until it's been a second since the last ipc message was sent.
71 base::TimeDelta delay_for_next_ipc_send = 76 base::TimeDelta delay_for_next_ipc_send =
72 base::TimeDelta::FromSeconds(1) - 77 base::TimeDelta::FromSeconds(1) -
73 (tick_clock_->NowTicks() - last_ipc_send_time_); 78 (tick_clock_->NowTicks() - last_ipc_send_time_);
74 if (delay_for_next_ipc_send > base::TimeDelta()) { 79 if (delay_for_next_ipc_send > base::TimeDelta()) {
75 task_runner_->PostDelayedTask( 80 task_runner_->PostDelayedTask(
76 FROM_HERE, base::Bind(&RenderMediaLog::SendQueuedMediaEvents, this), 81 FROM_HERE, base::Bind(&RenderMediaLog::SendQueuedMediaEvents, this),
77 delay_for_next_ipc_send); 82 delay_for_next_ipc_send);
78 return; 83 return;
79 } 84 }
80 85
81 // It's been more than a second so send now. 86 // It's been more than a second so send now.
82 SendQueuedMediaEvents(); 87 SendQueuedMediaEvents();
83 } 88 }
84 89
85 void RenderMediaLog::SendQueuedMediaEvents() { 90 void RenderMediaLog::SendQueuedMediaEvents() {
86 DCHECK(task_runner_->BelongsToCurrentThread()); 91 DCHECK(task_runner_->BelongsToCurrentThread());
87 92
88 if (last_buffered_extents_changed_event_) { 93 if (last_buffered_extents_changed_event_) {
89 queued_media_events_.push_back(*last_buffered_extents_changed_event_); 94 queued_media_events_.push_back(*last_buffered_extents_changed_event_);
90 last_buffered_extents_changed_event_.reset(); 95 last_buffered_extents_changed_event_.reset();
91 } 96 }
92 97
98 if (last_buffered_audio_splice_stats_changed_event_) {
99 queued_media_events_.push_back(
100 *last_buffered_audio_splice_stats_changed_event_);
101 last_buffered_audio_splice_stats_changed_event_.reset();
102 }
103
93 RenderThread::Get()->Send( 104 RenderThread::Get()->Send(
94 new ViewHostMsg_MediaLogEvents(queued_media_events_)); 105 new ViewHostMsg_MediaLogEvents(queued_media_events_));
95 queued_media_events_.clear(); 106 queued_media_events_.clear();
96 last_ipc_send_time_ = tick_clock_->NowTicks(); 107 last_ipc_send_time_ = tick_clock_->NowTicks();
97 } 108 }
98 109
99 RenderMediaLog::~RenderMediaLog() { 110 RenderMediaLog::~RenderMediaLog() {
100 } 111 }
101 112
102 void RenderMediaLog::SetTickClockForTesting( 113 void RenderMediaLog::SetTickClockForTesting(
103 scoped_ptr<base::TickClock> tick_clock) { 114 scoped_ptr<base::TickClock> tick_clock) {
104 tick_clock_.swap(tick_clock); 115 tick_clock_.swap(tick_clock);
105 last_ipc_send_time_ = tick_clock_->NowTicks(); 116 last_ipc_send_time_ = tick_clock_->NowTicks();
106 } 117 }
107 118
108 void RenderMediaLog::SetTaskRunnerForTesting( 119 void RenderMediaLog::SetTaskRunnerForTesting(
109 const scoped_refptr<base::SingleThreadTaskRunner>& task_runner) { 120 const scoped_refptr<base::SingleThreadTaskRunner>& task_runner) {
110 task_runner_ = task_runner; 121 task_runner_ = task_runner;
111 } 122 }
112 123
113 } // namespace content 124 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698