/rs/java/android/renderscript/ScriptC.java
https://github.com/aizuzi/platform_frameworks_base · Java · 156 lines · 87 code · 15 blank · 54 comment · 14 complexity · 5cf3bf94a10e10c0ccc2f92d419180be MD5 · raw file
- /*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- package android.renderscript;
- import android.content.Context;
- import android.content.res.Resources;
- import android.util.Log;
- import java.io.File;
- import java.io.IOException;
- import java.io.InputStream;
- import java.util.Map.Entry;
- import java.util.HashMap;
- import java.lang.reflect.Field;
- import java.lang.reflect.Modifier;
- /**
- * The superclass for all user-defined scripts. This is only
- * intended to be used by the generated derived classes.
- **/
- public class ScriptC extends Script {
- private static final String TAG = "ScriptC";
- /**
- * Only intended for use by the generated derived classes.
- *
- * @param id
- * @param rs
- */
- protected ScriptC(int id, RenderScript rs) {
- super(id, rs);
- }
- /**
- * Only intended for use by the generated derived classes.
- *
- * @param id
- * @param rs
- *
- * @hide
- */
- protected ScriptC(long id, RenderScript rs) {
- super(id, rs);
- }
- /**
- * Only intended for use by the generated derived classes.
- *
- *
- * @param rs
- * @param resources
- * @param resourceID
- */
- protected ScriptC(RenderScript rs, Resources resources, int resourceID) {
- super(0, rs);
- long id = internalCreate(rs, resources, resourceID);
- if (id == 0) {
- throw new RSRuntimeException("Loading of ScriptC script failed.");
- }
- setID(id);
- }
- /**
- * Only intended for use by the generated derived classes.
- *
- * @param rs
- * @hide
- */
- protected ScriptC(RenderScript rs, String resName, byte[] bitcode32, byte[] bitcode64) {
- super(0, rs);
- long id = 0;
- if (RenderScript.sPointerSize == 4) {
- id = internalStringCreate(rs, resName, bitcode32);
- } else {
- id = internalStringCreate(rs, resName, bitcode64);
- }
- if (id == 0) {
- throw new RSRuntimeException("Loading of ScriptC script failed.");
- }
- setID(id);
- }
- /**
- * Name of the file that holds the object cache.
- */
- private static final String CACHE_PATH = "com.android.renderscript.cache";
- static String mCachePath;
- private static synchronized long internalCreate(RenderScript rs, Resources resources, int resourceID) {
- byte[] pgm;
- int pgmLength;
- InputStream is = resources.openRawResource(resourceID);
- try {
- try {
- pgm = new byte[1024];
- pgmLength = 0;
- while(true) {
- int bytesLeft = pgm.length - pgmLength;
- if (bytesLeft == 0) {
- byte[] buf2 = new byte[pgm.length * 2];
- System.arraycopy(pgm, 0, buf2, 0, pgm.length);
- pgm = buf2;
- bytesLeft = pgm.length - pgmLength;
- }
- int bytesRead = is.read(pgm, pgmLength, bytesLeft);
- if (bytesRead <= 0) {
- break;
- }
- pgmLength += bytesRead;
- }
- } finally {
- is.close();
- }
- } catch(IOException e) {
- throw new Resources.NotFoundException();
- }
- String resName = resources.getResourceEntryName(resourceID);
- // Create the RS cache path if we haven't done so already.
- if (mCachePath == null) {
- File f = new File(rs.mCacheDir, CACHE_PATH);
- mCachePath = f.getAbsolutePath();
- f.mkdirs();
- }
- // Log.v(TAG, "Create script for resource = " + resName);
- return rs.nScriptCCreate(resName, mCachePath, pgm, pgmLength);
- }
- private static synchronized long internalStringCreate(RenderScript rs, String resName, byte[] bitcode) {
- // Create the RS cache path if we haven't done so already.
- if (mCachePath == null) {
- File f = new File(rs.mCacheDir, CACHE_PATH);
- mCachePath = f.getAbsolutePath();
- f.mkdirs();
- }
- // Log.v(TAG, "Create script for resource = " + resName);
- return rs.nScriptCCreate(resName, mCachePath, bitcode, bitcode.length);
- }
- }