aboutsummaryrefslogtreecommitdiffstats
path: root/src/declarative/qml/v8/qdeclarativebuiltinfunctions.cpp
diff options
context:
space:
mode:
authorAurindam Jana <aurindam.jana@nokia.com>2011-11-10 15:59:05 +0100
committerQt by Nokia <qt-info@nokia.com>2011-12-14 04:51:21 +0100
commit0f2188361b996c4d8b8901412cdcebf35bad1e53 (patch)
tree1d5d5c9344d8b2464ed792560b96821f4d59b611 /src/declarative/qml/v8/qdeclarativebuiltinfunctions.cpp
parentf1bcbd1ebae5d7b894b4da51fd82de0d0d58e99d (diff)
QV8Engine: Console APIs, Extend functionality
Added console.trace, console.profile, console.profileEnd. Change-Id: Icc38ddd550989eaba0085ece120695a13ec17322 Reviewed-by: Kai Koehne <kai.koehne@nokia.com>
Diffstat (limited to 'src/declarative/qml/v8/qdeclarativebuiltinfunctions.cpp')
-rw-r--r--src/declarative/qml/v8/qdeclarativebuiltinfunctions.cpp84
1 files changed, 74 insertions, 10 deletions
diff --git a/src/declarative/qml/v8/qdeclarativebuiltinfunctions.cpp b/src/declarative/qml/v8/qdeclarativebuiltinfunctions.cpp
index 8613ae44af..d3d37c2a9c 100644
--- a/src/declarative/qml/v8/qdeclarativebuiltinfunctions.cpp
+++ b/src/declarative/qml/v8/qdeclarativebuiltinfunctions.cpp
@@ -48,6 +48,9 @@
#include <private/qdeclarativelocale_p.h>
#include <private/qv8engine_p.h>
+#include <private/qv8profilerservice_p.h>
+#include <private/qdeclarativedebugtrace_p.h>
+
#include <QtCore/qstring.h>
#include <QtCore/qdatetime.h>
#include <QtCore/qcryptographichash.h>
@@ -55,6 +58,7 @@
#include <QtCore/qsize.h>
#include <QtCore/qpoint.h>
#include <QtCore/qurl.h>
+#include <QtCore/qfile.h>
#include <QtCore/qcoreapplication.h>
#include <QtGui/qcolor.h>
@@ -139,6 +143,58 @@ v8::Handle<v8::Value> gc(const v8::Arguments &args)
return v8::Undefined();
}
+v8::Handle<v8::Value> consoleError(const v8::Arguments &args)
+{
+ return console(Error, args);
+}
+
+v8::Handle<v8::Value> consoleLog(const v8::Arguments &args)
+{
+ //console.log
+ //console.debug
+ //print
+ return console(Log, args);
+}
+
+v8::Handle<v8::Value> consoleProfile(const v8::Arguments &args)
+{
+ //DeclarativeDebugTrace cannot handle nested profiling
+ //although v8 can handle several profiling at once,
+ //we do not allow that. Hence, we pass an empty(default) title
+ Q_UNUSED(args);
+ QString title;
+
+ if (QDeclarativeDebugTrace::startProfiling()) {
+ QV8ProfilerService::instance()->startProfiling(title);
+ qDebug("Profiling started.");
+ } else {
+ qWarning("Profiling is already in progress. First, end current profiling session.");
+ }
+
+ return v8::Undefined();
+}
+
+v8::Handle<v8::Value> consoleProfileEnd(const v8::Arguments &args)
+{
+ //DeclarativeDebugTrace cannot handle nested profiling
+ //although v8 can handle several profiling at once,
+ //we do not allow that. Hence, we pass an empty(default) title
+ Q_UNUSED(args);
+ QString title;
+
+ if (QDeclarativeDebugTrace::stopProfiling()) {
+ QV8ProfilerService *profiler = QV8ProfilerService::instance();
+ profiler->stopProfiling(title);
+ QDeclarativeDebugTrace::sendProfilingData();
+ profiler->sendProfilingData();
+ qDebug("Profiling ended.");
+ } else {
+ qWarning("Profiling was not started.");
+ }
+
+ return v8::Undefined();
+}
+
v8::Handle<v8::Value> consoleTime(const v8::Arguments &args)
{
if (args.Length() != 1)
@@ -161,12 +217,25 @@ v8::Handle<v8::Value> consoleTimeEnd(const v8::Arguments &args)
return v8::Undefined();
}
-v8::Handle<v8::Value> consoleLog(const v8::Arguments &args)
+v8::Handle<v8::Value> consoleTrace(const v8::Arguments &args)
{
- //console.log
- //console.debug
- //print
- return console(Log, args);
+ if (args.Length() != 0)
+ V8THROW_ERROR("console.trace(): Invalid arguments");
+
+ //The v8 default is currently 10 stack frames.
+ v8::Handle<v8::StackTrace> stackTrace =
+ v8::StackTrace::CurrentStackTrace(10, v8::StackTrace::kOverview);
+ int stackCount = stackTrace->GetFrameCount();
+
+ for (uint i = 0; i < stackCount; i++) {
+ v8::Local<v8::StackFrame> frame = stackTrace->GetFrame(i);
+ v8::String::Utf8Value func_name(frame->GetFunctionName());
+ v8::String::Utf8Value script_name(frame->GetScriptName());
+ int lineNumber = frame->GetLineNumber();
+ int columnNumber = frame->GetColumn();
+ qDebug("%s (%s:%d:%d)\n", *func_name, *script_name, lineNumber, columnNumber);
+ }
+ return v8::Undefined();
}
v8::Handle<v8::Value> consoleWarn(const v8::Arguments &args)
@@ -174,11 +243,6 @@ v8::Handle<v8::Value> consoleWarn(const v8::Arguments &args)
return console(Warn, args);
}
-v8::Handle<v8::Value> consoleError(const v8::Arguments &args)
-{
- return console(Error, args);
-}
-
v8::Handle<v8::Value> stringArg(const v8::Arguments &args)
{
QString value = V8ENGINE()->toString(args.This()->ToString());