15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef MEDIA_BASE_MEDIA_LOG_H_ 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define MEDIA_BASE_MEDIA_LOG_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <sstream> 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <string> 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/ref_counted.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "media/base/media_export.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "media/base/media_log_event.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "media/base/pipeline.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "media/base/pipeline_status.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace media { 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Indicates a string should be added to the log. 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// First parameter - The string to add to the log. 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)typedef base::Callback<void(const std::string&)> LogCB; 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Helper class to make it easier to use log_cb like DVLOG(). 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class LogHelper { 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LogHelper(const LogCB& Log_cb); 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ~LogHelper(); 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::ostream& stream() { return stream_; } 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private: 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LogCB log_cb_; 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::stringstream stream_; 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define MEDIA_LOG(log_cb) LogHelper(log_cb).stream() 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class MEDIA_EXPORT MediaLog : public base::RefCountedThreadSafe<MediaLog> { 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Convert various enums to strings. 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static const char* EventTypeToString(MediaLogEvent::Type type); 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static const char* PipelineStatusToString(PipelineStatus); 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MediaLog(); 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Add an event to this log. Overriden by inheritors to actually do something 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // with it. 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void AddEvent(scoped_ptr<MediaLogEvent> event); 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Helper methods to create events and their parameters. 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<MediaLogEvent> CreateEvent(MediaLogEvent::Type type); 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<MediaLogEvent> CreateBooleanEvent( 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MediaLogEvent::Type type, const char* property, bool value); 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<MediaLogEvent> CreateStringEvent( 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MediaLogEvent::Type type, const char* property, const std::string& value); 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<MediaLogEvent> CreateTimeEvent( 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MediaLogEvent::Type type, const char* property, base::TimeDelta value); 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<MediaLogEvent> CreateLoadEvent(const std::string& url); 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<MediaLogEvent> CreateSeekEvent(float seconds); 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<MediaLogEvent> CreatePipelineStateChangedEvent( 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Pipeline::State state); 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<MediaLogEvent> CreatePipelineErrorEvent(PipelineStatus error); 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<MediaLogEvent> CreateVideoSizeSetEvent( 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) size_t width, size_t height); 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<MediaLogEvent> CreateBufferedExtentsChangedEvent( 67c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) int64 start, int64 current, int64 end); 682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<MediaLogEvent> CreateMediaSourceErrorEvent( 692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& error); 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 713240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch // Report a property change without an accompanying event. 723240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch void SetStringProperty(const char* key, const std::string& value); 733240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch void SetIntegerProperty(const char* key, int value); 743240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch void SetDoubleProperty(const char* key, double value); 753240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch void SetBooleanProperty(const char* key, bool value); 76a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) void SetTimeProperty(const char* key, base::TimeDelta value); 773240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) friend class base::RefCountedThreadSafe<MediaLog>; 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~MediaLog(); 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // A unique (to this process) id for this MediaLog. 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int32 id_; 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(MediaLog); 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace media 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // MEDIA_BASE_MEDIA_LOG_H_ 92