#include "trace_model.hpp"
#include <QDebug>
+#include <QLocale>
#include <QObject>
#define QT_USE_FAST_OPERATOR_PLUS
#include <QStringBuilder>
return;
m_value = bitmask->value;
- for (Trace::Bitmask::Signature::const_iterator it = bitmask->sig->begin();
- it != bitmask->sig->end(); ++it) {
- assert(it->second);
+ for (const Trace::BitmaskFlag *it = bitmask->sig->flags;
+ it != bitmask->sig->flags + bitmask->sig->num_flags; ++it) {
+ assert(it->value);
QPair<QString, unsigned long long> pair;
- pair.first = QString::fromStdString(it->first);
- pair.second = it->second;
+ pair.first = QString::fromStdString(it->name);
+ pair.second = it->value;
m_sig.append(pair);
}
return;
m_sig.name = QString::fromStdString(s->sig->name);
- for (unsigned i = 0; i < s->members.size(); ++i) {
+ for (unsigned i = 0; i < s->sig->num_members; ++i) {
VariantVisitor vis;
m_sig.memberNames.append(
QString::fromStdString(s->sig->member_names[i]));
void VariantVisitor::visit(Trace::Enum *e)
{
- VariantVisitor vis;
- e->sig->second->visit(vis);
-
- QVariant val = vis.variant();
+ QVariant val = QVariant(e->sig->value);
m_variant = QVariant::fromValue(
- ApiEnum(QString::fromStdString(e->sig->first), val));
+ ApiEnum(QString::fromStdString(e->sig->name), val));
}
void VariantVisitor::visit(Trace::Bitmask *bitmask)
if (m_staticText && !m_staticText->text().isEmpty())
return *m_staticText;
- QString richText =
- QString::fromLatin1("<span style=\"font-weight:bold\">Frame %1</span>").arg(number);
+ QString richText;
+
+ //mark the frame if it uploads more than a meg a frame
+ if (m_binaryDataSize > (1024*1024)) {
+ richText =
+ QObject::tr(
+ "<span style=\"font-weight:bold;\">"
+ "Frame %1</span>"
+ "<span style=\"font-style:italic;\">"
+ " (%2MB)</span>")
+ .arg(number)
+ .arg(double(m_binaryDataSize / (1024.*1024.)), 0, 'g', 2);
+ } else {
+ richText =
+ QObject::tr(
+ "<span style=\"font-weight:bold\">Frame %1</span>")
+ .arg(number);
+ }
if (!m_staticText)
m_staticText = new QStaticText(richText);
int ApiTraceFrame::numChildren() const
{
- return calls.count();
+ return m_calls.count();
}
ApiTraceFrame::ApiTraceFrame()
: ApiTraceEvent(ApiTraceEvent::Frame),
- m_parentTrace(0)
+ m_parentTrace(0),
+ m_binaryDataSize(0)
{
}
m_shaderSources[type] = source;
}
- QVariantList textureUnits =
- parsedJson[QLatin1String("textures")].toList();
- for (int i = 0; i < textureUnits.count(); ++i) {
- QVariantMap unit = textureUnits[i].toMap();
- for (itr = unit.constBegin(); itr != unit.constEnd(); ++itr) {
- QVariantMap target = itr.value().toMap();
- if (target.count()) {
- QVariantList levels = target[QLatin1String("levels")].toList();
- for (int j = 0; j < levels.count(); ++j) {
- QVariantMap level = levels[j].toMap();
- QVariantMap image = level[QLatin1String("image")].toMap();
- QSize size(image[QLatin1String("__width__")].toInt(),
- image[QLatin1String("__height__")].toInt());
- QString cls = image[QLatin1String("__class__")].toString();
- QString type = image[QLatin1String("__type__")].toString();
- bool normalized =
- image[QLatin1String("__normalized__")].toBool();
- int numChannels =
- image[QLatin1String("__channels__")].toInt();
-
- Q_ASSERT(type == QLatin1String("uint8"));
- Q_ASSERT(normalized == true);
-
- QByteArray dataArray =
- image[QLatin1String("__data__")].toByteArray();
-
- ApiTexture tex;
- tex.setSize(size);
- tex.setNumChannels(numChannels);
- tex.setLevel(j);
- tex.setUnit(i);
- tex.setTarget(itr.key());
- tex.contentsFromBase64(dataArray);
-
- m_textures.append(tex);
- }
- }
- }
+ m_uniforms = parsedJson[QLatin1String("uniforms")].toMap();
+
+ QVariantMap textures =
+ parsedJson[QLatin1String("textures")].toMap();
+ for (itr = textures.constBegin(); itr != textures.constEnd(); ++itr) {
+ QVariantMap image = itr.value().toMap();
+ QSize size(image[QLatin1String("__width__")].toInt(),
+ image[QLatin1String("__height__")].toInt());
+ QString cls = image[QLatin1String("__class__")].toString();
+ QString type = image[QLatin1String("__type__")].toString();
+ bool normalized =
+ image[QLatin1String("__normalized__")].toBool();
+ int numChannels =
+ image[QLatin1String("__channels__")].toInt();
+
+ Q_ASSERT(type == QLatin1String("uint8"));
+ Q_ASSERT(normalized == true);
+
+ QByteArray dataArray =
+ image[QLatin1String("__data__")].toByteArray();
+
+ ApiTexture tex;
+ tex.setSize(size);
+ tex.setNumChannels(numChannels);
+ tex.setLabel(itr.key());
+ tex.contentsFromBase64(dataArray);
+
+ m_textures.append(tex);
}
QVariantMap fbos =
}
}
-QVariantMap ApiTraceState::parameters() const
+const QVariantMap & ApiTraceState::parameters() const
{
return m_parameters;
}
-QMap<QString, QString> ApiTraceState::shaderSources() const
+const QMap<QString, QString> & ApiTraceState::shaderSources() const
{
return m_shaderSources;
}
+const QVariantMap & ApiTraceState::uniforms() const
+{
+ return m_uniforms;
+}
+
bool ApiTraceState::isEmpty() const
{
return m_parameters.isEmpty();
}
-QList<ApiTexture> ApiTraceState::textures() const
+const QList<ApiTexture> & ApiTraceState::textures() const
{
return m_textures;
}
-QList<ApiFramebuffer> ApiTraceState::framebuffers() const
+const QList<ApiFramebuffer> & ApiTraceState::framebuffers() const
{
return m_framebuffers;
}
m_index = call->no;
QString argumentsText;
- for (int i = 0; i < call->sig->arg_names.size(); ++i) {
+ for (int i = 0; i < call->sig->num_args; ++i) {
m_argNames +=
QString::fromStdString(call->sig->arg_names[i]);
}
return NULL;
}
+void ApiTraceFrame::addCall(ApiTraceCall *call)
+{
+ m_calls.append(call);
+ if (call->hasBinaryData()) {
+ QByteArray data =
+ call->arguments()[call->binaryDataIndex()].toByteArray();
+ m_binaryDataSize += data.size();
+ }
+}
+
+QList<ApiTraceCall*> ApiTraceFrame::calls() const
+{
+ return m_calls;
+}
+
+ApiTraceCall * ApiTraceFrame::call(int idx) const
+{
+ return m_calls.value(idx);
+}
+
+int ApiTraceFrame::callIndex(ApiTraceCall *call) const
+{
+ return m_calls.indexOf(call);
+}
+
+bool ApiTraceFrame::isEmpty() const
+{
+ return m_calls.isEmpty();
+}
+
+int ApiTraceFrame::binaryDataSize() const
+{
+ return m_binaryDataSize;
+}
+