@@ -120,50 +120,11 @@ namespace rsx
120120
121121 // Parse entries (multithreaded)
122122 const std::vector<game_enumeration<big_picture_game_entry>::path_entry>& entries = m_game_enumeration.path_entries ();
123- const usz thread_count = std::min<usz>(utils::get_thread_count (), entries.size ());
124- if ( thread_count > 1 )
123+ usz thread_count = std::min<usz>(utils::get_thread_count (), entries.size ());
124+ map_workload ( " BPM Parser " sv, thread_count, entries. size (), [ this , &entries](usz index )
125125 {
126- atomic_t <usz> entry_indexer = 0 ;
127- const auto parse_entries = [this , &entry_indexer, &entries]()
128- {
129- while (thread_ctrl::state () != thread_state::aborting)
130- {
131- // Make sure entry_indexer does not exceed m_install_entries
132- const usz index = entry_indexer.fetch_op ([&entries](usz& v)
133- {
134- if (v < entries.size ())
135- {
136- v++;
137- return true ;
138- }
139-
140- return false ;
141- }).first ;
142-
143- if (index >= entries.size ())
144- {
145- break ;
146- }
147-
148- m_game_enumeration.parse_entry (entries[index]);
149- }
150- };
151- named_thread_group workers (" BPM Parser " sv, ::narrow<u32 >(thread_count) - 1 , [&parse_entries]()
152- {
153- parse_entries ();
154- });
155-
156- parse_entries ();
157-
158- workers.join ();
159- }
160- else
161- {
162- for (const game_enumeration<big_picture_game_entry>::path_entry& entry : entries)
163- {
164- m_game_enumeration.parse_entry (entry);
165- }
166- }
126+ m_game_enumeration.parse_entry (entries[index]);
127+ });
167128
168129 // Try to update the app version for disc games if there is a patch
169130 // Also try to find updated game icons and movies
@@ -186,11 +147,19 @@ namespace rsx
186147 return a.name < b.name ;
187148 });
188149
189- finish_reload ();
150+ // Create tiles (multithreaded)
151+ std::vector<std::unique_ptr<big_picture_game_tile>> tiles (m_games.size ());
152+ thread_count = std::min<usz>(utils::get_thread_count (), tiles.size ());
153+ map_workload (" BPM Tiles " sv, thread_count, tiles.size (), [this , &tiles](usz index)
154+ {
155+ tiles[index] = std::make_unique<big_picture_game_tile>(m_games[index], m_tile_size);
156+ });
157+
158+ finish_reload (std::move (tiles));
190159 });
191160 }
192161
193- void big_picture_game_grid::finish_reload ()
162+ void big_picture_game_grid::finish_reload (std::vector<std::unique_ptr<big_picture_game_tile>>&& tiles )
194163 {
195164 std::lock_guard lock (m_reload_mutex);
196165
@@ -206,7 +175,7 @@ namespace rsx
206175
207176 std::unique_ptr<horizontal_layout> row;
208177
209- for (usz i = 0 ; i < m_games .size (); i++)
178+ for (usz i = 0 ; i < tiles .size (); i++)
210179 {
211180 if (i % m_columns == 0 )
212181 {
@@ -219,8 +188,7 @@ namespace rsx
219188 row->pack_padding = 20 ;
220189 }
221190
222- auto tile = std::make_unique<big_picture_game_tile>(m_games[i], m_tile_size);
223- m_tiles.push_back (row->add_element (tile));
191+ m_tiles.push_back (row->add_element (tiles[i]));
224192 }
225193
226194 if (row)
0 commit comments