[Vm-dev] [commit] r2579 - Add a -timephases command-line switch to
print start load and run times.
commits at squeakvm.org
commits at squeakvm.org
Tue Jul 31 00:24:58 UTC 2012
Author: eliot
Date: 2012-07-30 17:24:58 -0700 (Mon, 30 Jul 2012)
New Revision: 2579
Modified:
branches/Cog/cygwinbuild/HowToBuild
branches/Cog/macbuild/HowToBuild
branches/Cog/nsbuild/cygwinbuild/HowToBuild
branches/Cog/nscogbuild/cygwinbuild/HowToBuild
branches/Cog/platforms/Cross/vm/sqVirtualMachine.c
branches/Cog/platforms/Mac OS/vm/sqMacMain.c
branches/Cog/platforms/Mac OS/vm/sqMacUIEventsUniversal.c
branches/Cog/platforms/Mac OS/vm/sqMacUnixCommandLineInterface.c
branches/Cog/platforms/unix/vm/sqUnixMain.c
branches/Cog/platforms/win32/vm/sqWin32Intel.c
branches/Cog/platforms/win32/vm/sqWin32Window.c
branches/Cog/stackbuild/cygwinbuild/HowToBuild
branches/Cog/unixbuild/HowToBuild
Log:
Add a -timephases command-line switch to print start load and run times.
Fix the bochs build instructions in HowToBuilds.
Modified: branches/Cog/cygwinbuild/HowToBuild
===================================================================
--- branches/Cog/cygwinbuild/HowToBuild 2012-07-31 00:07:39 UTC (rev 2578)
+++ branches/Cog/cygwinbuild/HowToBuild 2012-07-31 00:24:58 UTC (rev 2579)
@@ -69,7 +69,7 @@
Then build the libraries winbochs/{cpu/libcpu.a,disasm/libdisasm.a,fpu/libfpu.a}
$ cd ROOT/processors/IA32/winbochs
$ ./conf.COG
- $ ./makeem
+ $ ../bochs/makeem
and build the plugin either via make (for the entire VM) or just
$ cd ROOT/cygwinbuild
$ make build/vm/BochsIA32Plugin.dll
Modified: branches/Cog/macbuild/HowToBuild
===================================================================
--- branches/Cog/macbuild/HowToBuild 2012-07-31 00:07:39 UTC (rev 2578)
+++ branches/Cog/macbuild/HowToBuild 2012-07-31 00:24:58 UTC (rev 2579)
@@ -31,7 +31,7 @@
Then build the libraries macbochs/{cpu/libcpu.a,disasm/libdisasm.a,fpu/libfpu.a}
$ cd ROOT/processors/IA32/macbochs
$ ./conf.COG
- $ ./makeem
+ $ ../bochs/makeem
Then build the plugin:
$ cd ROOT/macbuild/BochsIA32Plugin
$ xcodebuild
Modified: branches/Cog/nsbuild/cygwinbuild/HowToBuild
===================================================================
--- branches/Cog/nsbuild/cygwinbuild/HowToBuild 2012-07-31 00:07:39 UTC (rev 2578)
+++ branches/Cog/nsbuild/cygwinbuild/HowToBuild 2012-07-31 00:24:58 UTC (rev 2579)
@@ -69,7 +69,7 @@
Then build the libraries winbochs/{cpu/libcpu.a,disasm/libdisasm.a,fpu/libfpu.a}
$ cd ROOT/processors/IA32/winbochs
$ ./conf.COG
- $ ./makeem
+ $ ../bochs/makeem
and build the plugin either via make (for the entire VM) or just
$ cd ROOT/nsbuild/cygwinbuild
$ make build/vm/BochsIA32Plugin.dll
Modified: branches/Cog/nscogbuild/cygwinbuild/HowToBuild
===================================================================
--- branches/Cog/nscogbuild/cygwinbuild/HowToBuild 2012-07-31 00:07:39 UTC (rev 2578)
+++ branches/Cog/nscogbuild/cygwinbuild/HowToBuild 2012-07-31 00:24:58 UTC (rev 2579)
@@ -70,7 +70,7 @@
Then build the libraries winbochs/{cpu/libcpu.a,disasm/libdisasm.a,fpu/libfpu.a}
$ cd ROOT/processors/IA32/winbochs
$ ./conf.COG
- $ ./makeem
+ $ ../bochs/makeem
and build the plugin either via make (for the entire VM) or just
$ cd ROOT/nscogbuild/cygwinbuild
$ make build/vm/BochsIA32Plugin.dll
Modified: branches/Cog/platforms/Cross/vm/sqVirtualMachine.c
===================================================================
--- branches/Cog/platforms/Cross/vm/sqVirtualMachine.c 2012-07-31 00:07:39 UTC (rev 2578)
+++ branches/Cog/platforms/Cross/vm/sqVirtualMachine.c 2012-07-31 00:24:58 UTC (rev 2579)
@@ -560,3 +560,42 @@
}
*stdout = stdoutStack[stdoutStackIdx--];
}
+
+void
+printPhaseTime(int phase)
+{
+ static int printTimes;
+ static usqLong lastusecs;
+ usqLong nowusecs, usecs;
+
+ if (phase == 1) {
+ time_t nowt;
+ struct tm nowtm;
+ printTimes = 1;
+ nowt = time(0);
+ nowtm = *localtime(&nowt);
+ printf("started at %s", asctime(&nowtm));
+ lastusecs = ioUTCMicrosecondsNow();
+ return;
+ }
+
+ if (!printTimes) return;
+
+ nowusecs = ioUTCMicrosecondsNow();
+ usecs = nowusecs - lastusecs;
+ lastusecs = nowusecs;
+#define m 1000000ULL
+#define k 1000ULL
+#define ul(v) (unsigned long)(v)
+ if (phase == 2)
+ printf("loaded in %lu.%03lus\n", ul(usecs/m), ul((usecs % m + k/2)/k));
+ if (phase == 3) {
+ printTimes = 0; /* avoid repeated printing if error during exit */
+ if (usecs >= 1ULL<<32)
+ printf("ran for a long time\n");
+ else
+ printf("ran for %lu.%03lus\n", ul(usecs/m), ul((usecs % m + k/2)/k));
+ }
+#undef m
+#undef k
+}
Modified: branches/Cog/platforms/Mac OS/vm/sqMacMain.c
===================================================================
--- branches/Cog/platforms/Mac OS/vm/sqMacMain.c 2012-07-31 00:07:39 UTC (rev 2578)
+++ branches/Cog/platforms/Mac OS/vm/sqMacMain.c 2012-07-31 00:24:58 UTC (rev 2579)
@@ -526,6 +526,8 @@
sqInt
ioExitWithErrorCode(int ec)
{
+ extern void printPhaseTime(int);
+ printPhaseTime(3);
UnloadScrap();
ioShutdownAllModules();
if (!gSqueakHeadless || gSqueakBrowserWasHeadlessButMadeFullScreen)
Modified: branches/Cog/platforms/Mac OS/vm/sqMacUIEventsUniversal.c
===================================================================
--- branches/Cog/platforms/Mac OS/vm/sqMacUIEventsUniversal.c 2012-07-31 00:07:39 UTC (rev 2578)
+++ branches/Cog/platforms/Mac OS/vm/sqMacUIEventsUniversal.c 2012-07-31 00:24:58 UTC (rev 2579)
@@ -1493,7 +1493,9 @@
{
// Run our event loop until quitNow is set.
#pragma unused(inHandlerCallRef,inEvent,inUserData)
+ extern void printPhaseTime(int);
SetUpCarbonEvent();
+ printPhaseTime(2);
interpret(); //Note the application under carbon event mgr starts running here
return 0;
}
Modified: branches/Cog/platforms/Mac OS/vm/sqMacUnixCommandLineInterface.c
===================================================================
--- branches/Cog/platforms/Mac OS/vm/sqMacUnixCommandLineInterface.c 2012-07-31 00:07:39 UTC (rev 2578)
+++ branches/Cog/platforms/Mac OS/vm/sqMacUnixCommandLineInterface.c 2012-07-31 00:24:58 UTC (rev 2579)
@@ -164,6 +164,10 @@
extern int blockOnError;
blockOnError = true;
return 1; }
+ else if (!strcmp(argv[0], "-timephases")) {
+ extern void printPhaseTime(int);
+ printPhaseTime(1);
+ return 1; }
#if (STACKVM || NewspeakVM) && !COGVM
else if (!strcmp(argv[0], "-sendtrace")) { extern sqInt sendTrace; sendTrace = 1; return 1; }
#endif
@@ -272,6 +276,7 @@
printf("\nCommon <option>s:\n");
printf(" -help print this help message, then exit\n");
printf(" -memory <size>[mk] use fixed heap size (added to image size)\n");
+ printf(" -timephases print start load and run times\n");
#if STACKVM || NewspeakVM
printf(" -breaksel selector set breakpoint on send of selector\n");
#endif
Modified: branches/Cog/platforms/unix/vm/sqUnixMain.c
===================================================================
--- branches/Cog/platforms/unix/vm/sqUnixMain.c 2012-07-31 00:07:39 UTC (rev 2578)
+++ branches/Cog/platforms/unix/vm/sqUnixMain.c 2012-07-31 00:24:58 UTC (rev 2579)
@@ -143,6 +143,7 @@
struct SqSound *snd= 0;
extern void dumpPrimTraceLog(void);
+extern void printPhaseTime(int);
char *getVersionInfo(int verbose);
@@ -1304,6 +1305,9 @@
else if (!strcmp(argv[0], "-notimer")) { useItimer = 0; return 1; }
else if (!strcmp(argv[0], "-nohandlers")) { installHandlers= 0; return 1; }
else if (!strcmp(argv[0], "-blockonerror")) { blockOnError = 1; return 1; }
+ else if (!strcmp(argv[0], "-timephases")) {
+ printPhaseTime(1);
+ return 1; }
#if !STACKVM && !COGVM
else if (!strncmp(argv[0],"-jit", 4)) { useJit = jitArgs(argv[0]+4); return 1; }
else if (!strcmp(argv[0], "-nojit")) { useJit = 0; return 1; }
@@ -1417,6 +1421,7 @@
printf(" -help print this help message, then exit\n");
printf(" -memory <size>[mk] use fixed heap size (added to image size)\n");
printf(" -mmap <size>[mk] limit dynamic heap size (default: %dm)\n", DefaultMmapSize);
+ printf(" -timephases print start load and run times\n");
#if STACKVM || NewspeakVM
printf(" -breaksel selector set breakpoint on send of selector\n");
#endif
@@ -1825,8 +1830,10 @@
#endif
/* run Squeak */
- if (runInterpreter)
+ if (runInterpreter) {
+ printPhaseTime(2);
interpret();
+ }
/* we need these, even if not referenced from main executable */
(void)sq2uxPath;
@@ -1841,6 +1848,7 @@
sqInt
ioExitWithErrorCode(int ec)
{
+ printPhaseTime(3);
dpy->winExit();
exit(ec);
return ec;
Modified: branches/Cog/platforms/win32/vm/sqWin32Intel.c
===================================================================
--- branches/Cog/platforms/win32/vm/sqWin32Intel.c 2012-07-31 00:07:39 UTC (rev 2578)
+++ branches/Cog/platforms/win32/vm/sqWin32Intel.c 2012-07-31 00:24:58 UTC (rev 2579)
@@ -44,6 +44,7 @@
int getCurrentBytecode(void);
extern TCHAR squeakIniName[];
+extern void printPhaseTime(int);
/* Import from sqWin32Alloc.c */
LONG CALLBACK sqExceptionFilter(LPEXCEPTION_POINTERS exp);
@@ -1016,6 +1017,7 @@
sqInt
ioExitWithErrorCode(int ec)
{
+ printPhaseTime(3);
inCleanExit = 1;
exit(ec);
return ec;
@@ -1467,6 +1469,7 @@
/* run Squeak */
ioInitSecurity();
+ printPhaseTime(2);
interpret();
#if !NO_FIRST_LEVEL_EXCEPTION_HANDLER
# ifdef _MSC_VER
@@ -1588,10 +1591,15 @@
/* flags */
if (!strcmp(argv[0], "-help")) {
printUsage(1);
- return 1; }
+ return 1;
+ }
else if (!strcmp(argv[0], "-version")) { versionInfo(); return 1; }
else if (!strcmp(argv[0], "-headless")) { fHeadlessImage = true; return 1; }
else if (!strcmp(argv[0], "-headfull")) { fHeadlessImage = false; return 1;}
+ else if (!strcmp(argv[0], "-timephases")) {
+ printPhaseTime(1);
+ return 1;
+ }
#ifdef VISTA_SECURITY /* IE7/Vista protected mode support */
/* started with low rights, use alternate untrustedUserDirectory */
else if (!strcmp(argv[0], "-lowRights")) { fLowRights = true; return 1; }
Modified: branches/Cog/platforms/win32/vm/sqWin32Window.c
===================================================================
--- branches/Cog/platforms/win32/vm/sqWin32Window.c 2012-07-31 00:07:39 UTC (rev 2578)
+++ branches/Cog/platforms/win32/vm/sqWin32Window.c 2012-07-31 00:24:58 UTC (rev 2579)
@@ -3191,6 +3191,7 @@
TEXT("vmOptions:")
/* TEXT("\n\t-service: ServiceName \t(install Squeak as NT service)") */
TEXT("\n\t-headless \t\t(force Squeak to run headless)")
+ TEXT("\n\t-timephases (print start load and run times)")
TEXT("\n\t-log: LogFile \t\t(use LogFile for VM messages)")
TEXT("\n\t-memory: megaByte \t(set memory to megaByte MB)")
#if STACKVM || NewspeakVM
@@ -3199,7 +3200,7 @@
#if STACKVM
TEXT("\n\t-leakcheck: n \t(leak check on GC (1=full,2=incr,3=both))")
TEXT("\n\t-eden: bytes \t(set eden memory size to bytes)")
- TEXT("\n\t-stackpages: n \t(use n stack pages)")
+ TEXT("\n\t-stackpages: n \t(use n stack pages)")
TEXT("\n\t-numextsems: n \t(allow up to n external semaphores)")
TEXT("\n\t-noheartbeat \t(no heartbeat for debug)")
#endif /* STACKVM */
Modified: branches/Cog/stackbuild/cygwinbuild/HowToBuild
===================================================================
--- branches/Cog/stackbuild/cygwinbuild/HowToBuild 2012-07-31 00:07:39 UTC (rev 2578)
+++ branches/Cog/stackbuild/cygwinbuild/HowToBuild 2012-07-31 00:24:58 UTC (rev 2579)
@@ -70,7 +70,7 @@
Then build the libraries winbochs/{cpu/libcpu.a,disasm/libdisasm.a,fpu/libfpu.a}
$ cd ROOT/processors/IA32/winbochs
$ ./conf.COG
- $ ./makeem
+ $ ../bochs/makeem
and build the plugin either via make (for the entire VM) or just
$ cd ROOT/stackbuild/cygwinbuild
$ make build/vm/BochsIA32Plugin.dll
Modified: branches/Cog/unixbuild/HowToBuild
===================================================================
--- branches/Cog/unixbuild/HowToBuild 2012-07-31 00:07:39 UTC (rev 2578)
+++ branches/Cog/unixbuild/HowToBuild 2012-07-31 00:24:58 UTC (rev 2579)
@@ -66,7 +66,7 @@
Then build libraries linuxbochs/{cpu/libcpu.a,disasm/libdisasm.a,fpu/libfpu.a}
$ cd ROOT/processors/IA32/linuxbochs
$ ./conf.COG
- $ ./makeem
+ $ ../bochs/makeem
and build the plugin via
$ cd ROOT/unixbuild/bld/BochsIA32Plugin
$ make
More information about the Vm-dev
mailing list