X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/25889d3c43f537fea00a2b7d6df7bd7e63e113f8..f5ba273ecd799f652736ce2bc830283787302a56:/src/common/memory.cpp diff --git a/src/common/memory.cpp b/src/common/memory.cpp index 4b8af7b876..9730edb82d 100644 --- a/src/common/memory.cpp +++ b/src/common/memory.cpp @@ -35,7 +35,7 @@ #include "wx/app.h" #endif -#include +#include "wx/log.h" #include #include "wx/ioswrap.h" @@ -46,7 +46,8 @@ #include #endif -#if !defined(__WATCOMC__) && !defined(__VMS__) && !defined( __MWERKS__ ) && !defined(__SALFORDC__) +#if !defined(__WATCOMC__) && !(defined(__VMS__) && ( __VMS_VER < 70000000 ) )\ + && !defined( __MWERKS__ ) && !defined(__SALFORDC__) #include #endif @@ -110,7 +111,7 @@ */ void wxMemStruct::ErrorMsg (const char * mesg) { - wxLogDebug(_T("wxWindows memory checking error: %s"), mesg); + wxLogMessage(wxT("wxWindows memory checking error: %s"), mesg); PrintNode (); // << m_fileName << ' ' << m_lineNum << endl; @@ -121,7 +122,7 @@ void wxMemStruct::ErrorMsg (const char * mesg) */ void wxMemStruct::ErrorMsg () { - wxLogDebug(_T("wxWindows over/underwrite memory error:")); + wxLogMessage(wxT("wxWindows over/underwrite memory error:")); PrintNode (); // cerr << m_fileName << ' ' << m_lineNum << endl; @@ -329,34 +330,34 @@ void wxMemStruct::PrintNode () // Let's put this in standard form so IDEs can load the file at the appropriate // line - wxString msg(_T("")); + wxString msg(wxT("")); if (m_fileName) - msg.Printf(_T("%s(%d): "), m_fileName, (int)m_lineNum); + msg.Printf(wxT("%s(%d): "), m_fileName, (int)m_lineNum); if (info && info->GetClassName()) msg += info->GetClassName(); else - msg += _T("object"); + msg += wxT("object"); wxString msg2; - msg2.Printf(_T(" at $%lX, size %d"), (long)GetActualData(), (int)RequestSize()); + msg2.Printf(wxT(" at $%lX, size %d"), (long)GetActualData(), (int)RequestSize()); msg += msg2; - wxLogDebug(msg); + wxLogMessage(msg); } else { wxString msg(""); if (m_fileName) - msg.Printf(_T("%s(%d): "), m_fileName, (int)m_lineNum); - msg += _T("non-object data"); + msg.Printf(wxT("%s(%d): "), m_fileName, (int)m_lineNum); + msg += wxT("non-object data"); wxString msg2; - msg2.Printf(_T(" at $%lX, size %d\n"), (long)GetActualData(), (int)RequestSize()); + msg2.Printf(wxT(" at $%lX, size %d\n"), (long)GetActualData(), (int)RequestSize()); msg += msg2; - wxLogDebug(msg); + wxLogMessage(msg); } } @@ -368,9 +369,9 @@ void wxMemStruct::Dump () { wxObject *obj = (wxObject *)m_actualData; - wxString msg(_T("")); + wxString msg(wxT("")); if (m_fileName) - msg.Printf(_T("%s(%d): "), m_fileName, (int)m_lineNum); + msg.Printf(wxT("%s(%d): "), m_fileName, (int)m_lineNum); /* TODO: We no longer have a stream (using wxLogDebug) so we can't dump it. @@ -383,24 +384,24 @@ void wxMemStruct::Dump () if (obj->GetClassInfo() && obj->GetClassInfo()->GetClassName()) msg += obj->GetClassInfo()->GetClassName(); else - msg += _T("unknown object class"); + msg += wxT("unknown object class"); wxString msg2(""); - msg2.Printf(_T(" at $%lX, size %d"), (long)GetActualData(), (int)RequestSize()); + msg2.Printf(wxT(" at $%lX, size %d"), (long)GetActualData(), (int)RequestSize()); msg += msg2; - wxLogDebug(msg); + wxLogMessage(msg); } else { - wxString msg(_T("")); + wxString msg(wxT("")); if (m_fileName) - msg.Printf(_T("%s(%d): "), m_fileName, (int)m_lineNum); + msg.Printf(wxT("%s(%d): "), m_fileName, (int)m_lineNum); wxString msg2(""); - msg2.Printf(_T("non-object data at $%lX, size %d"), (long)GetActualData(), (int)RequestSize() ); + msg2.Printf(wxT("non-object data at $%lX, size %d"), (long)GetActualData(), (int)RequestSize() ); msg += msg2; - wxLogDebug(msg); + wxLogMessage(msg); } } @@ -418,7 +419,7 @@ int wxMemStruct::ValidateNode () else { // Can't use the error routines as we have no recognisable object. #ifndef __WXGTK__ - wxLogDebug(_T("Can't verify memory struct - all bets are off!")); + wxLogMessage(wxT("Can't verify memory struct - all bets are off!")); #endif } return 0; @@ -472,6 +473,11 @@ int wxDebugContext::debugLevel = 1; bool wxDebugContext::debugOn = TRUE; wxMemStruct *wxDebugContext::checkPoint = NULL; +// For faster alignment calculation +static wxMarkerType markerCalc[2]; +int wxDebugContext::m_balign = (int)((char *)&markerCalc[1] - (char*)&markerCalc[0]); +int wxDebugContext::m_balignmask = (int)((char *)&markerCalc[1] - (char*)&markerCalc[0]) - 1; + wxDebugContext::wxDebugContext(void) { // m_streamBuf = new wxDebugStreamBuf; @@ -595,6 +601,9 @@ char * wxDebugContext::StartPos (const char * caller) I don't know how portable this stuff is, but it seems to work for me at the moment. It would be real nice if I knew more about this! + + // Note: this function is now obsolete (along with CalcAlignment) + // because the calculations are done statically, for greater speed. */ size_t wxDebugContext::GetPadding (const size_t size) { @@ -602,11 +611,22 @@ size_t wxDebugContext::GetPadding (const size_t size) return (pad) ? sizeof(wxMarkerType) - pad : 0; } - - size_t wxDebugContext::PaddedSize (const size_t size) { + // Added by Terry Farnham to replace + // slow GetPadding call. + int padb; + + padb = size & m_balignmask; + if(padb) + return(size + m_balign - padb); + else + return(size); + +// Old (slow) code +#if 0 return size + GetPadding (size); +#endif } /* @@ -666,23 +686,23 @@ bool wxDebugContext::Dump(void) // if (TRUE) { - wxChar* appName = _T("application"); + wxChar* appName = wxT("application"); wxString appNameStr(""); if (wxTheApp) { appNameStr = wxTheApp->GetAppName(); appName = WXSTRINGCAST appNameStr; - wxLogDebug(_T("----- Memory dump of %s at %s -----"), appName, WXSTRINGCAST wxNow() ); + wxLogMessage(wxT("----- Memory dump of %s at %s -----"), appName, WXSTRINGCAST wxNow() ); } else { - wxLogDebug( _T("----- Memory dump -----") ); + wxLogMessage( wxT("----- Memory dump -----") ); } } TraverseList ((PmSFV)&wxMemStruct::Dump, (checkPoint ? checkPoint->m_next : (wxMemStruct*)NULL)); - wxLogDebug( _T("") ); - wxLogDebug( _T("") ); + wxLogMessage( wxT("") ); + wxLogMessage( wxT("") ); return TRUE; #else @@ -723,17 +743,17 @@ bool wxDebugContext::PrintStatistics(bool detailed) // if (TRUE) { - wxChar* appName = _T("application"); - wxString appNameStr(_T("")); + wxChar* appName = wxT("application"); + wxString appNameStr(wxT("")); if (wxTheApp) { appNameStr = wxTheApp->GetAppName(); appName = WXSTRINGCAST appNameStr; - wxLogDebug(_T("----- Memory statistics of %s at %s -----"), appName, WXSTRINGCAST wxNow() ); + wxLogMessage(wxT("----- Memory statistics of %s at %s -----"), appName, WXSTRINGCAST wxNow() ); } else { - wxLogDebug( _T("----- Memory statistics -----") ); + wxLogMessage( wxT("----- Memory statistics -----") ); } } @@ -757,7 +777,7 @@ bool wxDebugContext::PrintStatistics(bool detailed) // if (detailed && (data != (void*)m_debugStream) && (data != (void*) m_streamBuf)) if (detailed && (data != (void*) wxLog::GetActiveTarget())) { - wxChar *className = _T("nonobject"); + wxChar *className = wxT("nonobject"); if (st->m_isObject && st->GetActualData()) { wxObject *obj = (wxObject *)st->GetActualData(); @@ -792,22 +812,22 @@ bool wxDebugContext::PrintStatistics(bool detailed) { while (list) { - wxLogDebug(_T("%ld objects of class %s, total size %ld"), + wxLogMessage(wxT("%ld objects of class %s, total size %ld"), list->instanceCount, list->instanceClass, list->totalSize); wxDebugStatsStruct *old = list; list = old->next; free((char *)old); } - wxLogDebug(_T("")); + wxLogMessage(wxT("")); } SetDebugMode(currentMode); - wxLogDebug(_T("Number of object items: %ld"), noObjectNodes); - wxLogDebug(_T("Number of non-object items: %ld"), noNonObjectNodes); - wxLogDebug(_T("Total allocated size: %ld"), totalSize); - wxLogDebug(_T("")); - wxLogDebug(_T("")); + wxLogMessage(wxT("Number of object items: %ld"), noObjectNodes); + wxLogMessage(wxT("Number of non-object items: %ld"), noNonObjectNodes); + wxLogMessage(wxT("Total allocated size: %ld"), totalSize); + wxLogMessage(wxT("")); + wxLogMessage(wxT("")); return TRUE; #else @@ -822,13 +842,13 @@ bool wxDebugContext::PrintClasses(void) // if (TRUE) { - wxChar* appName = _T("application"); - wxString appNameStr(_T("")); + wxChar* appName = wxT("application"); + wxString appNameStr(wxT("")); if (wxTheApp) { appNameStr = wxTheApp->GetAppName(); appName = WXSTRINGCAST appNameStr; - wxLogDebug(_T("----- Classes in %s -----"), appName); + wxLogMessage(wxT("----- Classes in %s -----"), appName); } } @@ -844,32 +864,32 @@ bool wxDebugContext::PrintClasses(void) if (info->GetClassName()) { wxString msg(info->GetClassName()); - msg += _T(" "); + msg += wxT(" "); if (info->GetBaseClassName1() && !info->GetBaseClassName2()) { - msg += _T("is a "); + msg += wxT("is a "); msg += info->GetBaseClassName1(); } else if (info->GetBaseClassName1() && info->GetBaseClassName2()) { - msg += _T("is a "); + msg += wxT("is a "); msg += info->GetBaseClassName1() ; - msg += _T(", "); + msg += wxT(", "); msg += info->GetBaseClassName2() ; } if (info->GetConstructor()) - msg += _T(": dynamic"); + msg += wxT(": dynamic"); - wxLogDebug(msg); + wxLogMessage(msg); } node = wxClassInfo::sm_classTable->Next(); n ++; } - wxLogDebug(_T("")); - wxLogDebug(_T("There are %d classes derived from wxObject."), n); - wxLogDebug(_T("")); - wxLogDebug(_T("")); + wxLogMessage(wxT("")); + wxLogMessage(wxT("There are %d classes derived from wxObject."), n); + wxLogMessage(wxT("")); + wxLogMessage(wxT("")); return TRUE; } @@ -988,6 +1008,7 @@ void * operator new[] (size_t size, wxChar * fileName, int lineNum) } #endif +#if !defined(__VISAGECPP__) // already defines this by default void operator delete (void * buf) { #ifdef NO_DEBUG_ALLOCATION @@ -996,13 +1017,12 @@ void operator delete (void * buf) wxDebugFree(buf); #endif } +#endif // VC++ 6.0 #if defined(__VISUALC__) && (__VISUALC__ >= 1200) void operator delete(void* pData, wxChar* /* fileName */, int /* lineNum */) { -// ::operator delete(pData); - // JACS 21/11/1998: surely we need to call wxDebugFree? wxDebugFree(pData, FALSE); } // New operator 21/11/1998 @@ -1040,7 +1060,7 @@ void * wxDebugAlloc(size_t size, wxChar * fileName, int lineNum, bool isObject, int totSize = wxDebugContext::TotSize (size); char * buf = (char *) malloc(totSize); if (!buf) { - wxLogDebug(_T("Call to malloc (%ld) failed."), (long)size); + wxLogMessage(wxT("Call to malloc (%ld) failed."), (long)size); return 0; } wxMemStruct * st = (wxMemStruct *)buf;