Commit Graph

1631 Commits

Author SHA1 Message Date
hjk
b414b7cd3b QmlProfiler: Merge inferior worker into LocalQmlProfilerSupport
Change-Id: Ie9f9db6ecf2891731e90326b4a27b2d819b1e7ca
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
2017-08-10 13:17:58 +00:00
hjk
a9d2e64517 QmlProfiler: Move TCP connection initialization to runworker's start()
That makes the high level sequence of operation the same as for the
local socket case.

Change-Id: Ib8af2a7826a482e98b75fe00f3c0e672b98886c5
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
2017-08-10 13:13:57 +00:00
hjk
51dd89fc34 QmlProfiler: Remove connection timer
The connection timer was traditionally used in cases where
the application was started without being given a port on the
commandline. These setups do not exist anymore or have been
changed to provide a suitable port on the commandline.

Change-Id: Ib4653e73943819762f0c8162cc13e4da789705a7
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
2017-08-10 13:12:38 +00:00
Ulf Hermann
a8426626d1 QmlProfiler: Fix and extend the local qml profiler runner test
We need to indirectly verify that the profiler support is doing the
right thing by watching the RunControl's state transitions.

Change-Id: I8f92f21022668ed3bb28477152132ccdcffaaea6
Reviewed-by: hjk <hjk@qt.io>
2017-08-10 10:23:39 +00:00
Ulf Hermann
cca625edea QmlProfiler: Connect to timelabel only after it is created
Change-Id: If9e810cfbd5162f1e40db24db2f8f784accaff4e
Task-number: QTCREATORBUG-18597
Reviewed-by: hjk <hjk@qt.io>
2017-08-10 09:38:40 +00:00
Ulf Hermann
e45c6ebe4b QmlProfiler: Stop the recording timer when the time label is destroyed
Writing to the label is all it does, and that crashes if the label is
gone.

Change-Id: I23bbbe0c46603a8de91143ee6167cb404c1b0004
Reviewed-by: hjk <hjk@qt.io>
2017-08-09 14:18:28 +00:00
hjk
6f5c5a56db QmlProfiler: reportStopped() only when entering Idle
Change-Id: I291ff6506a16e294165109a89f2acf22d24d7928
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
2017-08-09 12:19:17 +00:00
Ulf Hermann
88b113c850 QmlProfiler: Reverse start dependencies for LocalQmlProfilerSupport
We need to start the local server before the application, as the
application has to connect to it. If we use a TCP connection, we will
retry. So it doesn't hurt to start it before the application, either.

Change-Id: I64c24f922040d0ac58fe4f05abffef9ec24e3e9a
Reviewed-by: hjk <hjk@qt.io>
2017-08-09 08:37:24 +00:00
Ulf Hermann
ff9e55d5fb QmlProfiler: Use stop dependencies for RunWorkers
Change-Id: If4d0af85c6e537e6d9a35dc877f7542c91a2bc13
Reviewed-by: hjk <hjk@qt.io>
2017-08-08 13:58:42 +00:00
Ulf Hermann
8b5582c424 ProjectExplorer: Rename worker dependencies to "startDependencies"
There will be stopDependencies, too, which apply when stopping the
runcontrol.

Change-Id: Id72771d28cbb6b254572c9f93db93e0d054b890f
Reviewed-by: hjk <hjk@qt.io>
2017-08-08 13:57:38 +00:00
Orgad Shaneh
f8caf4f367 QmlProfiler: Fix linkage
76:5: warning: instantiation of function 'QTest::qCompare<ProjectExplorer::RunControl *, nullptr_t>' required here, but no definition is available
qtestcase.h:180:5: note: expanded from macro 'QTRY_COMPARE_WITH_TIMEOUT'
qtestcase.h:89:17: note: expanded from macro 'QCOMPARE'
qtestcase.h:364:10: note: forward declaration of template entity is here
76:5: note: add an explicit instantiation declaration to suppress this warning if 'QTest::qCompare<ProjectExplorer::RunControl *, nullptr_t>' is explicitly instantiated in another translation unit
qtestcase.h:180:5: note: expanded from macro 'QTRY_COMPARE_WITH_TIMEOUT'
qtestcase.h:89:17: note: expanded from macro 'QCOMPARE'

