[Scummvm-devel] Slowdowns in SCI and SAGA

yotam barnoy yotambarnoy at gmail.com
Thu Nov 26 05:55:18 CET 2009


On Wed, Nov 25, 2009 at 10:47 PM, Walter van Niftrik <
walter at vanniftrik-it.nl> wrote:

> I'm a little confused now though, as the configure script seems to set
> DISABLE_DOSBOX_OPL for PSP, so you should still be using the same old OPL
> emulator as before.
>
> So something doesn't quite add up here. Are you using a custom Makefile
> perhaps?
>
> Regards,
>
> Walter
>

I am using a custom makefile, and I try both the DOSBOX and MAME OPLs. Here
are the main results I get from gprof for both cases:

MAME:

  %   cumulative   self              self     total
 time   seconds   seconds    calls   s/call   s/call  name
 48.69     26.07    26.07 25996761     0.00     0.00
OPL::MAME::OPL_CALC_SLOT(OPL::MAME::fm_opl_slot*)
 15.21     34.22     8.15 12998381     0.00     0.00
OPL::MAME::OPL_CALC_CH(OPL::MAME::fm_opl_channel*)
 12.83     41.09     6.87     9608     0.00     0.00
OSystem_PSP::unlockMutex(OpaqueMutex*)
  4.93     43.72     2.64  2883584     0.00     0.00
_ZN5AudioL10clampedAddERsi
  3.41     45.55     1.83   106090     0.00     0.00
PowerManager::beginCriticalSection(bool)
  2.96     47.13     1.58  1444264     0.00     0.00  int CLIP<int>(int,
int, int)
  2.59     48.52     1.39      301     0.00     0.00
OSystem_PSP::delayMillis(unsigned int)

with functional breakdown:

                0.01   35.83    8539/8539
Sci::MidiDriver_Adlib::generateSamples(short*, int) [7]
[8]     66.9    0.01   35.83    8539
OPL::MAME::OPL::readBuffer(short*, int) [8]
                0.03   35.80    8539/8539
OPL::MAME::YM3812UpdateOne(OPL::MAME::fm_opl_f*, short*, int) [9]
-----------------------------------------------
                0.03   35.80    8539/8539
OPL::MAME::OPL::readBuffer(short*, int) [8]
[9]     66.9    0.03   35.80    8539
OPL::MAME::YM3812UpdateOne(OPL::MAME::fm_opl_f*, short*, int) [9]
                8.15   26.07 12998381/12998381
OPL::MAME::OPL_CALC_CH(OPL::MAME::fm_opl_channel*) [10]
                1.58    0.00 1444264/1444264     int CLIP<int>(int, int,
int) [39]
-----------------------------------------------
                8.15   26.07 12998381/12998381
OPL::MAME::YM3812UpdateOne(OPL::MAME::fm_opl_f*, short*, int) [9]
[10]    63.9    8.15   26.07 12998381
OPL::MAME::OPL_CALC_CH(OPL::MAME::fm_opl_channel*) [10]
               26.07    0.00 25996761/25996761
OPL::MAME::OPL_CALC_SLOT(OPL::MAME::fm_opl_slot*) [11]
-----------------------------------------------
               26.07    0.00 25996761/25996761
OPL::MAME::OPL_CALC_CH(OPL::MAME::fm_opl_channel*) [10]
[11]    48.7   26.07    0.00 25996761
OPL::MAME::OPL_CALC_SLOT(OPL::MAME::fm_opl_slot*) [11]
-----------------------------------------------


and here's using the Dosbox OPL:

  %   cumulative   self              self     total
 time   seconds   seconds    calls   s/call   s/call  name
 39.00     40.73    40.73  3652062     0.00     0.00
OPL::DOSBox::OPL3::operator_output(OPL::DOSBox::OPL3::operator_struct*, int,
int)
 23.68     65.47    24.73     6063     0.00     0.00
OSystem_PSP::unlockMutex(OpaqueMutex*)
  6.51     72.27     6.80     1406     0.00     0.00
OSystem_PSP::delayMillis(unsigned int)
  5.17     77.66     5.40  1826031     0.00     0.00
OPL::DOSBox::OPL3::operator_decay(OPL::DOSBox::OPL3::operator_struct*)
  4.04     81.88     4.22
OPL::DOSBox::OPL3::operator_attack(OPL::DOSBox::OPL3::operator_struct*)
  3.77     85.82     3.94  3652062     0.00     0.00
OPL::DOSBox::OPL3::operator_advance(OPL::DOSBox::OPL3::operator_struct*,
int)
  3.12     89.08     3.26
OPL::DOSBox::OPL3::operator_release(OPL::DOSBox::OPL3::operator_struct*)
  2.31     91.49     2.41      539     0.00     0.00
PSPKeyboard::isVisible()
  2.18     93.77     2.28   140479     0.00     0.00
PowerManager::beginCriticalSection(bool)

with functional breakdown:

                0.01   51.34    2014/2014
Sci::MidiDriver_Adlib::generateSamples(short*, int) [7]
[8]     49.2    0.01   51.34    2014
OPL::DOSBox::OPL::readBuffer(short*, int) [8]
                0.00   51.34    2014/2014
OPL::DOSBox::OPL3::Handler::generate(short*, unsigned int) [9]
-----------------------------------------------
                0.00   51.34    2014/2014
OPL::DOSBox::OPL::readBuffer(short*, int) [8]
[9]     49.2    0.00   51.34    2014
OPL::DOSBox::OPL3::Handler::generate(short*, unsigned int) [9]
                0.15   51.19    2014/2014
OPL::DOSBox::OPL3::adlib_getsample(short*, int) [10]
-----------------------------------------------
                0.15   51.19    2014/2014
OPL::DOSBox::OPL3::Handler::generate(short*, unsigned int) [9]
[10]    49.2    0.15   51.19    2014
OPL::DOSBox::OPL3::adlib_getsample(short*, int) [10]
               40.73    0.00 3652062/3652062
OPL::DOSBox::OPL3::operator_output(OPL::DOSBox::OPL3::operator_struct*, int,
int) [11]
                5.40    0.00 1826031/1826031
OPL::DOSBox::OPL3::operator_decay(OPL::DOSBox::OPL3::operator_struct*) [26]
                3.94    0.00 3652062/3652062
OPL::DOSBox::OPL3::operator_advance(OPL::DOSBox::OPL3::operator_struct*,
int) [30]
                0.58    0.00  680480/680480
_ZN3OPL6DOSBox4OPL3L8clipit16EiPs [87]
                0.55    0.00 1826031/1826031
OPL::DOSBox::OPL3::operator_sustain(OPL::DOSBox::OPL3::operator_struct*)
[90]
-----------------------------------------------
               40.73    0.00 3652062/3652062
OPL::DOSBox::OPL3::adlib_getsample(short*, int) [10]
[11]    39.0   40.73    0.00 3652062
OPL::DOSBox::OPL3::operator_output(OPL::DOSBox::OPL3::operator_struct*, int,
int) [11]
-----------------------------------------------

as you can tell, using Dosbox produces slightly better results.

Regards,
Yotam
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.scummvm.org/pipermail/scummvm-devel/attachments/20091126/292818ad/attachment.html>


More information about the Scummvm-devel mailing list