Commit Graph

1631 Commits

Author SHA1 Message Date
Ulf Hermann
4436a1c7f2 QmlProfiler: Add some more consistency to flame graph model
model.parent(someFirstLevelItem) should return the invisible root item.
Methods with default parameter in the base class should also have a
default parameter in the derived class. As rowCount() is Q_INVOKABLE
columnCount() should also be.

Change-Id: I62a0ec6f91d01581fd47a43c97af63c58cdd13fa
Reviewed-by: Christian Kandeler <christian.kandeler@theqtcompany.com>
2016-06-01 09:20:34 +00:00
hjk
0cf9b6e956 Analyzer: Move toolbar icon specification down to individual RunControls
Giving individual RunControls the freedom back to decide what they want,
even if they currrently decide to use the same one.

Change-Id: Ia2acf4b9d32d23c486339b2488611038672aba25
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
2016-05-31 11:07:06 +00:00
Eike Ziller
73bb92c5a6 Merge remote-tracking branch 'origin/4.0'
Change-Id: I89c52ca2145a43c94d3366367ba72fde605dd577
2016-05-31 12:02:13 +02:00
Alessandro Portale
a6683575c4 Icons: Move "next/prev", "[un]locked" and "zoom" from Core to Utils
They are needed in the timeline view.
The change in qtcreator-project.qdocconf makes sure
that qdoc still finds the referenced icons.

Change-Id: I812fba8e57d06d93efc00c295467c83c08cd1784
Reviewed-by: Leena Miettinen <riitta-leena.miettinen@qt.io>
Reviewed-by: Alessandro Portale <alessandro.portale@theqtcompany.com>
2016-05-31 08:51:12 +00:00
hjk
1663b44a7f Analyzer: Move supportsReRunning() down to individual runControls
This maintains current behavior by letting all subclasses return 'false'.
This might be too pessimistic, but can be fixed on a per-tool base

Change-Id: I71ac1b1e2cc98cfb1c5b76bc7c60a3240c5d1dcd
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
2016-05-30 14:42:22 +00:00
Ulf Hermann
c472241ad1 QmlProfiler: Don't connect() null pointers
Change-Id: Id97a5f2231608ae14d7122f168808b2e0264815b
Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
2016-05-30 14:34:20 +00:00
Ulf Hermann
b523eed434 QmlProfiler: Remove QmlProfilerPlugin::instance
We're not using it anymore.

Change-Id: I036d472d0be884f617d000d2077e58ba5b527da9
Reviewed-by: hjk <hjk@theqtcompany.com>
2016-05-30 10:31:47 +00:00
Ulf Hermann
3d59c99143 QmlProfiler: Pass AnalyzerRunControl to LocalQmlProfilerRunner
It doesn't make much sense to require a non-exported class to be passed
to the ctor of an exported one.

Change-Id: I15463f3ec0153a71cb55ad83724ec071a504a483
Reviewed-by: hjk <hjk@theqtcompany.com>
2016-05-30 07:26:50 +00:00
Ulf Hermann
1b9b59a45f QmlProfiler: Use origin type's ID for memory allocations
We want the editor to jump to the right source location when selecting
different events from the timeline. If all memory events have the same
ID this doesn't work. Now they of course have the IDs of the origin
events, but that's not a problem because when you select first the
memory event and then its origin, the editor position does in fact not
have to change.

As an added benefit, the typeId cannot be -1 anymore now.

Change-Id: I95520eeb3e6902e046f3f552c74dba776e7c8b62
Reviewed-by: Christian Kandeler <christian.kandeler@theqtcompany.com>
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
2016-05-27 09:42:34 +00:00
Ulf Hermann
4f9b4b14c1 QmlProfiler: Set all timelinemodels at once
There is no need to waste time rebuilding all the labels etc for each
new model.

Change-Id: I1ca24da7d55100b3c8efd8eea650b68b8b7c7737
Reviewed-by: Christian Kandeler <christian.kandeler@theqtcompany.com>
2016-05-27 09:12:33 +00:00
Ulf Hermann
d33dcac6ca QmlProfiler: Fix "Callee" vs "Caller" labels in statistics view
Change-Id: I28a134b0ae72bb87ad6849f0f70a5332ec019a50
Reviewed-by: Christian Kandeler <christian.kandeler@theqtcompany.com>
2016-05-26 13:14:24 +00:00
Ulf Hermann
0cd9e81378 QmlProfiler: Fix compile warning about implicit conversion to 64 bits
Change-Id: Ia3f24f3b29c3ea4a9322ca21767bb5231b2ca2eb
Reviewed-by: David Schulz <david.schulz@theqtcompany.com>
2016-05-26 08:39:28 +00:00
Ulf Hermann
94fc57c005 QmlProfiler: Support server generated event type IDs
This way we only have to transmit the location and data events once per
type, not once per event.