Change-Id: I0d9ed4eb9109cbc93439f655781cee34331719ce
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
2017-08-07 17:20:23 +00:00
Ulf Hermann
cac4b7c87c QmlProfiler: Make sure local runner test fails before test run ends
QTimer::singleShot postpones the execution of the test methods. If we
return from the current test method before, we might end the test run
before the code gets executed. This was hiding failures.

Change-Id: I0250cd37e5b25f2a72752a2d6f3abcac3314946a
Reviewed-by: hjk <hjk@qt.io>
2017-08-07 12:45:48 +00:00
Ulf Hermann
1e781cd396 QmlProfiler: Avoid empty timeline when restricting to ranges
The timeline models were suspended for editing but never restored. To
test the correct behavior a test case for the trace view is added.

Change-Id: Ic1803e9d84656eed97795f1f1674e3d56c83f650
Task-number: QTCREATORBUG-18354
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
2017-08-07 11:50:19 +00:00
hjk
71c612d07d QmlProfiler: Add display name to LocalQmlProfilerSupport
For debugging purposes.

Change-Id: I6e8006983e30c928ad4cf69f15e627f23741e99d
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
2017-07-19 16:01:22 +00:00
hjk
d93da5f5f1 ProjectExplorer: Add and use a RunConfiguration::registerAspect<>
... to register RunConfigurationAspect creating functions.

Change-Id: I9e7a2cef0bc134ac6a7becbd0b5ecb40c26ef118
Reviewed-by: hjk <hjk@qt.io>
2017-07-17 14:00:28 +00:00
Christian Kandeler
be2b3c91ae Add Q_FALLTHROUGH for Qt < 5.8
... and make use of it.
With gcc 7, the new option -Wimplicit-fallthrough is introduced and
added to the -Wextra set, triggering dozens of warnings in our sources.
Therefore, we annotate all obviously intended fall-throughs. The ones
that are still left are unclear and need to be checked by the respective
maintainer.

Change-Id: I44ead33cd42a4b41c28ee5fcb5a31db272710bbc
Reviewed-by: Nikita Baryshnikov <nib952051@gmail.com>
Reviewed-by: hjk <hjk@qt.io>
Reviewed-by: Eike Ziller <eike.ziller@qt.io>
2017-07-17 07:51:23 +00:00
Christian Kandeler
0e2b89e637 QmlProfiler: Fix release build
A header file was indirectly included in debug mode.

Change-Id: I9142fc9b92fd6db1182c6602a0ac4a723aa2c9f7
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
2017-07-13 08:50:56 +00:00
hjk
611f373df6 QmlProfiler: Partially dissolve QmlProfilerRunControlFactory
Change-Id: Id902cfa6387bcb6ad96da0cd36f3114f795afd99
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
2017-07-13 07:31:12 +00:00
hjk
0a2032e434 ProjectExplorer: Rename RunControl::finished to stopped
That's what it is.

Change-Id: I8cf9af23bb7cafe1cde8f165fdbf85cdeb79f7e4
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
2017-07-12 10:06:34 +00:00
hjk
acc86aee5a ProjectExplorer: Move re-runnable decision to RunWorkers
A RunControl is re-runnable if all its workers are,
a RunWorker is re-runnable if it's Stopped and unless it
says otherwise.

Also ensure SimpleTargetRunner only reportStop() once
per run and make process error message re-usable.

Change-Id: I73f5fb724d3026ceb81d5e32a3a71b4814b2bca9
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
2017-07-10 09:02:17 +00:00
hjk
f82bb1ec3a ProjectExplorer: Remove Connection as concept
It turns out that one "Connection" per RunControl doesn't map
well to the uses we have. Instead, RunWorkers need to know
individually how to connect to the place where they can work,
but they are already specific enough to be able to use a
standard class (like QUrl) as their way to specify the needed
entry point.

