forked from qt-creator/qt-creator
Merge remote-tracking branch 'origin/13.0' into 14.0
Conflicts: tests/auto/debugger/tst_dumpers.cpp Change-Id: I71bfee426a3e25ab7c7cd276ffe1e7d8fe550ffe
This commit is contained in:
@@ -7,6 +7,7 @@ import sys
|
|||||||
import cdbext
|
import cdbext
|
||||||
import re
|
import re
|
||||||
import threading
|
import threading
|
||||||
|
import time
|
||||||
from utils import TypeCode
|
from utils import TypeCode
|
||||||
|
|
||||||
sys.path.insert(1, os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe()))))
|
sys.path.insert(1, os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe()))))
|
||||||
@@ -421,6 +422,7 @@ class Dumper(DumperBase):
|
|||||||
return ptr
|
return ptr
|
||||||
|
|
||||||
def fetchVariables(self, args):
|
def fetchVariables(self, args):
|
||||||
|
start_time = time.perf_counter()
|
||||||
self.resetStats()
|
self.resetStats()
|
||||||
(ok, res) = self.tryFetchInterpreterVariables(args)
|
(ok, res) = self.tryFetchInterpreterVariables(args)
|
||||||
if ok:
|
if ok:
|
||||||
@@ -458,6 +460,8 @@ class Dumper(DumperBase):
|
|||||||
self.put(',qtnamespace="%s"' % self.qtNamespaceToReport)
|
self.put(',qtnamespace="%s"' % self.qtNamespaceToReport)
|
||||||
self.qtNamespaceToReport = None
|
self.qtNamespaceToReport = None
|
||||||
|
|
||||||
|
runtime = time.perf_counter() - start_time
|
||||||
|
self.put(',runtime="%s"' % runtime)
|
||||||
self.reportResult(''.join(self.output), args)
|
self.reportResult(''.join(self.output), args)
|
||||||
self.output = []
|
self.output = []
|
||||||
|
|
||||||
|
@@ -210,9 +210,11 @@ static CMakeBuildTarget toBuildTarget(const TargetDetails &t,
|
|||||||
const FilePath &sourceDirectory,
|
const FilePath &sourceDirectory,
|
||||||
const FilePath &buildDirectory,
|
const FilePath &buildDirectory,
|
||||||
bool relativeLibs,
|
bool relativeLibs,
|
||||||
const QSet<FilePath> &artifacts)
|
const QSet<FilePath> &sharedLibraryArtifacts)
|
||||||
{
|
{
|
||||||
const FilePath currentBuildDir = buildDirectory.resolvePath(t.buildDir);
|
const FilePath currentBuildDir = buildDirectory.resolvePath(t.buildDir);
|
||||||
|
const QSet<FilePath> sharedLibraryArtifactsPaths
|
||||||
|
= transform(sharedLibraryArtifacts, &FilePath::parentDir);
|
||||||
|
|
||||||
CMakeBuildTarget ct;
|
CMakeBuildTarget ct;
|
||||||
ct.title = t.name;
|
ct.title = t.name;
|
||||||
@@ -306,7 +308,6 @@ static CMakeBuildTarget toBuildTarget(const TargetDetails &t,
|
|||||||
if (f.role == "libraries")
|
if (f.role == "libraries")
|
||||||
tmp = tmp.parentDir();
|
tmp = tmp.parentDir();
|
||||||
|
|
||||||
std::optional<QString> dllName;
|
|
||||||
if (buildDir.osType() == OsTypeWindows && (f.role == "libraries")) {
|
if (buildDir.osType() == OsTypeWindows && (f.role == "libraries")) {
|
||||||
const auto partAsFilePath = FilePath::fromUserInput(part);
|
const auto partAsFilePath = FilePath::fromUserInput(part);
|
||||||
part = partAsFilePath.fileName();
|
part = partAsFilePath.fileName();
|
||||||
@@ -314,24 +315,6 @@ static CMakeBuildTarget toBuildTarget(const TargetDetails &t,
|
|||||||
// Skip object libraries on Windows. This case can happen with static qml plugins
|
// Skip object libraries on Windows. This case can happen with static qml plugins
|
||||||
if (part.endsWith(".obj") || part.endsWith(".o"))
|
if (part.endsWith(".obj") || part.endsWith(".o"))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
// Only consider dlls, not static libraries
|
|
||||||
for (const QString &suffix :
|
|
||||||
{QString(".lib"), QString(".dll.a"), QString(".a")}) {
|
|
||||||
if (part.endsWith(suffix) && !dllName)
|
|
||||||
dllName = part.chopped(suffix.length()).append(".dll");
|
|
||||||
}
|
|
||||||
|
|
||||||
// MinGW has libQt6Core.a -> Qt6Core.dll
|
|
||||||
// but libFoo.dll.a was already handled above
|
|
||||||
const QString mingwPrefix("lib");
|
|
||||||
const QString mingwSuffix("a");
|
|
||||||
const QString completeSuffix = partAsFilePath.completeSuffix();
|
|
||||||
if (part.startsWith(mingwPrefix) && completeSuffix == mingwSuffix) {
|
|
||||||
dllName = part.chopped(mingwSuffix.length() + 1/*the '.'*/)
|
|
||||||
.sliced(mingwPrefix.length())
|
|
||||||
.append(".dll");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!tmp.isEmpty() && tmp.isDir()) {
|
if (!tmp.isEmpty() && tmp.isDir()) {
|
||||||
@@ -345,18 +328,15 @@ static CMakeBuildTarget toBuildTarget(const TargetDetails &t,
|
|||||||
{"/lib", "/lib64", "/usr/lib", "/usr/lib64", "/usr/local/lib"}))
|
{"/lib", "/lib64", "/usr/lib", "/usr/lib64", "/usr/local/lib"}))
|
||||||
librarySeachPaths.append(tmp);
|
librarySeachPaths.append(tmp);
|
||||||
|
|
||||||
if (buildDir.osType() == OsTypeWindows && dllName) {
|
if (buildDir.osType() == OsTypeWindows) {
|
||||||
const auto validPath = [&artifacts](const FilePath& path) {
|
if (sharedLibraryArtifactsPaths.contains(tmp))
|
||||||
return path.exists() || artifacts.contains(path);
|
|
||||||
};
|
|
||||||
if (validPath(tmp.pathAppended(*dllName)))
|
|
||||||
librarySeachPaths.append(tmp);
|
librarySeachPaths.append(tmp);
|
||||||
|
|
||||||
// Libraries often have their import libs in ../lib and the
|
// Libraries often have their import libs in ../lib and the
|
||||||
// actual dll files in ../bin on windows. Qt is one example of that.
|
// actual dll files in ../bin on windows. Qt is one example of that.
|
||||||
if (tmp.fileName() == "lib") {
|
if (tmp.fileName() == "lib") {
|
||||||
const FilePath path = tmp.parentDir().pathAppended("bin");
|
const FilePath path = tmp.parentDir().pathAppended("bin");
|
||||||
if (path.isDir() && validPath(path.pathAppended(*dllName)))
|
if (path.isDir())
|
||||||
librarySeachPaths.append(path);
|
librarySeachPaths.append(path);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -375,17 +355,19 @@ static QList<CMakeBuildTarget> generateBuildTargets(const QFuture<void> &cancelF
|
|||||||
const FilePath &buildDirectory,
|
const FilePath &buildDirectory,
|
||||||
bool relativeLibs)
|
bool relativeLibs)
|
||||||
{
|
{
|
||||||
QSet<FilePath> artifacts;
|
QSet<FilePath> sharedLibraryArtifacts;
|
||||||
for (const TargetDetails &t : input.targetDetails)
|
for (const TargetDetails &t : input.targetDetails)
|
||||||
|
if (t.type == "MODULE_LIBRARY" || t.type == "SHARED_LIBRARY")
|
||||||
for (const FilePath &p : t.artifacts)
|
for (const FilePath &p : t.artifacts)
|
||||||
artifacts.insert(buildDirectory.resolvePath(p));
|
sharedLibraryArtifacts.insert(buildDirectory.resolvePath(p));
|
||||||
|
|
||||||
QList<CMakeBuildTarget> result;
|
QList<CMakeBuildTarget> result;
|
||||||
result.reserve(input.targetDetails.size());
|
result.reserve(input.targetDetails.size());
|
||||||
for (const TargetDetails &t : input.targetDetails) {
|
for (const TargetDetails &t : input.targetDetails) {
|
||||||
if (cancelFuture.isCanceled())
|
if (cancelFuture.isCanceled())
|
||||||
return {};
|
return {};
|
||||||
result.append(toBuildTarget(t, sourceDirectory, buildDirectory, relativeLibs, artifacts));
|
result.append(
|
||||||
|
toBuildTarget(t, sourceDirectory, buildDirectory, relativeLibs, sharedLibraryArtifacts));
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
@@ -1949,6 +1949,9 @@ void tst_Dumpers::dumper()
|
|||||||
} while (localsBeginPos != -1);
|
} while (localsBeginPos != -1);
|
||||||
actual.fromString(QString::fromLocal8Bit(contents));
|
actual.fromString(QString::fromLocal8Bit(contents));
|
||||||
context.nameSpace = actual["result"]["qtnamespace"].data();
|
context.nameSpace = actual["result"]["qtnamespace"].data();
|
||||||
|
int runtime = actual["result"]["runtime"].data().toFloat() * 1000;
|
||||||
|
qCDebug(lcDumpers, "CaseInner: %5d", runtime);
|
||||||
|
m_totalInnerTime += runtime;
|
||||||
actual = actual["result"]["data"];
|
actual = actual["result"]["data"];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user