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)
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 |
605420,8 | QmlPreview: Remove RefreshTranslationWorker | master | qt-creator/qt-creator | Status: NEW | -2 | 0 |
605776,17 | Ios: Move part of start setup into IosDebugSupport's c'tor | master | qt-creator/qt-creator | Status: NEW | +2 | 0 |
481267,9 | ProjectExplorer: Inline mapFromBuildDeviceToGlobalPath | 11.0 | qt-creator/qt-creator | Status: MERGED | +2 | 0 |
488722,9 | ProjectExplorer: Replace unusual ExecutableAspect constructor | master | qt-creator/qt-creator | Status: MERGED | +2 | 0 |
488738,7 | AutoTools: Use direct aspect registration in AutoreconfStep | master | qt-creator/qt-creator | Status: MERGED | +2 | 0 |
488739,8 | ProjectExplorer: Use direct aspect registration in ProcessStep | master | qt-creator/qt-creator | Status: MERGED | +2 | 0 |
488740,7 | Boot2Qt: Use direct aspect registration in QdbMakeDefaultAppStep | master | qt-creator/qt-creator | Status: MERGED | +2 | 0 |
489432,11 | RunControl: Integrate alternative task tree mode | master | qt-creator/qt-creator | Status: MERGED | +2 | 0 |
489683,17 | ProjectExplorer: Use aspects more directly in desktop runconfigs | master | qt-creator/qt-creator | Status: MERGED | +2 | 0 |
489690,18 | Haskell: Use aspects more directly in HaskellRunConfiguration | master | qt-creator/qt-creator | Status: MERGED | +2 | 0 |
489692,16 | BareMetal: Use aspects more directly in run configurations | master | qt-creator/qt-creator | Status: MERGED | +2 | 0 |
489695,17 | Nim: Use aspects more directly in nimble related runconfigs | master | qt-creator/qt-creator | Status: MERGED | -1 | 0 |
489701,25 | ClangTool: Transform ClangToolRunWorker into runRecipe | master | qt-creator/qt-creator | Status: MERGED | -1 | 0 |
489757,15 | Autotools: Use string aspect directly in configure step | master | qt-creator/qt-creator | Status: MERGED | +2 | 0 |
489759,16 | Nim: Use arguments aspect directly in NimbleBuildStep | master | qt-creator/qt-creator | Status: MERGED | +2 | 0 |
489762,5 | ProjectExplorer: Add a some convenience *Aspect::operator()() | master | qt-creator/qt-creator | Status: MERGED | +2 | 0 |
489844,5 | ClangTools: Get rid of ClangToolRunWorker | master | qt-creator/qt-creator | Status: MERGED | -1 | 0 |
489892,11 | QtSupport: Use current aspect ctor pattern for Qml related aspect | master | qt-creator/qt-creator | Status: MERGED | +2 | 0 |
490717,14 | AbstractProcessStep: De-virtualize finish() method | master | qt-creator/qt-creator | Status: MERGED | +2 | 0 |
490718,12 | AbstractProcessStep: Pass reference to the setupProcess() | master | qt-creator/qt-creator | Status: MERGED | +2 | 0 |
490720,9 | AbstractProcessStep: Make checkWorkingDirectory a part of setupProcess | master | qt-creator/qt-creator | Status: MERGED | +2 | 0 |
490741,10 | AbstractProcessStep: Make isExecutableFile check a part of setupProcess | master | qt-creator/qt-creator | Status: MERGED | +2 | 0 |
490748,15 | CMakeBuildStep: Employ task tree for running | master | qt-creator/qt-creator | Status: MERGED | +2 | 0 |
490753,10 | AbstractProcessStep: Introduce defaultProcessTask() | master | qt-creator/qt-creator | Status: MERGED | +2 | 0 |
490801,15 | QMakeStep: Enclose all setup inside the recipe | master | qt-creator/qt-creator | Status: MERGED | +2 | 0 |
490808,17 | AndroidBuildApkStep: Employ task tree for running | master | qt-creator/qt-creator | Status: MERGED | +2 | 0 |
490875,15 | AndroidPackageInstallationStep: Employ task tree for running | master | qt-creator/qt-creator | Status: MERGED | +2 | 0 |
490876,11 | AutogenStep: Employ task tree for running | master | qt-creator/qt-creator | Status: MERGED | +2 | 0 |
490877,11 | AutoreconfStep: Employ task tree for running | master | qt-creator/qt-creator | Status: MERGED | +2 | 0 |
490880,11 | ConfigureStep: Employ task tree for running | master | qt-creator/qt-creator | Status: MERGED | +2 | 0 |
490882,18 | MakeInstallStep: Employ task tree for running | master | qt-creator/qt-creator | Status: MERGED | +2 | 0 |
490883,12 | QmakeMakeStep: Employ task tree for running | master | qt-creator/qt-creator | Status: MERGED | +2 | 0 |
490884,17 | PySideBuildStep: Employ task tree for running | master | qt-creator/qt-creator | Status: MERGED | +2 | 0 |
490886,17 | AbstractProcessStep: Get rid of done hook | master | qt-creator/qt-creator | Status: MERGED | -1 | 0 |
490890,22 | AbstractProcessStep: Use task tree for all subclasses | master | qt-creator/qt-creator | Status: MERGED | +2 | 0 |
490927,18 | AbstractRemoteLinuxDeployStep: Refactor tree error handling | master | qt-creator/qt-creator | Status: MERGED | +2 | 0 |
490982,16 | BuildStep: Make it possible to run with task tree | master | qt-creator/qt-creator | Status: MERGED | +2 | 0 |
490983,17 | AndroidDeployQtStep: Employ task tree for running | master | qt-creator/qt-creator | Status: MERGED | +2 | 0 |
490984,15 | CopyStepBase: Employ task tree for running | master | qt-creator/qt-creator | Status: MERGED | +2 | 0 |
490985,17 | DeviceCheckBuildStep: Employ task tree for running | master | qt-creator/qt-creator | Status: MERGED | +2 | 0 |
490986,17 | NimCompilerCleanStep: Employ task tree for running | master | qt-creator/qt-creator | Status: MERGED | +2 | 0 |
490988,18 | TarPackageCreationStep: Employ task tree for running | master | qt-creator/qt-creator | Status: MERGED | -1 | 0 |
491256,14 | IosDeployStep: Employ task tree for running | master | qt-creator/qt-creator | Status: MERGED | +2 | 0 |
491442,33 | QbsCleanStep: Employ task tree for running | master | qt-creator/qt-creator | Status: MERGED | -1 | 0 |
491446,30 | QbsInstallStep: Employ task tree for running | master | qt-creator/qt-creator | Status: MERGED | -1 | 0 |
491450,37 | QbsBuildStep: Employ task tree for running | master | qt-creator/qt-creator | Status: MERGED | +2 | 0 |
491451,38 | BuildStep: Make runRecipe() pure virtual | master | qt-creator/qt-creator | Status: MERGED | +2 | 0 |
491521,41 | BuildManager: Employ task tree for running | master | qt-creator/qt-creator | Status: MERGED | +2 | 0 |
604914,2 | QmlProfiler: Remove unused method | master | qt-creator/qt-creator | Status: MERGED | +2 | 0 |
604918,2 | QmlPreview: Hide serverUrl() in private section | master | qt-creator/qt-creator | Status: MERGED | +2 | 0 |
604944,3 | Qnx: Remove unused commandFound() method | master | qt-creator/qt-creator | Status: MERGED | +2 | 0 |
604950,22 | Boot2Qt: Dismantle QdbDevicePerfProfilerSupport | master | qt-creator/qt-creator | Status: MERGED | +2 | 0 |
605544,6 | Debugger: Inline RemoteAttachRunner | master | qt-creator/qt-creator | Status: MERGED | +2 | 0 |
605546,3 | RemoteLinux: Inline RemoteLinuxDebugWorker | master | qt-creator/qt-creator | Status: MERGED | +2 | 0 |
605555,9 | Qnx: Inline QnxAttachDebugSupport | master | qt-creator/qt-creator | Status: MERGED | +2 | 0 |
605558,11 | Qnx: Inline PDebugRunner | master | qt-creator/qt-creator | Status: MERGED | +2 | 0 |
605563,10 | Qnx: Inline QnxDebuggeeRunner | master | qt-creator/qt-creator | Status: MERGED | +2 | 0 |
605564,10 | Qnx: Inline QnxDebugSupport | master | qt-creator/qt-creator | Status: MERGED | +2 | 0 |
605569,3 | PE: Promote protected methods to public in SimpleTargetRunner | master | qt-creator/qt-creator | Status: MERGED | +2 | 0 |
605599,4 | QmlPreview: Inline LocalQmlPreviewSupport | master | qt-creator/qt-creator | Status: MERGED | +2 | 0 |
605602,2 | WebAssembly: Inline class EmrunRunWorker | master | qt-creator/qt-creator | Status: MERGED | +2 | 0 |
605604,2 | Boot2Qt: Inline QdbDeviceRunSupport | master | qt-creator/qt-creator | Status: MERGED | +2 | 0 |
605609,7 | AppMan: Inline AppManagerRunner | master | qt-creator/qt-creator | Status: MERGED | +2 | 0 |
605621,4 | BareMetal: Inline GdbServerProviderRunner | master | qt-creator/qt-creator | Status: MERGED | +2 | 0 |
605622,4 | Qnx: Inline QnxQmlProfilerSupport | master | qt-creator/qt-creator | Status: MERGED | +2 | 0 |
605624,15 | QmlProfiler: Inline LocalQmlProfilerSupport | master | qt-creator/qt-creator | Status: MERGED | +2 | 0 |
605627,12 | RemoteLinux: Inline RemoteLinuxQmlToolingSupport | master | qt-creator/qt-creator | Status: MERGED | +2 | 0 |
605629,4 | McuSupport: Inline FlashAndRunWorker | master | qt-creator/qt-creator | Status: MERGED | +2 | 0 |
605630,16 | ProjectExplorer: Make SimpleTargetRunner final | master | qt-creator/qt-creator | Status: MERGED | +2 | 0 |
605632,7 | ProjectExplorer: Remove unused SimpleTargetRunner::setExtraData() | master | qt-creator/qt-creator | Status: MERGED | +2 | 0 |
605633,6 | Android: Drop AndroidDebugSupport::stop() overload | master | qt-creator/qt-creator | Status: MERGED | +2 | 0 |
605634,15 | Boot2Qt: Drop QdbDeviceDebugSupport::stop() overload | master | qt-creator/qt-creator | Status: MERGED | +2 | 0 |
605635,7 | Android: Drop AndroidQmlToolingSupport::stop() | master | qt-creator/qt-creator | Status: ABANDONED | 0 | 0 |
605636,16 | Android: Inline AndroidQmlToolingSupport | master | qt-creator/qt-creator | Status: MERGED | +2 | 0 |
605637,15 | AppMan: Inline AppManagerPerfProfilerSupport | master | qt-creator/qt-creator | Status: MERGED | +2 | 0 |
605638,15 | AppMan: Inline AppManagerQmlToolingSupport | master | qt-creator/qt-creator | Status: MERGED | +2 | 0 |
605639,15 | Boot2Qt: Remove unneeded friend declarations in QdbDeviceInferiorRunner | master | qt-creator/qt-creator | Status: MERGED | +2 | 0 |
605651,15 | Boot2Qt: Inline QdbDeviceQmlToolingSupport | master | qt-creator/qt-creator | Status: MERGED | +2 | 0 |
605659,3 | Ios: Remove unused field | master | qt-creator/qt-creator | Status: MERGED | +2 | +1 |
605756,19 | Boot2Qt: Inline QdbDeviceInferiorRunner | master | qt-creator/qt-creator | Status: MERGED | +2 | 0 |
605767,11 | Boot2Qt: Simplify QdbDeviceDebugSupport | master | qt-creator/qt-creator | Status: MERGED | +2 | 0 |
605769,15 | Boot2Qt: Inline QdbDeviceDebugSupport | master | qt-creator/qt-creator | Status: MERGED | +2 | 0 |
605808,3 | Android: Drop qml port parsing from application output | master | qt-creator/qt-creator | Status: MERGED | +2 | +1 |
605809,16 | Android: Move part of start setup into AndroidDebugSupport's c'tor | master | qt-creator/qt-creator | Status: MERGED | +2 | 0 |
605834,14 | BareMetal: Inline UvscServerProviderRunner | master | qt-creator/qt-creator | Status: MERGED | +2 | 0 |