diff options
-rw-r--r-- | src/qml/compiler/qqmlirbuilder.cpp | 22 | ||||
-rw-r--r-- | src/qml/compiler/qv4compiler.cpp | 13 |
2 files changed, 34 insertions, 1 deletions
diff --git a/src/qml/compiler/qqmlirbuilder.cpp b/src/qml/compiler/qqmlirbuilder.cpp index 820f127331..04a7854d56 100644 --- a/src/qml/compiler/qqmlirbuilder.cpp +++ b/src/qml/compiler/qqmlirbuilder.cpp @@ -1758,6 +1758,28 @@ QV4::CompiledData::Unit *QmlUnitGenerator::generate(Document &output, const QV4: qmlUnit->generateChecksum(); + static const bool showStats = qEnvironmentVariableIsSet("QML_SHOW_UNIT_STATS"); + if (showStats) { + qDebug() << "Generated QML unit that is" << qmlUnit->unitSize << "bytes big contains:"; + qDebug() << " " << qmlUnit->functionTableSize << "functions"; + qDebug() << " " << unitSize << "for JS unit"; + qDebug() << " " << importSize << "for imports"; + qDebug() << " " << objectsSize << "for" << qmlUnit->nObjects << "objects"; + quint32 totalBindingCount = 0; + for (quint32 i = 0; i < qmlUnit->nObjects; ++i) + totalBindingCount += qmlUnit->objectAt(i)->nBindings; + qDebug() << " " << totalBindingCount << "bindings"; + quint32 totalCodeSize = 0; + for (quint32 i = 0; i < qmlUnit->functionTableSize; ++i) + totalCodeSize += qmlUnit->functionAt(i)->codeSize; + qDebug() << " " << totalCodeSize << "bytes total byte code"; + qDebug() << " " << qmlUnit->stringTableSize << "strings"; + quint32 totalStringSize = 0; + for (quint32 i = 0; i < qmlUnit->stringTableSize; ++i) + totalStringSize += QV4::CompiledData::String::calculateSize(qmlUnit->stringAt(i)); + qDebug() << " " << totalStringSize << "bytes total strings"; + } + return qmlUnit; } diff --git a/src/qml/compiler/qv4compiler.cpp b/src/qml/compiler/qv4compiler.cpp index 76779fece8..8a61333315 100644 --- a/src/qml/compiler/qv4compiler.cpp +++ b/src/qml/compiler/qv4compiler.cpp @@ -521,15 +521,20 @@ QV4::CompiledData::Unit QV4::Compiler::JSUnitGenerator::generateHeader(QV4::Comp nextOffset = (nextOffset + 7) & ~quint32(0x7); + quint32 functionSize = 0; + for (int i = 0; i < module->functions.size(); ++i) { Context *f = module->functions.at(i); blockAndFunctionOffsets[i] = nextOffset; const int qmlIdDepsCount = f->idObjectDependencies.count(); const int qmlPropertyDepsCount = f->scopeObjectPropertyDependencies.count() + f->contextObjectPropertyDependencies.count(); - nextOffset += QV4::CompiledData::Function::calculateSize(f->arguments.size(), f->locals.size(), f->lineNumberMapping.size(), f->nestedContexts.size(), + quint32 size = QV4::CompiledData::Function::calculateSize(f->arguments.size(), f->locals.size(), f->lineNumberMapping.size(), f->nestedContexts.size(), qmlIdDepsCount, qmlPropertyDepsCount, f->code.size()); + functionSize += size - f->code.size(); + nextOffset += size; } + blockAndFunctionOffsets += module->functions.size(); for (int i = 0; i < module->classes.size(); ++i) { @@ -566,5 +571,11 @@ QV4::CompiledData::Unit QV4::Compiler::JSUnitGenerator::generateHeader(QV4::Comp unit.unitSize = nextOffset; + static const bool showStats = qEnvironmentVariableIsSet("QML_SHOW_UNIT_STATS"); + if (showStats) { + qDebug() << "Generated JS unit that is" << unit.unitSize << "bytes contains:"; + qDebug() << " " << functionSize << "bytes for non-code function data for" << unit.functionTableSize << "functions"; + } + return unit; } |