[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Wesnoth-cvs-commits] wesnoth/src network.cpp network.hpp network_wor...
From: |
Jon Daniel |
Subject: |
[Wesnoth-cvs-commits] wesnoth/src network.cpp network.hpp network_wor... |
Date: |
Fri, 05 Aug 2005 17:53:07 -0400 |
CVSROOT: /cvsroot/wesnoth
Module name: wesnoth
Branch:
Changes by: Jon Daniel <address@hidden> 05/08/05 21:53:07
Modified files:
src : network.cpp network.hpp network_worker.cpp
network_worker.hpp show_dialog.cpp
Log message:
* Improved socket statistics with separate send and receive stats for
each socket
CVSWeb URLs:
http://savannah.gnu.org/cgi-bin/viewcvs/wesnoth/wesnoth/src/network.cpp.diff?tr1=1.68&tr2=1.69&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/wesnoth/wesnoth/src/network.hpp.diff?tr1=1.27&tr2=1.28&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/wesnoth/wesnoth/src/network_worker.cpp.diff?tr1=1.37&tr2=1.38&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/wesnoth/wesnoth/src/network_worker.hpp.diff?tr1=1.4&tr2=1.5&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/wesnoth/wesnoth/src/show_dialog.cpp.diff?tr1=1.135&tr2=1.136&r1=text&r2=text
Patches:
Index: wesnoth/src/network.cpp
diff -u wesnoth/src/network.cpp:1.68 wesnoth/src/network.cpp:1.69
--- wesnoth/src/network.cpp:1.68 Wed Jul 27 13:16:38 2005
+++ wesnoth/src/network.cpp Fri Aug 5 21:53:03 2005
@@ -1,4 +1,4 @@
-/* $Id: network.cpp,v 1.68 2005/07/27 13:16:38 ott Exp $ */
+/* $Id: network.cpp,v 1.69 2005/08/05 21:53:03 j_daniel Exp $ */
/*
Copyright (C) 2003-5 by David White <address@hidden>
Part of the Battle for Wesnoth Project http://www.wesnoth.org/
@@ -704,9 +704,13 @@
return str.str();
}
-std::pair<int,int> current_transfer_stats()
+statistics get_send_stats(connection handle)
{
- return network_worker_pool::get_current_transfer_stats();
+ return
network_worker_pool::get_current_transfer_stats(get_socket(handle)).first;
+}
+statistics get_receive_stats(connection handle)
+{
+ return
network_worker_pool::get_current_transfer_stats(get_socket(handle)).second;
}
} //end namespace network
Index: wesnoth/src/network.hpp
diff -u wesnoth/src/network.hpp:1.27 wesnoth/src/network.hpp:1.28
--- wesnoth/src/network.hpp:1.27 Wed Jul 20 08:22:37 2005
+++ wesnoth/src/network.hpp Fri Aug 5 21:53:03 2005
@@ -1,4 +1,4 @@
-/* $Id: network.hpp,v 1.27 2005/07/20 08:22:37 ott Exp $ */
+/* $Id: network.hpp,v 1.28 2005/08/05 21:53:03 j_daniel Exp $ */
/*
Copyright (C) 2003-5 by David White <address@hidden>
Part of the Battle for Wesnoth Project http://www.wesnoth.org/
@@ -136,9 +136,6 @@
//function to get the remote ip address of a socket
std::string ip_address(connection connection_num);
-//function to see the number of bytes being processed on the current socket
-std::pair<int,int> current_transfer_stats();
-
struct connection_stats
{
connection_stats(int sent, int received, int connected_at);
@@ -158,6 +155,37 @@
void disconnect();
};
+struct statistics
+{
+ statistics() : total(0), current(0), current_max(0) {}
+ void fresh_current(size_t len)
+ {
+ current = 0;
+ current_max = len;
+ }
+ void transfer(size_t size)
+ {
+ total += size;
+ current += size;
+ }
+ bool operator==(const statistics& stats)
+ {
+ return total == stats.total && current == stats.current &&
current_max == stats.current_max;
+ }
+ bool operator!=(const statistics& stats)
+ {
+ return !operator==(stats);
+ }
+ size_t total;
+ size_t current;
+ size_t current_max;
+};
+
+//function to see the number of bytes being processed on the current socket
+statistics get_send_stats(connection handle);
+statistics get_receive_stats(connection handle);
+
}
+
#endif
Index: wesnoth/src/network_worker.cpp
diff -u wesnoth/src/network_worker.cpp:1.37 wesnoth/src/network_worker.cpp:1.38
--- wesnoth/src/network_worker.cpp:1.37 Fri Aug 5 13:13:30 2005
+++ wesnoth/src/network_worker.cpp Fri Aug 5 21:53:03 2005
@@ -1,4 +1,4 @@
-/* $Id: network_worker.cpp,v 1.37 2005/08/05 13:13:30 j_daniel Exp $ */
+/* $Id: network_worker.cpp,v 1.38 2005/08/05 21:53:03 j_daniel Exp $ */
/*
Copyright (C) 2003-5 by David White <address@hidden>
Part of the Battle for Wesnoth Project http://www.wesnoth.org/
@@ -57,7 +57,11 @@
enum SOCKET_STATE { SOCKET_READY, SOCKET_LOCKED, SOCKET_ERROR,
SOCKET_INTERRUPT };
typedef std::map<TCPsocket,SOCKET_STATE> socket_state_map;
+typedef std::map<TCPsocket, std::pair<network::statistics,network::statistics>
> socket_stats_map;
+
socket_state_map sockets_locked;
+socket_stats_map transfer_stats;
+
int socket_errors = 0;
threading::mutex* global_mutex = NULL;
threading::condition* cond = NULL;
@@ -67,9 +71,10 @@
SOCKET_STATE send_buf(TCPsocket sock, std::vector<char>& buf) {
size_t upto = 0;
size_t size = buf.size();
-
- current_transfer_stats.first = 0;
- current_transfer_stats.second = static_cast<int>(size);
+ {
+ const threading::lock lock(*global_mutex);
+ transfer_stats[sock].first.fresh_current(size);
+ }
while(upto < size) {
{
@@ -84,8 +89,11 @@
if(res < 0 || res != bytes_to_send && errno != EAGAIN)
return SOCKET_ERROR;
- current_transfer_stats.first += res;
upto += res;
+ {
+ const threading::lock lock(*global_mutex);
+ transfer_stats[sock].first.transfer(res);
+ }
}
return SOCKET_READY;
}
@@ -124,8 +132,10 @@
char* beg = &buf[0];
const char* const end = beg + len;
- current_transfer_stats.first = 0;
- current_transfer_stats.second = len;
+ {
+ const threading::lock lock(*global_mutex);
+ transfer_stats[sock].second.fresh_current(len);
+ }
while(beg != end) {
{
@@ -145,17 +155,18 @@
SDLNet_FreeSocketSet(set);
return SOCKET_ERROR;
}
- // receive one byte at a time
- const int len = SDLNet_TCP_Recv(sock,beg, 1);
- if(len <= 0) {
+
+ if(SDLNet_TCP_Recv(sock, beg, 1) <= 0) {
SDLNet_TCP_DelSocket(set, sock);
SDLNet_FreeSocketSet(set);
return SOCKET_ERROR;
}
-
- beg += len;
-
- current_transfer_stats.first = beg - &buf[0];
+ ++beg;
+ {
+ const threading::lock lock(*global_mutex);
+ ++transfer_stats[sock].second.total;
+ ++transfer_stats[sock].second.current;
+ }
}
SDLNet_TCP_DelSocket(set, sock);
SDLNet_FreeSocketSet(set);
@@ -294,6 +305,7 @@
cond = NULL;
sockets_locked.clear();
+ transfer_stats.clear();
LOG_NW << "exiting manager::~manager()\n";
}
@@ -426,9 +438,10 @@
return 0;
}
-std::pair<int,int> get_current_transfer_stats()
+std::pair<network::statistics,network::statistics>
get_current_transfer_stats(TCPsocket sock)
{
- return current_transfer_stats;
+ const threading::lock lock(*global_mutex);
+ return transfer_stats[sock];
}
}
Index: wesnoth/src/network_worker.hpp
diff -u wesnoth/src/network_worker.hpp:1.4 wesnoth/src/network_worker.hpp:1.5
--- wesnoth/src/network_worker.hpp:1.4 Wed Jul 20 08:22:37 2005
+++ wesnoth/src/network_worker.hpp Fri Aug 5 21:53:03 2005
@@ -1,4 +1,4 @@
-/* $Id: network_worker.hpp,v 1.4 2005/07/20 08:22:37 ott Exp $ */
+/* $Id: network_worker.hpp,v 1.5 2005/08/05 21:53:03 j_daniel Exp $ */
/*
Copyright (C) 2003-5 by David White <address@hidden>
Part of the Battle for Wesnoth Project http://www.wesnoth.org/
@@ -19,6 +19,11 @@
#include "SDL_net.h"
+namespace network
+{
+ struct statistics;
+}
+
namespace network_worker_pool
{
@@ -44,7 +49,7 @@
void close_socket(TCPsocket sock);
TCPsocket detect_error();
-std::pair<int,int> get_current_transfer_stats();
+std::pair<network::statistics,network::statistics>
get_current_transfer_stats(TCPsocket sock);
}
Index: wesnoth/src/show_dialog.cpp
diff -u wesnoth/src/show_dialog.cpp:1.135 wesnoth/src/show_dialog.cpp:1.136
--- wesnoth/src/show_dialog.cpp:1.135 Sat Jul 2 21:37:19 2005
+++ wesnoth/src/show_dialog.cpp Fri Aug 5 21:53:03 2005
@@ -1,4 +1,4 @@
-/* $Id: show_dialog.cpp,v 1.135 2005/07/02 21:37:19 ott Exp $ */
+/* $Id: show_dialog.cpp,v 1.136 2005/08/05 21:53:03 j_daniel Exp $ */
/*
Copyright (C) 2003 by David White <address@hidden>
Part of the Battle for Wesnoth Project http://www.wesnoth.org/
@@ -870,18 +870,18 @@
events::raise_draw_event();
disp.flip();
- std::pair<int,int> old_stats = network::current_transfer_stats();
+ network::statistics old_stats =
network::get_receive_stats(connection_num);
cfg.clear();
for(;;) {
const network::connection res =
network::receive_data(cfg,connection_num,100);
- const std::pair<int,int> stats =
network::current_transfer_stats();
- if(stats.first != -1 && stats.second != 0 && stats !=
old_stats) {
+ network::statistics stats =
network::get_receive_stats(connection_num);
+ if(stats.current_max != 0 && stats != old_stats) {
old_stats = stats;
-
progress.set_progress_percent((stats.first*100)/stats.second);
+
progress.set_progress_percent((stats.current*100)/stats.current_max);
std::ostringstream stream;
- stream << stats.first/1024 << "/" << stats.second/1024
<< _("KB");
+ stream << stats.current/1024 << "/" <<
stats.current_max/1024 << _("KB");
progress.set_text(stream.str());
}
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Wesnoth-cvs-commits] wesnoth/src network.cpp network.hpp network_wor...,
Jon Daniel <=