| OLD | NEW |
| 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 "media/base/media_log.h" | 5 #include "media/base/media_log.h" |
| 6 | 6 |
| 7 #include <utility> |
| 8 |
| 7 #include "base/atomic_sequence_num.h" | 9 #include "base/atomic_sequence_num.h" |
| 8 #include "base/json/json_writer.h" | 10 #include "base/json/json_writer.h" |
| 9 #include "base/values.h" | 11 #include "base/values.h" |
| 10 | 12 |
| 11 namespace media { | 13 namespace media { |
| 12 | 14 |
| 13 // A count of all MediaLogs created in the current process. Used to generate | 15 // A count of all MediaLogs created in the current process. Used to generate |
| 14 // unique IDs. | 16 // unique IDs. |
| 15 static base::StaticAtomicSequenceNumber g_media_log_count; | 17 static base::StaticAtomicSequenceNumber g_media_log_count; |
| 16 | 18 |
| (...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 140 | 142 |
| 141 MediaLog::~MediaLog() {} | 143 MediaLog::~MediaLog() {} |
| 142 | 144 |
| 143 void MediaLog::AddEvent(scoped_ptr<MediaLogEvent> event) {} | 145 void MediaLog::AddEvent(scoped_ptr<MediaLogEvent> event) {} |
| 144 | 146 |
| 145 scoped_ptr<MediaLogEvent> MediaLog::CreateEvent(MediaLogEvent::Type type) { | 147 scoped_ptr<MediaLogEvent> MediaLog::CreateEvent(MediaLogEvent::Type type) { |
| 146 scoped_ptr<MediaLogEvent> event(new MediaLogEvent); | 148 scoped_ptr<MediaLogEvent> event(new MediaLogEvent); |
| 147 event->id = id_; | 149 event->id = id_; |
| 148 event->type = type; | 150 event->type = type; |
| 149 event->time = base::TimeTicks::Now(); | 151 event->time = base::TimeTicks::Now(); |
| 150 return event.Pass(); | 152 return event; |
| 151 } | 153 } |
| 152 | 154 |
| 153 scoped_ptr<MediaLogEvent> MediaLog::CreateBooleanEvent( | 155 scoped_ptr<MediaLogEvent> MediaLog::CreateBooleanEvent( |
| 154 MediaLogEvent::Type type, | 156 MediaLogEvent::Type type, |
| 155 const std::string& property, | 157 const std::string& property, |
| 156 bool value) { | 158 bool value) { |
| 157 scoped_ptr<MediaLogEvent> event(CreateEvent(type)); | 159 scoped_ptr<MediaLogEvent> event(CreateEvent(type)); |
| 158 event->params.SetBoolean(property, value); | 160 event->params.SetBoolean(property, value); |
| 159 return event.Pass(); | 161 return event; |
| 160 } | 162 } |
| 161 | 163 |
| 162 scoped_ptr<MediaLogEvent> MediaLog::CreateStringEvent( | 164 scoped_ptr<MediaLogEvent> MediaLog::CreateStringEvent( |
| 163 MediaLogEvent::Type type, | 165 MediaLogEvent::Type type, |
| 164 const std::string& property, | 166 const std::string& property, |
| 165 const std::string& value) { | 167 const std::string& value) { |
| 166 scoped_ptr<MediaLogEvent> event(CreateEvent(type)); | 168 scoped_ptr<MediaLogEvent> event(CreateEvent(type)); |
| 167 event->params.SetString(property, value); | 169 event->params.SetString(property, value); |
| 168 return event.Pass(); | 170 return event; |
| 169 } | 171 } |
| 170 | 172 |
| 171 scoped_ptr<MediaLogEvent> MediaLog::CreateTimeEvent( | 173 scoped_ptr<MediaLogEvent> MediaLog::CreateTimeEvent( |
| 172 MediaLogEvent::Type type, | 174 MediaLogEvent::Type type, |
| 173 const std::string& property, | 175 const std::string& property, |
| 174 base::TimeDelta value) { | 176 base::TimeDelta value) { |
| 175 scoped_ptr<MediaLogEvent> event(CreateEvent(type)); | 177 scoped_ptr<MediaLogEvent> event(CreateEvent(type)); |
| 176 if (value.is_max()) | 178 if (value.is_max()) |
| 177 event->params.SetString(property, "unknown"); | 179 event->params.SetString(property, "unknown"); |
| 178 else | 180 else |
| 179 event->params.SetDouble(property, value.InSecondsF()); | 181 event->params.SetDouble(property, value.InSecondsF()); |
| 180 return event.Pass(); | 182 return event; |
| 181 } | 183 } |
| 182 | 184 |
| 183 scoped_ptr<MediaLogEvent> MediaLog::CreateLoadEvent(const std::string& url) { | 185 scoped_ptr<MediaLogEvent> MediaLog::CreateLoadEvent(const std::string& url) { |
| 184 scoped_ptr<MediaLogEvent> event(CreateEvent(MediaLogEvent::LOAD)); | 186 scoped_ptr<MediaLogEvent> event(CreateEvent(MediaLogEvent::LOAD)); |
| 185 event->params.SetString("url", url); | 187 event->params.SetString("url", url); |
| 186 return event.Pass(); | 188 return event; |
| 187 } | 189 } |
| 188 | 190 |
| 189 scoped_ptr<MediaLogEvent> MediaLog::CreateSeekEvent(float seconds) { | 191 scoped_ptr<MediaLogEvent> MediaLog::CreateSeekEvent(float seconds) { |
| 190 scoped_ptr<MediaLogEvent> event(CreateEvent(MediaLogEvent::SEEK)); | 192 scoped_ptr<MediaLogEvent> event(CreateEvent(MediaLogEvent::SEEK)); |
| 191 event->params.SetDouble("seek_target", seconds); | 193 event->params.SetDouble("seek_target", seconds); |
| 192 return event.Pass(); | 194 return event; |
| 193 } | 195 } |
| 194 | 196 |
| 195 scoped_ptr<MediaLogEvent> MediaLog::CreatePipelineStateChangedEvent( | 197 scoped_ptr<MediaLogEvent> MediaLog::CreatePipelineStateChangedEvent( |
| 196 Pipeline::State state) { | 198 Pipeline::State state) { |
| 197 scoped_ptr<MediaLogEvent> event( | 199 scoped_ptr<MediaLogEvent> event( |
| 198 CreateEvent(MediaLogEvent::PIPELINE_STATE_CHANGED)); | 200 CreateEvent(MediaLogEvent::PIPELINE_STATE_CHANGED)); |
| 199 event->params.SetString("pipeline_state", Pipeline::GetStateString(state)); | 201 event->params.SetString("pipeline_state", Pipeline::GetStateString(state)); |
| 200 return event.Pass(); | 202 return event; |
| 201 } | 203 } |
| 202 | 204 |
| 203 scoped_ptr<MediaLogEvent> MediaLog::CreatePipelineErrorEvent( | 205 scoped_ptr<MediaLogEvent> MediaLog::CreatePipelineErrorEvent( |
| 204 PipelineStatus error) { | 206 PipelineStatus error) { |
| 205 scoped_ptr<MediaLogEvent> event(CreateEvent(MediaLogEvent::PIPELINE_ERROR)); | 207 scoped_ptr<MediaLogEvent> event(CreateEvent(MediaLogEvent::PIPELINE_ERROR)); |
| 206 event->params.SetInteger("pipeline_error", error); | 208 event->params.SetInteger("pipeline_error", error); |
| 207 return event.Pass(); | 209 return event; |
| 208 } | 210 } |
| 209 | 211 |
| 210 scoped_ptr<MediaLogEvent> MediaLog::CreateVideoSizeSetEvent( | 212 scoped_ptr<MediaLogEvent> MediaLog::CreateVideoSizeSetEvent( |
| 211 size_t width, size_t height) { | 213 size_t width, size_t height) { |
| 212 scoped_ptr<MediaLogEvent> event(CreateEvent(MediaLogEvent::VIDEO_SIZE_SET)); | 214 scoped_ptr<MediaLogEvent> event(CreateEvent(MediaLogEvent::VIDEO_SIZE_SET)); |
| 213 event->params.SetInteger("width", width); | 215 event->params.SetInteger("width", width); |
| 214 event->params.SetInteger("height", height); | 216 event->params.SetInteger("height", height); |
| 215 return event.Pass(); | 217 return event; |
| 216 } | 218 } |
| 217 | 219 |
| 218 scoped_ptr<MediaLogEvent> MediaLog::CreateBufferedExtentsChangedEvent( | 220 scoped_ptr<MediaLogEvent> MediaLog::CreateBufferedExtentsChangedEvent( |
| 219 int64_t start, | 221 int64_t start, |
| 220 int64_t current, | 222 int64_t current, |
| 221 int64_t end) { | 223 int64_t end) { |
| 222 scoped_ptr<MediaLogEvent> event( | 224 scoped_ptr<MediaLogEvent> event( |
| 223 CreateEvent(MediaLogEvent::BUFFERED_EXTENTS_CHANGED)); | 225 CreateEvent(MediaLogEvent::BUFFERED_EXTENTS_CHANGED)); |
| 224 // These values are headed to JS where there is no int64_t so we use a double | 226 // These values are headed to JS where there is no int64_t so we use a double |
| 225 // and accept loss of precision above 2^53 bytes (8 Exabytes). | 227 // and accept loss of precision above 2^53 bytes (8 Exabytes). |
| 226 event->params.SetDouble("buffer_start", start); | 228 event->params.SetDouble("buffer_start", start); |
| 227 event->params.SetDouble("buffer_current", current); | 229 event->params.SetDouble("buffer_current", current); |
| 228 event->params.SetDouble("buffer_end", end); | 230 event->params.SetDouble("buffer_end", end); |
| 229 return event.Pass(); | 231 return event; |
| 230 } | 232 } |
| 231 | 233 |
| 232 void MediaLog::AddLogEvent(MediaLogLevel level, const std::string& message) { | 234 void MediaLog::AddLogEvent(MediaLogLevel level, const std::string& message) { |
| 233 scoped_ptr<MediaLogEvent> event(CreateEvent(MediaLogLevelToEventType(level))); | 235 scoped_ptr<MediaLogEvent> event(CreateEvent(MediaLogLevelToEventType(level))); |
| 234 event->params.SetString(MediaLogLevelToString(level), message); | 236 event->params.SetString(MediaLogLevelToString(level), message); |
| 235 AddEvent(event.Pass()); | 237 AddEvent(std::move(event)); |
| 236 } | 238 } |
| 237 | 239 |
| 238 void MediaLog::SetStringProperty( | 240 void MediaLog::SetStringProperty( |
| 239 const std::string& key, const std::string& value) { | 241 const std::string& key, const std::string& value) { |
| 240 scoped_ptr<MediaLogEvent> event(CreateEvent(MediaLogEvent::PROPERTY_CHANGE)); | 242 scoped_ptr<MediaLogEvent> event(CreateEvent(MediaLogEvent::PROPERTY_CHANGE)); |
| 241 event->params.SetString(key, value); | 243 event->params.SetString(key, value); |
| 242 AddEvent(event.Pass()); | 244 AddEvent(std::move(event)); |
| 243 } | 245 } |
| 244 | 246 |
| 245 void MediaLog::SetIntegerProperty( | 247 void MediaLog::SetIntegerProperty( |
| 246 const std::string& key, int value) { | 248 const std::string& key, int value) { |
| 247 scoped_ptr<MediaLogEvent> event(CreateEvent(MediaLogEvent::PROPERTY_CHANGE)); | 249 scoped_ptr<MediaLogEvent> event(CreateEvent(MediaLogEvent::PROPERTY_CHANGE)); |
| 248 event->params.SetInteger(key, value); | 250 event->params.SetInteger(key, value); |
| 249 AddEvent(event.Pass()); | 251 AddEvent(std::move(event)); |
| 250 } | 252 } |
| 251 | 253 |
| 252 void MediaLog::SetDoubleProperty( | 254 void MediaLog::SetDoubleProperty( |
| 253 const std::string& key, double value) { | 255 const std::string& key, double value) { |
| 254 scoped_ptr<MediaLogEvent> event(CreateEvent(MediaLogEvent::PROPERTY_CHANGE)); | 256 scoped_ptr<MediaLogEvent> event(CreateEvent(MediaLogEvent::PROPERTY_CHANGE)); |
| 255 event->params.SetDouble(key, value); | 257 event->params.SetDouble(key, value); |
| 256 AddEvent(event.Pass()); | 258 AddEvent(std::move(event)); |
| 257 } | 259 } |
| 258 | 260 |
| 259 void MediaLog::SetBooleanProperty( | 261 void MediaLog::SetBooleanProperty( |
| 260 const std::string& key, bool value) { | 262 const std::string& key, bool value) { |
| 261 scoped_ptr<MediaLogEvent> event(CreateEvent(MediaLogEvent::PROPERTY_CHANGE)); | 263 scoped_ptr<MediaLogEvent> event(CreateEvent(MediaLogEvent::PROPERTY_CHANGE)); |
| 262 event->params.SetBoolean(key, value); | 264 event->params.SetBoolean(key, value); |
| 263 AddEvent(event.Pass()); | 265 AddEvent(std::move(event)); |
| 264 } | 266 } |
| 265 | 267 |
| 266 void MediaLog::SetTimeProperty( | 268 void MediaLog::SetTimeProperty( |
| 267 const std::string& key, base::TimeDelta value) { | 269 const std::string& key, base::TimeDelta value) { |
| 268 scoped_ptr<MediaLogEvent> event(CreateEvent(MediaLogEvent::PROPERTY_CHANGE)); | 270 scoped_ptr<MediaLogEvent> event(CreateEvent(MediaLogEvent::PROPERTY_CHANGE)); |
| 269 if (value.is_max()) | 271 if (value.is_max()) |
| 270 event->params.SetString(key, "unknown"); | 272 event->params.SetString(key, "unknown"); |
| 271 else | 273 else |
| 272 event->params.SetDouble(key, value.InSecondsF()); | 274 event->params.SetDouble(key, value.InSecondsF()); |
| 273 AddEvent(event.Pass()); | 275 AddEvent(std::move(event)); |
| 274 } | 276 } |
| 275 | 277 |
| 276 LogHelper::LogHelper(MediaLog::MediaLogLevel level, | 278 LogHelper::LogHelper(MediaLog::MediaLogLevel level, |
| 277 const scoped_refptr<MediaLog>& media_log) | 279 const scoped_refptr<MediaLog>& media_log) |
| 278 : level_(level), media_log_(media_log) { | 280 : level_(level), media_log_(media_log) { |
| 279 DCHECK(media_log_.get()); | 281 DCHECK(media_log_.get()); |
| 280 } | 282 } |
| 281 | 283 |
| 282 LogHelper::~LogHelper() { | 284 LogHelper::~LogHelper() { |
| 283 media_log_->AddLogEvent(level_, stream_.str()); | 285 media_log_->AddLogEvent(level_, stream_.str()); |
| 284 } | 286 } |
| 285 | 287 |
| 286 } //namespace media | 288 } //namespace media |
| OLD | NEW |