Change-Id: Ic6ab9619824764fc8b3abf09c7b58200eda2a198
Reviewed-by: Milian Wolff <milian.wolff@kdab.com>
Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
2016-05-25 13:52:45 +00:00
Ulf Hermann
0924ee5efb QmlProfiler: Move type resolution logic into trace client
This way we will be able to use server-provided type IDs for more
efficient lookup of event types.

Change-Id: I37cd592a7829e5f36c6cfc04e400013d1dc37155
Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
2016-05-25 13:52:38 +00:00
Ulf Hermann
ebd6d269c2 QmlProfiler: Directly pass events from client to model
Running them through the model manager via signals doesn't make much
sense anymore.

Change-Id: I6103d281dd640493f28acd7e787ea49712ebd8df
Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
2016-05-25 13:52:33 +00:00
Tobias Hunger
e6a910bb3d QmlProfiler: Fix warnings about inconsistent use of overrides
Change-Id: I325b5d4371fb662c13a131963b382c77976fc803
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
2016-05-24 13:52:45 +00:00
Ulf Hermann
5ee38fda5b QmlProfiler: Remove duplicate method
Change-Id: Iad8420e5836ad8bc3efc9ecf67bf85b005ede7d5
Reviewed-by: Christian Kandeler <christian.kandeler@theqtcompany.com>
2016-05-24 07:44:03 +00:00
Ulf Hermann
105f0e963f QmlProfiler: Fix compile error in animations model
Some compilers don't like explicit initializers for arrays.

Change-Id: I49d056e0000334857a635d8da10491c0d1e5f36c
Reviewed-by: Christian Kandeler <christian.kandeler@theqtcompany.com>
2016-05-24 07:40:28 +00:00
Ulf Hermann
c39ed2a3b7 QmlProfiler: Make progress widget more expressive
Instead of the progress bar we can now show the number of events we
have received, and the number of finished finalizers. This should give
a the user a better idea of what is going on.

Change-Id: I324fefbe6d5e3c24b080bfbc103c4317fa585215
Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
2016-05-23 14:39:24 +00:00
Ulf Hermann
ecd8e764dd QmlProfiler: Add a binary trace format
Storing traces in binary form is preferable as loading and saving is
faster and the trace files are smaller.

Change-Id: Ia7340ac526d5ce9391b1e32fc48fc1fab3ffa13d
Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
2016-05-23 12:32:10 +00:00
Ulf Hermann
d6d69b811a QmlProfiler: Rename QmlProfilerDataModel::addEvent()
We will get another variant, without type.

Change-Id: I06bd47955ef909b2f467425bb9ad8c8b3e3dce27
Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
2016-05-23 12:32:06 +00:00
Ulf Hermann
0f513bc91e QmlProfiler: Use a temporary file to store the master event list
As we only ever iterate the master event list in a linear fashion, we
can use a temporary file to store it. This should allow for larger
traces to be handled without running out of memory.

Change-Id: I0d2aea6f998458fe5f426f6fef0f6937e915ae68
Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
2016-05-23 12:32:01 +00:00
Ulf Hermann
914e1e1fe1 QmlProfiler: Use data replay feature for saving traces
This removes the last access to the master event list, which allows
us to also remove the accessor function.

Change-Id: I0e70c2eb23d2b11aa8b131c03eb3adfad1a9b9e7
Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
2016-05-23 12:31:51 +00:00
Ulf Hermann
4a1e5a637a QmlProfiler: Drive event loading from the model manager
We want to get rid of the big master list of QmlEvent in
QmlProfilerDataModel, as that gets very large for longer traces. In
order to reduce the dependencies on that list we load the events on the
fly into the child models while they are being received, rather than
having the child models query QmlProfilerDataModel for the event list
later.

As the trace client so far only emitted rangedEvent() for complete
ranges we run into problems with models that need their events sorted.
The rangedEvent() signals were sorted by end time, rather than start
time which makes it inconvenient to analyze them in a stack based way,
for aggregation. This is solved by passing on all the details from the
trace client to the models, with the QmlProfilerDataModel aggregating
the type information before having the events dispatched to the child
models.

Change-Id: I5831a20551f21cf91e27d298a709f604ebd96c3e
Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
2016-05-23 12:31:44 +00:00
Ulf Hermann
dd87df7e5d QmlProfiler: Load data event by event in aggregated models
This paves the way for driving the event loading from the model
manager. Also, unify the loading and eliminate the two different
classes for the children models.

Change-Id: Ic89e757963292d75b3b6fd7d6012f09194dff5a9
Reviewed-by: Alex Blasche <alexander.blasche@theqtcompany.com>
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
2016-05-23 12:31:28 +00:00
Ulf Hermann
bc18fafffd QmlProfiler: Drop duration from QmlEvent
It isn't used anymore.

