eAppenderType_t at;
if (oscl_strstr(pszLine, _CSTR("LOGTOFILE")))
at = ePVLOG_APPENDER_FILE;
+ else if (oscl_strstr(pszLine, _CSTR("LOGTOFILE_FLUSH")))
+ at = ePVLOG_APPENDER_FILE_FLUSH;
else if (oscl_strstr(pszLine, _CSTR("LOGTOMEM")))
at = ePVLOG_APPENDER_MEMORY;
else
);
break;
}
+ case ePVLOG_APPENDER_FILE_FLUSH:
+ {
+ OSCL_ASSERT(pszLogFileName);
+ typedef TextFileAppender<TimeAndIdLayout, 1024> typeAppender;
+ OSCL_TRY(
+ err,
+ pAppender = (PVLoggerAppender*)typeAppender::CreateAppender(pszLogFileName, 0, true); // enable flushing
+ pRC = new OsclRefCounterSA<LogAppenderDestructDealloc<typeAppender> >(pAppender);
+ appenderPtr.Bind(pAppender, pRC);
+ );
+ break;
+ }
case ePVLOG_APPENDER_MEMORY:
{
OSCL_ASSERT(pszLogFileName);
/* ------------------------------------------------------------------
- * Copyright (C) 1998-2009 PacketVideo
+ * Copyright (C) 1998-2010 PacketVideo
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
public:
typedef PVLoggerAppender::message_id_type message_id_type;
- static SharableTextFileAppender<Layout, LayoutBufferSize, Lock>* CreateAppender(OSCL_TCHAR * filename, uint32 cacheSize = 0)
+ static SharableTextFileAppender<Layout, LayoutBufferSize, Lock>* CreateAppender(OSCL_TCHAR * filename, uint32 cacheSize = 0, bool flush = false)
{
-
- SharableTextFileAppender<Layout, LayoutBufferSize, Lock> * appender = new SharableTextFileAppender<Layout, LayoutBufferSize, Lock>();
+ SharableTextFileAppender<Layout, LayoutBufferSize, Lock> * appender = new SharableTextFileAppender<Layout, LayoutBufferSize, Lock>(flush);
if (NULL == appender) return NULL;
#ifdef T_ARM
_logFile.Write(_cache.ptr, sizeof(char), _cache.len);
_logFile.Write(stringbuf, sizeof(char), size);
_logFile.Write(newline, sizeof(char), 2);
- _logFile.Flush();
+ if (_flush)
+ {
+ _logFile.Flush();
+ }
_cache.len = 0;
}
}
{
_logFile.Write(stringbuf, sizeof(char), size);
_logFile.Write(newline, sizeof(char), 2);
- _logFile.Flush();
+ if (_flush)
+ {
+ _logFile.Flush();
+ }
}
_lock.Unlock();
va_end(va);
}
- SharableTextFileAppender()
+ SharableTextFileAppender(bool flush = false) :
+ _flush(flush)
{
_cache.len = 0;
_cache.ptr = 0;
private:
Lock _lock;
char* stringbuf;
-
+ bool _flush;
};
typedef PVLoggerAppender::message_id_type message_id_type;
template<class T>
- static TextFileAppender<Layout, LayoutBufferSize, Lock>* CreateAppender(const T* filename, uint32 cacheSize = 0)
+ static TextFileAppender<Layout, LayoutBufferSize, Lock>* CreateAppender(const T* filename, uint32 cacheSize = 0, bool flush = false)
{
- TextFileAppender<Layout, LayoutBufferSize, Lock> * appender = new TextFileAppender<Layout, LayoutBufferSize, Lock>();
+ TextFileAppender<Layout, LayoutBufferSize, Lock> * appender = new TextFileAppender<Layout, LayoutBufferSize, Lock>(flush);
if (NULL == appender) return NULL;
#ifdef T_ARM
_logFile.Write(_cache.ptr, sizeof(char), _cache.len);
_logFile.Write(stringbuf, sizeof(char), size);
_logFile.Write(newline, sizeof(char), 2);
- _logFile.Flush();
+ if (_flush)
+ {
+ _logFile.Flush();
+ }
_cache.len = 0;
}
}
{
_logFile.Write(stringbuf, sizeof(char), size);
_logFile.Write(newline, sizeof(char), 2);
- _logFile.Flush();
+ if (_flush)
+ {
+ _logFile.Flush();
+ }
}
_lock.Unlock();
va_end(va);
}
- TextFileAppender()
+ TextFileAppender(bool flush = false) :
+ _flush(flush)
{
_cache.len = 0;
_cache.ptr = 0;
private:
Lock _lock;
char* stringbuf;
-
+ bool _flush;
};
typedef PVLoggerAppender::message_id_type message_id_type;
template<class T>
- static BinaryFileAppender* CreateAppender(const T* filename, uint32 cacheSize = 0)
+ static BinaryFileAppender* CreateAppender(const T* filename, uint32 cacheSize = 0, bool flush = false)
{
- BinaryFileAppender * appender = OSCL_NEW(BinaryFileAppender, ());
+ BinaryFileAppender * appender = new BinaryFileAppender(flush);
if (NULL == appender) return NULL;
#ifdef T_ARM
{
_logFile.Write(_cache.ptr, sizeof(uint8), _cache.len);
_logFile.Write(buffer, sizeof(uint8), length);
- _logFile.Flush();
+ if (_flush)
+ {
+ _logFile.Flush();
+ }
_cache.len = 0;
}
}
else
{
_logFile.Write(buffer, sizeof(uint8), length);
- _logFile.Flush();
+ if (_flush)
+ {
+ _logFile.Flush();
+ }
}
}
va_end(va);
}
private:
- BinaryFileAppender()
+ BinaryFileAppender(bool flush = false) :
+ _flush(flush)
{
_cache.len = 0;
_cache.ptr = 0;
Oscl_File _logFile;
OsclMemoryFragment _cache;
uint32 _cacheSize;
+ bool _flush;
};
#define LOG_OUTPUT_TO_FILE 1
+#define FLUSH_ENABLED 0 // enabling this flushes data to disk immediately and degrades performance
// Define entry point for this DLL.
OSCL_DLL_ENTRY_POINT_DEFAULT()
{
if (iFileOpened && iLogOutputToFile)
{
- iOutputFile.Flush();
iOutputFile.Close();
}
iFileOpened = false;
case STATE_STARTED:
if (iFileOpened && iLogOutputToFile)
{
+#if (FLUSH_ENABLED)
iOutputFile.Flush();
+#endif
}
iState = STATE_INITIALIZED;
status = PVMFSuccess;
{
if (iFileOpened && iLogOutputToFile)
{
- iOutputFile.Flush();
iOutputFile.Close();
}
iFileOpened = false;
return false;
}
+void PVRefFileOutputActiveTimingSupport::queryUuid(PVUuid& uuid)
+{
+ uuid = PvmiClockExtensionInterfaceUuid;
+}
+
bool PVRefFileOutputActiveTimingSupport::FrameStepMode()
{
if (iClock && iClock->GetCountTimebase())
iOutputFile.Write(&iRIFFChunk.chunkSize, sizeof(uint8), 4);
iOutputFile.Seek(40, Oscl_File::SEEKSET);
iOutputFile.Write(&iDataSubchunk.subchunk2Size, sizeof(uint8), 4);
+#if (FLUSH_ENABLED)
iOutputFile.Flush();
+#endif
}
}