mirror of
https://github.com/barry-ran/QtScrcpy.git
synced 2025-07-31 12:58:39 +00:00
完善fps统计
This commit is contained in:
parent
df81adcb22
commit
23d57beb48
7 changed files with 84 additions and 77 deletions
|
@ -64,7 +64,7 @@ qint32 Decoder::recvData(quint8* buf, qint32 bufSize)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
qint64 readSize = qMin(m_deviceSocket->bytesAvailable(), (qint64)bufSize);
|
qint64 readSize = qMin(m_deviceSocket->bytesAvailable(), (qint64)bufSize);
|
||||||
qDebug() << "ready recv data " << readSize;
|
//qDebug() << "ready recv data " << readSize;
|
||||||
return m_deviceSocket->read((char*)buf, readSize);
|
return m_deviceSocket->read((char*)buf, readSize);
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -252,6 +252,5 @@ void Decoder::pushFrame()
|
||||||
// the previous newFrame will consume this frame
|
// the previous newFrame will consume this frame
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
//qDebug() << "------------>" << QTime::currentTime();
|
|
||||||
emit newFrame();
|
emit newFrame();
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,8 +6,6 @@
|
||||||
#include <QPointer>
|
#include <QPointer>
|
||||||
#include <QMutex>
|
#include <QMutex>
|
||||||
|
|
||||||
//#include "convert.h"
|
|
||||||
|
|
||||||
extern "C"
|
extern "C"
|
||||||
{
|
{
|
||||||
#include "libavcodec/avcodec.h"
|
#include "libavcodec/avcodec.h"
|
||||||
|
|
|
@ -1,8 +1,9 @@
|
||||||
|
#include <QTimerEvent>
|
||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
|
|
||||||
#include "fpscounter.h"
|
#include "fpscounter.h"
|
||||||
|
|
||||||
FpsCounter::FpsCounter()
|
FpsCounter::FpsCounter(QObject* parent) : QObject(parent)
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -12,63 +13,59 @@ FpsCounter::~FpsCounter()
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void FpsCounter::fpsCounterInit()
|
void FpsCounter::start()
|
||||||
{
|
{
|
||||||
m_started = false;
|
resetCounter();
|
||||||
// no need to initialize the other fields, they are meaningful only when
|
startCounterTimer();
|
||||||
// started is true
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void FpsCounter::fpsCounterStart()
|
void FpsCounter::stop()
|
||||||
{
|
{
|
||||||
m_started = true;
|
stopCounterTimer();
|
||||||
m_timeCounter.start();
|
resetCounter();
|
||||||
m_rendered = 0;
|
|
||||||
#ifdef SKIP_FRAMES
|
|
||||||
m_skipped = 0;
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void FpsCounter::fpsCounterStop()
|
bool FpsCounter::isStarted()
|
||||||
{
|
{
|
||||||
m_started = false;
|
return m_counterTimer;
|
||||||
}
|
}
|
||||||
|
|
||||||
void FpsCounter::fpsCounterAddRenderedFrame()
|
void FpsCounter::addRenderedFrame()
|
||||||
{
|
{
|
||||||
checkExpired();
|
|
||||||
m_rendered++;
|
m_rendered++;
|
||||||
}
|
}
|
||||||
|
|
||||||
void FpsCounter::checkExpired()
|
void FpsCounter::addSkippedFrame()
|
||||||
{
|
{
|
||||||
if (m_timeCounter.elapsed() >= 1000) {
|
|
||||||
displayFps();
|
|
||||||
m_timeCounter.restart();
|
|
||||||
m_rendered = 0;
|
|
||||||
#ifdef SKIP_FRAMES
|
|
||||||
m_skipped = 0;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void FpsCounter::displayFps()
|
|
||||||
{
|
|
||||||
#ifdef SKIP_FRAMES
|
|
||||||
if (m_skipped) {
|
|
||||||
//qInfo << "%d fps (+%d frames skipped)", m_rendered, m_skipped);
|
|
||||||
} else {
|
|
||||||
#endif
|
|
||||||
//qInfo m_rendered << "fps";
|
|
||||||
#ifdef SKIP_FRAMES
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef SKIP_FRAMES
|
|
||||||
void FpsCounter::fpsCounterAddSkippedFrame()
|
|
||||||
{
|
|
||||||
checkExpired();
|
|
||||||
m_skipped++;
|
m_skipped++;
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
void FpsCounter::timerEvent(QTimerEvent *event)
|
||||||
|
{
|
||||||
|
if (event && m_counterTimer == event->timerId()) {
|
||||||
|
m_curRendered = m_rendered;
|
||||||
|
m_curSkipped = m_skipped;
|
||||||
|
resetCounter();
|
||||||
|
qInfo("FPS:%d Discard:%d", m_curRendered, m_skipped);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void FpsCounter::startCounterTimer()
|
||||||
|
{
|
||||||
|
stopCounterTimer();
|
||||||
|
m_counterTimer = startTimer(1000);
|
||||||
|
}
|
||||||
|
|
||||||
|
void FpsCounter::stopCounterTimer()
|
||||||
|
{
|
||||||
|
if (m_counterTimer) {
|
||||||
|
killTimer(m_counterTimer);
|
||||||
|
m_counterTimer = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void FpsCounter::resetCounter()
|
||||||
|
{
|
||||||
|
m_rendered = 0;
|
||||||
|
m_skipped = 0;
|
||||||
|
}
|
||||||
|
|
|
@ -1,32 +1,35 @@
|
||||||
#ifndef FPSCOUNTER_H
|
#ifndef FPSCOUNTER_H
|
||||||
#define FPSCOUNTER_H
|
#define FPSCOUNTER_H
|
||||||
#include <QTime>
|
#include <QObject>
|
||||||
|
|
||||||
class FpsCounter
|
class FpsCounter : public QObject
|
||||||
{
|
{
|
||||||
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
FpsCounter();
|
FpsCounter(QObject* parent = Q_NULLPTR);
|
||||||
virtual ~FpsCounter();
|
virtual ~FpsCounter();
|
||||||
|
|
||||||
void fpsCounterInit();
|
void start();
|
||||||
void fpsCounterStart();
|
void stop();
|
||||||
void fpsCounterStop();
|
bool isStarted();
|
||||||
void fpsCounterAddRenderedFrame();
|
void addRenderedFrame();
|
||||||
#ifdef SKIP_FRAMES
|
void addSkippedFrame();
|
||||||
void fpsCounterAddSkippedFrame();
|
|
||||||
#endif
|
protected:
|
||||||
|
virtual void timerEvent(QTimerEvent *event);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void checkExpired();
|
void startCounterTimer();
|
||||||
void displayFps();
|
void stopCounterTimer();
|
||||||
|
void resetCounter();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
bool m_started = false;
|
quint32 m_counterTimer = 0;
|
||||||
QTime m_timeCounter;
|
quint32 m_curRendered = 0;
|
||||||
|
quint32 m_curSkipped = 0;
|
||||||
|
|
||||||
quint32 m_rendered = 0;
|
quint32 m_rendered = 0;
|
||||||
#ifdef SKIP_FRAMES
|
|
||||||
quint32 m_skipped = 0;
|
quint32 m_skipped = 0;
|
||||||
#endif
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // FPSCOUNTER_H
|
#endif // FPSCOUNTER_H
|
||||||
|
|
|
@ -30,6 +30,8 @@ bool Frames::init()
|
||||||
// there is initially no rendering frame, so consider it has already been
|
// there is initially no rendering frame, so consider it has already been
|
||||||
// consumed
|
// consumed
|
||||||
m_renderingFrameConsumed = true;
|
m_renderingFrameConsumed = true;
|
||||||
|
|
||||||
|
m_fpsCounter.start();
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
error:
|
error:
|
||||||
|
@ -47,6 +49,7 @@ void Frames::deInit()
|
||||||
av_frame_free(&m_renderingframe);
|
av_frame_free(&m_renderingframe);
|
||||||
m_renderingframe = Q_NULLPTR;
|
m_renderingframe = Q_NULLPTR;
|
||||||
}
|
}
|
||||||
|
m_fpsCounter.stop();
|
||||||
}
|
}
|
||||||
|
|
||||||
void Frames::lock()
|
void Frames::lock()
|
||||||
|
@ -75,7 +78,9 @@ bool Frames::offerDecodedFrame()
|
||||||
m_renderingFrameConsumedCond.wait(&m_mutex);
|
m_renderingFrameConsumedCond.wait(&m_mutex);
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
|
if (m_fpsCounter.isStarted() && !m_renderingFrameConsumed) {
|
||||||
|
m_fpsCounter.addSkippedFrame();
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
swap();
|
swap();
|
||||||
|
@ -89,7 +94,9 @@ const AVFrame *Frames::consumeRenderedFrame()
|
||||||
{
|
{
|
||||||
Q_ASSERT(!m_renderingFrameConsumed);
|
Q_ASSERT(!m_renderingFrameConsumed);
|
||||||
m_renderingFrameConsumed = true;
|
m_renderingFrameConsumed = true;
|
||||||
|
if (m_fpsCounter.isStarted()) {
|
||||||
|
m_fpsCounter.addRenderedFrame();
|
||||||
|
}
|
||||||
#ifndef SKIP_FRAMES
|
#ifndef SKIP_FRAMES
|
||||||
// if SKIP_FRAMES is disabled, then notify the decoder the current frame is
|
// if SKIP_FRAMES is disabled, then notify the decoder the current frame is
|
||||||
// consumed, so that it may push a new one
|
// consumed, so that it may push a new one
|
||||||
|
|
|
@ -3,6 +3,8 @@
|
||||||
#include <QMutex>
|
#include <QMutex>
|
||||||
#include <QWaitCondition>
|
#include <QWaitCondition>
|
||||||
|
|
||||||
|
#include "fpscounter.h"
|
||||||
|
|
||||||
// forward declarations
|
// forward declarations
|
||||||
typedef struct AVFrame AVFrame;
|
typedef struct AVFrame AVFrame;
|
||||||
|
|
||||||
|
@ -40,6 +42,7 @@ private:
|
||||||
AVFrame* m_renderingframe = Q_NULLPTR;
|
AVFrame* m_renderingframe = Q_NULLPTR;
|
||||||
QMutex m_mutex;
|
QMutex m_mutex;
|
||||||
bool m_renderingFrameConsumed = true;
|
bool m_renderingFrameConsumed = true;
|
||||||
|
FpsCounter m_fpsCounter;
|
||||||
|
|
||||||
#ifndef SKIP_FRAMES
|
#ifndef SKIP_FRAMES
|
||||||
QWaitCondition m_renderingFrameConsumedCond;
|
QWaitCondition m_renderingFrameConsumedCond;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue