changeset 131:b982ddbda513

Add service provider interfaces for dalvik.
author Mario Torre <neugens.limasoftware@gmail.com>
date Fri, 15 Apr 2011 22:35:39 +0200
parents b4e063a46401
children cc0033e43d33
files src/main/java/org/icedrobot/daneel/spi/dalvik/system/DaneelLoggerSPI.java src/main/java/org/icedrobot/daneel/spi/dalvik/system/DaneelSPIFactory.java src/main/java/org/icedrobot/daneel/spi/dalvik/system/DaneelSystemPropertiesSPI.java src/main/java/org/icedrobot/daneel/spi/dalvik/system/DaneelVMRuntime.java src/main/java/org/icedrobot/daneel/spi/dalvik/system/LoggerSPI.java src/main/java/org/icedrobot/daneel/spi/dalvik/system/SPIFactory.java src/main/java/org/icedrobot/daneel/spi/dalvik/system/SystemPropertiesSPI.java src/main/java/org/icedrobot/daneel/spi/dalvik/system/VMRuntimeSPI.java
diffstat 8 files changed, 481 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/org/icedrobot/daneel/spi/dalvik/system/DaneelLoggerSPI.java	Fri Apr 15 22:35:39 2011 +0200
@@ -0,0 +1,58 @@
+/*
+ * Daneel - Dalvik to Java bytecode compiler
+ * Copyright (C) 2011  IcedRobot team
+ *
+ * This program 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 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program 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 this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ * This file is subject to the "Classpath" exception:
+ *
+ * Linking this library statically or dynamically with other modules is
+ * making a combined work based on this library.  Thus, the terms and
+ * conditions of the GNU General Public License cover the whole
+ * combination.
+ *
+ * As a special exception, the copyright holders of this library give you
+ * permission to link this library with independent modules to produce an
+ * executable, regardless of the license terms of these independent
+ * modules, and to copy and distribute the resulting executable under terms
+ * of your choice, provided that you also meet, for each linked independent
+ * module, the terms and conditions of the license of that module.  An
+ * independent module is a module which is not derived from or based on
+ * this library.  If you modify this library, you may extend this exception
+ * to your version of the library, but you are not obligated to do so.  If
+ * you do not wish to do so, delete this exception statement from your
+ * version.
+ */
+
+package org.icedrobot.daneel.spi.dalvik.system;
+
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+class DaneelLoggerSPI implements LoggerSPI {
+
+    public DaneelLoggerSPI() {
+    }
+
+    @Override
+    public int println(int bufID, int priority, String tag, String msg) {
+        Logger.getLogger(tag).log(Level.ALL, msg);
+        return msg.length();
+    }
+
+    @Override
+    public boolean isLoggable(String tag, int level) {
+        return true;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/org/icedrobot/daneel/spi/dalvik/system/DaneelSPIFactory.java	Fri Apr 15 22:35:39 2011 +0200
@@ -0,0 +1,62 @@
+/*
+ * Daneel - Dalvik to Java bytecode compiler
+ * Copyright (C) 2011  IcedRobot team
+ *
+ * This program 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 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program 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 this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ * This file is subject to the "Classpath" exception:
+ *
+ * Linking this library statically or dynamically with other modules is
+ * making a combined work based on this library.  Thus, the terms and
+ * conditions of the GNU General Public License cover the whole
+ * combination.
+ *
+ * As a special exception, the copyright holders of this library give you
+ * permission to link this library with independent modules to produce an
+ * executable, regardless of the license terms of these independent
+ * modules, and to copy and distribute the resulting executable under terms
+ * of your choice, provided that you also meet, for each linked independent
+ * module, the terms and conditions of the license of that module.  An
+ * independent module is a module which is not derived from or based on
+ * this library.  If you modify this library, you may extend this exception
+ * to your version of the library, but you are not obligated to do so.  If
+ * you do not wish to do so, delete this exception statement from your
+ * version.
+ */
+
+package org.icedrobot.daneel.spi.dalvik.system;
+
+/**
+ */
+class DaneelSPIFactory extends SPIFactory {
+
+    public DaneelSPIFactory() {
+    }
+
+    @Override
+    public VMRuntimeSPI createVMRuntimeSPI() {
+        return new DaneelVMRuntime();
+    }
+
+    @Override
+    public LoggerSPI createLoggerSPI() {
+        return new DaneelLoggerSPI();
+    }
+
+    @Override
+    public SystemPropertiesSPI createSystemPropertiesSPI() {
+        return new DaneelSystemPropertiesSPI();
+    }
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/org/icedrobot/daneel/spi/dalvik/system/DaneelSystemPropertiesSPI.java	Fri Apr 15 22:35:39 2011 +0200
@@ -0,0 +1,46 @@
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+
+package org.icedrobot.daneel.spi.dalvik.system;
+
+/**
+ *
+ * @author neugens
+ */
+class DaneelSystemPropertiesSPI implements SystemPropertiesSPI {
+
+    public DaneelSystemPropertiesSPI() {
+    }
+
+    @Override
+    public String getProperty(String key) {
+        return System.getProperty(key);
+    }
+
+    @Override
+    public String getProperty(String key, String def) {
+        return System.getProperty(key, def);
+    }
+
+    @Override
+    public int getInteger(String key, int def) {
+        return Integer.getInteger(key, def);
+    }
+
+    @Override
+    public long getLong(String key, long def) {
+        return Long.getLong(key, def);
+    }
+
+    @Override
+    public boolean getBoolean(String key, boolean def) {
+        return Boolean.getBoolean(key);
+    }
+
+    @Override
+    public void setProperty(String key, String def) {
+        System.setProperty(key, def);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/org/icedrobot/daneel/spi/dalvik/system/DaneelVMRuntime.java	Fri Apr 15 22:35:39 2011 +0200
@@ -0,0 +1,95 @@
+/*
+ * Daneel - Dalvik to Java bytecode compiler
+ * Copyright (C) 2011  IcedRobot team
+ *
+ * This program 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 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program 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 this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ * This file is subject to the "Classpath" exception:
+ *
+ * Linking this library statically or dynamically with other modules is
+ * making a combined work based on this library.  Thus, the terms and
+ * conditions of the GNU General Public License cover the whole
+ * combination.
+ *
+ * As a special exception, the copyright holders of this library give you
+ * permission to link this library with independent modules to produce an
+ * executable, regardless of the license terms of these independent
+ * modules, and to copy and distribute the resulting executable under terms
+ * of your choice, provided that you also meet, for each linked independent
+ * module, the terms and conditions of the license of that module.  An
+ * independent module is a module which is not derived from or based on
+ * this library.  If you modify this library, you may extend this exception
+ * to your version of the library, but you are not obligated to do so.  If
+ * you do not wish to do so, delete this exception statement from your
+ * version.
+ */
+
+package org.icedrobot.daneel.spi.dalvik.system;
+
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+/**
+ */
+class DaneelVMRuntime implements VMRuntimeSPI {
+
+    @Override
+    public float getTargetHeapUtilization() {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    @Override
+    public void gcSoftReferences() {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    @Override
+    public void runFinalizationSync() {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    @Override
+    public void setTargetHeapUtilization(float newTarget) {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    @Override
+    public boolean trackExternalAllocation(long size) {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    @Override
+    public void startJitCompilation() {
+        /* no op */
+    }
+
+    @Override
+    public void disableJitCompilation() {
+        /* no op */
+    }
+
+    @Override
+    public void setMinimumHeapSize(long size) {
+        /* no op */
+        Logger.getLogger(DaneelVMRuntime.class.getName()).
+                log(Level.ALL, "setMinimumHeapSize: {0}", size);
+    }
+
+    @Override
+    public long getMinimumHeapSize() {
+        long heapSize = Runtime.getRuntime().totalMemory();
+        return heapSize;
+    }
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/org/icedrobot/daneel/spi/dalvik/system/LoggerSPI.java	Fri Apr 15 22:35:39 2011 +0200
@@ -0,0 +1,51 @@
+/*
+ * Daneel - Dalvik to Java bytecode compiler
+ * Copyright (C) 2011  IcedRobot team
+ *
+ * This program 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 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program 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 this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ * This file is subject to the "Classpath" exception:
+ *
+ * Linking this library statically or dynamically with other modules is
+ * making a combined work based on this library.  Thus, the terms and
+ * conditions of the GNU General Public License cover the whole
+ * combination.
+ *
+ * As a special exception, the copyright holders of this library give you
+ * permission to link this library with independent modules to produce an
+ * executable, regardless of the license terms of these independent
+ * modules, and to copy and distribute the resulting executable under terms
+ * of your choice, provided that you also meet, for each linked independent
+ * module, the terms and conditions of the license of that module.  An
+ * independent module is a module which is not derived from or based on
+ * this library.  If you modify this library, you may extend this exception
+ * to your version of the library, but you are not obligated to do so.  If
+ * you do not wish to do so, delete this exception statement from your
+ * version.
+ */
+
+package org.icedrobot.daneel.spi.dalvik.system;
+
+public interface LoggerSPI {
+
+    public static final int VERBOSE = 2;
+    public static final int DEBUG = 3;
+    public static final int INFO = 4;
+    public static final int WARN = 5;
+    public static final int ERROR = 6;
+    public static final int ASSERT = 7;
+
+    int println(int bufID, int priority, String tag, String msg);
+    boolean isLoggable(String tag, int level);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/org/icedrobot/daneel/spi/dalvik/system/SPIFactory.java	Fri Apr 15 22:35:39 2011 +0200
@@ -0,0 +1,65 @@
+/*
+ * Daneel - Dalvik to Java bytecode compiler
+ * Copyright (C) 2011  IcedRobot team
+ *
+ * This program 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 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program 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 this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ * This file is subject to the "Classpath" exception:
+ *
+ * Linking this library statically or dynamically with other modules is
+ * making a combined work based on this library.  Thus, the terms and
+ * conditions of the GNU General Public License cover the whole
+ * combination.
+ *
+ * As a special exception, the copyright holders of this library give you
+ * permission to link this library with independent modules to produce an
+ * executable, regardless of the license terms of these independent
+ * modules, and to copy and distribute the resulting executable under terms
+ * of your choice, provided that you also meet, for each linked independent
+ * module, the terms and conditions of the license of that module.  An
+ * independent module is a module which is not derived from or based on
+ * this library.  If you modify this library, you may extend this exception
+ * to your version of the library, but you are not obligated to do so.  If
+ * you do not wish to do so, delete this exception statement from your
+ * version.
+ */
+
+package org.icedrobot.daneel.spi.dalvik.system;
+
+import org.icedrobot.daneel.DaneelException;
+
+/**
+ */
+public abstract class SPIFactory {
+
+    /**
+     *
+     */
+    public static SPIFactory getInstance() {
+
+        String spiFactoryName = System.getProperty("icedrobot.factory.spi",
+                    "org.icedrobot.daneel.spi.dalvik.system.DaneelSPIFactory");
+        try {
+            Class<?> factoryClass = Class.forName(spiFactoryName);
+            return (SPIFactory) factoryClass.newInstance();
+
+        } catch (Exception ex) {
+            throw new DaneelException(ex);
+        }
+    }
+
+    public abstract LoggerSPI createLoggerSPI();
+    public abstract VMRuntimeSPI createVMRuntimeSPI();
+    public abstract SystemPropertiesSPI createSystemPropertiesSPI();
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/org/icedrobot/daneel/spi/dalvik/system/SystemPropertiesSPI.java	Fri Apr 15 22:35:39 2011 +0200
@@ -0,0 +1,47 @@
+/*
+ * Daneel - Dalvik to Java bytecode compiler
+ * Copyright (C) 2011  IcedRobot team
+ *
+ * This program 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 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program 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 this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ * This file is subject to the "Classpath" exception:
+ *
+ * Linking this library statically or dynamically with other modules is
+ * making a combined work based on this library.  Thus, the terms and
+ * conditions of the GNU General Public License cover the whole
+ * combination.
+ *
+ * As a special exception, the copyright holders of this library give you
+ * permission to link this library with independent modules to produce an
+ * executable, regardless of the license terms of these independent
+ * modules, and to copy and distribute the resulting executable under terms
+ * of your choice, provided that you also meet, for each linked independent
+ * module, the terms and conditions of the license of that module.  An
+ * independent module is a module which is not derived from or based on
+ * this library.  If you modify this library, you may extend this exception
+ * to your version of the library, but you are not obligated to do so.  If
+ * you do not wish to do so, delete this exception statement from your
+ * version.
+ */
+package org.icedrobot.daneel.spi.dalvik.system;
+
+public interface SystemPropertiesSPI {
+
+    String getProperty(String key);
+    String getProperty(String key, String def);
+    int getInteger(String key, int def);
+    long getLong(String key, long def);
+    boolean getBoolean(String key, boolean def);
+    void setProperty(String key, String def);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/org/icedrobot/daneel/spi/dalvik/system/VMRuntimeSPI.java	Fri Apr 15 22:35:39 2011 +0200
@@ -0,0 +1,57 @@
+/*
+ * Daneel - Dalvik to Java bytecode compiler
+ * Copyright (C) 2011  IcedRobot team
+ *
+ * This program 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 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program 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 this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ * This file is subject to the "Classpath" exception:
+ *
+ * Linking this library statically or dynamically with other modules is
+ * making a combined work based on this library.  Thus, the terms and
+ * conditions of the GNU General Public License cover the whole
+ * combination.
+ *
+ * As a special exception, the copyright holders of this library give you
+ * permission to link this library with independent modules to produce an
+ * executable, regardless of the license terms of these independent
+ * modules, and to copy and distribute the resulting executable under terms
+ * of your choice, provided that you also meet, for each linked independent
+ * module, the terms and conditions of the license of that module.  An
+ * independent module is a module which is not derived from or based on
+ * this library.  If you modify this library, you may extend this exception
+ * to your version of the library, but you are not obligated to do so.  If
+ * you do not wish to do so, delete this exception statement from your
+ * version.
+ */
+
+package org.icedrobot.daneel.spi.dalvik.system;
+
+/**
+ * Common interface for Android VMRuntime implementations.
+ */
+public interface VMRuntimeSPI {
+
+    float getTargetHeapUtilization();
+
+    void setMinimumHeapSize(long size);
+    long getMinimumHeapSize();
+
+    void gcSoftReferences();
+    void runFinalizationSync();
+    void setTargetHeapUtilization(float newTarget);
+
+    boolean trackExternalAllocation(long size);
+    void startJitCompilation();
+    void disableJitCompilation();
+}