mirror of https://github.com/stella-emu/stella.git
Added scanline and framerate counter during emulation mode, similar to
the one in z26 with the '-n' option. This is activated with the new '-stats' commandline argument as well as dynamically during emulation with the 'Alt-l' key combo. git-svn-id: svn://svn.code.sf.net/p/stella/code/trunk@1521 8b62c5a3-ac7e-4cc8-8f21-d9a121418aba
This commit is contained in:
parent
bd0393352e
commit
f12a1a658c
|
@ -13,7 +13,7 @@
|
||||||
// See the file "license" for information on usage and redistribution of
|
// See the file "license" for information on usage and redistribution of
|
||||||
// this file, and for a DISCLAIMER OF ALL WARRANTIES.
|
// this file, and for a DISCLAIMER OF ALL WARRANTIES.
|
||||||
//
|
//
|
||||||
// $Id: Snapshot.cxx,v 1.19 2008-03-30 15:01:38 stephena Exp $
|
// $Id: Snapshot.cxx,v 1.20 2008-05-20 13:42:50 stephena Exp $
|
||||||
//============================================================================
|
//============================================================================
|
||||||
|
|
||||||
#include <zlib.h>
|
#include <zlib.h>
|
||||||
|
@ -38,7 +38,7 @@ void Snapshot::savePNG(FrameBuffer& framebuffer, const Properties& props,
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
// Make sure we have a 'clean' image, with no onscreen messages
|
// Make sure we have a 'clean' image, with no onscreen messages
|
||||||
framebuffer.hideMessage();
|
framebuffer.enableMessages(false);
|
||||||
|
|
||||||
// Get actual image dimensions. which are not always the same
|
// Get actual image dimensions. which are not always the same
|
||||||
// as the framebuffer dimensions
|
// as the framebuffer dimensions
|
||||||
|
@ -105,6 +105,8 @@ void Snapshot::savePNG(FrameBuffer& framebuffer, const Properties& props,
|
||||||
if(compmem) delete[] compmem;
|
if(compmem) delete[] compmem;
|
||||||
out.close();
|
out.close();
|
||||||
|
|
||||||
|
// Re-enabled old messages
|
||||||
|
framebuffer.enableMessages(true);
|
||||||
framebuffer.showMessage("Snapshot saved");
|
framebuffer.showMessage("Snapshot saved");
|
||||||
}
|
}
|
||||||
catch(const char *msg)
|
catch(const char *msg)
|
||||||
|
|
|
@ -13,7 +13,7 @@
|
||||||
// See the file "license" for information on usage and redistribution of
|
// See the file "license" for information on usage and redistribution of
|
||||||
// this file, and for a DISCLAIMER OF ALL WARRANTIES.
|
// this file, and for a DISCLAIMER OF ALL WARRANTIES.
|
||||||
//
|
//
|
||||||
// $Id: EventHandler.cxx,v 1.223 2008-05-16 12:17:22 stephena Exp $
|
// $Id: EventHandler.cxx,v 1.224 2008-05-20 13:42:50 stephena Exp $
|
||||||
//============================================================================
|
//============================================================================
|
||||||
|
|
||||||
#include <sstream>
|
#include <sstream>
|
||||||
|
@ -428,6 +428,9 @@ void EventHandler::poll(uInt32 time)
|
||||||
myOSystem->console().togglePhosphor();
|
myOSystem->console().togglePhosphor();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case SDLK_l:
|
||||||
|
myOSystem->frameBuffer().toggleFrameStats();
|
||||||
|
break;
|
||||||
#if 0
|
#if 0
|
||||||
// FIXME - these will be removed when a UI is added for event recording
|
// FIXME - these will be removed when a UI is added for event recording
|
||||||
case SDLK_e: // Alt-e starts/stops event recording
|
case SDLK_e: // Alt-e starts/stops event recording
|
||||||
|
|
|
@ -13,7 +13,7 @@
|
||||||
// See the file "license" for information on usage and redistribution of
|
// See the file "license" for information on usage and redistribution of
|
||||||
// this file, and for a DISCLAIMER OF ALL WARRANTIES.
|
// this file, and for a DISCLAIMER OF ALL WARRANTIES.
|
||||||
//
|
//
|
||||||
// $Id: FrameBuffer.cxx,v 1.128 2008-05-19 21:16:58 stephena Exp $
|
// $Id: FrameBuffer.cxx,v 1.129 2008-05-20 13:42:50 stephena Exp $
|
||||||
//============================================================================
|
//============================================================================
|
||||||
|
|
||||||
#include <sstream>
|
#include <sstream>
|
||||||
|
@ -45,7 +45,8 @@ FrameBuffer::FrameBuffer(OSystem* osystem)
|
||||||
myUsePhosphor(false),
|
myUsePhosphor(false),
|
||||||
myPhosphorBlend(77),
|
myPhosphorBlend(77),
|
||||||
myInitializedCount(0),
|
myInitializedCount(0),
|
||||||
myPausedCount(0)
|
myPausedCount(0),
|
||||||
|
myFrameStatsEnabled(false)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -124,6 +125,18 @@ void FrameBuffer::update()
|
||||||
// And update the screen
|
// And update the screen
|
||||||
drawMediaSource();
|
drawMediaSource();
|
||||||
|
|
||||||
|
// Show frame statistics
|
||||||
|
if(myFrameStatsEnabled)
|
||||||
|
{
|
||||||
|
// FIXME - sizes hardcoded for now; fix during UI refactoring
|
||||||
|
uInt32 scanlines = myOSystem->console().mediaSource().scanlines();
|
||||||
|
float fps = (scanlines <= 285 ? 15720.0 : 15600.0) / scanlines;
|
||||||
|
char msg[30];
|
||||||
|
sprintf(msg, "%u LINES %2.2f FPS", scanlines, fps);
|
||||||
|
fillRect(3, 3, 95, 9, kBGColor);
|
||||||
|
drawString(&myOSystem->font(), msg, 3, 3, 95, kBtnTextColor, kTextAlignCenter);
|
||||||
|
}
|
||||||
|
|
||||||
break; // S_EMULATE
|
break; // S_EMULATE
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -261,12 +274,36 @@ void FrameBuffer::showMessage(const string& message, MessagePosition position,
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
void FrameBuffer::hideMessage()
|
void FrameBuffer::toggleFrameStats()
|
||||||
{
|
{
|
||||||
|
showFrameStats(!myOSystem->settings().getBool("stats"));
|
||||||
|
}
|
||||||
|
|
||||||
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
void FrameBuffer::showFrameStats(bool enable)
|
||||||
|
{
|
||||||
|
myOSystem->settings().setBool("stats", enable);
|
||||||
|
myFrameStatsEnabled = enable;
|
||||||
|
myOSystem->eventHandler().refreshDisplay(true); // Do this twice for
|
||||||
|
myOSystem->eventHandler().refreshDisplay(true); // double-buffered modes
|
||||||
|
}
|
||||||
|
|
||||||
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
void FrameBuffer::enableMessages(bool enable)
|
||||||
|
{
|
||||||
|
if(enable)
|
||||||
|
{
|
||||||
|
// Only re-anable frame stats if they were already enabled before
|
||||||
|
myFrameStatsEnabled = myOSystem->settings().getBool("stats");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Temporarily disable frame stats
|
||||||
|
myFrameStatsEnabled = false;
|
||||||
|
|
||||||
// Erase old messages on the screen
|
// Erase old messages on the screen
|
||||||
if(myMessage.counter > 0)
|
|
||||||
{
|
|
||||||
myMessage.counter = 0;
|
myMessage.counter = 0;
|
||||||
|
|
||||||
myOSystem->eventHandler().refreshDisplay(true); // Do this twice for
|
myOSystem->eventHandler().refreshDisplay(true); // Do this twice for
|
||||||
myOSystem->eventHandler().refreshDisplay(true); // double-buffered modes
|
myOSystem->eventHandler().refreshDisplay(true); // double-buffered modes
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,7 +13,7 @@
|
||||||
// See the file "license" for information on usage and redistribution of
|
// See the file "license" for information on usage and redistribution of
|
||||||
// this file, and for a DISCLAIMER OF ALL WARRANTIES.
|
// this file, and for a DISCLAIMER OF ALL WARRANTIES.
|
||||||
//
|
//
|
||||||
// $Id: FrameBuffer.hxx,v 1.94 2008-03-13 22:58:06 stephena Exp $
|
// $Id: FrameBuffer.hxx,v 1.95 2008-05-20 13:42:50 stephena Exp $
|
||||||
//============================================================================
|
//============================================================================
|
||||||
|
|
||||||
#ifndef FRAMEBUFFER_HXX
|
#ifndef FRAMEBUFFER_HXX
|
||||||
|
@ -101,7 +101,7 @@ enum {
|
||||||
All GUI elements (ala ScummVM) are drawn here as well.
|
All GUI elements (ala ScummVM) are drawn here as well.
|
||||||
|
|
||||||
@author Stephen Anthony
|
@author Stephen Anthony
|
||||||
@version $Id: FrameBuffer.hxx,v 1.94 2008-03-13 22:58:06 stephena Exp $
|
@version $Id: FrameBuffer.hxx,v 1.95 2008-05-20 13:42:50 stephena Exp $
|
||||||
*/
|
*/
|
||||||
class FrameBuffer
|
class FrameBuffer
|
||||||
{
|
{
|
||||||
|
@ -146,9 +146,20 @@ class FrameBuffer
|
||||||
int color = kTextColorHi);
|
int color = kTextColorHi);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Hides any onscreen messages.
|
Toggles showing or hiding framerate statistics.
|
||||||
*/
|
*/
|
||||||
void hideMessage();
|
void toggleFrameStats();
|
||||||
|
|
||||||
|
/**
|
||||||
|
Shows a message containing frame statistics for the current frame.
|
||||||
|
*/
|
||||||
|
void showFrameStats(bool enable);
|
||||||
|
|
||||||
|
/**
|
||||||
|
Enable/disable any pending messages. Disabled messages aren't removed
|
||||||
|
from the message queue; they're just not redrawn into the framebuffer.
|
||||||
|
*/
|
||||||
|
void enableMessages(bool enable);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Returns the current width of the framebuffer *before* any scaling.
|
Returns the current width of the framebuffer *before* any scaling.
|
||||||
|
@ -520,7 +531,7 @@ class FrameBuffer
|
||||||
void setWindowIcon();
|
void setWindowIcon();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Set the icon for the main SDL window.
|
Draw pending messages.
|
||||||
*/
|
*/
|
||||||
void drawMessage();
|
void drawMessage();
|
||||||
|
|
||||||
|
@ -570,6 +581,10 @@ class FrameBuffer
|
||||||
};
|
};
|
||||||
Message myMessage;
|
Message myMessage;
|
||||||
|
|
||||||
|
// Used to show frame statistics (scanline count and framerate)
|
||||||
|
Message myFrameStats;
|
||||||
|
bool myFrameStatsEnabled;
|
||||||
|
|
||||||
// The list of all available video modes for this framebuffer
|
// The list of all available video modes for this framebuffer
|
||||||
VideoModeList myWindowedModeList;
|
VideoModeList myWindowedModeList;
|
||||||
VideoModeList myFullscreenModeList;
|
VideoModeList myFullscreenModeList;
|
||||||
|
|
|
@ -13,7 +13,7 @@
|
||||||
// See the file "license" for information on usage and redistribution of
|
// See the file "license" for information on usage and redistribution of
|
||||||
// this file, and for a DISCLAIMER OF ALL WARRANTIES.
|
// this file, and for a DISCLAIMER OF ALL WARRANTIES.
|
||||||
//
|
//
|
||||||
// $Id: OSystem.cxx,v 1.126 2008-05-19 21:16:58 stephena Exp $
|
// $Id: OSystem.cxx,v 1.127 2008-05-20 13:42:50 stephena Exp $
|
||||||
//============================================================================
|
//============================================================================
|
||||||
|
|
||||||
#include <cassert>
|
#include <cassert>
|
||||||
|
@ -358,6 +358,7 @@ bool OSystem::createFrameBuffer(bool showmessage)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
myFrameBuffer->showFrameStats(mySettings->getBool("stats"));
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,7 +13,7 @@
|
||||||
// See the file "license" for information on usage and redistribution of
|
// See the file "license" for information on usage and redistribution of
|
||||||
// this file, and for a DISCLAIMER OF ALL WARRANTIES.
|
// this file, and for a DISCLAIMER OF ALL WARRANTIES.
|
||||||
//
|
//
|
||||||
// $Id: Settings.cxx,v 1.144 2008-05-16 12:04:34 stephena Exp $
|
// $Id: Settings.cxx,v 1.145 2008-05-20 13:42:50 stephena Exp $
|
||||||
//============================================================================
|
//============================================================================
|
||||||
|
|
||||||
#include <cassert>
|
#include <cassert>
|
||||||
|
@ -101,6 +101,7 @@ Settings::Settings(OSystem* osystem)
|
||||||
setInternal("showinfo", "false");
|
setInternal("showinfo", "false");
|
||||||
setInternal("tiafloat", "true");
|
setInternal("tiafloat", "true");
|
||||||
setInternal("avoxport", "");
|
setInternal("avoxport", "");
|
||||||
|
setInternal("stats", "false");
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
@ -327,6 +328,7 @@ void Settings::usage()
|
||||||
<< " -autoslot <1|0> Automatically switch to next save slot when state saving\n"
|
<< " -autoslot <1|0> Automatically switch to next save slot when state saving\n"
|
||||||
<< " -ssdir <path> The directory to save snapshot files to\n"
|
<< " -ssdir <path> The directory to save snapshot files to\n"
|
||||||
<< " -sssingle <1|0> Generate single snapshot instead of many\n"
|
<< " -sssingle <1|0> Generate single snapshot instead of many\n"
|
||||||
|
<< " -stats <1|0> Show scanline and framerate info during emulation\n"
|
||||||
<< endl
|
<< endl
|
||||||
<< " -listrominfo Display contents of stella.pro, one line per ROM entry\n"
|
<< " -listrominfo Display contents of stella.pro, one line per ROM entry\n"
|
||||||
<< " -rominfo <rom> Display detailed information for the given ROM\n"
|
<< " -rominfo <rom> Display detailed information for the given ROM\n"
|
||||||
|
|
|
@ -13,7 +13,7 @@
|
||||||
// See the file "license" for information on usage and redistribution of
|
// See the file "license" for information on usage and redistribution of
|
||||||
// this file, and for a DISCLAIMER OF ALL WARRANTIES.
|
// this file, and for a DISCLAIMER OF ALL WARRANTIES.
|
||||||
//
|
//
|
||||||
// $Id: DialogContainer.cxx,v 1.42 2008-05-11 21:18:35 stephena Exp $
|
// $Id: DialogContainer.cxx,v 1.43 2008-05-20 13:42:50 stephena Exp $
|
||||||
//============================================================================
|
//============================================================================
|
||||||
|
|
||||||
#include "OSystem.hxx"
|
#include "OSystem.hxx"
|
||||||
|
@ -137,7 +137,7 @@ void DialogContainer::reStack()
|
||||||
addDialog(myBaseDialog);
|
addDialog(myBaseDialog);
|
||||||
|
|
||||||
// Erase any previous messages
|
// Erase any previous messages
|
||||||
myOSystem->frameBuffer().hideMessage();
|
myOSystem->frameBuffer().enableMessages(false);
|
||||||
|
|
||||||
// Reset all continuous events
|
// Reset all continuous events
|
||||||
reset();
|
reset();
|
||||||
|
|
Loading…
Reference in New Issue