if (!arr)
return;
+ m_array.reserve(arr->values.size());
for (int i = 0; i < arr->values.size(); ++i) {
VariantVisitor vis;
arr->values[i]->visit(vis);
return m_framebuffers;
}
+ApiTraceCallSignature::ApiTraceCallSignature(const QString &name,
+ const QStringList &argNames)
+ : m_name(name),
+ m_argNames(argNames)
+{
+}
+
+ApiTraceCallSignature::~ApiTraceCallSignature()
+{
+}
+
+QUrl ApiTraceCallSignature::helpUrl() const
+{
+ return m_helpUrl;
+}
+
+void ApiTraceCallSignature::setHelpUrl(const QUrl &url)
+{
+ m_helpUrl = url;
+}
+
ApiTraceEvent::ApiTraceEvent()
: m_type(ApiTraceEvent::None),
+ m_hasBinaryData(false),
+ m_binaryDataIndex(0),
+ m_state(0),
m_staticText(0)
{
}
ApiTraceEvent::ApiTraceEvent(Type t)
: m_type(t),
+ m_hasBinaryData(false),
+ m_binaryDataIndex(0),
+ m_state(0),
m_staticText(0)
{
}
ApiTraceEvent::~ApiTraceEvent()
{
+ delete m_state;
delete m_staticText;
}
QVariantMap ApiTraceEvent::stateParameters() const
{
- return m_state.parameters();
+ if (m_state) {
+ return m_state->parameters();
+ } else {
+ return QVariantMap();
+ }
}
-ApiTraceState ApiTraceEvent::state() const
+ApiTraceState *ApiTraceEvent::state() const
{
return m_state;
}
-void ApiTraceEvent::setState(const ApiTraceState &state)
+void ApiTraceEvent::setState(ApiTraceState *state)
{
m_state = state;
}
-
-ApiTraceCall::ApiTraceCall()
+ApiTraceCall::ApiTraceCall(ApiTraceFrame *parentFrame, const Trace::Call *call)
: ApiTraceEvent(ApiTraceEvent::Call),
- m_hasBinaryData(false),
- m_binaryDataIndex(0)
+ m_parentFrame(parentFrame)
{
-}
+ ApiTrace *trace = parentTrace();
+ Q_ASSERT(trace);
-ApiTraceCall::ApiTraceCall(const Trace::Call *call)
- : ApiTraceEvent(ApiTraceEvent::Call),
- m_hasBinaryData(false),
- m_binaryDataIndex(0)
-{
- m_name = QString::fromStdString(call->sig->name);
m_index = call->no;
- QString argumentsText;
- for (int i = 0; i < call->sig->num_args; ++i) {
- m_argNames +=
- QString::fromStdString(call->sig->arg_names[i]);
+ m_signature = trace->signature(call->sig->id);
+
+ if (!m_signature) {
+ QString name = QString::fromStdString(call->sig->name);
+ QStringList argNames;
+ argNames.reserve(call->sig->num_args);
+ for (int i = 0; i < call->sig->num_args; ++i) {
+ argNames += QString::fromStdString(call->sig->arg_names[i]);
+ }
+ m_signature = new ApiTraceCallSignature(name, argNames);
+ trace->addSignature(call->sig->id, m_signature);
}
if (call->ret) {
VariantVisitor retVisitor;
call->ret->visit(retVisitor);
m_returnValue = retVisitor.variant();
}
+ m_argValues.reserve(call->args.size());
for (int i = 0; i < call->args.size(); ++i) {
VariantVisitor argVisitor;
call->args[i]->visit(argVisitor);
- m_argValues += argVisitor.variant();
+ m_argValues.append(argVisitor.variant());
if (m_argValues[i].type() == QVariant::ByteArray) {
m_hasBinaryData = true;
m_binaryDataIndex = i;
m_editedValues = lst;
//lets regenerate data
m_richText = QString();
- m_filterText = QString();
+ m_searchText = QString();
delete m_staticText;
m_staticText = 0;
void ApiTraceCall::setHelpUrl(const QUrl &url)
{
- m_helpUrl = url;
+ m_signature->setHelpUrl(url);
}
void ApiTraceCall::setParentFrame(ApiTraceFrame *frame)
QString ApiTraceCall::name() const
{
- return m_name;
+ return m_signature->name();
}
QStringList ApiTraceCall::argNames() const
{
- return m_argNames;
+ return m_signature->argNames();
}
QVariantList ApiTraceCall::arguments() const
QUrl ApiTraceCall::helpUrl() const
{
- return m_helpUrl;
+ return m_signature->helpUrl();
}
bool ApiTraceCall::hasBinaryData() const
QVariantList argValues = arguments();
QString richText = QString::fromLatin1(
- "<span style=\"font-weight:bold\">%1</span>(").arg(m_name);
- for (int i = 0; i < m_argNames.count(); ++i) {
+ "<span style=\"font-weight:bold\">%1</span>(").arg(
+ m_signature->name());
+ QStringList argNames = m_signature->argNames();
+ for (int i = 0; i < argNames.count(); ++i) {
richText += QLatin1String("<span style=\"color:#0000ff\">");
QString argText = apiVariantToString(argValues[i]);
richText += argText;
}
richText += QLatin1String("</span>");
- if (i < m_argNames.count() - 1)
+ if (i < argNames.count() - 1)
richText += QLatin1String(", ");
}
richText += QLatin1String(")");
m_richText = QLatin1String("<div class=\"call\">");
- if (m_helpUrl.isEmpty()) {
+ QUrl helpUrl = m_signature->helpUrl();
+ if (helpUrl.isEmpty()) {
m_richText += QString::fromLatin1(
"%1) <span class=\"callName\">%2</span>(")
.arg(m_index)
- .arg(m_name);
+ .arg(m_signature->name());
} else {
m_richText += QString::fromLatin1(
"%1) <span class=\"callName\"><a href=\"%2\">%3</a></span>(")
.arg(m_index)
- .arg(m_helpUrl.toString())
- .arg(m_name);
+ .arg(helpUrl.toString())
+ .arg(m_signature->name());
}
QVariantList argValues = arguments();
- for (int i = 0; i < m_argNames.count(); ++i) {
+ QStringList argNames = m_signature->argNames();
+ for (int i = 0; i < argNames.count(); ++i) {
m_richText +=
QLatin1String("<span class=\"arg-name\">") +
- m_argNames[i] +
+ argNames[i] +
QLatin1String("</span>") +
QLatin1Literal(" = ") +
QLatin1Literal("<span class=\"arg-value\">") +
apiVariantToString(argValues[i], true) +
QLatin1Literal("</span>");
- if (i < m_argNames.count() - 1)
+ if (i < argNames.count() - 1)
m_richText += QLatin1String(", ");
}
m_richText += QLatin1String(")");
return m_richText;
}
-QString ApiTraceCall::filterText() const
+QString ApiTraceCall::searchText() const
{
- if (!m_filterText.isEmpty())
- return m_filterText;
+ if (!m_searchText.isEmpty())
+ return m_searchText;
QVariantList argValues = arguments();
- m_filterText = m_name + QLatin1Literal("(");
- for (int i = 0; i < m_argNames.count(); ++i) {
- m_filterText += m_argNames[i] +
+ m_searchText = m_signature->name() + QLatin1Literal("(");
+ QStringList argNames = m_signature->argNames();
+ for (int i = 0; i < argNames.count(); ++i) {
+ m_searchText += argNames[i] +
QLatin1Literal(" = ") +
apiVariantToString(argValues[i]);
- if (i < m_argNames.count() - 1)
- m_filterText += QLatin1String(", ");
+ if (i < argNames.count() - 1)
+ m_searchText += QLatin1String(", ");
}
- m_filterText += QLatin1String(")");
+ m_searchText += QLatin1String(")");
if (m_returnValue.isValid()) {
- m_filterText += QLatin1Literal(" = ") +
+ m_searchText += QLatin1Literal(" = ") +
apiVariantToString(m_returnValue);
}
- m_filterText.squeeze();
- return m_filterText;
+ m_searchText.squeeze();
+ return m_searchText;
}
int ApiTraceCall::numChildren() const
return 0;
}
-ApiTraceFrame::ApiTraceFrame()
+ApiTraceFrame::ApiTraceFrame(ApiTrace *parentTrace)
: ApiTraceEvent(ApiTraceEvent::Frame),
- m_parentTrace(0),
+ m_parentTrace(parentTrace),
m_binaryDataSize(0)
{
}
return m_parentTrace;
}
-void ApiTraceFrame::setParentTrace(ApiTrace *trace)
-{
- m_parentTrace = trace;
-}
-
void ApiTraceFrame::addCall(ApiTraceCall *call)
{
m_calls.append(call);