BizHawk/yabause/src/psp/profile.h

107 lines
3.7 KiB
C

/* src/psp/profile.h: Profiling header for Yabause core
Copyright 2009 Andrew Church
This file is part of Yabause.
Yabause is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
Yabause is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with Yabause; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#ifndef PSP_PROFILE_H
#define PSP_PROFILE_H
#include <pspuser.h> // for sceKernelGetSystemTimeLow()
/*************************************************************************/
/* Tracking slots */
enum {
PROF__UNKNOWN = 0, // For any non-matching name
PROF_Total_Emulation,
PROF_MSH2,
PROF_68K,
PROF_SCSP,
PROF_SCU,
PROF_SSH2,
PROF_CDB,
PROF_CDIO,
PROF_SMPC,
PROF_hblankin,
PROF_hblankout,
PROF_VDP1_VDP2,
PROF_vblankin,
PROF__OVERHEAD, // Internal use only (for calculating profiling overhead)
PROF__END
};
/*-----------------------------------------------------------------------*/
/* Helper macro that converts string parameters to PROFILE_{START,STOP}()
* into PROF_* indices. Note that as long as the parameter is a string
* literal, compiler optimization will convert the whole thing into a
* single compile-time constant. */
#define PROFILE_INDEX(name) \
(strcmp((name),"Total Emulation") == 0 ? PROF_Total_Emulation : \
strcmp((name),"MSH2" ) == 0 ? PROF_MSH2 : \
strcmp((name),"68K" ) == 0 ? PROF_68K : \
strcmp((name),"SCSP" ) == 0 ? PROF_SCSP : \
strcmp((name),"SCU" ) == 0 ? PROF_SCU : \
strcmp((name),"SSH2" ) == 0 ? PROF_SSH2 : \
strcmp((name),"CDB" ) == 0 ? PROF_CDB : \
strcmp((name),"CDIO" ) == 0 ? PROF_CDIO : \
strcmp((name),"SMPC" ) == 0 ? PROF_SMPC : \
strcmp((name),"hblankin" ) == 0 ? PROF_hblankin : \
strcmp((name),"hblankout" ) == 0 ? PROF_hblankout : \
strcmp((name),"VDP1/VDP2" ) == 0 ? PROF_VDP1_VDP2 : \
strcmp((name),"vblankin" ) == 0 ? PROF_vblankin : \
PROF__UNKNOWN)
/*-----------------------------------------------------------------------*/
/* Macros called by the Yabause core. */
#define PROFILE_START(name) \
psp_profile_start(PROFILE_INDEX((name)), sceKernelGetSystemTimeLow())
#define PROFILE_STOP(name) \
psp_profile_stop(PROFILE_INDEX((name)), sceKernelGetSystemTimeLow())
#define PROFILE_PRINT() psp_profile_print()
#define PROFILE_RESET() psp_profile_reset()
/*-----------------------------------------------------------------------*/
/* Function declarations */
extern void psp_profile_reset(void);
extern void psp_profile_start(int slot, uint32_t timestamp);
extern void psp_profile_stop(int slot, uint32_t timestamp);
extern void psp_profile_print(void);
/*************************************************************************/
#endif // PSP_PROFILE_H
/*
* Local variables:
* c-file-style: "stroustrup"
* c-file-offsets: ((case-label . *) (statement-case-intro . *))
* indent-tabs-mode: nil
* End:
*
* vim: expandtab shiftwidth=4:
*/