mirror of
https://github.com/RetroShare/RetroShare.git
synced 2024-10-01 02:35:48 -04:00
removed updateTotals() method. Replaced it with costless on-the-fly update of totals
This commit is contained in:
parent
a00d2c912c
commit
e66c0d1349
@ -196,7 +196,7 @@ MainWindow::MainWindow(QWidget* parent, Qt::WindowFlags flags)
|
||||
this->setWindowIcon(QIcon(QString::fromUtf8(":/icons/logo_128.png")));
|
||||
|
||||
/* Create all the dialogs of which we only want one instance */
|
||||
_bandwidthGraph = new BandwidthGraph();
|
||||
_bandwidthGraph = NULL ;
|
||||
|
||||
#ifdef UNFINISHED
|
||||
applicationWindow = new ApplicationWindow();
|
||||
@ -559,7 +559,7 @@ void MainWindow::createTrayIcon()
|
||||
#ifdef ENABLE_WEBUI
|
||||
trayMenu->addAction(QIcon(":/images/emblem-web.png"), tr("Show web interface"), this, SLOT(showWebinterface()));
|
||||
#endif // ENABLE_WEBUI
|
||||
trayMenu->addAction(QIcon(IMAGE_BWGRAPH), tr("Bandwidth Graph"), _bandwidthGraph, SLOT(showWindow()));
|
||||
trayMenu->addAction(QIcon(IMAGE_BWGRAPH), tr("Bandwidth Graph"), this, SLOT(showBandwidthGraph()));
|
||||
trayMenu->addAction(QIcon(IMAGE_DHT), tr("Statistics"), this, SLOT(showStatisticsWindow()));
|
||||
|
||||
|
||||
@ -585,6 +585,14 @@ void MainWindow::createTrayIcon()
|
||||
trayIcon->show();
|
||||
}
|
||||
|
||||
void MainWindow::showBandwidthGraph()
|
||||
{
|
||||
if(_bandwidthGraph == NULL)
|
||||
_bandwidthGraph = new BandwidthGraph();
|
||||
|
||||
_bandwidthGraph->showWindow();
|
||||
}
|
||||
|
||||
void MainWindow::createNotifyIcons()
|
||||
{
|
||||
/* create notify icons */
|
||||
|
@ -198,6 +198,7 @@ public slots:
|
||||
//! Go to a specific part of the control panel.
|
||||
void setNewPage(int page);
|
||||
void setCompactStatusMode(bool compact);
|
||||
void showBandwidthGraph();
|
||||
|
||||
void toggleStatusToolTip(bool toggle);
|
||||
protected:
|
||||
|
@ -102,8 +102,8 @@ QString RSGraphSource::displayValue(float v) const
|
||||
|
||||
void RSGraphSource::getCumulatedValues(std::vector<float>& vals) const
|
||||
{
|
||||
for(std::map<std::string,float>::const_iterator it = _totals.begin();it!=_totals.end();++it)
|
||||
vals.push_back(it->second) ;
|
||||
for(std::map<std::string,ZeroInitFloat>::const_iterator it = _totals.begin();it!=_totals.end();++it)
|
||||
vals.push_back(it->second.v) ;
|
||||
}
|
||||
void RSGraphSource::getCurrentValues(std::vector<QPointF>& vals) const
|
||||
{
|
||||
@ -196,10 +196,15 @@ void RSGraphSource::update()
|
||||
|
||||
lst.push_back(std::make_pair(ms,it->second)) ;
|
||||
|
||||
for(std::list<std::pair<qint64,float> >::iterator it2=lst.begin();it2!=lst.end();)
|
||||
float& total ( _totals[it->first].v );
|
||||
|
||||
total += it->second ;
|
||||
|
||||
for(std::list<std::pair<qint64,float> >::iterator it2=lst.begin();it2!=lst.end();) // This loop should be very fast, since we only remove the first elements, if applicable.
|
||||
if( ms - (*it2).first > _time_limit_msecs)
|
||||
{
|
||||
//std::cerr << " removing old value with time " << (*it).first/1000.0f << std::endl;
|
||||
total -= (*it2).second ;
|
||||
it2 = lst.erase(it2) ;
|
||||
}
|
||||
else
|
||||
@ -213,30 +218,31 @@ void RSGraphSource::update()
|
||||
{
|
||||
std::map<std::string,std::list<std::pair<qint64,float> > >::iterator tmp(it) ;
|
||||
++tmp;
|
||||
_totals.erase(it->first) ;
|
||||
_points.erase(it) ;
|
||||
it=tmp ;
|
||||
}
|
||||
else
|
||||
++it ;
|
||||
|
||||
updateTotals();
|
||||
}
|
||||
|
||||
#ifdef TO_REMOVE
|
||||
void RSGraphSource::updateTotals()
|
||||
{
|
||||
std::cerr << "RsGraphSource::updateTotals() for " << _points.size() << " values" << std::endl;
|
||||
// now compute totals
|
||||
|
||||
_totals.clear();
|
||||
|
||||
for(std::map<std::string,std::list<std::pair<qint64,float> > >::const_iterator it(_points.begin());it!=_points.end();++it)
|
||||
{
|
||||
float& f = _totals[it->first] ;
|
||||
float& f = _totals[it->first].v ;
|
||||
|
||||
f = 0.0f ;
|
||||
for(std::list<std::pair<qint64,float> >::const_iterator it2=it->second.begin();it2!=it->second.end();++it2)
|
||||
f += (*it2).second ;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
void RSGraphSource::reset()
|
||||
{
|
||||
|
@ -43,6 +43,17 @@
|
||||
#define RSDHT_COLOR Qt::magenta
|
||||
#define ALLDHT_COLOR Qt::yellow
|
||||
|
||||
struct ZeroInitFloat
|
||||
{
|
||||
ZeroInitFloat() { v=0; }
|
||||
ZeroInitFloat(float f) { v=f; }
|
||||
|
||||
float operator()() const { return v ; }
|
||||
float& operator()() { return v ; }
|
||||
|
||||
float v ;
|
||||
};
|
||||
|
||||
// This class provides a source value that the graph can retrieve on demand.
|
||||
// In order to use your own source, derive from RSGraphSource and overload the value() method.
|
||||
//
|
||||
@ -102,13 +113,15 @@ protected slots:
|
||||
protected:
|
||||
virtual void getValues(std::map<std::string,float>& values) const = 0 ;// overload this in your own class to fill in the values you want to display.
|
||||
|
||||
#ifdef TO_REMOVE
|
||||
void updateTotals();
|
||||
#endif
|
||||
qint64 getTime() const ; // returns time in ms since RS has started
|
||||
|
||||
// Storage of collected events. The string is any string used to represent the collected data.
|
||||
|
||||
std::map<std::string, std::list<std::pair<qint64,float> > > _points ;
|
||||
std::map<std::string, float> _totals ;
|
||||
std::map<std::string, ZeroInitFloat> _totals ;
|
||||
|
||||
QTimer *_timer ;
|
||||
|
||||
|
@ -88,12 +88,17 @@ void BWGraphSource::update()
|
||||
|
||||
lst.push_back(std::make_pair(ms,it->second)) ;
|
||||
|
||||
float& total(_totals[it->first].v) ;
|
||||
|
||||
total += it->second ;
|
||||
|
||||
unused_vals.erase(it->first) ;
|
||||
|
||||
for(std::list<std::pair<qint64,float> >::iterator it2=lst.begin();it2!=lst.end();)
|
||||
if( ms - (*it2).first > _time_limit_msecs)
|
||||
{
|
||||
//std::cerr << " removing old value with time " << (*it).first/1000.0f << std::endl;
|
||||
total -=(*it2).second ;
|
||||
it2 = lst.erase(it2) ;
|
||||
}
|
||||
else
|
||||
@ -114,6 +119,7 @@ void BWGraphSource::update()
|
||||
{
|
||||
std::map<std::string,std::list<std::pair<qint64,float> > >::iterator tmp(it) ;
|
||||
++tmp;
|
||||
_totals.erase(it->first) ;
|
||||
_points.erase(it) ;
|
||||
it=tmp ;
|
||||
}
|
||||
@ -147,19 +153,31 @@ void BWGraphSource::update()
|
||||
break ;
|
||||
}
|
||||
|
||||
_total_duration_seconds = duration/1000.0 ;
|
||||
|
||||
// now update the totals, and possibly convert into an average if the unit requires it.
|
||||
|
||||
updateTotals();
|
||||
// updateTotals();
|
||||
|
||||
if(_current_unit == UNIT_KILOBYTES)
|
||||
for(std::map<std::string,float>::iterator it(_totals.begin());it!=_totals.end();++it)
|
||||
it->second /= (duration/1000.0) ;
|
||||
// if(_current_unit == UNIT_KILOBYTES)
|
||||
// for(std::map<std::string,ZeroInitFloat>::iterator it(_totals.begin());it!=_totals.end();++it)
|
||||
// it->second.v /= (duration/1000.0) ;
|
||||
|
||||
#ifdef BWGRAPH_DEBUG
|
||||
std::cerr << "Traffic history has size " << mTrafficHistory.size() << std::endl;
|
||||
#endif
|
||||
}
|
||||
|
||||
void BWGraphSource::getCumulatedValues(std::vector<float>& vals) const
|
||||
{
|
||||
if(_current_unit == UNIT_KILOBYTES && _total_duration_seconds > 0.0)
|
||||
for(std::map<std::string,ZeroInitFloat>::const_iterator it = _totals.begin();it!=_totals.end();++it)
|
||||
vals.push_back(it->second.v/_total_duration_seconds) ;
|
||||
else
|
||||
for(std::map<std::string,ZeroInitFloat>::const_iterator it = _totals.begin();it!=_totals.end();++it)
|
||||
vals.push_back(it->second.v) ;
|
||||
}
|
||||
|
||||
std::string BWGraphSource::makeSubItemName(uint16_t service_id,uint8_t sub_item_type) const
|
||||
{
|
||||
RsServiceInfoWithNames& s(mServiceInfoMap[service_id]) ;
|
||||
|
@ -32,6 +32,7 @@ public:
|
||||
|
||||
// re-derived from RSGraphSource
|
||||
|
||||
virtual void getCumulatedValues(std::vector<float>& vals) const;
|
||||
virtual void getValues(std::map<std::string,float>& values) const;
|
||||
virtual QString displayValue(float v) const;
|
||||
virtual QString legend(int i,float v,bool show_value=true) const;
|
||||
@ -67,6 +68,8 @@ private:
|
||||
int _friend_graph_type ;
|
||||
int _service_graph_type ;
|
||||
|
||||
float _total_duration_seconds ;
|
||||
|
||||
RsPeerId _current_selected_friend ;
|
||||
uint16_t _current_selected_service ;
|
||||
int _current_unit ;
|
||||
|
Loading…
Reference in New Issue
Block a user