Change-Id: I432bebbd9ddde15baa22a17d339ac724ddb5fe59
Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
2016-05-23 12:31:06 +00:00
Ulf Hermann
1e8996b438 QmlProfiler: Methods for dispatching events by feature
When announcing features models have to provide functions that handle
events for those features now. The model manager gets a function to
dispatch events to the models that subscribe to them.

Change-Id: I3fd80443a68ba264a513d8d53ed473cf072f1dc7
Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
2016-05-23 12:30:09 +00:00
Ulf Hermann
911c8842b2 QmlProfiler: Drop QmlProfilerDataModel::changed() signal
Nobody is listening to it anymore.

Change-Id: I7a437334e3fc6f091c8515574007b400eb312a72
Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
2016-05-23 12:29:50 +00:00
Ulf Hermann
5ba6f04d4b QmlProfiler: Load the timeline model data event by event
All the models do the same thing when loading the data: They iterate
the list of events, determine for each one if they accept it, and if
so, they load it. After the list has been fully loaded, they do some
finalization. This can be centralized, and ultimately we won't need to
expose the central QVector<QmlEvent> for that anymore.

Change-Id: Ia82facfdc3968200bbec323a02f2fcc02ac44e9e
Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
2016-05-23 12:04:49 +00:00
Ulf Hermann
67378a7928 QmlProfiler: Restore feature visibility when starting data aquisition
Some models check the visibility to determine what to load.

Change-Id: I94d42ddc6e531d04f240c66d4b789826d8c17cf6
Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
2016-05-23 11:52:32 +00:00
Ulf Hermann
1093be0425 QmlProfiler: Remove detailed progress tracking
The progress bar in the state widget was rather meaningless. We rarely
know how many events we expect and it's rather hard to tell how long
each model will take to process them. Instead, we just show a 0-ranged
progress bar to tell the user that "something is happening".

Change-Id: Icb80840d1f0a1538bcf254faa37cbb36e25d342c
Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
2016-05-23 11:44:13 +00:00
Ulf Hermann
324e221bee QmlProfiler: Simplify painting of state widget
There is no reason to have an elaborate painting routine with rounded
corners and shadows. It doesn't fit the new "flat" paradigm and it's
unnecessarily complex.

Change-Id: I83ace95fdcccfc4cc41b17640a10154f7f64f89c
Reviewed-by: Alessandro Portale <alessandro.portale@theqtcompany.com>
2016-05-23 07:46:01 +00:00
hjk
67f9a26208 Merge AnalyzerRunControl::logMessage and RunControl::appendMessage
The tools' ability to hook into processing of the output is
retained by making the function virtual.

Also remove the unusual overload of the RunControl::appendMessage
slot and the signal of the same name by renaming the signal.

Change-Id: If3c3cc2dd9c933169dc30b16e3165c9b3cf1440e
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
2016-05-20 10:52:26 +00:00
Ulf Hermann
070897091a QmlProfiler: Don't crash if there is no QmlJSModelManager
Change-Id: I63b978f0f9c42c8968da7e779cdff876c18d8f31
Task-number: QTCREATORBUG-16276
Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
Reviewed-by: Alessandro Portale <alessandro.portale@theqtcompany.com>
2016-05-17 10:24:42 +00:00
hjk
df8e3b5925 Debugger: Let perspectives specify their central widget
The default 0 value will be interpreted as 'use the editor stack'.

Also, drop the idea of value semantics for Perspective objects
to get a simpler approach to the destruction of owned widgets
(tools docks + central widget)

Change-Id: Ic6470411ee5d387c43447f95b5a12c81c6658ff8
Reviewed-by: Eike Ziller <eike.ziller@qt.io>
2016-05-13 11:34:00 +00:00
David Schulz
1c3e122d43 QmlProfiler: Fix compile warning on Windows.
c:\dev\insrc\devqc\src\plugins\qmlprofiler\qmlevent.h(274): warning
C4267: '=': conversion from 'size_t' to 'quint16', possible loss of data

Change-Id: I86ab7a9b2d01a3da70dd765cb64c6e58c1044cc1
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
2016-05-11 10:54:34 +00:00
Ulf Hermann
bb7925b4ef QmlProfiler: Add data stream operators for QmlEvent
We try to further compress the QML events when saving as we can use the
additional space in that case.

Change-Id: Ida308963685169d1daabd7936612628fd4d265ae
Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
2016-05-10 16:45:02 +00:00
Ulf Hermann
ca5d9659e1 QmlProfiler: Provide stream operators for QmlEventType and QmlNote
This is the foundation for a new file format.

Change-Id: Ib5ae5bfe8b45d9dc654b443ab700186993c3bfc9
Reviewed-by: Christian Kandeler <christian.kandeler@theqtcompany.com>
2016-05-10 16:44:58 +00:00
Ulf Hermann
943fc80f51 QmlProfiler: rename qmlprofilereventlocation.h to qmleventlocation.h
This way the file name matches the class name.