In theory one could see a RunControl's connection as an
aggregation of its workers connection bits, but that does
not really seem to be needed in code.

As consequence, replace UrlConnection by a plain QUrl, and also
the HostName connection by a QUrl with hostName set.

Change-Id: I40c97e37779314ac0a77041e864a18eadb78f987
Reviewed-by: Vikas Pachdha <vikas.pachdha@qt.io>
2017-07-07 06:23:52 +00:00
hjk
6e7a31c4fe Debugger: Move startupRunConfiguration to RunConfiguration
It's not really debugger-specific.

Change-Id: I2246e08d896df1d625ecce9b8b5428e7ea398851
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
2017-07-04 06:48:13 +00:00
hjk
629c137ef2 ProjectExplorer: Remove virtual RunControl start/stop trampolin
Not needed anymore, effectively replaced by RunWorker start/stop.

Change-Id: I7483c841cdd4e05c9e1f7636a27b20ece37947c2
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
2017-06-30 13:32:34 +00:00
David Schulz
6591a01452 TextEditor: Add line annotations
Displaying short descriptive text of a TextMark at line end.
Currently implemented for ClangTextMark and BookMark.

Change-Id: Idc6b579bda0382ad94b2e236b715696396b10460
Reviewed-by: Nikolai Kosjar <nikolai.kosjar@qt.io>
2017-06-30 08:27:16 +00:00
hjk
ef7c633de2 Android: Re-enable QmlProfiler
Change-Id: Icd73475be421e6813b0d496020461e7020b547dd
Reviewed-by: hjk <hjk@qt.io>
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
2017-06-29 14:00:22 +00:00
hjk
345680a159 QmlProfiler: De-pimpl QmlProfilerViewManager
The change is purely mechanical. QmlProfilerViewManager
is an internal class, not even extra #includes are needed.

Change-Id: Ia28b3a90c8c7dfeb1eb2510b4030c566bc264a46
Reviewed-by: Kai Koehne <kai.koehne@qt.io>
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
2017-06-27 15:02:49 +00:00
hjk
38b4dec764 QmlProfiler: Re-organize local run
Having the overall runworker setup closer to the general pattern
allows to re-use SimpleTargetRunner.

Change-Id: Iff151cbebaa6ae6615b933f4277b0581a43d7f7f
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
2017-06-27 08:33:00 +00:00
hjk
56028d2e3e QmlProfiler: Cosmetics
Avoid using remote/local as (not user visible) names. 'internal'
means 'whatever the current target does', i.e. could be a remote setup,
'external' means 'attach to something running or waiting.

Also user setServerUrl() directly on the worker, no need go through
the 'opaque connection' mechanism here.

Change-Id: Id0e694562ce7d3129c7d0b790c91d465de24b4e4
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
2017-06-20 07:51:22 +00:00
hjk
232fb7a425 QmlProfiler: Split server url passing from custom startup request
Orthogonal concepts, that only happen to coincide.

Also, make the server directly settable instead of relying
on the runControl's connection().

Change-Id: I2472acafcc50aede2cb6f99421901f0e67531b91
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
2017-06-16 12:55:21 +00:00
hjk
25a75d3fa3 Debugger, QmlProfiler et al: Replace AnalyzerStartParameter
... and QmlProfilerRunner::Configuaration by PE::UrlConnection,
and call it 'serverUrl' on the user side.

That's the only variant we ever had and avoids "translations"
between three structures that are essential the same.

Change-Id: I33386b2b8d2a7985ff934f6f8f840de0831bf9c1
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
2017-06-16 12:19:16 +00:00
hjk
1a82bedc8b QmlProfiler: Merge LocalQmlProfilerRunner and QmlProfilerRunner
Also streamline code paths in the result.

Change-Id: Id7d96343a8f778ba8f415b1a850cc78576afa475
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
2017-06-12 06:24:36 +00:00
hjk
76185b3b09 QmlProfiler: Convert to a RunWorker based setup
This also re-enables the remote linux case and enables
the recording of a single run of events.

