10 m_functionCallPos(0), m_memoryPos(0)
15 this, &QV4ProfilerAdapter::forwardEnabled);
19 engine->profiler(), &QV4::Profiling::Profiler::startProfiling);
23 engine->profiler(), &QV4::Profiling::Profiler::stopProfiling);
25 engine->profiler(), &QV4::Profiling::Profiler::stopProfiling,
28 engine->profiler(), &QV4::Profiling::Profiler::reportData);
30 engine->profiler(), &QV4::Profiling::Profiler::setTimer);
31 connect(
engine->profiler(), &QV4::Profiling::Profiler::dataReady,
41 while (memoryData.
size() > m_memoryPos && memoryData[m_memoryPos].timestamp <= until) {
42 const QV4::Profiling::MemoryAllocationProperties &
props = memoryData[m_memoryPos];
45 messages.
append(
d.squeezedData());
48 return memoryData.
size() == m_memoryPos ? -1 : memoryData[m_memoryPos].timestamp;
57 m_functionLocations.clear();
58 m_functionCallData.clear();
59 m_functionCallPos = 0;
60 memoryNext = appendMemoryEvents(until, messages,
d);
62 memoryNext = appendMemoryEvents(
qMin(callNext, until), messages,
d);
65 if (memoryNext == -1) {
71 return callNext == -1 ? memoryNext :
qMin(callNext, memoryNext);
83 (m_functionCallPos == functionCallData.
size() ||
84 m_stack.
top() <= functionCallData[m_functionCallPos].start)) {
86 return finalizeMessages(until, messages, m_stack.
top(),
d);
88 appendMemoryEvents(m_stack.
top(), messages,
d);
90 messages.
append(
d.squeezedData());
93 while (m_functionCallPos != functionCallData.
size() &&
94 (m_stack.
empty() || functionCallData[m_functionCallPos].start < m_stack.
top())) {
95 const QV4::Profiling::FunctionCallProperties &
props =
96 functionCallData[m_functionCallPos];
98 return finalizeMessages(until, messages,
props.start,
d);
100 appendMemoryEvents(
props.start, messages,
d);
104 if (
location != m_functionLocations.end()) {
113 m_functionLocations.erase(
location);
120 if (m_stack.
empty() && m_functionCallPos == functionCallData.
size())
121 return finalizeMessages(until, messages, -1,
d);
126 const QV4::Profiling::FunctionLocationHash &
locations,
132 if (m_functionLocations.isEmpty())
137 if (m_functionCallData.isEmpty())
138 m_functionCallData = functionCallData;
140 m_functionCallData.append(functionCallData);
142 if (m_memoryData.isEmpty())
143 m_memoryData = memoryData;
145 m_memoryData.append(memoryData);
155 v4Features |= (one << QV4::Profiling::FeatureFunctionCall);
157 v4Features |= (one << QV4::Profiling::FeatureMemoryAllocation);
161void QV4ProfilerAdapter::forwardEnabled(
quint64 features)
166void QV4ProfilerAdapter::forwardEnabledWhileWaiting(
quint64 features)
173#include "moc_qv4profileradapter.cpp"
qsizetype size() const noexcept
bool isEmpty() const noexcept
bool empty() const noexcept
void push_back(parameter_type t)
void append(parameter_type t)
static QMetaObject::Connection connect(const QObject *sender, const char *signal, const QObject *receiver, const char *member, Qt::ConnectionType=Qt::AutoConnection)
\threadsafe
void setService(QQmlProfilerService *new_service)
void profilingEnabled(quint64 features)
void profilingEnabledWhileWaiting(quint64 features)
void referenceTimeKnown(const QElapsedTimer &timer)
QQmlProfilerService * service
static const int s_numMessagesPerBatch
void profilingDisabledWhileWaiting()
T & top()
Returns a reference to the stack's top item.
T pop()
Removes the top item from the stack and returns it.
void push(const T &t)
Adds element t to the top of the stack.
void v4ProfilingEnabled(quint64 v4Features)
void v4ProfilingEnabledWhileWaiting(quint64 v4Features)
QV4ProfilerAdapter(QQmlProfilerService *service, QV4::ExecutionEngine *engine)
void receiveData(const QV4::Profiling::FunctionLocationHash &, const QVector< QV4::Profiling::FunctionCallProperties > &, const QVector< QV4::Profiling::MemoryAllocationProperties > &)
virtual qint64 sendMessages(qint64 until, QList< QByteArray > &messages) override
Combined button and popup list for selecting options.
constexpr const T & qMin(const T &a, const T &b)
GLenum GLuint GLsizei const GLenum * props
GLuint const GLint * locations
unsigned long long quint64