Skip to content

Commit

Permalink
mGUI: Improve loading speed (fixes #1957)
Browse files Browse the repository at this point in the history
  • Loading branch information
endrift committed Nov 29, 2020
1 parent 20f8baa commit 2d6087a
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 6 deletions.
1 change: 1 addition & 0 deletions CHANGES
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,7 @@ Misc:
- FFmpeg: Add looping option for GIF/APNG
- mGUI: Show battery percentage
- mGUI: Skip second scan loop when possible
- mGUI: Improve loading speed (fixes mgba.io/i/1957)
- Qt: Renderer can be changed while a game is running
- Qt: Add hex index to palette view
- Qt: Add transformation matrix info to sprite view
Expand Down
15 changes: 13 additions & 2 deletions src/core/core.c
Original file line number Diff line number Diff line change
Expand Up @@ -153,12 +153,23 @@ bool mCorePreloadVFCB(struct mCore* core, struct VFile* vf, void (cb)(size_t, si
vfm = VFileMemChunk(NULL, size);
#endif

uint8_t buffer[2048];
size_t chunkSize;
#ifdef FIXED_ROM_BUFFER
uint8_t* buffer = (uint8_t*) romBuffer;
chunkSize = 0x10000;
#else
uint8_t buffer[0x4000];
chunkSize = sizeof(buffer);
#endif
ssize_t read;
size_t total = 0;
vf->seek(vf, 0, SEEK_SET);
while ((read = vf->read(vf, buffer, sizeof(buffer))) > 0) {
while ((read = vf->read(vf, buffer, chunkSize)) > 0) {
#ifdef FIXED_ROM_BUFFER
buffer += read;
#else
vfm->write(vfm, buffer, read);
#endif
total += read;
if (cb) {
cb(total, size, context);
Expand Down
10 changes: 6 additions & 4 deletions src/feature/gui/gui-runner.c
Original file line number Diff line number Diff line change
Expand Up @@ -296,10 +296,6 @@ static void _log(struct mLogger* logger, int category, enum mLogLevel level, con

static void _updateLoading(size_t read, size_t size, void* context) {
struct mGUIRunner* runner = context;
if (read & 0x3FFFF) {
return;
}

runner->params.drawStart();
if (runner->params.guiPrepare) {
runner->params.guiPrepare();
Expand Down Expand Up @@ -388,7 +384,13 @@ void mGUIRun(struct mGUIRunner* runner, const char* path) {
mInputMapInit(&runner->core->inputMap, &GBAInputInfo);

struct VFile* rom = mDirectorySetOpenPath(&runner->core->dirs, path, runner->core->isROM);
if (runner->setFrameLimiter) {
runner->setFrameLimiter(runner, false);
}
found = mCorePreloadVFCB(runner->core, rom, _updateLoading, runner);
if (runner->setFrameLimiter) {
runner->setFrameLimiter(runner, true);
}

#ifdef FIXED_ROM_BUFFER
extern size_t romBufferSize;
Expand Down

0 comments on commit 2d6087a

Please sign in to comment.