| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 "media/base/media_log.h" | 5 #include "media/base/media_log.h" |
| 6 | 6 |
| 7 #include <string> | 7 #include <string> |
| 8 | 8 |
| 9 #include "base/atomic_sequence_num.h" | 9 #include "base/atomic_sequence_num.h" |
| 10 #include "base/bind.h" | 10 #include "base/bind.h" |
| (...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 143 return NULL; | 143 return NULL; |
| 144 } | 144 } |
| 145 | 145 |
| 146 MediaLog::MediaLog() { | 146 MediaLog::MediaLog() { |
| 147 id_ = media_log_count.GetNext(); | 147 id_ = media_log_count.GetNext(); |
| 148 stats_update_pending_ = false; | 148 stats_update_pending_ = false; |
| 149 } | 149 } |
| 150 | 150 |
| 151 MediaLog::~MediaLog() {} | 151 MediaLog::~MediaLog() {} |
| 152 | 152 |
| 153 void MediaLog::AddEvent(MediaLogEvent* event) { | 153 void MediaLog::AddEvent(scoped_ptr<MediaLogEvent> event) { |
| 154 scoped_ptr<MediaLogEvent> e(event); | |
| 155 } | 154 } |
| 156 | 155 |
| 157 MediaLogEvent* MediaLog::CreateEvent(MediaLogEvent::Type type) { | 156 scoped_ptr<MediaLogEvent> MediaLog::CreateEvent(MediaLogEvent::Type type) { |
| 158 scoped_ptr<MediaLogEvent> event(new MediaLogEvent); | 157 scoped_ptr<MediaLogEvent> event(new MediaLogEvent); |
| 159 event->id = id_; | 158 event->id = id_; |
| 160 event->type = type; | 159 event->type = type; |
| 161 event->time = base::Time::Now(); | 160 event->time = base::Time::Now(); |
| 162 return event.release(); | 161 return event.Pass(); |
| 163 } | 162 } |
| 164 | 163 |
| 165 MediaLogEvent* MediaLog::CreateBooleanEvent(MediaLogEvent::Type type, | 164 scoped_ptr<MediaLogEvent> MediaLog::CreateBooleanEvent( |
| 166 const char* property, bool value) { | 165 MediaLogEvent::Type type, const char* property, bool value) { |
| 167 scoped_ptr<MediaLogEvent> event(CreateEvent(type)); | 166 scoped_ptr<MediaLogEvent> event(CreateEvent(type)); |
| 168 event->params.SetBoolean(property, value); | 167 event->params.SetBoolean(property, value); |
| 169 return event.release(); | 168 return event.Pass(); |
| 170 } | 169 } |
| 171 | 170 |
| 172 MediaLogEvent* MediaLog::CreateIntegerEvent(MediaLogEvent::Type type, | 171 scoped_ptr<MediaLogEvent> MediaLog::CreateIntegerEvent( |
| 173 const char* property, int64 value) { | 172 MediaLogEvent::Type type, const char* property, int64 value) { |
| 174 scoped_ptr<MediaLogEvent> event(CreateEvent(type)); | 173 scoped_ptr<MediaLogEvent> event(CreateEvent(type)); |
| 175 event->params.SetInteger(property, value); | 174 event->params.SetInteger(property, value); |
| 176 return event.release(); | 175 return event.Pass(); |
| 177 } | 176 } |
| 178 | 177 |
| 179 MediaLogEvent* MediaLog::CreateTimeEvent(MediaLogEvent::Type type, | 178 scoped_ptr<MediaLogEvent> MediaLog::CreateTimeEvent( |
| 180 const char* property, | 179 MediaLogEvent::Type type, const char* property, base::TimeDelta value) { |
| 181 base::TimeDelta value) { | |
| 182 scoped_ptr<MediaLogEvent> event(CreateEvent(type)); | 180 scoped_ptr<MediaLogEvent> event(CreateEvent(type)); |
| 183 event->params.SetDouble(property, value.InSecondsF()); | 181 event->params.SetDouble(property, value.InSecondsF()); |
| 184 return event.release(); | 182 return event.Pass(); |
| 185 } | 183 } |
| 186 | 184 |
| 187 MediaLogEvent* MediaLog::CreateLoadEvent(const std::string& url) { | 185 scoped_ptr<MediaLogEvent> MediaLog::CreateLoadEvent(const std::string& url) { |
| 188 scoped_ptr<MediaLogEvent> event(CreateEvent(MediaLogEvent::LOAD)); | 186 scoped_ptr<MediaLogEvent> event(CreateEvent(MediaLogEvent::LOAD)); |
| 189 event->params.SetString("url", url); | 187 event->params.SetString("url", url); |
| 190 return event.release(); | 188 return event.Pass(); |
| 191 } | 189 } |
| 192 | 190 |
| 193 MediaLogEvent* MediaLog::CreateSeekEvent(float seconds) { | 191 scoped_ptr<MediaLogEvent> MediaLog::CreateSeekEvent(float seconds) { |
| 194 scoped_ptr<MediaLogEvent> event(CreateEvent(MediaLogEvent::SEEK)); | 192 scoped_ptr<MediaLogEvent> event(CreateEvent(MediaLogEvent::SEEK)); |
| 195 event->params.SetDouble("seek_target", seconds); | 193 event->params.SetDouble("seek_target", seconds); |
| 196 return event.release(); | 194 return event.Pass(); |
| 197 } | 195 } |
| 198 | 196 |
| 199 MediaLogEvent* MediaLog::CreatePipelineStateChangedEvent( | 197 scoped_ptr<MediaLogEvent> MediaLog::CreatePipelineStateChangedEvent( |
| 200 PipelineImpl::State state) { | 198 PipelineImpl::State state) { |
| 201 scoped_ptr<MediaLogEvent> event( | 199 scoped_ptr<MediaLogEvent> event( |
| 202 CreateEvent(MediaLogEvent::PIPELINE_STATE_CHANGED)); | 200 CreateEvent(MediaLogEvent::PIPELINE_STATE_CHANGED)); |
| 203 event->params.SetString("pipeline_state", PipelineStateToString(state)); | 201 event->params.SetString("pipeline_state", PipelineStateToString(state)); |
| 204 return event.release(); | 202 return event.Pass(); |
| 205 } | 203 } |
| 206 | 204 |
| 207 MediaLogEvent* MediaLog::CreatePipelineErrorEvent(PipelineStatus error) { | 205 scoped_ptr<MediaLogEvent> MediaLog::CreatePipelineErrorEvent( |
| 206 PipelineStatus error) { |
| 208 scoped_ptr<MediaLogEvent> event(CreateEvent(MediaLogEvent::PIPELINE_ERROR)); | 207 scoped_ptr<MediaLogEvent> event(CreateEvent(MediaLogEvent::PIPELINE_ERROR)); |
| 209 event->params.SetString("pipeline_error", PipelineStatusToString(error)); | 208 event->params.SetString("pipeline_error", PipelineStatusToString(error)); |
| 210 return event.release(); | 209 return event.Pass(); |
| 211 } | 210 } |
| 212 | 211 |
| 213 MediaLogEvent* MediaLog::CreateVideoSizeSetEvent(size_t width, size_t height) { | 212 scoped_ptr<MediaLogEvent> MediaLog::CreateVideoSizeSetEvent( |
| 213 size_t width, size_t height) { |
| 214 scoped_ptr<MediaLogEvent> event(CreateEvent(MediaLogEvent::VIDEO_SIZE_SET)); | 214 scoped_ptr<MediaLogEvent> event(CreateEvent(MediaLogEvent::VIDEO_SIZE_SET)); |
| 215 event->params.SetInteger("width", width); | 215 event->params.SetInteger("width", width); |
| 216 event->params.SetInteger("height", height); | 216 event->params.SetInteger("height", height); |
| 217 return event.release(); | 217 return event.Pass(); |
| 218 } | 218 } |
| 219 | 219 |
| 220 MediaLogEvent* MediaLog::CreateBufferedExtentsChangedEvent( | 220 scoped_ptr<MediaLogEvent> MediaLog::CreateBufferedExtentsChangedEvent( |
| 221 size_t start, size_t current, size_t end) { | 221 size_t start, size_t current, size_t end) { |
| 222 scoped_ptr<MediaLogEvent> event( | 222 scoped_ptr<MediaLogEvent> event( |
| 223 CreateEvent(MediaLogEvent::BUFFERED_EXTENTS_CHANGED)); | 223 CreateEvent(MediaLogEvent::BUFFERED_EXTENTS_CHANGED)); |
| 224 event->params.SetInteger("buffer_start", start); | 224 event->params.SetInteger("buffer_start", start); |
| 225 event->params.SetInteger("buffer_current", current); | 225 event->params.SetInteger("buffer_current", current); |
| 226 event->params.SetInteger("buffer_end", end); | 226 event->params.SetInteger("buffer_end", end); |
| 227 return event.release(); | 227 return event.Pass(); |
| 228 } | 228 } |
| 229 | 229 |
| 230 void MediaLog::QueueStatisticsUpdatedEvent(PipelineStatistics stats) { | 230 void MediaLog::QueueStatisticsUpdatedEvent(PipelineStatistics stats) { |
| 231 base::AutoLock auto_lock(stats_lock_); | 231 base::AutoLock auto_lock(stats_lock_); |
| 232 last_statistics_ = stats; | 232 last_statistics_ = stats; |
| 233 | 233 |
| 234 // Sadly, this function can get dispatched on threads not running a message | 234 // Sadly, this function can get dispatched on threads not running a message |
| 235 // loop. Happily, this is pretty rare (only VideoRendererBase at this time) | 235 // loop. Happily, this is pretty rare (only VideoRendererBase at this time) |
| 236 // so we simply leave stats updating for another call to trigger. | 236 // so we simply leave stats updating for another call to trigger. |
| 237 if (!stats_update_pending_ && MessageLoop::current()) { | 237 if (!stats_update_pending_ && MessageLoop::current()) { |
| (...skipping 10 matching lines...) Expand all Loading... |
| 248 scoped_ptr<MediaLogEvent> event( | 248 scoped_ptr<MediaLogEvent> event( |
| 249 CreateEvent(MediaLogEvent::STATISTICS_UPDATED)); | 249 CreateEvent(MediaLogEvent::STATISTICS_UPDATED)); |
| 250 event->params.SetInteger("audio_bytes_decoded", | 250 event->params.SetInteger("audio_bytes_decoded", |
| 251 last_statistics_.audio_bytes_decoded); | 251 last_statistics_.audio_bytes_decoded); |
| 252 event->params.SetInteger("video_bytes_decoded", | 252 event->params.SetInteger("video_bytes_decoded", |
| 253 last_statistics_.video_bytes_decoded); | 253 last_statistics_.video_bytes_decoded); |
| 254 event->params.SetInteger("video_frames_decoded", | 254 event->params.SetInteger("video_frames_decoded", |
| 255 last_statistics_.video_frames_decoded); | 255 last_statistics_.video_frames_decoded); |
| 256 event->params.SetInteger("video_frames_dropped", | 256 event->params.SetInteger("video_frames_dropped", |
| 257 last_statistics_.video_frames_dropped); | 257 last_statistics_.video_frames_dropped); |
| 258 AddEvent(event.release()); | 258 AddEvent(event.Pass()); |
| 259 stats_update_pending_ = false; | 259 stats_update_pending_ = false; |
| 260 } | 260 } |
| 261 | 261 |
| 262 } //namespace media | 262 } //namespace media |
| OLD | NEW |