]> git.sesse.net Git - ccbs/blobdiff - bigscreen/groupscreen.cpp
Fetch all the "max score for song" entries in one go instead of one at a time.
[ccbs] / bigscreen / groupscreen.cpp
index 6d38c4cca58e45102a459ddb982a749d24c2deae..fbdcc5ed89aac1ea9e44fe3ad7159b53e81b5936 100644 (file)
@@ -1,9 +1,10 @@
 #include <cstdio>
 #include <algorithm>
+#include <map>
 
 #include "groupscreen.h"
 #include "fetch_group.h"
-#include "fetch_max_score_for_song.h"
+#include "fetch_max_score_for_songs.h"
 #include "fetch_max_score_for_player.h"
 #include "fetch_needs_update.h"
 #include "fetch_highscore.h"
@@ -40,6 +41,13 @@ void GroupScreen::draw(unsigned char *buf)
        
        scores_changed.reset_flag();
 
+       /*
+        * We'll probably need some values from here later on (although not all), just fetch them
+        * all while we're at it.
+        */
+       std::map<unsigned, unsigned> song_scores;
+       conn.perform(FetchMaxScoreForSongs(tournament, &song_scores));
+       
        Group group;
        conn.perform(FetchGroup(tournament, round, parallel, &group));
        gettimeofday(&last_updated, NULL);
@@ -218,7 +226,7 @@ void GroupScreen::draw(unsigned char *buf)
                                unsigned max_score_this_song;
                                if (j->song.id != -1) {
                                        // random song, or we know what song the player picked
-                                       conn.perform(FetchMaxScoreForSong(tournament, j->song.id, &max_score_this_song));
+                                       max_score_this_song = song_scores[j->song.id];
                                } else {
                                        conn.perform(FetchMaxScoreForPlayer(tournament, i->id, round, &max_score_this_song));
                                }
@@ -350,7 +358,7 @@ void GroupScreen::draw(unsigned char *buf)
                        unsigned max_score_this_song;
                        if (next_song->song.id != -1) {
                                // random song, or we know what song the player picked
-                               conn.perform(FetchMaxScoreForSong(tournament, next_song->song.id, &max_score_this_song));
+                               max_score_this_song = song_scores[next_song->song.id];
                        } else {
                                conn.perform(FetchMaxScoreForPlayer(tournament, next_player->id, round, &max_score_this_song));
                        }