Details
-
Epic
-
Resolution: Unresolved
-
Not Evaluated
-
None
-
None
-
Stable API for Runcontrol / Runworker
-
bd818c7f0 (11.0), 2cc496745 (master), 941c99c89 (master), e53bc1630 (master), a5ecc6207 (master), b196f5f03 (master), f9fb3f487 (master), 619c49958 (master), 382e003de (master), e75b81b0a (master), 9888e1982 (master), 4c8c793c0 (master), 5ee1f47d2 (16.0)
Description
RunControl, together with a number of dynamically created instances of RunWorker (45 different subclasses), is responsible for running user applications / profilers / debuggers, etc. The current implementation is error-prone with regards to the manual managing of the RunWorkers' lifetime, hidden dependencies between them, unexpected state transitions, and cumbersome data exchange between them.
The alternative design would be to use TaskTree as a replacement of RunControl, and operate on task tree recipes returned by relevant RunWorkerFactories instead on instances of RunWorker subclasses.
More details:
The request for "stable Qt Creator Plugin API" comes up regularly. We currently still need the freedom to change also core API, but for limited areas this seems in reach. This here is one of them.
The current API is sufficient for the current purposes and has not changed significantly since 2019, but it's not good enough to set in stone in its current shape.
We have (among others) two special kind of plugins, one set providing "platform" support (i.e. organize the actual of process on certain devices, possibly accessing the file system there - 'local', android, baremetal, ios, (remote)linux, docker, qnx, [webassembly, vxworks]) and "tool" support (input/output handling of certain 'tools' that can potentially run on different devices = 'normal application run', debugger (c++/qml/mixed - gdb/lldb/cdb), qmlprofiler, perf, profiler (memcheck, cachegrind),). The challenge here is to organize combination of those (i.e. "run a given tool on a certain plugin") without creating dependencies between the respective "platform plugin" and "tool plugins" (internally known as "The Matrix Problem" as the "obvious" solution to have specialized plugins for each combination does not scale).
With the current RunWorker system we have a partial solution to the Matrix problem, splitting the platform and tool parts into two workers, but setting up the right dependencies between them, especially when extra glue is needed (e.g. using PortGatherers to get free ports for comunication) it is pretty much ad hoc.
We should move the whole machinery to use uniformly TaskTree for dependency management and Aspects for data.
Attachments
Issue Links
- relates to
-
QTCREATORBUG-29337 New plugin/extension manager
-
- Open
-
-
QTCREATORBUG-31844 Redesign of RunControl / RunWorker
-
- Closed
-
Gerrit Reviews
For Gerrit Dashboard: QTCREATORBUG-29168 | ||||||
---|---|---|---|---|---|---|
# | Subject | Branch | Project | Status | CR | V |
636314,48 | Ios: Transform DeviceCtlRunner into recipe | master | qt-creator/qt-creator | Status: NEW | 0 | 0 |
637132,48 | Ios: Transform DeviceCtlPollingRunner into recipe | master | qt-creator/qt-creator | Status: NEW | 0 | 0 |
637228,42 | Ios: Introduce DebugInfo and pass it to IosRunner's c'tor | master | qt-creator/qt-creator | Status: NEW | 0 | 0 |
639334,10 | Ios: Make createWorker() a bit more readable | master | qt-creator/qt-creator | Status: NEW | 0 | 0 |
639818,9 | Ios: Get rid of gdbServerPort() getter | master | qt-creator/qt-creator | Status: NEW | 0 | 0 |
640068,5 | Transform VxWorksRunner into RecipeRunner | master | qt-creator/tqtc-plugin-vxworks | Status: NEW | 0 | 0 |
640273,8 | Ios: Get rid of IosRunner::isAppRunning() getter | master | qt-creator/qt-creator | Status: NEW | 0 | 0 |
605420,11 | QmlPreview: Remove RefreshTranslationWorker | master | qt-creator/qt-creator | Status: MERGED | +2 | +1 |
613244,2 | VxWorks: Get rid of empty RunWorker subclass | master | qt-creator/tqtc-plugin-vxworks | Status: ABANDONED | 0 | 0 |
616153,8 | Debugger: Transform DebuggerRunParameters::inferior | master | qt-creator/qt-creator | Status: MERGED | +2 | -1 |
616193,7 | Debugger: Transform DebuggerRunParameters::displayName | master | qt-creator/qt-creator | Status: MERGED | +2 | -1 |
616219,9 | Debugger: Transform DebuggerRunParameters::attachPid | master | qt-creator/qt-creator | Status: MERGED | +2 | +1 |
616223,11 | Debugger: Transform DebuggerRunParameters::solibSearchPath | master | qt-creator/qt-creator | Status: MERGED | +2 | +1 |
616226,11 | Debugger: Transform DebuggerRunParameters::qmlServer | master | qt-creator/qt-creator | Status: MERGED | +2 | 0 |
616230,11 | Debugger: Transform DebuggerRunParameters::remoteChannel | master | qt-creator/qt-creator | Status: MERGED | +2 | 0 |
616238,10 | Debugger: Transform DebuggerRunParameters::useExtendedRemote | master | qt-creator/qt-creator | Status: MERGED | +2 | 0 |
616259,5 | Debugger: Transform DebuggerRunParameters::symbolFile | master | qt-creator/qt-creator | Status: MERGED | +2 | 0 |
616266,4 | Debugger: Transform DebuggerRunParameters::sourcePathMap | master | qt-creator/qt-creator | Status: MERGED | +2 | 0 |
616269,4 | Debugger: Transform DebuggerRunParameters::commandsForReset | master | qt-creator/qt-creator | Status: MERGED | +2 | 0 |
616272,4 | Debugger: Transform DebuggerRunParameters::useContinueInsteadOfRun | master | qt-creator/qt-creator | Status: MERGED | +2 | 0 |
616274,5 | Debugger: Transform DebuggerRunParameters::commandsAfterConnect | master | qt-creator/qt-creator | Status: MERGED | +2 | 0 |
616276,5 | Debugger: Transform DebuggerRunParameters::expectedSignals | master | qt-creator/qt-creator | Status: MERGED | +2 | 0 |
616280,5 | Debugger: Transform DebuggerRunParameters::useCtrlCStub | master | qt-creator/qt-creator | Status: MERGED | +2 | 0 |
616282,5 | Debugger: Get rid of DebuggerRunParameters::skipExecutableValidation | master | qt-creator/qt-creator | Status: MERGED | +2 | 0 |
616283,4 | Debugger: Transform DebuggerRunParameters::useTargetAsync | master | qt-creator/qt-creator | Status: MERGED | +2 | 0 |
616286,4 | Debugger: Transform DebuggerRunParameters::additionalSearchDirectories | master | qt-creator/qt-creator | Status: MERGED | +2 | 0 |
616288,6 | Debugger: Transform DebuggerRunParameters::platform | master | qt-creator/qt-creator | Status: MERGED | +2 | 0 |
616289,6 | Debugger: Transform DebuggerRunParameters::deviceSymbolsRoot | master | qt-creator/qt-creator | Status: MERGED | +2 | 0 |
616291,6 | Debugger: Transform DebuggerRunParameters::continueAfterAttach | master | qt-creator/qt-creator | Status: MERGED | +2 | 0 |
616317,5 | Debugger: Transform DebuggerRunParameters::sysRoot | master | qt-creator/qt-creator | Status: MERGED | +2 | 0 |
616504,3 | Debugger: Transform DebuggerRunParameters::deviceUuid | master | qt-creator/qt-creator | Status: MERGED | +2 | 0 |
616506,3 | Debugger: Transform DebuggerRunParameters::coreFile | master | qt-creator/qt-creator | Status: MERGED | +2 | 0 |
616508,5 | Debugger: Transform DebuggerRunParameters::additionalStartupCommands | master | qt-creator/qt-creator | Status: MERGED | +2 | 0 |
616550,4 | Debugger: Transform DebuggerRunParameters::cppEngineType | master | qt-creator/qt-creator | Status: MERGED | +2 | 0 |
616553,2 | Debugger: Transform DebuggerRunParameters::version | master | qt-creator/qt-creator | Status: MERGED | +2 | 0 |
616566,3 | Debugger: Transform DebuggerRunParameters::isPythonDebugging | master | qt-creator/qt-creator | Status: MERGED | +2 | 0 |
616573,3 | Debugger: Transform DebuggerRunParameters::breakOnMain | master | qt-creator/qt-creator | Status: MERGED | +2 | 0 |
616592,2 | Debugger: Transform a few fields of DebuggerRunParameters | master | qt-creator/qt-creator | Status: MERGED | +2 | 0 |
616599,2 | Debugger: Transform DebuggerRunParameters::debugger | master | qt-creator/qt-creator | Status: MERGED | +2 | 0 |
616630,4 | Debugger: Transform a few fields of DebuggerRunParameters | master | qt-creator/qt-creator | Status: MERGED | +2 | +1 |
616658,4 | Debugger: Transform a few fields of DebuggerRunParameters | master | qt-creator/qt-creator | Status: MERGED | +2 | 0 |
616659,3 | Debugger: Transform DebuggerRunParameters::toolChainAbi | master | qt-creator/qt-creator | Status: MERGED | +2 | 0 |
616663,3 | Debugger: Transform a few fields of DebuggerRunParameters | master | qt-creator/qt-creator | Status: MERGED | +2 | +1 |
616664,3 | Debugger: Transform a few fields of DebuggerRunParameters | master | qt-creator/qt-creator | Status: MERGED | +2 | +1 |
616673,3 | Debugger: Transform a few fields of DebuggerRunParameters | master | qt-creator/qt-creator | Status: MERGED | +2 | 0 |
616681,3 | Debugger: Transform a few fields of DebuggerRunParameters | master | qt-creator/qt-creator | Status: MERGED | +2 | 0 |
616685,3 | Debugger: Transform a few fields of DebuggerRunParameters | master | qt-creator/qt-creator | Status: MERGED | +2 | 0 |
616686,3 | Debugger: Hide DebuggerRunParameters::m_validationErrors | master | qt-creator/qt-creator | Status: MERGED | +2 | 0 |
616687,3 | Debugger: Transform a few fields of DebuggerRunParameters | master | qt-creator/qt-creator | Status: MERGED | +2 | 0 |
616691,3 | Debugger: Transform remaining fields of DebuggerRunParameters | master | qt-creator/qt-creator | Status: MERGED | +2 | 0 |
616947,7 | RunWorker: Drop device() indirection | master | qt-creator/qt-creator | Status: MERGED | +2 | 0 |
617764,3 | RunWorker: Get rid of essential property | 16.0 | qt-creator/qt-creator | Status: MERGED | +2 | +1 |
626017,24 | ApplicationManager: Inline AppManagerDebugSupport | master | qt-creator/qt-creator | Status: MERGED | +2 | 0 |
626055,26 | Ios: Inline IosDebugSupport | master | qt-creator/qt-creator | Status: MERGED | +2 | 0 |
626060,23 | Android: Inline AndroidDebugSupport | master | qt-creator/qt-creator | Status: MERGED | +2 | 0 |
626067,26 | BareMetal: Inline BareMetalDebugSupport | master | qt-creator/qt-creator | Status: MERGED | +2 | 0 |
626069,27 | Debugger: Make DebuggerRunTool final | master | qt-creator/qt-creator | Status: MERGED | +2 | 0 |
626138,6 | ProjectExplorer: Introduce RecipeRunner | master | qt-creator/qt-creator | Status: MERGED | +2 | 0 |
626143,4 | QNX: Dismantle Slog2InfoRunner, employ RecipeRunner instead | master | qt-creator/qt-creator | Status: MERGED | +2 | 0 |
626368,6 | Debugger: Transform unpacking core file into recipe | master | qt-creator/qt-creator | Status: MERGED | +2 | 0 |
626373,9 | Debugger: Introduce GlueInterface | master | qt-creator/qt-creator | Status: MERGED | +2 | 0 |
626410,5 | Debugger: Transform terminal process into recipe | master | qt-creator/qt-creator | Status: MERGED | +2 | 0 |
626443,4 | Debugger: Transform continueAfterTerminalStart() into recipe | master | qt-creator/qt-creator | Status: MERGED | +2 | 0 |
626454,3 | Debugger: Transform debug server process into recipe | master | qt-creator/qt-creator | Status: MERGED | +2 | 0 |
628095,7 | Android: Use ports gatherer for debugger | master | qt-creator/qt-creator | Status: MERGED | +2 | 0 |
628838,4 | Debugger: Use postMessage instead of appendMessage | master | qt-creator/qt-creator | Status: MERGED | +2 | +1 |
628840,3 | ProcessRunner: Use postMessage instead of appendMessage | master | qt-creator/qt-creator | Status: MERGED | +2 | 0 |
628844,7 | RunWorker: Use postMessage instead of appendMessage | master | qt-creator/qt-creator | Status: MERGED | +2 | 0 |
628845,2 | Android: Inline private slots | master | qt-creator/qt-creator | Status: MERGED | +2 | 0 |
630980,20 | Debugger: Introduce createDebuggerWorker and reuse it | master | qt-creator/qt-creator | Status: MERGED | +2 | 0 |
632210,9 | QmlPreview: Remove QmlPreviewRunner signals | master | qt-creator/qt-creator | Status: MERGED | +2 | 0 |
632276,7 | QmlPreview: Get rid of QmlPreviewRunner | master | qt-creator/qt-creator | Status: MERGED | +2 | 0 |
632626,2 | Valgrind: Replace virtual method with setter | master | qt-creator/qt-creator | Status: MERGED | +2 | 0 |
632884,20 | Ios: Get rid of DeviceCtlRunnerBase::processIdentifier() | master | qt-creator/qt-creator | Status: MERGED | +2 | 0 |
632938,3 | Valgrind: Reuse RecipeRunner for Callgrind | master | qt-creator/qt-creator | Status: MERGED | +2 | 0 |
632942,19 | Ios: Dismantle IosQmlProfilerSupport | master | qt-creator/qt-creator | Status: MERGED | +2 | 0 |
633254,22 | Ios: Move part of debugger init code into construction phase | master | qt-creator/qt-creator | Status: MERGED | +2 | +1 |
633757,10 | QmlProfiler: Dismantle QmlProfilerRunner | master | qt-creator/qt-creator | Status: MERGED | +2 | 0 |
634041,28 | PerfProfiler: Transform PerfParserWorker into RecipeRunner | master | qt-creator/qt-creator | Status: MERGED | +2 | 0 |
634381,20 | PerfProfiler: Hide PerfParserWorker::reader() getter | master | qt-creator/qt-creator | Status: MERGED | +2 | 0 |
634567,22 | PerfProfiler: Remove downcast in PerfProfilerRunWorkerFactory | master | qt-creator/qt-creator | Status: MERGED | +2 | 0 |
634805,10 | Valgrind: Reuse RecipeRunner for Memcheck | master | qt-creator/qt-creator | Status: MERGED | +2 | 0 |
634860,10 | Valgrind: Get rid of ValgrindRunner | master | qt-creator/qt-creator | Status: MERGED | +2 | 0 |
635971,18 | Ios: Move m_processIdentifier from base class into subclass | master | qt-creator/qt-creator | Status: MERGED | +2 | 0 |
635995,23 | Ios: Move subtask creators out of runner class | master | qt-creator/qt-creator | Status: MERGED | +2 | 0 |
635997,25 | Ios: Get rid of m_arguments field | master | qt-creator/qt-creator | Status: MERGED | +2 | 0 |
637260,3 | ProcessRunner: Get rid of commandLine() getter | master | qt-creator/qt-creator | Status: MERGED | +2 | +1 |
637266,3 | ProcessRunner: Get rid of m_command field | master | qt-creator/qt-creator | Status: MERGED | +2 | +1 |
637267,3 | ProcessRunner: Get rid of m_environment field | master | qt-creator/qt-creator | Status: MERGED | +2 | +1 |
637268,2 | ProcessRunner: Get rid of m_workingDirectory field | master | qt-creator/qt-creator | Status: MERGED | +2 | +1 |
637478,4 | ProcessRunner: Modify start modifier signature | master | qt-creator/qt-creator | Status: MERGED | +2 | 0 |
637486,4 | ProcessRunner: Get rid of m_runAsRoot field | master | qt-creator/qt-creator | Status: MERGED | +2 | 0 |
637833,19 | ProcessRunner: Introduce processRecipe() | master | qt-creator/qt-creator | Status: MERGED | +2 | 0 |
637880,11 | Transform ProcessRunner into RecipeRunner | master | qt-creator/qt-creator | Status: MERGED | +2 | 0 |
638442,10 | ProjectExplorer: Get rid of ProcessRunner | master | qt-creator/qt-creator | Status: MERGED | +2 | 0 |
639831,3 | Debugger: Move setupPortsGatherer() into DebuggerRunParameters | master | qt-creator/qt-creator | Status: MERGED | +2 | 0 |
639872,2 | VxWorksRunner: Remove unused fields | master | qt-creator/tqtc-plugin-vxworks | Status: MERGED | +2 | 0 |
640351,7 | Debugger: Introduce debuggerRecipe() | master | qt-creator/qt-creator | Status: MERGED | +2 | 0 |
640358,5 | Debugger: Move sub-recipes outside of DebuggerRunToolPrivate | master | qt-creator/qt-creator | Status: MERGED | +2 | 0 |
640468,4 | Debugger: Get rid of DebuggerRunTool | master | qt-creator/qt-creator | Status: MERGED | +2 | 0 |