Change-Id: I9ea55017c8e5f2f17e6f32c5453df48093e41931
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
2017-05-30 08:57:08 +00:00
hjk
89f02cba2c ProjectExplorer: Split Target and ToolRunners into smaller tasks
This increases re-usability of activities like 'port gathering',
and makes their use less dependent on actual device implementations.

Change-Id: I017cb74874f2b38c487ba2d03906a675d5618647
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
2017-05-15 14:35:03 +00:00
Eike Ziller
64b19af7dd Merge remote-tracking branch 'origin/4.3'
Conflicts:
	qbs/modules/qtc/qtc.qbs
	qtcreator.pri

Change-Id: I6d89ea588de955f5d878500b59285d3adde6c77d
2017-05-15 15:31:55 +02:00
Ulf Hermann
d4fe5310d6 QmlProfiler: Don't delete suspended models when acquiring is aborted
AcquiringData to ClearingData is a valid transition, for example when
the application crashes. We don't want to drop all models then.

Change-Id: Ibb1b5a551e0dbec121a44054d36c132d038153f4
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
2017-05-11 14:47:57 +00:00
Ulf Hermann
d79dde6dfa QmlProfiler: Increase flame graph view context menu test timeout
Apparently macOS will block the event loop until a real mouse click
happens if you open and close context menus in quick succession. When
it does that, the timer won't hit anymore and the mouse event to trigger
the next test step won't be generated.

Change-Id: Ie0c05d8a5a2020fe46381358133cd7cdbbf42299
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
2017-05-10 11:04:36 +00:00
Ulf Hermann
8e8283b342 QmlProfiler: Keep flamegraph details window around
When moving the mouse pointer out of an item the window should not
disappear, so that you can reposition it then.

Change-Id: Ic2fa0e41bcab5fada6c3c5fca68a5f82fcd0fc7a
Task-number: QTCREATORBUG-16698
Reviewed-by: Robert Loehning <robert.loehning@qt.io>
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
2017-05-10 08:20:02 +00:00
Ulf Hermann
a6c3b57677 QmlProfiler: Fix flame graph context menu test
The context menu event can be generated multiple times within one loop
of QTRY_VERIFY. The result is that multiple showFullRange() signals can
be generated before we check again for spy.count() == 1. Thus, the check
never succeeds and the number of signals keeps growing.

We connect the showFullRange() signal to the model manager in order to
get a more realistic test setup. This way the action that generates the
showFullRange() signal is disabled in any further context menus, just as
it is supposed to be. In addition we can now check for the manager to
actually show the full range.

Change-Id: I5e13c2666ce1a15c7a5fad57affd4274d9656656
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
2017-05-09 11:34:00 +00:00
Alessandro Portale
3624a663d8 Reduce usage of qApp in favor of static function calls
Q*Application classes have unusually many static functions. In many
cases in our code, these functions are unnecessarily called as instance
functions, using the qApp helper.

This patch replaces many occurencies of qApp with the according
Q*Application classname.

Change-Id: I6099a419fa7bf969891269c37ed7a9e817ef5124
Reviewed-by: hjk <hjk@qt.io>
2017-04-24 18:36:28 +00:00
hjk
e063ca68d0 Debugger: Dissolve Debugger::ActionDescription
ActionDescription was a horizontal layer of convenience functionality
covering (only) ex-AnalyzerBase based RunControl start scenarios
and gets in the way of target/tool orthogonalization.

So continue the path chosen with the removal of AnalyzerRunControl:
Remove ActionDescription by inlining into user code, then orthogonalize
tool-by-tool, then generalize again.

Change-Id: Ib597df3f4ad7b06bef06644458fa13ddca53afdb
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
2017-04-24 09:52:48 +00:00
Eike Ziller
88897f3a87 Merge remote-tracking branch 'origin/4.3'
Conflicts:
	src/plugins/genericprojectmanager/genericproject.cpp
	src/plugins/genericprojectmanager/genericproject.h
	src/plugins/genericprojectmanager/genericprojectnodes.cpp
	src/plugins/genericprojectmanager/genericprojectnodes.h

