From e86237a8a051d37d42be21d469c36aacf8a86e8f Mon Sep 17 00:00:00 2001 From: Harald Steinlechner Date: Fri, 24 Aug 2012 14:41:38 +0200 Subject: [PATCH] MethodPool: removed demo call stuff - added printGCStats instead; added Makefile to build simple GC tests in scratch (tests which cannot be run with openjdk currently because native interface stuff); --- Makefile | 8 +++++++- Mate/GarbageAlloc.hs | 17 +++++++---------- Mate/MethodPool.hs | 10 +++++----- jmate/lang/MateRuntime.java | 1 + scratch/GCTest.java | 29 +++++++++++++++++++++++++++++ 5 files changed, 49 insertions(+), 16 deletions(-) create mode 100644 scratch/GCTest.java diff --git a/Makefile b/Makefile index 0468502..f05bf97 100644 --- a/Makefile +++ b/Makefile @@ -88,7 +88,8 @@ clean: rm -rf $(BUILD) mate mate.static mate.dbg ffi/native.o \ tests/*.class Mate/*_stub.* \ jmate/lang/*.class jmate/io/*.class java/io/*.class \ - java/lang/{Integer,Character,String,System}.class + java/lang/{Integer,Character,String,System}.class \ + scratch/*.class ghci: mate.static ghci -I. $(PACKAGES) -outputdir $(B_STATIC) Mate.hs $(GHC_CPP) @@ -107,3 +108,8 @@ hlint: @# ignore error code from hlint -hlint Mate.hs Mate/ @mv debug_tmp.h debug.h + +scratch: mate $(wildcard jmate/lang/*.java) scratch/GCTest.java + javac $(wildcard jmate/lang/*.java) + javac scratch/GCTest.java + ./mate scratch.GCTest diff --git a/Mate/GarbageAlloc.hs b/Mate/GarbageAlloc.hs index 5dccda0..dc806b7 100644 --- a/Mate/GarbageAlloc.hs +++ b/Mate/GarbageAlloc.hs @@ -8,14 +8,15 @@ module Mate.GarbageAlloc( getHeapMemory, printMemoryUsage, mallocStringVM, - mallocObjectVM) where + mallocObjectVM, + printGCStats) where import Foreign import Foreign.C import Mate.GC.Boehm -import Text.Printf +--import Text.Printf import Mate.Debug -- unified place for allocating Memory @@ -49,17 +50,13 @@ mallocObjectVM size = do printfStr "mallocObject VM: %d\n" size return $ fromIntegral $ ptrToIntPtr ptr --- TODO: delete me -foreign export ccall demoInterfaceCall :: CUInt -> IO () -demoInterfaceCall :: CUInt -> IO () -demoInterfaceCall val = do - printf "demoInterfaceCall: 0x%08x\n" (fromIntegral val :: Word32) - return () - getHeapMemory :: IO Int getHeapMemory = getHeapSizeGC - foreign export ccall printMemoryUsage :: IO () printMemoryUsage :: IO () printMemoryUsage = getHeapMemory >>= print + +foreign export ccall printGCStats :: IO () +printGCStats :: IO () +printGCStats = putStrLn "Should print GC Stats" diff --git a/Mate/MethodPool.hs b/Mate/MethodPool.hs index 4be3cf2..79b63e3 100644 --- a/Mate/MethodPool.hs +++ b/Mate/MethodPool.hs @@ -37,15 +37,15 @@ import Mate.Rts() foreign import ccall "dynamic" code_void :: FunPtr (IO ()) -> IO () -foreign import ccall "&demoInterfaceCall" - demoInterfaceCallAddr :: FunPtr (CUInt -> IO ()) - foreign import ccall "&printMemoryUsage" printMemoryUsageAddr :: FunPtr (IO ()) foreign import ccall "&loadLibrary" loadLibraryAddr :: FunPtr (IO ()) +foreign import ccall "&printGCStats" + printGCStatsAddr :: FunPtr (IO ()) + getMethodEntry :: CPtrdiff -> CPtrdiff -> IO CPtrdiff getMethodEntry signal_from methodtable = do mmap <- getMethodMap @@ -79,8 +79,8 @@ getMethodEntry signal_from methodtable = do case smethod of "loadLibrary" -> return . funPtrToAddr $ loadLibraryAddr - "demoInterfaceCall" -> - return . funPtrToAddr $ demoInterfaceCallAddr + "printGCStats" -> + return . funPtrToAddr $ printGCStatsAddr "printMemoryUsage" -> return . funPtrToAddr $ printMemoryUsageAddr _ -> diff --git a/jmate/lang/MateRuntime.java b/jmate/lang/MateRuntime.java index 678182b..d9d1d5f 100644 --- a/jmate/lang/MateRuntime.java +++ b/jmate/lang/MateRuntime.java @@ -4,4 +4,5 @@ public class MateRuntime { public static native void loadLibrary(String lib); public static native int getCurrentHeapSize(); + public static native void printGCStats(); } diff --git a/scratch/GCTest.java b/scratch/GCTest.java new file mode 100644 index 0000000..d6896d4 --- /dev/null +++ b/scratch/GCTest.java @@ -0,0 +1,29 @@ +package scratch; + +import jmate.lang.MateRuntime; + +public class GCTest +{ + public static void main(String[] args) + { + List myList = new List(3, + new List(5, + new List(6, + new List(10,null)))); + + MateRuntime.printGCStats(); + System.out.println("done."); + } +} + +class List +{ + public int elem; + public List xs; + + public List(int elem, List xs) + { + this.elem = elem; + this.xs = xs; + } +} -- 2.25.1