Files
LayaNative2.0/Conch/source/conch/JSWrapper/LayaWrap/JSConsole.cpp
T
2020-11-11 16:17:13 +08:00

140 lines
4.1 KiB
C++

/**
@file JSConsole.cpp
@brief
@author James
@version 1.0
@date 2016_5_18
*/
//包含头文件
#include "JSConsole.h"
#include "../JSInterface/JSInterface.h"
#include "util/Log.h"
#include "util/JCMemorySurvey.h"
namespace laya
{
ADDJSCLSINFO(JSConsole, JSObjNode);
JSConsole* JSConsole::m_spConsole = NULL;
//------------------------------------------------------------------------------
JSConsole::JSConsole()
{
AdjustAmountOfExternalAllocatedMemory( 4 );
JCMemorySurvey::GetInstance()->newClass( "console",4,this );
}
//------------------------------------------------------------------------------
JSConsole::~JSConsole()
{
m_spConsole = NULL;
JCMemorySurvey::GetInstance()->releaseClass( "console",this );
}
//------------------------------------------------------------------------------
JSConsole* JSConsole::GetInstance()
{
if( m_spConsole == NULL )
{
m_spConsole = new JSConsole();
}
return m_spConsole;
}
void JSConsole::DelInstance()
{
if( m_spConsole ){
delete m_spConsole;
m_spConsole = NULL;
}
}
//------------------------------------------------------------------------------
void JSConsole::log(int p_nType,const char* p_sBuffer )
{
LogLevel logLevel = (LogLevel)p_nType;
#ifdef WIN32
if( p_sBuffer==NULL)
return;
int nLen = strlen( p_sBuffer ) + 3;
if (nLen>3) {
unsigned short* ucStr = new unsigned short[nLen];
int nlen = UTF8StrToUnicodeStr((unsigned char*)p_sBuffer, ucStr, nLen);
switch (logLevel)
{
case Warn:
wprintf(L"warn:%s\n", (wchar_t *)ucStr);
break;
case Error:
wprintf(L"error:%s\n", (wchar_t *)ucStr);
break;
default:
wprintf(L"%s\n", (wchar_t *)ucStr);
break;
}
delete[] ucStr;
ucStr = NULL;
}
#elif __APPLE__
switch (logLevel)
{
case Warn:
LOGIExt(p_sBuffer);
break;
case Error:
LOGIExt(p_sBuffer);
break;
default:
LOGIExt(p_sBuffer);
break;
}
#else
switch (logLevel)
{
case Warn:
LOGI(" %s", p_sBuffer);
break;
case Error:
LOGI(" %s", p_sBuffer);
break;
default:
LOGI(" %s", p_sBuffer);
break;
}
#endif
#ifdef JS_V8
if (gLayaLogNoParam)
{
v8::HandleScope hs(mpJsIso);
int flags = v8::StackTrace::kLineNumber | v8::StackTrace::kScriptNameOrSourceURL | v8::StackTrace::kFunctionName;
int wantcount = 1;
v8::Local<StackTrace> curstack = v8::StackTrace::CurrentStackTrace(mpJsIso, wantcount, (v8::StackTrace::StackTraceOptions)flags);
int count = curstack->GetFrameCount();
for (int i = 0; i < count; i++ ){
v8::Local<StackFrame> curfrm = curstack->GetFrame(i);
v8::Local<v8::String> fname = curfrm->GetFunctionName();
std::string fnamestr = *v8::String::Utf8Value(fname->ToString());
int ln = curfrm->GetLineNumber();
v8::Local<v8::String> scname = curfrm->GetScriptName();
std::string srcfile;
if (!scname.IsEmpty()) {
srcfile = *v8::String::Utf8Value(scname->ToString());
}
v8::Local<v8::String> srcurl = curfrm->GetScriptNameOrSourceURL();
if (!srcurl.IsEmpty()) {
srcfile = *v8::String::Utf8Value(srcurl->ToString());
}
gLayaLogNoParam(Info, srcfile.c_str(), ln, p_sBuffer);
}
//gLayaLog(Info,
}
#endif
}
void JSConsole::exportJS()
{
JSP_GLOBAL_CLASS("_console", JSConsole);
JSP_ADD_METHOD("log", JSConsole::log);
JSP_INSTALL_GLOBAL_CLASS("_console", JSConsole, JSConsole::GetInstance());
}
}
//------------------------------------------------------------------------------
//-----------------------------END FILE--------------------------------