Change-Id: Ie0c870f68c8d200a75489b75860987655b2f6175
2017-04-19 09:56:14 +02:00
hjk
5d97c4871a ProjectExplorer: Remove startRunControl()'s runMode parameter
It is redundant, as a RunControl has a runMode() getter.

Change-Id: Ia048b271a5003356d21f86a3f778827d23466037
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
2017-04-12 12:11:49 +00:00
hjk
cd3c5104bf ProjectExplorer: Add a RunControl::supportsReRunning setter
Removes one reason to derive from base RunControls (specifically
ValgrindRunControl).

Change-Id: I81e32a49ef30e79ee7e7b53a54021eaaba43453a
Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
2017-04-07 10:51:35 +00:00
hjk
112e32228a ProjectExplorer: Merge AnalyzerRunControl into RunControl
The change is "conceptually wrong", the AnalyzerRunControl derived
classes' functionality should be provided by ToolRunners based classes
encapsulating/"being" the current Analyzer*Runner classes.

However, the AnalyzerRunControl is only three (empty even) virtual
functions, but a big obstacle in merging attempt due to a lot of
mechanical followup changes in downstream users.

The current construction mechanism of analyzer run controls is actually
two different mechanisms (locally direct RunControlFactories, and a
"generic" createAnalyzerRunControl wrapper for remote cases). The generic
createAnalyzerRunControl makes it difficult to migrated them one-by-one,
due to the various downstream users.

So instead of merging the per-analyzer two uses directly reduce
the "indirection" distance by removing the AnalyzerRunControl
intermediate layer. After that the createAnalyzerRunControl mechanism
can be dissolved by using normal RunControlFactories also for
the remote cases. After that, porting to ToolRunner, and combining
with ther local equivalent can be done one by one.

Change-Id: I0ddace33fcce210cf3a547ac5bb23b3d85013934
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
2017-04-05 13:47:53 +00:00
Ulf Hermann
5605337f6a QmlProfiler: Improve robustness of flamegraph view test
If the context menu disappears for whatever reason, just open a new one.
Making sure that the context menu stays around when we don't do anything
is not Qt Creator's job, so we don't have to test for it. Also, when
trying to remove the context menu, click a spot that's certainly inside
the screen.

Change-Id: If6e574d84bedf2ab552c8c29d756501e9d2282bd
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
2017-04-03 08:49:19 +00:00
Ulf Hermann
6e5d7e54db QmlProfiler: Use a ranged for loop in QmlProfilerModelManager::dispatch
Change-Id: I852bb4935b529953e677791d32d17c886f22bffd
Reviewed-by: Milian Wolff <milian.wolff@kdab.com>
2017-03-31 08:32:30 +00:00
Eike Ziller
bac2e6c17a Merge remote-tracking branch 'origin/4.3'
Conflicts:
	src/plugins/cmakeprojectmanager/servermodereader.cpp

Change-Id: I58e7b33d32c41cb48a24a5638ddb256212dd6107
2017-03-30 13:59:12 +02:00
Ulf Hermann
0683281b7b QmlProfiler: Load notes data only after models are available
Change-Id: I1ee13c842a07962d9aec93aaab6959614d7d8a08
Task-number: QTCREATORBUG-17936
Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
2017-03-29 15:05:59 +00:00
Eike Ziller
016767b2a6 Merge remote-tracking branch 'origin/4.3'
Conflicts:
	src/plugins/genericprojectmanager/genericproject.cpp
	src/plugins/genericprojectmanager/genericproject.h
	src/plugins/projectexplorer/projectmodels.cpp

Change-Id: I290cba328212cadd3c12909d1f2f3642d326a1ca
2017-03-28 09:56:16 +02:00
Ulf Hermann
551efd9199 QmlProfiler: Use QList for QmlRange container when loading .qtd
As we are using this as a queue, with many calls to takeFirst(), a
QVector is prohibitively expensive here.

Change-Id: I151452ae1299ab520a3aceae7ff3da0e29fe9bf9
Reviewed-by: hjk <hjk@qt.io>
2017-03-24 14:25:06 +00:00