Change-Id: I6e65b0ea13a7e5b15d4c7e5ad7738fc03e3401ad
Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
2016-05-10 16:44:53 +00:00
Ulf Hermann
6aaa2aea35 QmlProfiler: Add some Q_DECLARE_METATYPE
Change-Id: If09ce20e997087ff73eb60bb16ef2e501280944d
Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
2016-05-10 16:44:48 +00:00
Ulf Hermann
71e8c3ffd7 QmlProfiler: Reset the zoom control only when we're finished loading
Drop the timeChanged signal of QmlProfilerTraceTime, too, as that
doesn't serve a purpose anymore. We don't want intermittent changes
of the trace time to be reflected in the UI when loading.

Change-Id: I85f18b90fc404ec254c68625104d3e3f9077a1d9
Reviewed-by: Christian Kandeler <christian.kandeler@theqtcompany.com>
2016-05-10 12:33:25 +00:00
Ulf Hermann
21caa59292 QmlProfiler: Make QmlEvent Q_MOVABLE_TYPE
Change-Id: I7a6e9909e537f1bb0bf8dcecb6c85012bac4d1e8
Reviewed-by: Christian Kandeler <christian.kandeler@theqtcompany.com>
2016-05-10 12:25:47 +00:00
Ulf Hermann
f63d64330e QmlProfiler: Avoid zero-sized arrays
Change-Id: Ia17d067ed677cd3a63d8a478ecb9abec91032771
Reviewed-by: Christian Kandeler <christian.kandeler@theqtcompany.com>
2016-05-09 11:25:29 +00:00
Ulf Hermann
8d15633a22 QmlProfiler: Add a QmlTypedEvent and extend QmlEvent
The QmlTypedEvent is mainly useful to read a generic QmlEvent and
QmlEventType from a QPacket. QmlEventType has a stream operator to do
exactly that. QmlEvent also gets further options to store 32-bit data
in addition to 64- and 8-bit data. Also, with the more generic storage
layout we can reduce the memory consumption of range events by 50%.
This comes at the cost of additional memory allocations for non-range
events, but as non-range events are significantly less frequent than
range events, this is a good tradeoff. Finally the new storage layout
lends itself to efficient serialization, which will help when
developing new storage and transfer formats for QML traces.

Change-Id: I420de68b0142f23c8fb2ca8b329d7ffe69c83fe0
Reviewed-by: Joerg Bornemann <joerg.bornemann@theqtcompany.com>
2016-05-09 08:20:22 +00:00
Ulf Hermann
215c0533d2 QmlProfiler: Rename QmlEvent::startTime to "timestamp"
As many events are instantaneous and we're going to drop the duration
property soon, this is more fitting.

Change-Id: I6e13dd076a5b9df16aed44bf9f631ea5760e9cbf
Reviewed-by: Joerg Bornemann <joerg.bornemann@theqtcompany.com>
2016-05-06 10:36:40 +00:00
Ulf Hermann
a53780924d QmlProfiler: Apply some code cosmetics
Change-Id: I772713aec3a6c25136174b39b853a9ef3ee42a0b
Reviewed-by: Joerg Bornemann <joerg.bornemann@theqtcompany.com>
2016-05-06 10:27:09 +00:00
Ulf Hermann
54b1106f4b QmlProfiler: Move notes into the notes model
There is not reason to keep them in the general data model and cross
reference between the models all the time.

Change-Id: Ic77c518928dcd6234555cb3f6a830bcc3dc4a1a4
Reviewed-by: Joerg Bornemann <joerg.bornemann@theqtcompany.com>
2016-05-06 10:26:13 +00:00
Ulf Hermann
a955537132 QmlProfiler: Fix the naming scheme for events and event types
Move them out of the QmlProfilerDataModel class, drop the "Data"
suffix, and rename symbols that refer to them in order to call them by
their names.

Change-Id: I41151359921b325edb79111371083c4185bd148b
Reviewed-by: Christian Kandeler <christian.kandeler@theqtcompany.com>
Reviewed-by: Joerg Bornemann <joerg.bornemann@theqtcompany.com>
2016-05-04 09:49:32 +00:00
Alessandro Portale
b92ff237a9 QmlProfiler: Fix windows build
Change-Id: I7029208688e0281a08873cf5db368ff5a066540e
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
2016-05-03 16:20:39 +00:00
Ulf Hermann
5253dfeacf QmlProfiler: remove unused members from statistics relatives model
We never use the q pointer and we only show notes in the main model.

Change-Id: I635a97f8d878ba12b9ae55e2b758d1651d5e3aae
Reviewed-by: Christian Kandeler <christian.kandeler@theqtcompany.com>
2016-05-03 15:01:38 +00:00