1 /* 2 * Copyright 1991-1999, Be Incorporated. 3 * Copyright (c) 1999-2000, Eric Moon. 4 * All rights reserved. 5 * 6 * Redistribution and use in source and binary forms, with or without 7 * modification, are permitted provided that the following conditions 8 * are met: 9 * 10 * 1. Redistributions of source code must retain the above copyright 11 * notice, this list of conditions, and the following disclaimer. 12 * 13 * 2. Redistributions in binary form must reproduce the above copyright 14 * notice, this list of conditions, and the following disclaimer in the 15 * documentation and/or other materials provided with the distribution. 16 * 17 * 3. The name of the author may not be used to endorse or promote products 18 * derived from this software without specific prior written permission. 19 * 20 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR 21 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 22 * OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR 23 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY 24 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 25 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 26 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 27 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR 28 * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 29 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 30 */ 31 32 33 // LogWriter.h 34 35 #ifndef LogWriter_H 36 #define LogWriter_H 1 37 38 #include <kernel/OS.h> 39 //#include <storage/Entry.h> 40 //#include <storage/File.h> 41 #include <Entry.h> 42 #include <File.h> 43 #include <support/String.h> 44 #include <set> 45 46 // logging message data structure 47 struct log_message 48 { 49 bigtime_t tstamp; // time that LogWriter::Log() was called, in real time 50 bigtime_t now; // time that LogWriter::Log() was called, according to the time source 51 union // various bits of data for different kinds of logged actions 52 { 53 struct 54 { 55 bigtime_t start_time; // buffer's start time stamp 56 bigtime_t offset; // how late or early the buffer was handled 57 } buffer_data; 58 struct 59 { 60 int32 status; 61 } data_status; 62 struct 63 { 64 int32 id; // parameter ID 65 float value; // new value 66 } param; 67 struct 68 { 69 int32 what; 70 } unknown; 71 }; 72 }; 73 74 // logging message 'what' codes 75 enum log_what 76 { 77 LOG_QUIT = 'Quit', // time to quit; tear down the thread 78 79 // messages related to BMediaNode methods 80 LOG_SET_RUN_MODE = 'Rnmd', 81 LOG_PREROLL = 'Prll', 82 LOG_SET_TIME_SOURCE = 'TSrc', 83 LOG_REQUEST_COMPLETED = 'Rqcm', 84 85 // messages related to BControllable methods 86 LOG_GET_PARAM_VALUE = 'PVal', 87 LOG_SET_PARAM_VALUE = 'SVal', 88 89 // messages related to BBufferProducer methods 90 LOG_FORMAT_SUGG_REQ = 'FSRq', 91 LOG_FORMAT_PROPOSAL = 'FPro', 92 LOG_FORMAT_CHANGE_REQ = 'FCRq', 93 LOG_SET_BUFFER_GROUP = 'SBfG', 94 LOG_VIDEO_CLIP_CHANGED = 'VClp', 95 LOG_GET_LATENCY = 'GLat', 96 LOG_PREPARE_TO_CONNECT = 'PCon', 97 LOG_CONNECT = 'Cnct', 98 LOG_DISCONNECT = 'Dsct', 99 LOG_LATE_NOTICE_RECEIVED = 'LNRc', 100 LOG_ENABLE_OUTPUT = 'EnOP', 101 LOG_SET_PLAY_RATE = 'PlRt', 102 LOG_ADDITIONAL_BUFFER = 'AdBf', 103 LOG_LATENCY_CHANGED = 'LtCh', 104 105 // messages related to BBufferConsumer methods 106 LOG_HANDLE_MESSAGE = 'Mesg', 107 LOG_ACCEPT_FORMAT = 'Frmt', 108 LOG_BUFFER_RECEIVED = 'Bufr', 109 LOG_PRODUCER_DATA_STATUS = 'PDSt', 110 LOG_CONNECTED = 'Cntd', 111 LOG_DISCONNECTED = 'Dctd', 112 LOG_FORMAT_CHANGED = 'Fmtc', 113 LOG_SEEK_TAG = 'STrq', 114 115 // messages related to BMediaEventLooper methods 116 LOG_REGISTERED = 'Rgst', 117 LOG_START = 'Strt', 118 LOG_STOP = 'Stop', 119 LOG_SEEK = 'Seek', 120 LOG_TIMEWARP = 'Warp', 121 122 // messages about handling things in BMediaEventLooper::HandleEvent() 123 LOG_HANDLE_EVENT = 'HEvt', 124 LOG_HANDLE_UNKNOWN = 'Uknw', // unknown event code in HandleEvent() 125 LOG_BUFFER_HANDLED = 'Bfhd', 126 LOG_START_HANDLED = 'Sthd', 127 LOG_STOP_HANDLED = 'Sphd', 128 LOG_SEEK_HANDLED = 'Skhd', 129 LOG_WARP_HANDLED = 'Wphd', 130 LOG_DATA_STATUS_HANDLED = 'DShd', 131 LOG_SET_PARAM_HANDLED = 'SPrm', 132 LOG_INVALID_PARAM_HANDLED = 'BadP' 133 }; 134 135 // LogWriter class 136 class LogWriter 137 { 138 public: 139 // Set: output for the log_what members is disabled 140 typedef std::set<log_what> FilterSet; 141 142 public: 143 LogWriter(const entry_ref& logRef); 144 ~LogWriter(); 145 146 // write a message to the log 147 void Log(log_what what, const log_message& data); 148 149 // filtering control for logged messages 150 void SetEnabled(log_what what, bool enable); 151 void EnableAllMessages(); 152 void DisableAllMessages(); 153 154 private: 155 entry_ref mLogRef; 156 thread_id mLogThread; 157 port_id mPort; 158 BFile mLogFile; 159 BString mWriteBuf; 160 FilterSet mFilters; 161 162 // called by the LogWriter's thread 163 void HandleMessage(log_what what, const log_message& msg); 164 165 friend int32 LogWriterLoggingThread(void* arg); 166 }; 167 168 #endif 169