diff options
360 files changed, 4727 insertions, 4861 deletions
diff --git a/Android.mk b/Android.mk index 22cc27b6be87..7cd663541368 100644 --- a/Android.mk +++ b/Android.mk @@ -400,9 +400,6 @@ LOCAL_DX_FLAGS := --core-library --multi-dex LOCAL_RMTYPEDEFS := true -# List of classes and interfaces which should be loaded by the Zygote. -LOCAL_JAVA_RESOURCE_FILES += $(LOCAL_PATH)/preloaded-classes - include $(BUILD_JAVA_LIBRARY) framework_module := $(LOCAL_INSTALLED_MODULE) diff --git a/api/current.txt b/api/current.txt index fe0c2096dce0..a6a9e278d1a6 100644 --- a/api/current.txt +++ b/api/current.txt @@ -35803,24 +35803,25 @@ package android.webkit { enum_constant public static final android.webkit.ConsoleMessage.MessageLevel WARNING; } - public class CookieManager { - method public synchronized boolean acceptCookie(); - method public boolean acceptThirdPartyCookies(android.webkit.WebView); + public abstract class CookieManager { + ctor public CookieManager(); + method public abstract boolean acceptCookie(); + method public abstract boolean acceptThirdPartyCookies(android.webkit.WebView); method public static boolean allowFileSchemeCookies(); - method public void flush(); - method public java.lang.String getCookie(java.lang.String); + method public abstract void flush(); + method public abstract java.lang.String getCookie(java.lang.String); method public static synchronized android.webkit.CookieManager getInstance(); - method public synchronized boolean hasCookies(); - method public deprecated void removeAllCookie(); - method public void removeAllCookies(android.webkit.ValueCallback<java.lang.Boolean>); - method public deprecated void removeExpiredCookie(); - method public deprecated void removeSessionCookie(); - method public void removeSessionCookies(android.webkit.ValueCallback<java.lang.Boolean>); - method public synchronized void setAcceptCookie(boolean); + method public abstract boolean hasCookies(); + method public abstract deprecated void removeAllCookie(); + method public abstract void removeAllCookies(android.webkit.ValueCallback<java.lang.Boolean>); + method public abstract deprecated void removeExpiredCookie(); + method public abstract deprecated void removeSessionCookie(); + method public abstract void removeSessionCookies(android.webkit.ValueCallback<java.lang.Boolean>); + method public abstract void setAcceptCookie(boolean); method public static void setAcceptFileSchemeCookies(boolean); - method public void setAcceptThirdPartyCookies(android.webkit.WebView, boolean); - method public void setCookie(java.lang.String, java.lang.String); - method public void setCookie(java.lang.String, java.lang.String, android.webkit.ValueCallback<java.lang.Boolean>); + method public abstract void setAcceptThirdPartyCookies(android.webkit.WebView, boolean); + method public abstract void setCookie(java.lang.String, java.lang.String); + method public abstract void setCookie(java.lang.String, java.lang.String, android.webkit.ValueCallback<java.lang.Boolean>); } public final deprecated class CookieSyncManager extends android.webkit.WebSyncManager { @@ -35929,11 +35930,13 @@ package android.webkit { method public abstract void onReceiveValue(T); } - public class WebBackForwardList implements java.lang.Cloneable java.io.Serializable { - method public synchronized int getCurrentIndex(); - method public synchronized android.webkit.WebHistoryItem getCurrentItem(); - method public synchronized android.webkit.WebHistoryItem getItemAtIndex(int); - method public synchronized int getSize(); + public abstract class WebBackForwardList implements java.lang.Cloneable java.io.Serializable { + ctor public WebBackForwardList(); + method protected abstract android.webkit.WebBackForwardList clone(); + method public abstract int getCurrentIndex(); + method public abstract android.webkit.WebHistoryItem getCurrentItem(); + method public abstract android.webkit.WebHistoryItem getItemAtIndex(int); + method public abstract int getSize(); } public class WebChromeClient { @@ -35985,21 +35988,24 @@ package android.webkit { field public static final int MODE_SAVE = 3; // 0x3 } - public class WebHistoryItem implements java.lang.Cloneable { - method public android.graphics.Bitmap getFavicon(); - method public java.lang.String getOriginalUrl(); - method public java.lang.String getTitle(); - method public java.lang.String getUrl(); + public abstract class WebHistoryItem implements java.lang.Cloneable { + ctor public WebHistoryItem(); + method protected abstract android.webkit.WebHistoryItem clone(); + method public abstract android.graphics.Bitmap getFavicon(); + method public abstract java.lang.String getOriginalUrl(); + method public abstract java.lang.String getTitle(); + method public abstract java.lang.String getUrl(); } - public deprecated class WebIconDatabase { - method public void close(); + public abstract deprecated class WebIconDatabase { + ctor public WebIconDatabase(); + method public abstract void close(); method public static android.webkit.WebIconDatabase getInstance(); - method public void open(java.lang.String); - method public void releaseIconForPageUrl(java.lang.String); - method public void removeAllIcons(); - method public void requestIconForPageUrl(java.lang.String, android.webkit.WebIconDatabase.IconListener); - method public void retainIconForPageUrl(java.lang.String); + method public abstract void open(java.lang.String); + method public abstract void releaseIconForPageUrl(java.lang.String); + method public abstract void removeAllIcons(); + method public abstract void requestIconForPageUrl(java.lang.String, android.webkit.WebIconDatabase.IconListener); + method public abstract void retainIconForPageUrl(java.lang.String); } public static abstract deprecated interface WebIconDatabase.IconListener { @@ -36031,98 +36037,99 @@ package android.webkit { } public abstract class WebSettings { - method public deprecated boolean enableSmoothTransition(); - method public boolean getAllowContentAccess(); - method public boolean getAllowFileAccess(); + ctor public WebSettings(); + method public abstract deprecated boolean enableSmoothTransition(); + method public abstract boolean getAllowContentAccess(); + method public abstract boolean getAllowFileAccess(); method public abstract boolean getAllowFileAccessFromFileURLs(); method public abstract boolean getAllowUniversalAccessFromFileURLs(); - method public synchronized boolean getBlockNetworkImage(); - method public synchronized boolean getBlockNetworkLoads(); - method public boolean getBuiltInZoomControls(); - method public int getCacheMode(); - method public synchronized java.lang.String getCursiveFontFamily(); - method public synchronized boolean getDatabaseEnabled(); - method public deprecated synchronized java.lang.String getDatabasePath(); - method public synchronized int getDefaultFixedFontSize(); - method public synchronized int getDefaultFontSize(); - method public synchronized java.lang.String getDefaultTextEncodingName(); + method public abstract boolean getBlockNetworkImage(); + method public abstract boolean getBlockNetworkLoads(); + method public abstract boolean getBuiltInZoomControls(); + method public abstract int getCacheMode(); + method public abstract java.lang.String getCursiveFontFamily(); + method public abstract boolean getDatabaseEnabled(); + method public abstract deprecated java.lang.String getDatabasePath(); + method public abstract int getDefaultFixedFontSize(); + method public abstract int getDefaultFontSize(); + method public abstract java.lang.String getDefaultTextEncodingName(); method public static java.lang.String getDefaultUserAgent(android.content.Context); - method public deprecated android.webkit.WebSettings.ZoomDensity getDefaultZoom(); - method public boolean getDisplayZoomControls(); - method public synchronized boolean getDomStorageEnabled(); - method public synchronized java.lang.String getFantasyFontFamily(); - method public synchronized java.lang.String getFixedFontFamily(); - method public synchronized boolean getJavaScriptCanOpenWindowsAutomatically(); - method public synchronized boolean getJavaScriptEnabled(); - method public synchronized android.webkit.WebSettings.LayoutAlgorithm getLayoutAlgorithm(); - method public deprecated boolean getLightTouchEnabled(); - method public boolean getLoadWithOverviewMode(); - method public synchronized boolean getLoadsImagesAutomatically(); - method public boolean getMediaPlaybackRequiresUserGesture(); - method public synchronized int getMinimumFontSize(); - method public synchronized int getMinimumLogicalFontSize(); + method public abstract deprecated android.webkit.WebSettings.ZoomDensity getDefaultZoom(); + method public abstract boolean getDisplayZoomControls(); + method public abstract boolean getDomStorageEnabled(); + method public abstract java.lang.String getFantasyFontFamily(); + method public abstract java.lang.String getFixedFontFamily(); + method public abstract boolean getJavaScriptCanOpenWindowsAutomatically(); + method public abstract boolean getJavaScriptEnabled(); + method public abstract android.webkit.WebSettings.LayoutAlgorithm getLayoutAlgorithm(); + method public abstract deprecated boolean getLightTouchEnabled(); + method public abstract boolean getLoadWithOverviewMode(); + method public abstract boolean getLoadsImagesAutomatically(); + method public abstract boolean getMediaPlaybackRequiresUserGesture(); + method public abstract int getMinimumFontSize(); + method public abstract int getMinimumLogicalFontSize(); method public abstract int getMixedContentMode(); - method public deprecated synchronized android.webkit.WebSettings.PluginState getPluginState(); - method public synchronized java.lang.String getSansSerifFontFamily(); - method public boolean getSaveFormData(); - method public deprecated boolean getSavePassword(); - method public synchronized java.lang.String getSerifFontFamily(); - method public synchronized java.lang.String getStandardFontFamily(); + method public abstract deprecated android.webkit.WebSettings.PluginState getPluginState(); + method public abstract java.lang.String getSansSerifFontFamily(); + method public abstract boolean getSaveFormData(); + method public abstract deprecated boolean getSavePassword(); + method public abstract java.lang.String getSerifFontFamily(); + method public abstract java.lang.String getStandardFontFamily(); method public deprecated synchronized android.webkit.WebSettings.TextSize getTextSize(); - method public synchronized int getTextZoom(); - method public synchronized boolean getUseWideViewPort(); - method public synchronized java.lang.String getUserAgentString(); - method public void setAllowContentAccess(boolean); - method public void setAllowFileAccess(boolean); + method public abstract int getTextZoom(); + method public abstract boolean getUseWideViewPort(); + method public abstract java.lang.String getUserAgentString(); + method public abstract void setAllowContentAccess(boolean); + method public abstract void setAllowFileAccess(boolean); method public abstract void setAllowFileAccessFromFileURLs(boolean); method public abstract void setAllowUniversalAccessFromFileURLs(boolean); - method public synchronized void setAppCacheEnabled(boolean); - method public deprecated synchronized void setAppCacheMaxSize(long); - method public synchronized void setAppCachePath(java.lang.String); - method public synchronized void setBlockNetworkImage(boolean); - method public synchronized void setBlockNetworkLoads(boolean); - method public void setBuiltInZoomControls(boolean); - method public void setCacheMode(int); - method public synchronized void setCursiveFontFamily(java.lang.String); - method public synchronized void setDatabaseEnabled(boolean); - method public deprecated synchronized void setDatabasePath(java.lang.String); - method public synchronized void setDefaultFixedFontSize(int); - method public synchronized void setDefaultFontSize(int); - method public synchronized void setDefaultTextEncodingName(java.lang.String); - method public deprecated void setDefaultZoom(android.webkit.WebSettings.ZoomDensity); - method public void setDisplayZoomControls(boolean); - method public synchronized void setDomStorageEnabled(boolean); - method public deprecated void setEnableSmoothTransition(boolean); - method public synchronized void setFantasyFontFamily(java.lang.String); - method public synchronized void setFixedFontFamily(java.lang.String); - method public synchronized void setGeolocationDatabasePath(java.lang.String); - method public synchronized void setGeolocationEnabled(boolean); - method public synchronized void setJavaScriptCanOpenWindowsAutomatically(boolean); - method public synchronized void setJavaScriptEnabled(boolean); - method public synchronized void setLayoutAlgorithm(android.webkit.WebSettings.LayoutAlgorithm); - method public deprecated void setLightTouchEnabled(boolean); - method public void setLoadWithOverviewMode(boolean); - method public synchronized void setLoadsImagesAutomatically(boolean); - method public void setMediaPlaybackRequiresUserGesture(boolean); - method public synchronized void setMinimumFontSize(int); - method public synchronized void setMinimumLogicalFontSize(int); + method public abstract void setAppCacheEnabled(boolean); + method public abstract deprecated void setAppCacheMaxSize(long); + method public abstract void setAppCachePath(java.lang.String); + method public abstract void setBlockNetworkImage(boolean); + method public abstract void setBlockNetworkLoads(boolean); + method public abstract void setBuiltInZoomControls(boolean); + method public abstract void setCacheMode(int); + method public abstract void setCursiveFontFamily(java.lang.String); + method public abstract void setDatabaseEnabled(boolean); + method public abstract deprecated void setDatabasePath(java.lang.String); + method public abstract void setDefaultFixedFontSize(int); + method public abstract void setDefaultFontSize(int); + method public abstract void setDefaultTextEncodingName(java.lang.String); + method public abstract deprecated void setDefaultZoom(android.webkit.WebSettings.ZoomDensity); + method public abstract void setDisplayZoomControls(boolean); + method public abstract void setDomStorageEnabled(boolean); + method public abstract deprecated void setEnableSmoothTransition(boolean); + method public abstract void setFantasyFontFamily(java.lang.String); + method public abstract void setFixedFontFamily(java.lang.String); + method public abstract void setGeolocationDatabasePath(java.lang.String); + method public abstract void setGeolocationEnabled(boolean); + method public abstract void setJavaScriptCanOpenWindowsAutomatically(boolean); + method public abstract void setJavaScriptEnabled(boolean); + method public abstract void setLayoutAlgorithm(android.webkit.WebSettings.LayoutAlgorithm); + method public abstract deprecated void setLightTouchEnabled(boolean); + method public abstract void setLoadWithOverviewMode(boolean); + method public abstract void setLoadsImagesAutomatically(boolean); + method public abstract void setMediaPlaybackRequiresUserGesture(boolean); + method public abstract void setMinimumFontSize(int); + method public abstract void setMinimumLogicalFontSize(int); method public abstract void setMixedContentMode(int); - method public void setNeedInitialFocus(boolean); - method public deprecated synchronized void setPluginState(android.webkit.WebSettings.PluginState); - method public deprecated synchronized void setRenderPriority(android.webkit.WebSettings.RenderPriority); - method public synchronized void setSansSerifFontFamily(java.lang.String); - method public void setSaveFormData(boolean); - method public deprecated void setSavePassword(boolean); - method public synchronized void setSerifFontFamily(java.lang.String); - method public synchronized void setStandardFontFamily(java.lang.String); - method public synchronized void setSupportMultipleWindows(boolean); - method public void setSupportZoom(boolean); + method public abstract void setNeedInitialFocus(boolean); + method public abstract deprecated void setPluginState(android.webkit.WebSettings.PluginState); + method public abstract deprecated void setRenderPriority(android.webkit.WebSettings.RenderPriority); + method public abstract void setSansSerifFontFamily(java.lang.String); + method public abstract void setSaveFormData(boolean); + method public abstract deprecated void setSavePassword(boolean); + method public abstract void setSerifFontFamily(java.lang.String); + method public abstract void setStandardFontFamily(java.lang.String); + method public abstract void setSupportMultipleWindows(boolean); + method public abstract void setSupportZoom(boolean); method public deprecated synchronized void setTextSize(android.webkit.WebSettings.TextSize); - method public synchronized void setTextZoom(int); - method public synchronized void setUseWideViewPort(boolean); - method public synchronized void setUserAgentString(java.lang.String); - method public synchronized boolean supportMultipleWindows(); - method public boolean supportZoom(); + method public abstract void setTextZoom(int); + method public abstract void setUseWideViewPort(boolean); + method public abstract void setUserAgentString(java.lang.String); + method public abstract boolean supportMultipleWindows(); + method public abstract boolean supportZoom(); field public static final int LOAD_CACHE_ELSE_NETWORK = 1; // 0x1 field public static final int LOAD_CACHE_ONLY = 3; // 0x3 field public static final int LOAD_DEFAULT = -1; // 0xffffffff @@ -36372,14 +36379,15 @@ package android.webkit { field public static final int ERROR_UNSUPPORTED_SCHEME = -10; // 0xfffffff6 } - public class WebViewDatabase { - method public void clearFormData(); - method public void clearHttpAuthUsernamePassword(); - method public deprecated void clearUsernamePassword(); + public abstract class WebViewDatabase { + ctor public WebViewDatabase(); + method public abstract void clearFormData(); + method public abstract void clearHttpAuthUsernamePassword(); + method public abstract deprecated void clearUsernamePassword(); method public static android.webkit.WebViewDatabase getInstance(android.content.Context); - method public boolean hasFormData(); - method public boolean hasHttpAuthUsernamePassword(); - method public deprecated boolean hasUsernamePassword(); + method public abstract boolean hasFormData(); + method public abstract boolean hasHttpAuthUsernamePassword(); + method public abstract deprecated boolean hasUsernamePassword(); } public class WebViewFragment extends android.app.Fragment { diff --git a/cmds/app_process/Android.mk b/cmds/app_process/Android.mk index 397a7d1649e9..dd5e0ea51bb1 100644 --- a/cmds/app_process/Android.mk +++ b/cmds/app_process/Android.mk @@ -3,17 +3,17 @@ LOCAL_PATH:= $(call my-dir) include $(CLEAR_VARS) LOCAL_SRC_FILES:= \ - app_main.cpp + app_main.cpp LOCAL_LDFLAGS := -Wl,--version-script,art/sigchainlib/version-script.txt -Wl,--export-dynamic LOCAL_SHARED_LIBRARIES := \ - libdl \ - libcutils \ - libutils \ - liblog \ - libbinder \ - libandroid_runtime + libdl \ + libcutils \ + libutils \ + liblog \ + libbinder \ + libandroid_runtime LOCAL_WHOLE_STATIC_LIBRARIES := libsigchain @@ -21,6 +21,9 @@ LOCAL_MODULE:= app_process LOCAL_MULTILIB := both LOCAL_MODULE_STEM_32 := app_process32 LOCAL_MODULE_STEM_64 := app_process64 + +LOCAL_CFLAGS += -Wall -Werror -Wunused -Wunreachable-code + include $(BUILD_EXECUTABLE) # Create a symlink from app_process to app_process32 or 64 @@ -34,14 +37,14 @@ ifeq ($(TARGET_ARCH),arm) include $(CLEAR_VARS) LOCAL_SRC_FILES:= \ - app_main.cpp + app_main.cpp LOCAL_SHARED_LIBRARIES := \ - libcutils \ - libutils \ - liblog \ - libbinder \ - libandroid_runtime + libcutils \ + libutils \ + liblog \ + libbinder \ + libandroid_runtime LOCAL_WHOLE_STATIC_LIBRARIES := libsigchain @@ -54,6 +57,8 @@ LOCAL_MODULE_PATH := $(TARGET_OUT_EXECUTABLES)/asan LOCAL_MODULE_STEM := app_process LOCAL_ADDRESS_SANITIZER := true +LOCAL_CFLAGS += -Wall -Werror -Wunused -Wunreachable-code + include $(BUILD_EXECUTABLE) endif # ifeq($(TARGET_ARCH),arm) diff --git a/cmds/app_process/app_main.cpp b/cmds/app_process/app_main.cpp index 1bb28c38ceef..fbdbb255f174 100644 --- a/cmds/app_process/app_main.cpp +++ b/cmds/app_process/app_main.cpp @@ -24,7 +24,7 @@ namespace android { -void app_usage() +static void app_usage() { fprintf(stderr, "Usage: app_process [java-options] cmd-dir start-class-name [options]\n"); diff --git a/cmds/backup/Android.mk b/cmds/backup/Android.mk index 42e513345d9c..8e1508c9efe8 100644 --- a/cmds/backup/Android.mk +++ b/cmds/backup/Android.mk @@ -12,4 +12,6 @@ LOCAL_MODULE:= btool LOCAL_MODULE_PATH := $(TARGET_OUT_OPTIONAL_EXECUTABLES) LOCAL_MODULE_TAGS := optional +LOCAL_CFLAGS += -Wall -Werror -Wunused -Wunreachable-code + include $(BUILD_EXECUTABLE) diff --git a/cmds/backup/backup.cpp b/cmds/backup/backup.cpp index ea1888beea2a..8d9b528ae6a9 100644 --- a/cmds/backup/backup.cpp +++ b/cmds/backup/backup.cpp @@ -25,8 +25,7 @@ using namespace android; #include <unistd.h> -int -usage(int argc, const char** argv) +static int usage(int /* argc */, const char** argv) { const char* p = argv[0]; @@ -44,15 +43,13 @@ usage(int argc, const char** argv) return 1; } -int -perform_full_backup() +static int perform_full_backup() { printf("this would have written all of your data to stdout\n"); return 0; } -int -perform_list(const char* filename) +static int perform_list(const char* filename) { int err; int fd; @@ -78,7 +75,7 @@ perform_list(const char* filename) size_t dataSize; err = reader.ReadEntityHeader(&key, &dataSize); if (err == 0) { - printf(" entity: %s (%d bytes)\n", key.string(), dataSize); + printf(" entity: %s (%zu bytes)\n", key.string(), dataSize); } else { printf(" Error reading entity header\n"); } @@ -95,14 +92,13 @@ perform_list(const char* filename) return 0; } -int perform_print(const char* entityname, const char* filename) +static int perform_print(const char* entityname, const char* filename) { printf("perform_print(%s, %s);", entityname, filename); return 0; } -int -main(int argc, const char** argv) +int main(int argc, const char** argv) { if (argc <= 1) { return perform_full_backup(); diff --git a/cmds/bootanimation/Android.mk b/cmds/bootanimation/Android.mk index d6ecbe31f5e8..2ee586f2c3ca 100644 --- a/cmds/bootanimation/Android.mk +++ b/cmds/bootanimation/Android.mk @@ -2,22 +2,24 @@ LOCAL_PATH:= $(call my-dir) include $(CLEAR_VARS) LOCAL_SRC_FILES:= \ - bootanimation_main.cpp \ - AudioPlayer.cpp \ - BootAnimation.cpp + bootanimation_main.cpp \ + AudioPlayer.cpp \ + BootAnimation.cpp LOCAL_CFLAGS += -DGL_GLEXT_PROTOTYPES -DEGL_EGLEXT_PROTOTYPES +LOCAL_CFLAGS += -Wall -Werror -Wunused -Wunreachable-code + LOCAL_C_INCLUDES += external/tinyalsa/include LOCAL_SHARED_LIBRARIES := \ - libcutils \ - liblog \ - libandroidfw \ - libutils \ - libbinder \ + libcutils \ + liblog \ + libandroidfw \ + libutils \ + libbinder \ libui \ - libskia \ + libskia \ libEGL \ libGLESv1_CM \ libgui \ diff --git a/cmds/bootanimation/AudioPlayer.cpp b/cmds/bootanimation/AudioPlayer.cpp index 471b77f227de..81fe5f85ca9b 100644 --- a/cmds/bootanimation/AudioPlayer.cpp +++ b/cmds/bootanimation/AudioPlayer.cpp @@ -98,16 +98,16 @@ static bool setMixerValue(struct mixer* mixer, const char* name, const char* val ALOGE("mixer_ctl_set_value failed for %s %d", name, intValue); } } else { - ALOGE("Could not parse %s as int for %d", intValue, name); + ALOGE("Could not parse %s as int for %s", values, name); } break; case MIXER_CTL_TYPE_ENUM: if (sscanf(values, "%s", stringValue) == 1) { if (mixer_ctl_set_enum_by_string(ctl, stringValue) != 0) { - ALOGE("mixer_ctl_set_enum_by_string failed for %s %%s", name, stringValue); + ALOGE("mixer_ctl_set_enum_by_string failed for %s %s", name, stringValue); } } else { - ALOGE("Could not parse %s as enum for %d", stringValue, name); + ALOGE("Could not parse %s as enum for %s", values, name); } break; default: @@ -193,7 +193,7 @@ bool AudioPlayer::init(const char* config) return false; } -void AudioPlayer::playFile(struct FileMap* fileMap) { +void AudioPlayer::playFile(FileMap* fileMap) { // stop any currently playing sound requestExitAndWait(); @@ -207,7 +207,6 @@ bool AudioPlayer::threadLoop() struct pcm *pcm = NULL; bool moreChunks = true; const struct chunk_fmt* chunkFmt = NULL; - void* buffer = NULL; int bufferSize; const uint8_t* wavData; size_t wavLength; diff --git a/cmds/bootanimation/AudioPlayer.h b/cmds/bootanimation/AudioPlayer.h index 7e82a07bc660..1def0aeac8d1 100644 --- a/cmds/bootanimation/AudioPlayer.h +++ b/cmds/bootanimation/AudioPlayer.h @@ -18,6 +18,7 @@ #define _BOOTANIMATION_AUDIOPLAYER_H #include <utils/Thread.h> +#include <utils/FileMap.h> namespace android { @@ -28,7 +29,7 @@ public: virtual ~AudioPlayer(); bool init(const char* config); - void playFile(struct FileMap* fileMap); + void playFile(FileMap* fileMap); private: virtual bool threadLoop(); @@ -39,7 +40,7 @@ private: int mPeriodSize; int mPeriodCount; - struct FileMap* mCurrentFile; + FileMap* mCurrentFile; }; } // namespace android diff --git a/cmds/bootanimation/BootAnimation.cpp b/cmds/bootanimation/BootAnimation.cpp index 167014e7c7a2..1d4de22e4049 100644 --- a/cmds/bootanimation/BootAnimation.cpp +++ b/cmds/bootanimation/BootAnimation.cpp @@ -42,9 +42,13 @@ #include <gui/Surface.h> #include <gui/SurfaceComposerClient.h> +// TODO: Fix Skia. +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wunused-parameter" #include <SkBitmap.h> #include <SkStream.h> #include <SkImageDecoder.h> +#pragma GCC diagnostic pop #include <GLES/gl.h> #include <GLES/glext.h> @@ -105,7 +109,7 @@ void BootAnimation::binderDied(const wp<IBinder>&) status_t BootAnimation::initTexture(Texture* texture, AssetManager& assets, const char* name) { Asset* asset = assets.open(name, Asset::ACCESS_BUFFER); - if (!asset) + if (asset == NULL) return NO_INIT; SkBitmap bitmap; SkImageDecoder::DecodeMemory(asset->getBuffer(false), asset->getLength(), @@ -164,7 +168,7 @@ status_t BootAnimation::initTexture(const Animation::Frame& frame) SkBitmap bitmap; SkMemoryStream stream(frame.map->getDataPtr(), frame.map->getDataLength()); SkImageDecoder* codec = SkImageDecoder::Factory(&stream); - if (codec) { + if (codec != NULL) { codec->setDitherImage(false); codec->decode(&stream, &bitmap, kN32_SkColorType, @@ -252,7 +256,7 @@ status_t BootAnimation::readyToRun() { EGL_DEPTH_SIZE, 0, EGL_NONE }; - EGLint w, h, dummy; + EGLint w, h; EGLint numConfigs; EGLConfig config; EGLSurface surface; @@ -470,7 +474,7 @@ bool BootAnimation::movie() // Parse the description file for (;;) { const char* endl = strstr(s, "\n"); - if (!endl) break; + if (endl == NULL) break; String8 line(s, endl - s); const char* l = line.string(); int fps, width, height, count, pause; @@ -572,7 +576,6 @@ bool BootAnimation::movie() const int xc = (mWidth - animation.width) / 2; const int yc = ((mHeight - animation.height) / 2); - nsecs_t lastFrame = systemTime(); nsecs_t frameDuration = s2ns(1) / animation.fps; Region clearReg(Rect(mWidth, mHeight)); @@ -620,9 +623,9 @@ bool BootAnimation::movie() Region::const_iterator tail(clearReg.end()); glEnable(GL_SCISSOR_TEST); while (head != tail) { - const Rect& r(*head++); - glScissor(r.left, mHeight - r.bottom, - r.width(), r.height()); + const Rect& r2(*head++); + glScissor(r2.left, mHeight - r2.bottom, + r2.width(), r2.height()); glClear(GL_COLOR_BUFFER_BIT); } glDisable(GL_SCISSOR_TEST); diff --git a/cmds/bootanimation/bootanimation_main.cpp b/cmds/bootanimation/bootanimation_main.cpp index 417e138b7041..6550d22f2763 100644 --- a/cmds/bootanimation/bootanimation_main.cpp +++ b/cmds/bootanimation/bootanimation_main.cpp @@ -36,7 +36,7 @@ using namespace android; // --------------------------------------------------------------------------- -int main(int argc, char** argv) +int main() { #if defined(HAVE_PTHREADS) setpriority(PRIO_PROCESS, 0, ANDROID_PRIORITY_DISPLAY); diff --git a/cmds/idmap/Android.mk b/cmds/idmap/Android.mk index ffa83f2ba428..50ccb07a3826 100644 --- a/cmds/idmap/Android.mk +++ b/cmds/idmap/Android.mk @@ -25,4 +25,6 @@ LOCAL_C_INCLUDES := external/zlib LOCAL_MODULE_TAGS := optional +LOCAL_CFLAGS += -Wall -Werror -Wunused -Wunreachable-code + include $(BUILD_EXECUTABLE) diff --git a/cmds/idmap/create.cpp b/cmds/idmap/create.cpp index 593a1973669a..7a501a4ee497 100644 --- a/cmds/idmap/create.cpp +++ b/cmds/idmap/create.cpp @@ -22,7 +22,7 @@ namespace { if (entry == NULL) { return -1; } - if (!zip->getEntryInfo(entry, NULL, NULL, NULL, NULL, NULL, (long*)crc)) { + if (!zip->getEntryInfo(entry, NULL, NULL, NULL, NULL, NULL, reinterpret_cast<long*>(crc))) { return -1; } zip->releaseEntry(entry); @@ -66,7 +66,7 @@ fail: fprintf(stderr, "error: write: %s\n", strerror(errno)); return -1; } - bytesLeft -= w; + bytesLeft -= static_cast<size_t>(w); } return 0; } @@ -78,13 +78,13 @@ fail: if (fstat(idmap_fd, &st) == -1) { return true; } - if (st.st_size < N) { + if (st.st_size < static_cast<off_t>(N)) { // file is empty or corrupt return true; } char buf[N]; - ssize_t bytesLeft = N; + size_t bytesLeft = N; if (lseek(idmap_fd, SEEK_SET, 0) < 0) { return true; } @@ -93,7 +93,7 @@ fail: if (r < 0) { return true; } - bytesLeft -= r; + bytesLeft -= static_cast<size_t>(r); if (bytesLeft == 0) { break; } diff --git a/cmds/idmap/inspect.cpp b/cmds/idmap/inspect.cpp index b9ac8a59de02..f6afc8594309 100644 --- a/cmds/idmap/inspect.cpp +++ b/cmds/idmap/inspect.cpp @@ -152,13 +152,13 @@ namespace { printe("failed to get resource name id=0x%08x\n", res_id); return UNKNOWN_ERROR; } - if (package) { + if (package != NULL) { *package = String8(String16(data.package, data.packageLen)); } - if (type) { + if (type != NULL) { *type = String8(String16(data.type, data.typeLen)); } - if (name) { + if (name != NULL) { *name = String8(String16(data.name, data.nameLen)); } return NO_ERROR; diff --git a/cmds/idmap/scan.cpp b/cmds/idmap/scan.cpp index 1153f38a9c02..7b25f7387931 100644 --- a/cmds/idmap/scan.cpp +++ b/cmds/idmap/scan.cpp @@ -64,30 +64,6 @@ namespace { return String8(tmp); } - int mkdir_p(const String8& path, uid_t uid, gid_t gid) - { - static const mode_t mode = - S_IRUSR | S_IWUSR | S_IXUSR | S_IRGRP | S_IWGRP | S_IXGRP | S_IROTH | S_IXOTH; - struct stat st; - - if (stat(path.string(), &st) == 0) { - return 0; - } - if (mkdir_p(path.getPathDir(), uid, gid) < 0) { - return -1; - } - if (mkdir(path.string(), 0755) != 0) { - return -1; - } - if (chown(path.string(), uid, gid) == -1) { - return -1; - } - if (chmod(path.string(), mode) == -1) { - return -1; - } - return 0; - } - int parse_overlay_tag(const ResXMLTree& parser, const char *target_package_name) { const size_t N = parser.getAttributeCount(); @@ -97,8 +73,8 @@ namespace { size_t len; String16 key(parser.getAttributeName(i, &len)); if (key == String16("targetPackage")) { - const uint16_t *p = parser.getAttributeStringValue(i, &len); - if (p) { + const char16_t *p = parser.getAttributeStringValue(i, &len); + if (p != NULL) { target = String16(p, len); } } else if (key == String16("priority")) { @@ -164,7 +140,7 @@ namespace { return -1; } FileMap *dataMap = zip->createEntryFileMap(entry); - if (!dataMap) { + if (dataMap == NULL) { ALOGW("%s: failed to create FileMap\n", __FUNCTION__); return -1; } diff --git a/cmds/interrupter/Android.mk b/cmds/interrupter/Android.mk index e324627517ec..97a96bfc8e25 100644 --- a/cmds/interrupter/Android.mk +++ b/cmds/interrupter/Android.mk @@ -7,6 +7,7 @@ LOCAL_SRC_FILES := \ LOCAL_MODULE := interrupter LOCAL_MODULE_TAGS := eng tests LOCAL_LDFLAGS := -ldl +LOCAL_CFLAGS := -Wall -Werror -Wunused -Wunreachable-code include $(BUILD_SHARED_LIBRARY) @@ -17,5 +18,6 @@ LOCAL_SRC_FILES := \ LOCAL_MODULE := interrupter LOCAL_MODULE_TAGS := eng tests LOCAL_LDFLAGS := -ldl +LOCAL_CFLAGS := -Wall -Werror -Wunused -Wunreachable-code -include $(BUILD_HOST_SHARED_LIBRARY)
\ No newline at end of file +include $(BUILD_HOST_SHARED_LIBRARY) diff --git a/cmds/screencap/Android.mk b/cmds/screencap/Android.mk index 5c11b7546f84..b0dc42250fae 100644 --- a/cmds/screencap/Android.mk +++ b/cmds/screencap/Android.mk @@ -2,13 +2,13 @@ LOCAL_PATH:= $(call my-dir) include $(CLEAR_VARS) LOCAL_SRC_FILES:= \ - screencap.cpp + screencap.cpp LOCAL_SHARED_LIBRARIES := \ - libcutils \ - libutils \ - libbinder \ - libskia \ + libcutils \ + libutils \ + libbinder \ + libskia \ libui \ libgui @@ -16,4 +16,6 @@ LOCAL_MODULE:= screencap LOCAL_MODULE_TAGS := optional +LOCAL_CFLAGS += -Wall -Werror -Wunused -Wunreachable-code + include $(BUILD_EXECUTABLE) diff --git a/cmds/screencap/screencap.cpp b/cmds/screencap/screencap.cpp index 1ddbecb08819..b0aee7b08d8c 100644 --- a/cmds/screencap/screencap.cpp +++ b/cmds/screencap/screencap.cpp @@ -32,10 +32,14 @@ #include <ui/PixelFormat.h> +// TODO: Fix Skia. +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wunused-parameter" #include <SkImageEncoder.h> #include <SkBitmap.h> #include <SkData.h> #include <SkStream.h> +#pragma GCC diagnostic pop using namespace android; @@ -129,7 +133,7 @@ int main(int argc, char** argv) argv += optind; int fd = -1; - const char* fn; + const char* fn = NULL; if (argc == 0) { fd = dup(STDOUT_FILENO); } else if (argc == 1) { @@ -153,7 +157,7 @@ int main(int argc, char** argv) void const* mapbase = MAP_FAILED; ssize_t mapsize = -1; - void const* base = 0; + void const* base = NULL; uint32_t w, s, h, f; size_t size = 0; @@ -190,7 +194,7 @@ int main(int argc, char** argv) } } - if (base) { + if (base != NULL) { if (png) { const SkImageInfo info = SkImageInfo::Make(w, h, flinger2skia(f), kPremul_SkAlphaType); @@ -202,7 +206,9 @@ int main(int argc, char** argv) SkData* streamData = stream.copyToData(); write(fd, streamData->data(), streamData->size()); streamData->unref(); - notifyMediaScanner(fn); + if (fn != NULL) { + notifyMediaScanner(fn); + } } else { write(fd, &w, 4); write(fd, &h, 4); diff --git a/core/java/android/app/ApplicationErrorReport.java b/core/java/android/app/ApplicationErrorReport.java index 49ab7c12cdca..6c2511eef357 100644 --- a/core/java/android/app/ApplicationErrorReport.java +++ b/core/java/android/app/ApplicationErrorReport.java @@ -168,10 +168,20 @@ public class ApplicationErrorReport implements Parcelable { PackageManager pm = context.getPackageManager(); // look for receiver in the installer package - String candidate = pm.getInstallerPackageName(packageName); - ComponentName result = getErrorReportReceiver(pm, packageName, candidate); - if (result != null) { - return result; + String candidate = null; + ComponentName result = null; + + try { + candidate = pm.getInstallerPackageName(packageName); + } catch (IllegalArgumentException e) { + // the package could already removed + } + + if (candidate != null) { + result = getErrorReportReceiver(pm, packageName, candidate); + if (result != null) { + return result; + } } // if the error app is on the system image, look for system apps diff --git a/core/java/android/app/Notification.java b/core/java/android/app/Notification.java index fb10e17adb00..a3635038e60b 100644 --- a/core/java/android/app/Notification.java +++ b/core/java/android/app/Notification.java @@ -1646,6 +1646,7 @@ public class Notification implements Parcelable builder.setSound(this.sound, this.audioStreamType); builder.setDefaults(this.defaults); builder.setVibrate(this.vibrate); + builder.setDeleteIntent(this.deleteIntent); // now apply the latestEventInfo fields if (contentTitle != null) { diff --git a/core/java/android/content/res/StringBlock.java b/core/java/android/content/res/StringBlock.java index 77b8a3314148..9652db73e0ed 100644 --- a/core/java/android/content/res/StringBlock.java +++ b/core/java/android/content/res/StringBlock.java @@ -311,13 +311,13 @@ final class StringBlock { * the color black is returned instead. * * @param color The color as a string. Can be a resource reference, - * HTML hexadecimal, octal or a name + * hexadecimal, octal or a name * @param foreground True if the color will be used as the foreground color, * false otherwise * * @return A CharacterStyle * - * @see Color#getHtmlColor(String) + * @see Color#parseColor(String) */ private static CharacterStyle getColor(String color, boolean foreground) { int c = 0xff000000; @@ -336,7 +336,11 @@ final class StringBlock { } } } else { - c = Color.getHtmlColor(color); + try { + c = Color.parseColor(color); + } catch (IllegalArgumentException e) { + c = Color.BLACK; + } } } diff --git a/core/java/android/net/WebAddress.java b/core/java/android/net/WebAddress.java index 8126b75a77c1..24d4eb8907fa 100644 --- a/core/java/android/net/WebAddress.java +++ b/core/java/android/net/WebAddress.java @@ -18,6 +18,8 @@ package android.net; import static android.util.Patterns.GOOD_IRI_CHAR; +import android.annotation.SystemApi; + import java.util.Locale; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -38,6 +40,9 @@ import java.util.regex.Pattern; * If given an https scheme but no port, fills in port * */ +// TODO(igsolla): remove WebAddress from the system SDK once the WebView apk does not +// longer need to be binary compatible with the API 21 version of the framework. +@SystemApi public class WebAddress { private String mScheme; @@ -136,42 +141,52 @@ public class WebAddress { return mScheme + "://" + authInfo + mHost + port + mPath; } + /** {@hide} */ public void setScheme(String scheme) { mScheme = scheme; } + /** {@hide} */ public String getScheme() { return mScheme; } + /** {@hide} */ public void setHost(String host) { mHost = host; } + /** {@hide} */ public String getHost() { return mHost; } + /** {@hide} */ public void setPort(int port) { mPort = port; } + /** {@hide} */ public int getPort() { return mPort; } + /** {@hide} */ public void setPath(String path) { mPath = path; } + /** {@hide} */ public String getPath() { return mPath; } + /** {@hide} */ public void setAuthInfo(String authInfo) { mAuthInfo = authInfo; } + /** {@hide} */ public String getAuthInfo() { return mAuthInfo; } diff --git a/core/java/android/net/http/CharArrayBuffers.java b/core/java/android/net/http/CharArrayBuffers.java deleted file mode 100644 index 77d45f6d342d..000000000000 --- a/core/java/android/net/http/CharArrayBuffers.java +++ /dev/null @@ -1,89 +0,0 @@ -/* - * 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.net.http; - -import org.apache.http.util.CharArrayBuffer; -import org.apache.http.protocol.HTTP; - -/** - * Utility methods for working on CharArrayBuffers. - * - * {@hide} - */ -class CharArrayBuffers { - - static final char uppercaseAddon = 'a' - 'A'; - - /** - * Returns true if the buffer contains the given string. Ignores leading - * whitespace and case. - * - * @param buffer to search - * @param beginIndex index at which we should start - * @param str to search for - */ - static boolean containsIgnoreCaseTrimmed(CharArrayBuffer buffer, - int beginIndex, final String str) { - int len = buffer.length(); - char[] chars = buffer.buffer(); - while (beginIndex < len && HTTP.isWhitespace(chars[beginIndex])) { - beginIndex++; - } - int size = str.length(); - boolean ok = len >= beginIndex + size; - for (int j=0; ok && (j<size); j++) { - char a = chars[beginIndex+j]; - char b = str.charAt(j); - if (a != b) { - a = toLower(a); - b = toLower(b); - ok = a == b; - } - } - return ok; - } - - /** - * Returns index of first occurence ch. Lower cases characters leading up - * to first occurrence of ch. - */ - static int setLowercaseIndexOf(CharArrayBuffer buffer, final int ch) { - - int beginIndex = 0; - int endIndex = buffer.length(); - char[] chars = buffer.buffer(); - - for (int i = beginIndex; i < endIndex; i++) { - char current = chars[i]; - if (current == ch) { - return i; - } else if (current >= 'A' && current <= 'Z'){ - // make lower case - current += uppercaseAddon; - chars[i] = current; - } - } - return -1; - } - - private static char toLower(char c) { - if (c >= 'A' && c <= 'Z'){ - c += uppercaseAddon; - } - return c; - } -} diff --git a/core/java/android/net/http/Connection.java b/core/java/android/net/http/Connection.java index 834ad69e56d6..831bd0e2cdcc 100644 --- a/core/java/android/net/http/Connection.java +++ b/core/java/android/net/http/Connection.java @@ -436,7 +436,7 @@ abstract class Connection { ret = false; String error; if (errorId < 0) { - error = ErrorStrings.getString(errorId, mContext); + error = getEventHandlerErrorString(errorId); } else { Throwable cause = e.getCause(); error = cause != null ? cause.toString() : e.getMessage(); @@ -451,6 +451,61 @@ abstract class Connection { return ret; } + private static String getEventHandlerErrorString(int errorId) { + switch (errorId) { + case EventHandler.OK: + return "OK"; + + case EventHandler.ERROR: + return "ERROR"; + + case EventHandler.ERROR_LOOKUP: + return "ERROR_LOOKUP"; + + case EventHandler.ERROR_UNSUPPORTED_AUTH_SCHEME: + return "ERROR_UNSUPPORTED_AUTH_SCHEME"; + + case EventHandler.ERROR_AUTH: + return "ERROR_AUTH"; + + case EventHandler.ERROR_PROXYAUTH: + return "ERROR_PROXYAUTH"; + + case EventHandler.ERROR_CONNECT: + return "ERROR_CONNECT"; + + case EventHandler.ERROR_IO: + return "ERROR_IO"; + + case EventHandler.ERROR_TIMEOUT: + return "ERROR_TIMEOUT"; + + case EventHandler.ERROR_REDIRECT_LOOP: + return "ERROR_REDIRECT_LOOP"; + + case EventHandler.ERROR_UNSUPPORTED_SCHEME: + return "ERROR_UNSUPPORTED_SCHEME"; + + case EventHandler.ERROR_FAILED_SSL_HANDSHAKE: + return "ERROR_FAILED_SSL_HANDSHAKE"; + + case EventHandler.ERROR_BAD_URL: + return "ERROR_BAD_URL"; + + case EventHandler.FILE_ERROR: + return "FILE_ERROR"; + + case EventHandler.FILE_NOT_FOUND_ERROR: + return "FILE_NOT_FOUND_ERROR"; + + case EventHandler.TOO_MANY_REQUESTS_ERROR: + return "TOO_MANY_REQUESTS_ERROR"; + + default: + return "UNKNOWN_ERROR"; + } + } + HttpContext getHttpContext() { return mHttpContext; } diff --git a/core/java/android/net/http/Headers.java b/core/java/android/net/http/Headers.java index 657e07133bc9..0f8b105d61fb 100644 --- a/core/java/android/net/http/Headers.java +++ b/core/java/android/net/http/Headers.java @@ -158,7 +158,7 @@ public final class Headers { } public void parseHeader(CharArrayBuffer buffer) { - int pos = CharArrayBuffers.setLowercaseIndexOf(buffer, ':'); + int pos = setLowercaseIndexOf(buffer, ':'); if (pos == -1) { return; } @@ -459,12 +459,63 @@ public final class Headers { } private void setConnectionType(CharArrayBuffer buffer, int pos) { - if (CharArrayBuffers.containsIgnoreCaseTrimmed( - buffer, pos, HTTP.CONN_CLOSE)) { + if (containsIgnoreCaseTrimmed(buffer, pos, HTTP.CONN_CLOSE)) { connectionType = CONN_CLOSE; - } else if (CharArrayBuffers.containsIgnoreCaseTrimmed( + } else if (containsIgnoreCaseTrimmed( buffer, pos, HTTP.CONN_KEEP_ALIVE)) { connectionType = CONN_KEEP_ALIVE; } } + + + /** + * Returns true if the buffer contains the given string. Ignores leading + * whitespace and case. + * + * @param buffer to search + * @param beginIndex index at which we should start + * @param str to search for + */ + static boolean containsIgnoreCaseTrimmed(CharArrayBuffer buffer, + int beginIndex, final String str) { + int len = buffer.length(); + char[] chars = buffer.buffer(); + while (beginIndex < len && HTTP.isWhitespace(chars[beginIndex])) { + beginIndex++; + } + int size = str.length(); + boolean ok = len >= (beginIndex + size); + for (int j=0; ok && (j < size); j++) { + char a = chars[beginIndex + j]; + char b = str.charAt(j); + if (a != b) { + a = Character.toLowerCase(a); + b = Character.toLowerCase(b); + ok = a == b; + } + } + + return true; + } + + /** + * Returns index of first occurence ch. Lower cases characters leading up + * to first occurrence of ch. + */ + static int setLowercaseIndexOf(CharArrayBuffer buffer, final int ch) { + + int beginIndex = 0; + int endIndex = buffer.length(); + char[] chars = buffer.buffer(); + + for (int i = beginIndex; i < endIndex; i++) { + char current = chars[i]; + if (current == ch) { + return i; + } else { + chars[i] = Character.toLowerCase(current); + } + } + return -1; + } } diff --git a/core/java/android/net/http/X509TrustManagerExtensions.java b/core/java/android/net/http/X509TrustManagerExtensions.java index 6a63a0c4fe37..bb36c20585ac 100644 --- a/core/java/android/net/http/X509TrustManagerExtensions.java +++ b/core/java/android/net/http/X509TrustManagerExtensions.java @@ -36,7 +36,7 @@ import javax.net.ssl.X509TrustManager; */ public class X509TrustManagerExtensions { - TrustManagerImpl mDelegate; + final TrustManagerImpl mDelegate; /** * Constructs a new X509TrustManagerExtensions wrapper. @@ -48,6 +48,7 @@ public class X509TrustManagerExtensions { if (tm instanceof TrustManagerImpl) { mDelegate = (TrustManagerImpl) tm; } else { + mDelegate = null; throw new IllegalArgumentException("tm is an instance of " + tm.getClass().getName() + " which is not a supported type of X509TrustManager"); } diff --git a/core/java/android/os/Process.java b/core/java/android/os/Process.java index 3ada9bb002ee..21a990421e59 100644 --- a/core/java/android/os/Process.java +++ b/core/java/android/os/Process.java @@ -689,6 +689,20 @@ public class Process { } /** + * Tries to establish a connection to the zygote that handles a given {@code abi}. Might block and retry if the + * zygote is unresponsive. This method is a no-op if a connection is already open. + * + * @hide + */ + public static void establishZygoteConnectionForAbi(String abi) { + try { + openZygoteSocketIfNeeded(abi); + } catch (ZygoteStartFailedEx ex) { + throw new RuntimeException("Unable to connect to zygote for abi: " + abi, ex); + } + } + + /** * Tries to open socket to Zygote process if not already open. If * already open, does nothing. May block and retry. */ diff --git a/core/java/android/text/format/DateFormat.java b/core/java/android/text/format/DateFormat.java index d48f551daf46..d515e210cda4 100755 --- a/core/java/android/text/format/DateFormat.java +++ b/core/java/android/text/format/DateFormat.java @@ -221,68 +221,13 @@ public class DateFormat { /** * Returns a {@link java.text.DateFormat} object that can format the date - * in short form (such as 12/31/1999) according - * to the current locale and the user's date-order preference. + * in short form according to the current locale. + * * @param context the application context * @return the {@link java.text.DateFormat} object that properly formats the date. */ public static java.text.DateFormat getDateFormat(Context context) { - String value = Settings.System.getString(context.getContentResolver(), - Settings.System.DATE_FORMAT); - - return getDateFormatForSetting(context, value); - } - - /** - * Returns a {@link java.text.DateFormat} object to format the date - * as if the date format setting were set to <code>value</code>, - * including null to use the locale's default format. - * @param context the application context - * @param value the date format setting string to interpret for - * the current locale - * @hide - */ - public static java.text.DateFormat getDateFormatForSetting(Context context, - String value) { - String format = getDateFormatStringForSetting(context, value); - return new java.text.SimpleDateFormat(format); - } - - private static String getDateFormatStringForSetting(Context context, String value) { - if (value != null) { - int month = value.indexOf('M'); - int day = value.indexOf('d'); - int year = value.indexOf('y'); - - if (month >= 0 && day >= 0 && year >= 0) { - String template = context.getString(R.string.numeric_date_template); - if (year < month && year < day) { - if (month < day) { - value = String.format(template, "yyyy", "MM", "dd"); - } else { - value = String.format(template, "yyyy", "dd", "MM"); - } - } else if (month < day) { - if (day < year) { - value = String.format(template, "MM", "dd", "yyyy"); - } else { // unlikely - value = String.format(template, "MM", "yyyy", "dd"); - } - } else { // day < month - if (month < year) { - value = String.format(template, "dd", "MM", "yyyy"); - } else { // unlikely - value = String.format(template, "dd", "yyyy", "MM"); - } - } - - return value; - } - } - - // The setting is not set; use the locale's default. - LocaleData d = LocaleData.get(context.getResources().getConfiguration().locale); - return d.shortDateFormat4; + return java.text.DateFormat.getDateInstance(java.text.DateFormat.SHORT); } /** @@ -315,14 +260,16 @@ public class DateFormat { * order returned here. */ public static char[] getDateFormatOrder(Context context) { - return ICU.getDateFormatOrder(getDateFormatString(context)); + return ICU.getDateFormatOrder(getDateFormatString()); } - private static String getDateFormatString(Context context) { - String value = Settings.System.getString(context.getContentResolver(), - Settings.System.DATE_FORMAT); + private static String getDateFormatString() { + java.text.DateFormat df = java.text.DateFormat.getDateInstance(java.text.DateFormat.SHORT); + if (df instanceof SimpleDateFormat) { + return ((SimpleDateFormat) df).toPattern(); + } - return getDateFormatStringForSetting(context, value); + throw new AssertionError("!(df instanceof SimpleDateFormat)"); } /** diff --git a/core/java/android/webkit/CookieManager.java b/core/java/android/webkit/CookieManager.java index 20ef64621258..eca96f95d09a 100644 --- a/core/java/android/webkit/CookieManager.java +++ b/core/java/android/webkit/CookieManager.java @@ -16,18 +16,14 @@ package android.webkit; +import android.annotation.SystemApi; import android.net.WebAddress; /** * Manages the cookies used by an application's {@link WebView} instances. * Cookies are manipulated according to RFC2109. */ -public class CookieManager { - /** - * @hide Only for use by WebViewProvider implementations - */ - protected CookieManager() { - } +public abstract class CookieManager { @Override protected Object clone() throws CloneNotSupportedException { @@ -59,9 +55,7 @@ public class CookieManager { * @param accept whether {@link WebView} instances should send and accept * cookies */ - public synchronized void setAcceptCookie(boolean accept) { - throw new MustOverrideException(); - } + public abstract void setAcceptCookie(boolean accept); /** * Gets whether the application's {@link WebView} instances send and accept @@ -69,9 +63,7 @@ public class CookieManager { * * @return true if {@link WebView} instances send and accept cookies */ - public synchronized boolean acceptCookie() { - throw new MustOverrideException(); - } + public abstract boolean acceptCookie(); /** * Sets whether the {@link WebView} should allow third party cookies to be set. @@ -87,9 +79,7 @@ public class CookieManager { * @param accept whether the {@link WebView} instance should accept * third party cookies */ - public void setAcceptThirdPartyCookies(WebView webview, boolean accept) { - throw new MustOverrideException(); - } + public abstract void setAcceptThirdPartyCookies(WebView webview, boolean accept); /** * Gets whether the {@link WebView} should allow third party cookies to be set. @@ -97,9 +87,7 @@ public class CookieManager { * @param webview the {@link WebView} instance to get the cookie policy for * @return true if the {@link WebView} accepts third party cookies */ - public boolean acceptThirdPartyCookies(WebView webview) { - throw new MustOverrideException(); - } + public abstract boolean acceptThirdPartyCookies(WebView webview); /** * Sets a cookie for the given URL. Any existing cookie with the same host, @@ -110,9 +98,7 @@ public class CookieManager { * @param value the cookie as a string, using the format of the 'Set-Cookie' * HTTP response header */ - public void setCookie(String url, String value) { - throw new MustOverrideException(); - } + public abstract void setCookie(String url, String value); /** * Sets a cookie for the given URL. Any existing cookie with the same host, @@ -133,9 +119,7 @@ public class CookieManager { * HTTP response header * @param callback a callback to be executed when the cookie has been set */ - public void setCookie(String url, String value, ValueCallback<Boolean> callback) { - throw new MustOverrideException(); - } + public abstract void setCookie(String url, String value, ValueCallback<Boolean> callback); /** * Gets the cookies for the given URL. @@ -144,9 +128,7 @@ public class CookieManager { * @return value the cookies as a string, using the format of the 'Cookie' * HTTP request header */ - public String getCookie(String url) { - throw new MustOverrideException(); - } + public abstract String getCookie(String url); /** * See {@link #getCookie(String)}. @@ -155,11 +137,10 @@ public class CookieManager { * @param privateBrowsing whether to use the private browsing cookie jar * @return value the cookies as a string, using the format of the 'Cookie' * HTTP request header - * @hide Used by Browser, no intention to publish. + * @hide Used by Browser and by WebViewProvider implementations. */ - public String getCookie(String url, boolean privateBrowsing) { - throw new MustOverrideException(); - } + @SystemApi + public abstract String getCookie(String url, boolean privateBrowsing); /** * Gets cookie(s) for a given uri so that it can be set to "cookie:" in http @@ -168,10 +149,11 @@ public class CookieManager { * @param uri the WebAddress for which the cookies are requested * @return value the cookies as a string, using the format of the 'Cookie' * HTTP request header - * @hide Used by RequestHandle, no intention to publish. + * @hide Used by RequestHandle and by WebViewProvider implementations. */ + @SystemApi public synchronized String getCookie(WebAddress uri) { - throw new MustOverrideException(); + return getCookie(uri.toString()); } /** @@ -179,9 +161,7 @@ public class CookieManager { * date. * @deprecated use {@link #removeSessionCookies(ValueCallback)} instead. */ - public void removeSessionCookie() { - throw new MustOverrideException(); - } + public abstract void removeSessionCookie(); /** * Removes all session cookies, which are cookies without an expiration @@ -197,18 +177,14 @@ public class CookieManager { * method from a thread without a Looper. * @param callback a callback which is executed when the session cookies have been removed */ - public void removeSessionCookies(ValueCallback<Boolean> callback) { - throw new MustOverrideException(); - } + public abstract void removeSessionCookies(ValueCallback<Boolean> callback); /** * Removes all cookies. * @deprecated Use {@link #removeAllCookies(ValueCallback)} instead. */ @Deprecated - public void removeAllCookie() { - throw new MustOverrideException(); - } + public abstract void removeAllCookie(); /** * Removes all cookies. @@ -223,54 +199,37 @@ public class CookieManager { * method from a thread without a Looper. * @param callback a callback which is executed when the cookies have been removed */ - public void removeAllCookies(ValueCallback<Boolean> callback) { - throw new MustOverrideException(); - } + public abstract void removeAllCookies(ValueCallback<Boolean> callback); /** * Gets whether there are stored cookies. * * @return true if there are stored cookies */ - public synchronized boolean hasCookies() { - throw new MustOverrideException(); - } + public abstract boolean hasCookies(); /** * See {@link #hasCookies()}. * * @param privateBrowsing whether to use the private browsing cookie jar - * @hide Used by Browser, no intention to publish. + * @hide Used by Browser and WebViewProvider implementations. */ - public synchronized boolean hasCookies(boolean privateBrowsing) { - throw new MustOverrideException(); - } + @SystemApi + public abstract boolean hasCookies(boolean privateBrowsing); /** * Removes all expired cookies. * @deprecated The WebView handles removing expired cookies automatically. */ @Deprecated - public void removeExpiredCookie() { - throw new MustOverrideException(); - } + public abstract void removeExpiredCookie(); /** * Ensures all cookies currently accessible through the getCookie API are * written to persistent storage. * This call will block the caller until it is done and may perform I/O. */ - public void flush() { - flushCookieStore(); - } - - /** - * Flushes all cookies managed by the Chrome HTTP stack to flash. - * - * @hide Package level api, called from CookieSyncManager - */ - protected void flushCookieStore() { - } + public abstract void flush(); /** * Gets whether the application's {@link WebView} instances send and accept @@ -289,9 +248,8 @@ public class CookieManager { * * @hide Only for use by WebViewProvider implementations */ - protected boolean allowFileSchemeCookiesImpl() { - throw new MustOverrideException(); - } + @SystemApi + protected abstract boolean allowFileSchemeCookiesImpl(); /** * Sets whether the application's {@link WebView} instances should send and @@ -314,7 +272,6 @@ public class CookieManager { * * @hide Only for use by WebViewProvider implementations */ - protected void setAcceptFileSchemeCookiesImpl(boolean accept) { - throw new MustOverrideException(); - } + @SystemApi + protected abstract void setAcceptFileSchemeCookiesImpl(boolean accept); } diff --git a/core/java/android/webkit/DebugFlags.java b/core/java/android/webkit/DebugFlags.java deleted file mode 100644 index 7b3cb1b55993..000000000000 --- a/core/java/android/webkit/DebugFlags.java +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Copyright (C) 2009 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.webkit; - -/** - * This class is a container for all of the debug flags used in the Java - * components of webkit. These flags must be final in order to ensure that - * the compiler optimizes the code that uses them out of the final executable. - * - * The name of each flags maps directly to the name of the class in which that - * flag is used. - * - * @hide Only used by WebView implementations. - */ -public class DebugFlags { - - public static final boolean COOKIE_SYNC_MANAGER = false; - public static final boolean TRACE_API = false; - public static final boolean TRACE_CALLBACK = false; - public static final boolean URL_UTIL = false; - public static final boolean WEB_SYNC_MANAGER = false; - -} diff --git a/core/java/android/webkit/FindActionModeCallback.java b/core/java/android/webkit/FindActionModeCallback.java index c68b450417af..ab6a2f91f95e 100644 --- a/core/java/android/webkit/FindActionModeCallback.java +++ b/core/java/android/webkit/FindActionModeCallback.java @@ -16,6 +16,7 @@ package android.webkit; +import android.annotation.SystemApi; import android.content.Context; import android.content.res.Resources; import android.graphics.Point; @@ -36,6 +37,7 @@ import android.widget.TextView; /** * @hide */ +@SystemApi public class FindActionModeCallback implements ActionMode.Callback, TextWatcher, View.OnClickListener, WebView.FindListener { private View mCustomView; diff --git a/core/java/android/webkit/GeolocationPermissions.java b/core/java/android/webkit/GeolocationPermissions.java index bc3d0351727f..7187f221c77d 100644 --- a/core/java/android/webkit/GeolocationPermissions.java +++ b/core/java/android/webkit/GeolocationPermissions.java @@ -16,6 +16,8 @@ package android.webkit; +import android.annotation.SystemApi; + import java.util.Set; /** @@ -136,5 +138,6 @@ public class GeolocationPermissions { * way to call createHandler() and createUIHandler(), so it would not work). * @hide Only for use by WebViewProvider implementations */ + @SystemApi public GeolocationPermissions() {} } diff --git a/core/java/android/webkit/HttpAuthHandler.java b/core/java/android/webkit/HttpAuthHandler.java index ee3b3698c1d9..45fc1f5204fd 100644 --- a/core/java/android/webkit/HttpAuthHandler.java +++ b/core/java/android/webkit/HttpAuthHandler.java @@ -16,6 +16,7 @@ package android.webkit; +import android.annotation.SystemApi; import android.os.Handler; /** @@ -30,6 +31,7 @@ public class HttpAuthHandler extends Handler { /** * @hide Only for use by WebViewProvider implementations. */ + @SystemApi public HttpAuthHandler() { } diff --git a/core/java/android/webkit/JsDialogHelper.java b/core/java/android/webkit/JsDialogHelper.java index bb0339e3b334..cc475c3299b3 100644 --- a/core/java/android/webkit/JsDialogHelper.java +++ b/core/java/android/webkit/JsDialogHelper.java @@ -16,6 +16,7 @@ package android.webkit; +import android.annotation.SystemApi; import android.app.Activity; import android.app.AlertDialog; import android.content.Context; @@ -34,8 +35,9 @@ import java.net.URL; * Helper class to create JavaScript dialogs. It is used by * different WebView implementations. * - * @hide Helper class for internal use + * @hide */ +@SystemApi public class JsDialogHelper { private static final String TAG = "JsDialogHelper"; diff --git a/core/java/android/webkit/JsPromptResult.java b/core/java/android/webkit/JsPromptResult.java index a1bf124ffc51..771cc32d42f4 100644 --- a/core/java/android/webkit/JsPromptResult.java +++ b/core/java/android/webkit/JsPromptResult.java @@ -16,6 +16,8 @@ package android.webkit; +import android.annotation.SystemApi; + /** * Public class for handling JavaScript prompt requests. The WebChromeClient will receive a @@ -39,6 +41,7 @@ public class JsPromptResult extends JsResult { /** * @hide Only for use by WebViewProvider implementations */ + @SystemApi public JsPromptResult(ResultReceiver receiver) { super(receiver); } @@ -46,6 +49,7 @@ public class JsPromptResult extends JsResult { /** * @hide Only for use by WebViewProvider implementations */ + @SystemApi public String getStringResult() { return mStringResult; } diff --git a/core/java/android/webkit/JsResult.java b/core/java/android/webkit/JsResult.java index e4e6851d1a41..d36ab418a164 100644 --- a/core/java/android/webkit/JsResult.java +++ b/core/java/android/webkit/JsResult.java @@ -16,6 +16,8 @@ package android.webkit; +import android.annotation.SystemApi; + /** * An instance of this class is passed as a parameter in various {@link WebChromeClient} action * notifications. The object is used as a handle onto the underlying JavaScript-originated request, @@ -27,6 +29,7 @@ public class JsResult { * notifications when the JavaScript result represented by a JsResult instance has * @hide Only for use by WebViewProvider implementations */ + @SystemApi public interface ResultReceiver { public void onJsResultComplete(JsResult result); } @@ -54,6 +57,7 @@ public class JsResult { /** * @hide Only for use by WebViewProvider implementations */ + @SystemApi public JsResult(ResultReceiver receiver) { mReceiver = receiver; } @@ -61,6 +65,7 @@ public class JsResult { /** * @hide Only for use by WebViewProvider implementations */ + @SystemApi public final boolean getResult() { return mResult; } diff --git a/core/java/android/net/http/ErrorStrings.java b/core/java/android/webkit/LegacyErrorStrings.java index 8383681561dd..11fc05dca30d 100644 --- a/core/java/android/net/http/ErrorStrings.java +++ b/core/java/android/webkit/LegacyErrorStrings.java @@ -14,9 +14,10 @@ * limitations under the License. */ -package android.net.http; +package android.webkit; import android.content.Context; +import android.net.http.EventHandler; import android.util.Log; /** @@ -24,8 +25,8 @@ import android.util.Log; * * {@hide} */ -public class ErrorStrings { - private ErrorStrings() { /* Utility class, don't instantiate. */ } +class LegacyErrorStrings { + private LegacyErrorStrings() { /* Utility class, don't instantiate. */ } private static final String LOGTAG = "Http"; @@ -33,7 +34,7 @@ public class ErrorStrings { * Get the localized error message resource for the given error code. * If the code is unknown, we'll return a generic error message. */ - public static String getString(int errorCode, Context context) { + static String getString(int errorCode, Context context) { return context.getText(getResource(errorCode)).toString(); } @@ -41,7 +42,7 @@ public class ErrorStrings { * Get the localized error message resource for the given error code. * If the code is unknown, we'll return a generic error message. */ - public static int getResource(int errorCode) { + private static int getResource(int errorCode) { switch(errorCode) { case EventHandler.OK: return com.android.internal.R.string.httpErrorOk; diff --git a/core/java/android/webkit/SslErrorHandler.java b/core/java/android/webkit/SslErrorHandler.java index af3154474b6b..537065d58a9d 100644 --- a/core/java/android/webkit/SslErrorHandler.java +++ b/core/java/android/webkit/SslErrorHandler.java @@ -16,6 +16,7 @@ package android.webkit; +import android.annotation.SystemApi; import android.os.Handler; /** @@ -30,6 +31,7 @@ public class SslErrorHandler extends Handler { /** * @hide Only for use by WebViewProvider implementations. */ + @SystemApi public SslErrorHandler() {} /** diff --git a/core/java/android/webkit/URLUtil.java b/core/java/android/webkit/URLUtil.java index d11598446fb2..f5233b611dce 100644 --- a/core/java/android/webkit/URLUtil.java +++ b/core/java/android/webkit/URLUtil.java @@ -29,6 +29,7 @@ import android.util.Log; public final class URLUtil { private static final String LOGTAG = "webkit"; + private static final boolean TRACE = false; // to refer to bar.png under your package's asset/foo/ directory, use // "file:///android_asset/foo/bar.png". @@ -49,7 +50,7 @@ public final class URLUtil { String retVal = inUrl; WebAddress webAddress; - if (DebugFlags.URL_UTIL) Log.v(LOGTAG, "guessURL before queueRequest: " + inUrl); + if (TRACE) Log.v(LOGTAG, "guessURL before queueRequest: " + inUrl); if (inUrl.length() == 0) return inUrl; if (inUrl.startsWith("about:")) return inUrl; @@ -69,7 +70,7 @@ public final class URLUtil { webAddress = new WebAddress(inUrl); } catch (ParseException ex) { - if (DebugFlags.URL_UTIL) { + if (TRACE) { Log.v(LOGTAG, "smartUrlFilter: failed to parse url = " + inUrl); } return retVal; @@ -286,7 +287,7 @@ public final class URLUtil { } return url; } - + /** * Guesses canonical filename that a download would have, using * the URL and contentDisposition. File extension, if not defined, @@ -294,7 +295,7 @@ public final class URLUtil { * @param url Url to the content * @param contentDisposition Content-Disposition HTTP header or null * @param mimeType Mime-type of the content or null - * + * * @return suggested filename */ public static final String guessFileName( diff --git a/core/java/android/webkit/WebBackForwardList.java b/core/java/android/webkit/WebBackForwardList.java index bfef2e7404b5..e67137650338 100644 --- a/core/java/android/webkit/WebBackForwardList.java +++ b/core/java/android/webkit/WebBackForwardList.java @@ -16,6 +16,7 @@ package android.webkit; +import android.annotation.SystemApi; import java.io.Serializable; /** @@ -23,56 +24,38 @@ import java.io.Serializable; * WebView.copyBackForwardList() will return a copy of this class used to * inspect the entries in the list. */ -public class WebBackForwardList implements Cloneable, Serializable { - - /** - * @hide - */ - public WebBackForwardList() { - } - +public abstract class WebBackForwardList implements Cloneable, Serializable { /** * Return the current history item. This method returns null if the list is * empty. * @return The current history item. */ - public synchronized WebHistoryItem getCurrentItem() { - throw new MustOverrideException(); - } + public abstract WebHistoryItem getCurrentItem(); /** * Get the index of the current history item. This index can be used to * directly index into the array list. * @return The current index from 0...n or -1 if the list is empty. */ - public synchronized int getCurrentIndex() { - throw new MustOverrideException(); - } + public abstract int getCurrentIndex(); /** * Get the history item at the given index. The index range is from 0...n * where 0 is the first item and n is the last item. * @param index The index to retrieve. */ - public synchronized WebHistoryItem getItemAtIndex(int index) { - throw new MustOverrideException(); - } + public abstract WebHistoryItem getItemAtIndex(int index); /** * Get the total size of the back/forward list. * @return The size of the list. */ - public synchronized int getSize() { - throw new MustOverrideException(); - } + public abstract int getSize(); /** * Clone the entire object to be used in the UI thread by clients of * WebView. This creates a copy that should never be modified by any of the * webkit package classes. */ - protected synchronized WebBackForwardList clone() { - throw new MustOverrideException(); - } - + protected abstract WebBackForwardList clone(); } diff --git a/core/java/android/webkit/WebChromeClient.java b/core/java/android/webkit/WebChromeClient.java index 46a7fd0f4c68..768dc9f70ff6 100644 --- a/core/java/android/webkit/WebChromeClient.java +++ b/core/java/android/webkit/WebChromeClient.java @@ -16,6 +16,7 @@ package android.webkit; +import android.annotation.SystemApi; import android.content.Intent; import android.content.pm.ActivityInfo; import android.graphics.Bitmap; @@ -509,6 +510,7 @@ public class WebChromeClient { * @deprecated Use {@link #showFileChooser} instead. * @hide This method was not published in any SDK version. */ + @SystemApi @Deprecated public void openFileChooser(ValueCallback<Uri> uploadFile, String acceptType, String capture) { uploadFile.onReceiveValue(null); diff --git a/core/java/android/webkit/WebHistoryItem.java b/core/java/android/webkit/WebHistoryItem.java index 9a588e411f3a..569fccd565cc 100644 --- a/core/java/android/webkit/WebHistoryItem.java +++ b/core/java/android/webkit/WebHistoryItem.java @@ -16,6 +16,7 @@ package android.webkit; +import android.annotation.SystemApi; import android.graphics.Bitmap; /** @@ -24,14 +25,7 @@ import android.graphics.Bitmap; * item. Each history item may be updated during the load of a page. * @see WebBackForwardList */ -public class WebHistoryItem implements Cloneable { - - /** - * @hide - */ - public WebHistoryItem() { - } - +public abstract class WebHistoryItem implements Cloneable { /** * Return an identifier for this history item. If an item is a copy of * another item, the identifiers will be the same even if they are not the @@ -40,10 +34,9 @@ public class WebHistoryItem implements Cloneable { * @deprecated This method is now obsolete. * @hide Since API level {@link android.os.Build.VERSION_CODES#JELLY_BEAN_MR1} */ + @SystemApi @Deprecated - public int getId() { - throw new MustOverrideException(); - } + public abstract int getId(); /** * Return the url of this history item. The url is the base url of this @@ -53,29 +46,23 @@ public class WebHistoryItem implements Cloneable { * Note: The VM ensures 32-bit atomic read/write operations so we don't have * to synchronize this method. */ - public String getUrl() { - throw new MustOverrideException(); - } + public abstract String getUrl(); /** * Return the original url of this history item. This was the requested - * url, the final url may be different as there might have been + * url, the final url may be different as there might have been * redirects while loading the site. * @return The original url of this history item. */ - public String getOriginalUrl() { - throw new MustOverrideException(); - } - + public abstract String getOriginalUrl(); + /** * Return the document title of this history item. * @return The document title of this history item. * Note: The VM ensures 32-bit atomic read/write operations so we don't have * to synchronize this method. */ - public String getTitle() { - throw new MustOverrideException(); - } + public abstract String getTitle(); /** * Return the favicon of this history item or null if no favicon was found. @@ -83,15 +70,10 @@ public class WebHistoryItem implements Cloneable { * Note: The VM ensures 32-bit atomic read/write operations so we don't have * to synchronize this method. */ - public Bitmap getFavicon() { - throw new MustOverrideException(); - } + public abstract Bitmap getFavicon(); /** * Clone the history item for use by clients of WebView. */ - protected synchronized WebHistoryItem clone() { - throw new MustOverrideException(); - } - + protected abstract WebHistoryItem clone(); } diff --git a/core/java/android/webkit/WebIconDatabase.java b/core/java/android/webkit/WebIconDatabase.java index e574593fa918..08956e0f1b78 100644 --- a/core/java/android/webkit/WebIconDatabase.java +++ b/core/java/android/webkit/WebIconDatabase.java @@ -16,6 +16,7 @@ package android.webkit; +import android.annotation.SystemApi; import android.content.ContentResolver; import android.graphics.Bitmap; @@ -32,7 +33,7 @@ import android.graphics.Bitmap; * up to {@link android.os.Build.VERSION_CODES#JELLY_BEAN_MR2} */ @Deprecated -public class WebIconDatabase { +public abstract class WebIconDatabase { /** * Interface for receiving icons from the database. * @deprecated This interface is obsolete. @@ -52,23 +53,17 @@ public class WebIconDatabase { * Open a the icon database and store the icons in the given path. * @param path The directory path where the icon database will be stored. */ - public void open(String path) { - throw new MustOverrideException(); - } + public abstract void open(String path); /** * Close the shared instance of the icon database. */ - public void close() { - throw new MustOverrideException(); - } + public abstract void close(); /** * Removes all the icons in the database. */ - public void removeAllIcons() { - throw new MustOverrideException(); - } + public abstract void removeAllIcons(); /** * Request the Bitmap representing the icon for the given page @@ -76,32 +71,25 @@ public class WebIconDatabase { * @param url The page's url. * @param listener An implementation on IconListener to receive the result. */ - public void requestIconForPageUrl(String url, IconListener listener) { - throw new MustOverrideException(); - } + public abstract void requestIconForPageUrl(String url, IconListener listener); /** {@hide} */ - public void bulkRequestIconForPageUrl(ContentResolver cr, String where, - IconListener listener) { - throw new MustOverrideException(); - } + @SystemApi + public abstract void bulkRequestIconForPageUrl(ContentResolver cr, String where, + IconListener listener); /** * Retain the icon for the given page url. * @param url The page's url. */ - public void retainIconForPageUrl(String url) { - throw new MustOverrideException(); - } + public abstract void retainIconForPageUrl(String url); /** * Release the icon for the given page url. * @param url The page's url. */ - public void releaseIconForPageUrl(String url) { - throw new MustOverrideException(); - } + public abstract void releaseIconForPageUrl(String url); /** * Get the global instance of WebIconDatabase. @@ -113,9 +101,4 @@ public class WebIconDatabase { // XXX: Must be created in the UI thread. return WebViewFactory.getProvider().getWebIconDatabase(); } - - /** - * @hide Only for use by WebViewProvider implementations - */ - protected WebIconDatabase() {} } diff --git a/core/java/android/webkit/WebSettings.java b/core/java/android/webkit/WebSettings.java index 7cf3cb5ad7ca..1d2c3119d81d 100644 --- a/core/java/android/webkit/WebSettings.java +++ b/core/java/android/webkit/WebSettings.java @@ -204,25 +204,15 @@ public abstract class WebSettings { public static final int MIXED_CONTENT_COMPATIBILITY_MODE = 2; /** - * Hidden constructor to prevent clients from creating a new settings - * instance or deriving the class. - * - * @hide - */ - protected WebSettings() { - } - - /** * Enables dumping the pages navigation cache to a text file. The default * is false. * * @deprecated This method is now obsolete. * @hide Since API level {@link android.os.Build.VERSION_CODES#JELLY_BEAN_MR1} */ + @SystemApi @Deprecated - public void setNavDump(boolean enabled) { - throw new MustOverrideException(); - } + public abstract void setNavDump(boolean enabled); /** * Gets whether dumping the navigation cache is enabled. @@ -232,10 +222,9 @@ public abstract class WebSettings { * @deprecated This method is now obsolete. * @hide Since API level {@link android.os.Build.VERSION_CODES#JELLY_BEAN_MR1} */ + @SystemApi @Deprecated - public boolean getNavDump() { - throw new MustOverrideException(); - } + public abstract boolean getNavDump(); /** * Sets whether the WebView should support zooming using its on-screen zoom @@ -246,9 +235,7 @@ public abstract class WebSettings { * * @param support whether the WebView should support zoom */ - public void setSupportZoom(boolean support) { - throw new MustOverrideException(); - } + public abstract void setSupportZoom(boolean support); /** * Gets whether the WebView supports zoom. @@ -256,9 +243,7 @@ public abstract class WebSettings { * @return true if the WebView supports zoom * @see #setSupportZoom */ - public boolean supportZoom() { - throw new MustOverrideException(); - } + public abstract boolean supportZoom(); /** * Sets whether the WebView requires a user gesture to play media. @@ -266,9 +251,7 @@ public abstract class WebSettings { * * @param require whether the WebView requires a user gesture to play media */ - public void setMediaPlaybackRequiresUserGesture(boolean require) { - throw new MustOverrideException(); - } + public abstract void setMediaPlaybackRequiresUserGesture(boolean require); /** * Gets whether the WebView requires a user gesture to play media. @@ -276,9 +259,7 @@ public abstract class WebSettings { * @return true if the WebView requires a user gesture to play media * @see #setMediaPlaybackRequiresUserGesture */ - public boolean getMediaPlaybackRequiresUserGesture() { - throw new MustOverrideException(); - } + public abstract boolean getMediaPlaybackRequiresUserGesture(); /** * Sets whether the WebView should use its built-in zoom mechanisms. The @@ -295,9 +276,7 @@ public abstract class WebSettings { // This method was intended to select between the built-in zoom mechanisms // and the separate zoom controls. The latter were obtained using // {@link WebView#getZoomControls}, which is now hidden. - public void setBuiltInZoomControls(boolean enabled) { - throw new MustOverrideException(); - } + public abstract void setBuiltInZoomControls(boolean enabled); /** * Gets whether the zoom mechanisms built into WebView are being used. @@ -305,9 +284,7 @@ public abstract class WebSettings { * @return true if the zoom mechanisms built into WebView are being used * @see #setBuiltInZoomControls */ - public boolean getBuiltInZoomControls() { - throw new MustOverrideException(); - } + public abstract boolean getBuiltInZoomControls(); /** * Sets whether the WebView should display on-screen zoom controls when @@ -316,9 +293,7 @@ public abstract class WebSettings { * * @param enabled whether the WebView should display on-screen zoom controls */ - public void setDisplayZoomControls(boolean enabled) { - throw new MustOverrideException(); - } + public abstract void setDisplayZoomControls(boolean enabled); /** * Gets whether the WebView displays on-screen zoom controls when using @@ -328,9 +303,7 @@ public abstract class WebSettings { * the built-in zoom mechanisms * @see #setDisplayZoomControls */ - public boolean getDisplayZoomControls() { - throw new MustOverrideException(); - } + public abstract boolean getDisplayZoomControls(); /** * Enables or disables file access within WebView. File access is enabled by @@ -338,36 +311,28 @@ public abstract class WebSettings { * Assets and resources are still accessible using file:///android_asset and * file:///android_res. */ - public void setAllowFileAccess(boolean allow) { - throw new MustOverrideException(); - } + public abstract void setAllowFileAccess(boolean allow); /** * Gets whether this WebView supports file access. * * @see #setAllowFileAccess */ - public boolean getAllowFileAccess() { - throw new MustOverrideException(); - } + public abstract boolean getAllowFileAccess(); /** * Enables or disables content URL access within WebView. Content URL * access allows WebView to load content from a content provider installed * in the system. The default is enabled. */ - public void setAllowContentAccess(boolean allow) { - throw new MustOverrideException(); - } + public abstract void setAllowContentAccess(boolean allow); /** * Gets whether this WebView supports content URL access. * * @see #setAllowContentAccess */ - public boolean getAllowContentAccess() { - throw new MustOverrideException(); - } + public abstract boolean getAllowContentAccess(); /** * Sets whether the WebView loads pages in overview mode, that is, @@ -376,9 +341,7 @@ public abstract class WebSettings { * of the WebView control, for example, when {@link #getUseWideViewPort} * is enabled. The default is false. */ - public void setLoadWithOverviewMode(boolean overview) { - throw new MustOverrideException(); - } + public abstract void setLoadWithOverviewMode(boolean overview); /** * Gets whether this WebView loads pages in overview mode. @@ -386,9 +349,7 @@ public abstract class WebSettings { * @return whether this WebView loads pages in overview mode * @see #setLoadWithOverviewMode */ - public boolean getLoadWithOverviewMode() { - throw new MustOverrideException(); - } + public abstract boolean getLoadWithOverviewMode(); /** * Sets whether the WebView will enable smooth transition while panning or @@ -400,9 +361,7 @@ public abstract class WebSettings { * @deprecated This method is now obsolete, and will become a no-op in future. */ @Deprecated - public void setEnableSmoothTransition(boolean enable) { - throw new MustOverrideException(); - } + public abstract void setEnableSmoothTransition(boolean enable); /** * Gets whether the WebView enables smooth transition while panning or @@ -413,9 +372,7 @@ public abstract class WebSettings { * @deprecated This method is now obsolete, and will become a no-op in future. */ @Deprecated - public boolean enableSmoothTransition() { - throw new MustOverrideException(); - } + public abstract boolean enableSmoothTransition(); /** * Sets whether the WebView uses its background for over scroll background. @@ -425,10 +382,9 @@ public abstract class WebSettings { * @deprecated This method is now obsolete. * @hide Since API level {@link android.os.Build.VERSION_CODES#JELLY_BEAN_MR1} */ + @SystemApi @Deprecated - public void setUseWebViewBackgroundForOverscrollBackground(boolean view) { - throw new MustOverrideException(); - } + public abstract void setUseWebViewBackgroundForOverscrollBackground(boolean view); /** * Gets whether this WebView uses WebView's background instead of @@ -438,17 +394,14 @@ public abstract class WebSettings { * @deprecated This method is now obsolete. * @hide Since API level {@link android.os.Build.VERSION_CODES#JELLY_BEAN_MR1} */ + @SystemApi @Deprecated - public boolean getUseWebViewBackgroundForOverscrollBackground() { - throw new MustOverrideException(); - } + public abstract boolean getUseWebViewBackgroundForOverscrollBackground(); /** * Sets whether the WebView should save form data. The default is true. */ - public void setSaveFormData(boolean save) { - throw new MustOverrideException(); - } + public abstract void setSaveFormData(boolean save); /** * Gets whether the WebView saves form data. @@ -456,18 +409,14 @@ public abstract class WebSettings { * @return whether the WebView saves form data * @see #setSaveFormData */ - public boolean getSaveFormData() { - throw new MustOverrideException(); - } + public abstract boolean getSaveFormData(); /** * Sets whether the WebView should save passwords. The default is true. * @deprecated Saving passwords in WebView will not be supported in future versions. */ @Deprecated - public void setSavePassword(boolean save) { - throw new MustOverrideException(); - } + public abstract void setSavePassword(boolean save); /** * Gets whether the WebView saves passwords. @@ -477,18 +426,14 @@ public abstract class WebSettings { * @deprecated Saving passwords in WebView will not be supported in future versions. */ @Deprecated - public boolean getSavePassword() { - throw new MustOverrideException(); - } + public abstract boolean getSavePassword(); /** * Sets the text zoom of the page in percent. The default is 100. * * @param textZoom the text zoom in percent */ - public synchronized void setTextZoom(int textZoom) { - throw new MustOverrideException(); - } + public abstract void setTextZoom(int textZoom); /** * Gets the text zoom of the page in percent. @@ -496,27 +441,23 @@ public abstract class WebSettings { * @return the text zoom of the page in percent * @see #setTextZoom */ - public synchronized int getTextZoom() { - throw new MustOverrideException(); - } + public abstract int getTextZoom(); /** * Sets policy for third party cookies. * Developers should access this via {@link CookieManager#setShouldAcceptThirdPartyCookies}. * @hide Internal API. */ - public void setAcceptThirdPartyCookies(boolean accept) { - throw new MustOverrideException(); - } + @SystemApi + public abstract void setAcceptThirdPartyCookies(boolean accept); /** * Gets policy for third party cookies. * Developers should access this via {@link CookieManager#getShouldAcceptThirdPartyCookies}. * @hide Internal API */ - public boolean getAcceptThirdPartyCookies() { - throw new MustOverrideException(); - } + @SystemApi + public abstract boolean getAcceptThirdPartyCookies(); /** * Sets the text size of the page. The default is {@link TextSize#NORMAL}. @@ -569,9 +510,7 @@ public abstract class WebSettings { * recommended alternatives. */ @Deprecated - public void setDefaultZoom(ZoomDensity zoom) { - throw new MustOverrideException(); - } + public abstract void setDefaultZoom(ZoomDensity zoom); /** * Gets the default zoom density of the page. This should be called from @@ -583,9 +522,7 @@ public abstract class WebSettings { * @see #setDefaultZoom * @deprecated Will only return the default value. */ - public ZoomDensity getDefaultZoom() { - throw new MustOverrideException(); - } + public abstract ZoomDensity getDefaultZoom(); /** * Enables using light touches to make a selection and activate mouseovers. @@ -593,9 +530,7 @@ public abstract class WebSettings { * setting is obsolete and has no effect. */ @Deprecated - public void setLightTouchEnabled(boolean enabled) { - throw new MustOverrideException(); - } + public abstract void setLightTouchEnabled(boolean enabled); /** * Gets whether light touches are enabled. @@ -603,9 +538,7 @@ public abstract class WebSettings { * @deprecated This setting is obsolete. */ @Deprecated - public boolean getLightTouchEnabled() { - throw new MustOverrideException(); - } + public abstract boolean getLightTouchEnabled(); /** * Controlled a rendering optimization that is no longer present. Setting @@ -615,7 +548,7 @@ public abstract class WebSettings { * @hide Since API level {@link android.os.Build.VERSION_CODES#JELLY_BEAN_MR1} */ @Deprecated - public synchronized void setUseDoubleTree(boolean use) { + public void setUseDoubleTree(boolean use) { // Specified to do nothing, so no need for derived classes to override. } @@ -627,7 +560,7 @@ public abstract class WebSettings { * @hide Since API level {@link android.os.Build.VERSION_CODES#JELLY_BEAN_MR1} */ @Deprecated - public synchronized boolean getUseDoubleTree() { + public boolean getUseDoubleTree() { // Returns false unconditionally, so no need for derived classes to override. return false; } @@ -645,10 +578,9 @@ public abstract class WebSettings { * @deprecated Please use {@link #setUserAgentString} instead. * @hide Since API level {@link android.os.Build.VERSION_CODES#JELLY_BEAN_MR1} */ + @SystemApi @Deprecated - public synchronized void setUserAgent(int ua) { - throw new MustOverrideException(); - } + public abstract void setUserAgent(int ua); /** * Gets the user-agent as an integer code. @@ -664,10 +596,9 @@ public abstract class WebSettings { * @deprecated Please use {@link #getUserAgentString} instead. * @hide Since API level {@link android.os.Build.VERSION_CODES#JELLY_BEAN_MR1} */ + @SystemApi @Deprecated - public synchronized int getUserAgent() { - throw new MustOverrideException(); - } + public abstract int getUserAgent(); /** * Sets whether the WebView should enable support for the "viewport" @@ -680,9 +611,7 @@ public abstract class WebSettings { * * @param use whether to enable support for the viewport meta tag */ - public synchronized void setUseWideViewPort(boolean use) { - throw new MustOverrideException(); - } + public abstract void setUseWideViewPort(boolean use); /** * Gets whether the WebView supports the "viewport" @@ -691,9 +620,7 @@ public abstract class WebSettings { * @return true if the WebView supports the viewport meta tag * @see #setUseWideViewPort */ - public synchronized boolean getUseWideViewPort() { - throw new MustOverrideException(); - } + public abstract boolean getUseWideViewPort(); /** * Sets whether the WebView whether supports multiple windows. If set to @@ -702,9 +629,7 @@ public abstract class WebSettings { * * @param support whether to suport multiple windows */ - public synchronized void setSupportMultipleWindows(boolean support) { - throw new MustOverrideException(); - } + public abstract void setSupportMultipleWindows(boolean support); /** * Gets whether the WebView supports multiple windows. @@ -712,9 +637,7 @@ public abstract class WebSettings { * @return true if the WebView supports multiple windows * @see #setSupportMultipleWindows */ - public synchronized boolean supportMultipleWindows() { - throw new MustOverrideException(); - } + public abstract boolean supportMultipleWindows(); /** * Sets the underlying layout algorithm. This will cause a relayout of the @@ -722,9 +645,7 @@ public abstract class WebSettings { * * @param l the layout algorithm to use, as a {@link LayoutAlgorithm} value */ - public synchronized void setLayoutAlgorithm(LayoutAlgorithm l) { - throw new MustOverrideException(); - } + public abstract void setLayoutAlgorithm(LayoutAlgorithm l); /** * Gets the current layout algorithm. @@ -732,18 +653,14 @@ public abstract class WebSettings { * @return the layout algorithm in use, as a {@link LayoutAlgorithm} value * @see #setLayoutAlgorithm */ - public synchronized LayoutAlgorithm getLayoutAlgorithm() { - throw new MustOverrideException(); - } + public abstract LayoutAlgorithm getLayoutAlgorithm(); /** * Sets the standard font family name. The default is "sans-serif". * * @param font a font family name */ - public synchronized void setStandardFontFamily(String font) { - throw new MustOverrideException(); - } + public abstract void setStandardFontFamily(String font); /** * Gets the standard font family name. @@ -751,18 +668,14 @@ public abstract class WebSettings { * @return the standard font family name as a string * @see #setStandardFontFamily */ - public synchronized String getStandardFontFamily() { - throw new MustOverrideException(); - } + public abstract String getStandardFontFamily(); /** * Sets the fixed font family name. The default is "monospace". * * @param font a font family name */ - public synchronized void setFixedFontFamily(String font) { - throw new MustOverrideException(); - } + public abstract void setFixedFontFamily(String font); /** * Gets the fixed font family name. @@ -770,18 +683,14 @@ public abstract class WebSettings { * @return the fixed font family name as a string * @see #setFixedFontFamily */ - public synchronized String getFixedFontFamily() { - throw new MustOverrideException(); - } + public abstract String getFixedFontFamily(); /** * Sets the sans-serif font family name. The default is "sans-serif". * * @param font a font family name */ - public synchronized void setSansSerifFontFamily(String font) { - throw new MustOverrideException(); - } + public abstract void setSansSerifFontFamily(String font); /** * Gets the sans-serif font family name. @@ -789,18 +698,14 @@ public abstract class WebSettings { * @return the sans-serif font family name as a string * @see #setSansSerifFontFamily */ - public synchronized String getSansSerifFontFamily() { - throw new MustOverrideException(); - } + public abstract String getSansSerifFontFamily(); /** * Sets the serif font family name. The default is "sans-serif". * * @param font a font family name */ - public synchronized void setSerifFontFamily(String font) { - throw new MustOverrideException(); - } + public abstract void setSerifFontFamily(String font); /** * Gets the serif font family name. The default is "serif". @@ -808,18 +713,14 @@ public abstract class WebSettings { * @return the serif font family name as a string * @see #setSerifFontFamily */ - public synchronized String getSerifFontFamily() { - throw new MustOverrideException(); - } + public abstract String getSerifFontFamily(); /** * Sets the cursive font family name. The default is "cursive". * * @param font a font family name */ - public synchronized void setCursiveFontFamily(String font) { - throw new MustOverrideException(); - } + public abstract void setCursiveFontFamily(String font); /** * Gets the cursive font family name. @@ -827,18 +728,14 @@ public abstract class WebSettings { * @return the cursive font family name as a string * @see #setCursiveFontFamily */ - public synchronized String getCursiveFontFamily() { - throw new MustOverrideException(); - } + public abstract String getCursiveFontFamily(); /** * Sets the fantasy font family name. The default is "fantasy". * * @param font a font family name */ - public synchronized void setFantasyFontFamily(String font) { - throw new MustOverrideException(); - } + public abstract void setFantasyFontFamily(String font); /** * Gets the fantasy font family name. @@ -846,9 +743,7 @@ public abstract class WebSettings { * @return the fantasy font family name as a string * @see #setFantasyFontFamily */ - public synchronized String getFantasyFontFamily() { - throw new MustOverrideException(); - } + public abstract String getFantasyFontFamily(); /** * Sets the minimum font size. The default is 8. @@ -856,9 +751,7 @@ public abstract class WebSettings { * @param size a non-negative integer between 1 and 72. Any number outside * the specified range will be pinned. */ - public synchronized void setMinimumFontSize(int size) { - throw new MustOverrideException(); - } + public abstract void setMinimumFontSize(int size); /** * Gets the minimum font size. @@ -866,9 +759,7 @@ public abstract class WebSettings { * @return a non-negative integer between 1 and 72 * @see #setMinimumFontSize */ - public synchronized int getMinimumFontSize() { - throw new MustOverrideException(); - } + public abstract int getMinimumFontSize(); /** * Sets the minimum logical font size. The default is 8. @@ -876,9 +767,7 @@ public abstract class WebSettings { * @param size a non-negative integer between 1 and 72. Any number outside * the specified range will be pinned. */ - public synchronized void setMinimumLogicalFontSize(int size) { - throw new MustOverrideException(); - } + public abstract void setMinimumLogicalFontSize(int size); /** * Gets the minimum logical font size. @@ -886,9 +775,7 @@ public abstract class WebSettings { * @return a non-negative integer between 1 and 72 * @see #setMinimumLogicalFontSize */ - public synchronized int getMinimumLogicalFontSize() { - throw new MustOverrideException(); - } + public abstract int getMinimumLogicalFontSize(); /** * Sets the default font size. The default is 16. @@ -896,9 +783,7 @@ public abstract class WebSettings { * @param size a non-negative integer between 1 and 72. Any number outside * the specified range will be pinned. */ - public synchronized void setDefaultFontSize(int size) { - throw new MustOverrideException(); - } + public abstract void setDefaultFontSize(int size); /** * Gets the default font size. @@ -906,9 +791,7 @@ public abstract class WebSettings { * @return a non-negative integer between 1 and 72 * @see #setDefaultFontSize */ - public synchronized int getDefaultFontSize() { - throw new MustOverrideException(); - } + public abstract int getDefaultFontSize(); /** * Sets the default fixed font size. The default is 16. @@ -916,9 +799,7 @@ public abstract class WebSettings { * @param size a non-negative integer between 1 and 72. Any number outside * the specified range will be pinned. */ - public synchronized void setDefaultFixedFontSize(int size) { - throw new MustOverrideException(); - } + public abstract void setDefaultFixedFontSize(int size); /** * Gets the default fixed font size. @@ -926,9 +807,7 @@ public abstract class WebSettings { * @return a non-negative integer between 1 and 72 * @see #setDefaultFixedFontSize */ - public synchronized int getDefaultFixedFontSize() { - throw new MustOverrideException(); - } + public abstract int getDefaultFixedFontSize(); /** * Sets whether the WebView should load image resources. Note that this method @@ -941,9 +820,7 @@ public abstract class WebSettings { * * @param flag whether the WebView should load image resources */ - public synchronized void setLoadsImagesAutomatically(boolean flag) { - throw new MustOverrideException(); - } + public abstract void setLoadsImagesAutomatically(boolean flag); /** * Gets whether the WebView loads image resources. This includes @@ -952,9 +829,7 @@ public abstract class WebSettings { * @return true if the WebView loads image resources * @see #setLoadsImagesAutomatically */ - public synchronized boolean getLoadsImagesAutomatically() { - throw new MustOverrideException(); - } + public abstract boolean getLoadsImagesAutomatically(); /** * Sets whether the WebView should not load image resources from the @@ -971,9 +846,7 @@ public abstract class WebSettings { * network * @see #setBlockNetworkLoads */ - public synchronized void setBlockNetworkImage(boolean flag) { - throw new MustOverrideException(); - } + public abstract void setBlockNetworkImage(boolean flag); /** * Gets whether the WebView does not load image resources from the network. @@ -981,9 +854,7 @@ public abstract class WebSettings { * @return true if the WebView does not load image resources from the network * @see #setBlockNetworkImage */ - public synchronized boolean getBlockNetworkImage() { - throw new MustOverrideException(); - } + public abstract boolean getBlockNetworkImage(); /** * Sets whether the WebView should not load resources from the network. @@ -1003,9 +874,7 @@ public abstract class WebSettings { * network * @see android.webkit.WebView#reload */ - public synchronized void setBlockNetworkLoads(boolean flag) { - throw new MustOverrideException(); - } + public abstract void setBlockNetworkLoads(boolean flag); /** * Gets whether the WebView does not load any resources from the network. @@ -1013,9 +882,7 @@ public abstract class WebSettings { * @return true if the WebView does not load any resources from the network * @see #setBlockNetworkLoads */ - public synchronized boolean getBlockNetworkLoads() { - throw new MustOverrideException(); - } + public abstract boolean getBlockNetworkLoads(); /** * Tells the WebView to enable JavaScript execution. @@ -1023,9 +890,7 @@ public abstract class WebSettings { * * @param flag true if the WebView should execute JavaScript */ - public synchronized void setJavaScriptEnabled(boolean flag) { - throw new MustOverrideException(); - } + public abstract void setJavaScriptEnabled(boolean flag); /** * Sets whether JavaScript running in the context of a file scheme URL @@ -1076,10 +941,9 @@ public abstract class WebSettings { * {@link #setPluginState} * @hide Since API level {@link android.os.Build.VERSION_CODES#JELLY_BEAN_MR2} */ + @SystemApi @Deprecated - public synchronized void setPluginsEnabled(boolean flag) { - throw new MustOverrideException(); - } + public abstract void setPluginsEnabled(boolean flag); /** * Tells the WebView to enable, disable, or have plugins on demand. On @@ -1092,9 +956,7 @@ public abstract class WebSettings { * @deprecated Plugins will not be supported in future, and should not be used. */ @Deprecated - public synchronized void setPluginState(PluginState state) { - throw new MustOverrideException(); - } + public abstract void setPluginState(PluginState state); /** * Sets a custom path to plugins used by the WebView. This method is @@ -1106,7 +968,7 @@ public abstract class WebSettings { * @hide Since API level {@link android.os.Build.VERSION_CODES#JELLY_BEAN_MR2} */ @Deprecated - public synchronized void setPluginsPath(String pluginsPath) { + public void setPluginsPath(String pluginsPath) { // Specified to do nothing, so no need for derived classes to override. } @@ -1125,9 +987,7 @@ public abstract class WebSettings { // Note that the WebCore Database Tracker only allows the path to be set // once. @Deprecated - public synchronized void setDatabasePath(String databasePath) { - throw new MustOverrideException(); - } + public abstract void setDatabasePath(String databasePath); /** * Sets the path where the Geolocation databases should be saved. In order @@ -1138,9 +998,7 @@ public abstract class WebSettings { * saved. */ // This will update WebCore when the Sync runs in the C++ side. - public synchronized void setGeolocationDatabasePath(String databasePath) { - throw new MustOverrideException(); - } + public abstract void setGeolocationDatabasePath(String databasePath); /** * Sets whether the Application Caches API should be enabled. The default @@ -1150,9 +1008,7 @@ public abstract class WebSettings { * * @param flag true if the WebView should enable Application Caches */ - public synchronized void setAppCacheEnabled(boolean flag) { - throw new MustOverrideException(); - } + public abstract void setAppCacheEnabled(boolean flag); /** * Sets the path to the Application Caches files. In order for the @@ -1164,9 +1020,7 @@ public abstract class WebSettings { * Application Caches files. * @see #setAppCacheEnabled */ - public synchronized void setAppCachePath(String appCachePath) { - throw new MustOverrideException(); - } + public abstract void setAppCachePath(String appCachePath); /** * Sets the maximum size for the Application Cache content. The passed size @@ -1180,9 +1034,7 @@ public abstract class WebSettings { * @deprecated In future quota will be managed automatically. */ @Deprecated - public synchronized void setAppCacheMaxSize(long appCacheMaxSize) { - throw new MustOverrideException(); - } + public abstract void setAppCacheMaxSize(long appCacheMaxSize); /** * Sets whether the database storage API is enabled. The default value is @@ -1196,18 +1048,14 @@ public abstract class WebSettings { * * @param flag true if the WebView should use the database storage API */ - public synchronized void setDatabaseEnabled(boolean flag) { - throw new MustOverrideException(); - } + public abstract void setDatabaseEnabled(boolean flag); /** * Sets whether the DOM storage API is enabled. The default value is false. * * @param flag true if the WebView should use the DOM storage API */ - public synchronized void setDomStorageEnabled(boolean flag) { - throw new MustOverrideException(); - } + public abstract void setDomStorageEnabled(boolean flag); /** * Gets whether the DOM Storage APIs are enabled. @@ -1215,9 +1063,8 @@ public abstract class WebSettings { * @return true if the DOM Storage APIs are enabled * @see #setDomStorageEnabled */ - public synchronized boolean getDomStorageEnabled() { - throw new MustOverrideException(); - } + public abstract boolean getDomStorageEnabled(); + /** * Gets the path to where database storage API databases are saved. * @@ -1226,9 +1073,7 @@ public abstract class WebSettings { * @deprecated Database paths are managed by the implementation this method is obsolete. */ @Deprecated - public synchronized String getDatabasePath() { - throw new MustOverrideException(); - } + public abstract String getDatabasePath(); /** * Gets whether the database storage API is enabled. @@ -1236,9 +1081,7 @@ public abstract class WebSettings { * @return true if the database storage API is enabled * @see #setDatabaseEnabled */ - public synchronized boolean getDatabaseEnabled() { - throw new MustOverrideException(); - } + public abstract boolean getDatabaseEnabled(); /** * Sets whether Geolocation is enabled. The default is true. @@ -1260,9 +1103,7 @@ public abstract class WebSettings { * * @param flag whether Geolocation should be enabled */ - public synchronized void setGeolocationEnabled(boolean flag) { - throw new MustOverrideException(); - } + public abstract void setGeolocationEnabled(boolean flag); /** * Gets whether JavaScript is enabled. @@ -1270,9 +1111,7 @@ public abstract class WebSettings { * @return true if JavaScript is enabled * @see #setJavaScriptEnabled */ - public synchronized boolean getJavaScriptEnabled() { - throw new MustOverrideException(); - } + public abstract boolean getJavaScriptEnabled(); /** * Gets whether JavaScript running in the context of a file scheme URL can @@ -1303,10 +1142,9 @@ public abstract class WebSettings { * @deprecated This method has been replaced by {@link #getPluginState} * @hide Since API level {@link android.os.Build.VERSION_CODES#JELLY_BEAN_MR2} */ + @SystemApi @Deprecated - public synchronized boolean getPluginsEnabled() { - throw new MustOverrideException(); - } + public abstract boolean getPluginsEnabled(); /** * Gets the current state regarding whether plugins are enabled. @@ -1316,9 +1154,7 @@ public abstract class WebSettings { * @deprecated Plugins will not be supported in future, and should not be used. */ @Deprecated - public synchronized PluginState getPluginState() { - throw new MustOverrideException(); - } + public abstract PluginState getPluginState(); /** * Gets the directory that contains the plugin libraries. This method is @@ -1330,7 +1166,7 @@ public abstract class WebSettings { * @hide Since API level {@link android.os.Build.VERSION_CODES#JELLY_BEAN_MR2} */ @Deprecated - public synchronized String getPluginsPath() { + public String getPluginsPath() { // Unconditionally returns empty string, so no need for derived classes to override. return ""; } @@ -1341,9 +1177,7 @@ public abstract class WebSettings { * * @param flag true if JavaScript can open windows automatically */ - public synchronized void setJavaScriptCanOpenWindowsAutomatically(boolean flag) { - throw new MustOverrideException(); - } + public abstract void setJavaScriptCanOpenWindowsAutomatically(boolean flag); /** * Gets whether JavaScript can open windows automatically. @@ -1352,9 +1186,7 @@ public abstract class WebSettings { * window.open() * @see #setJavaScriptCanOpenWindowsAutomatically */ - public synchronized boolean getJavaScriptCanOpenWindowsAutomatically() { - throw new MustOverrideException(); - } + public abstract boolean getJavaScriptCanOpenWindowsAutomatically(); /** * Sets the default text encoding name to use when decoding html pages. @@ -1362,9 +1194,7 @@ public abstract class WebSettings { * * @param encoding the text encoding name */ - public synchronized void setDefaultTextEncodingName(String encoding) { - throw new MustOverrideException(); - } + public abstract void setDefaultTextEncodingName(String encoding); /** * Gets the default text encoding name. @@ -1372,17 +1202,13 @@ public abstract class WebSettings { * @return the default text encoding name as a string * @see #setDefaultTextEncodingName */ - public synchronized String getDefaultTextEncodingName() { - throw new MustOverrideException(); - } + public abstract String getDefaultTextEncodingName(); /** * Sets the WebView's user-agent string. If the string is null or empty, * the system default value will be used. */ - public synchronized void setUserAgentString(String ua) { - throw new MustOverrideException(); - } + public abstract void setUserAgentString(String ua); /** * Gets the WebView's user-agent string. @@ -1390,9 +1216,7 @@ public abstract class WebSettings { * @return the WebView's user-agent string * @see #setUserAgentString */ - public synchronized String getUserAgentString() { - throw new MustOverrideException(); - } + public abstract String getUserAgentString(); /** * Returns the default User-Agent used by a WebView. @@ -1412,9 +1236,7 @@ public abstract class WebSettings { * * @param flag whether the WebView needs to set a node */ - public void setNeedInitialFocus(boolean flag) { - throw new MustOverrideException(); - } + public abstract void setNeedInitialFocus(boolean flag); /** * Sets the priority of the Render thread. Unlike the other settings, this @@ -1426,9 +1248,7 @@ public abstract class WebSettings { * not be supported in future versions. */ @Deprecated - public synchronized void setRenderPriority(RenderPriority priority) { - throw new MustOverrideException(); - } + public abstract void setRenderPriority(RenderPriority priority); /** * Overrides the way the cache is used. The way the cache is used is based @@ -1442,9 +1262,7 @@ public abstract class WebSettings { * * @param mode the mode to use */ - public void setCacheMode(int mode) { - throw new MustOverrideException(); - } + public abstract void setCacheMode(int mode); /** * Gets the current setting for overriding the cache mode. @@ -1452,9 +1270,7 @@ public abstract class WebSettings { * @return the current setting for overriding the cache mode * @see #setCacheMode */ - public int getCacheMode() { - throw new MustOverrideException(); - } + public abstract int getCacheMode(); /** * Configures the WebView's behavior when a secure origin attempts to load a resource from an diff --git a/core/java/android/webkit/WebStorage.java b/core/java/android/webkit/WebStorage.java index 3bfe9cf7a807..947d0cbd46a8 100644 --- a/core/java/android/webkit/WebStorage.java +++ b/core/java/android/webkit/WebStorage.java @@ -16,6 +16,8 @@ package android.webkit; +import android.annotation.SystemApi; + import java.util.Map; /** @@ -65,23 +67,13 @@ public class WebStorage { private long mUsage = 0; /** @hide */ + @SystemApi protected Origin(String origin, long quota, long usage) { mOrigin = origin; mQuota = quota; mUsage = usage; } - /** @hide */ - protected Origin(String origin, long quota) { - mOrigin = origin; - mQuota = quota; - } - - /** @hide */ - protected Origin(String origin) { - mOrigin = origin; - } - /** * Gets the string representation of this origin. * @@ -210,5 +202,6 @@ public class WebStorage { * way to call createHandler() and createUIHandler(), so it would not work). * @hide */ + @SystemApi public WebStorage() {} } diff --git a/core/java/android/webkit/WebView.java b/core/java/android/webkit/WebView.java index 592d6e27e599..6793634ebe8a 100644 --- a/core/java/android/webkit/WebView.java +++ b/core/java/android/webkit/WebView.java @@ -16,6 +16,7 @@ package android.webkit; +import android.annotation.SystemApi; import android.annotation.Widget; import android.content.Context; import android.content.res.Configuration; @@ -256,10 +257,12 @@ public class WebView extends AbsoluteLayout * always stay as a hidden API. * @hide */ + @SystemApi public static final String DATA_REDUCTION_PROXY_SETTING_CHANGED = "android.webkit.DATA_REDUCTION_PROXY_SETTING_CHANGED"; private static final String LOGTAG = "WebView"; + private static final boolean TRACE = false; // Throwing an exception for incorrect thread usage if the // build target is JB MR2 or newer. Defaults to false, and is @@ -394,6 +397,7 @@ public class WebView extends AbsoluteLayout /** * @hide Only for use by WebViewProvider implementations */ + @SystemApi public HitTestResult() { mType = UNKNOWN_TYPE; } @@ -401,6 +405,7 @@ public class WebView extends AbsoluteLayout /** * @hide Only for use by WebViewProvider implementations */ + @SystemApi public void setType(int type) { mType = type; } @@ -408,6 +413,7 @@ public class WebView extends AbsoluteLayout /** * @hide Only for use by WebViewProvider implementations */ + @SystemApi public void setExtra(String extra) { mExtra = extra; } @@ -542,7 +548,7 @@ public class WebView extends AbsoluteLayout sEnforceThreadChecking = context.getApplicationInfo().targetSdkVersion >= Build.VERSION_CODES.JELLY_BEAN_MR2; checkThread(); - if (DebugFlags.TRACE_API) Log.d(LOGTAG, "WebView<init>"); + if (TRACE) Log.d(LOGTAG, "WebView<init>"); ensureProviderCreated(); mProvider.init(javaScriptInterfaces, privateBrowsing); @@ -557,7 +563,7 @@ public class WebView extends AbsoluteLayout */ public void setHorizontalScrollbarOverlay(boolean overlay) { checkThread(); - if (DebugFlags.TRACE_API) Log.d(LOGTAG, "setHorizontalScrollbarOverlay=" + overlay); + if (TRACE) Log.d(LOGTAG, "setHorizontalScrollbarOverlay=" + overlay); mProvider.setHorizontalScrollbarOverlay(overlay); } @@ -568,7 +574,7 @@ public class WebView extends AbsoluteLayout */ public void setVerticalScrollbarOverlay(boolean overlay) { checkThread(); - if (DebugFlags.TRACE_API) Log.d(LOGTAG, "setVerticalScrollbarOverlay=" + overlay); + if (TRACE) Log.d(LOGTAG, "setVerticalScrollbarOverlay=" + overlay); mProvider.setVerticalScrollbarOverlay(overlay); } @@ -623,7 +629,7 @@ public class WebView extends AbsoluteLayout @Deprecated public void setCertificate(SslCertificate certificate) { checkThread(); - if (DebugFlags.TRACE_API) Log.d(LOGTAG, "setCertificate=" + certificate); + if (TRACE) Log.d(LOGTAG, "setCertificate=" + certificate); mProvider.setCertificate(certificate); } @@ -647,7 +653,7 @@ public class WebView extends AbsoluteLayout @Deprecated public void savePassword(String host, String username, String password) { checkThread(); - if (DebugFlags.TRACE_API) Log.d(LOGTAG, "savePassword=" + host); + if (TRACE) Log.d(LOGTAG, "savePassword=" + host); mProvider.savePassword(host, username, password); } @@ -667,7 +673,7 @@ public class WebView extends AbsoluteLayout public void setHttpAuthUsernamePassword(String host, String realm, String username, String password) { checkThread(); - if (DebugFlags.TRACE_API) Log.d(LOGTAG, "setHttpAuthUsernamePassword=" + host); + if (TRACE) Log.d(LOGTAG, "setHttpAuthUsernamePassword=" + host); mProvider.setHttpAuthUsernamePassword(host, realm, username, password); } @@ -697,7 +703,7 @@ public class WebView extends AbsoluteLayout */ public void destroy() { checkThread(); - if (DebugFlags.TRACE_API) Log.d(LOGTAG, "destroy"); + if (TRACE) Log.d(LOGTAG, "destroy"); mProvider.destroy(); } @@ -743,7 +749,7 @@ public class WebView extends AbsoluteLayout */ public void setNetworkAvailable(boolean networkUp) { checkThread(); - if (DebugFlags.TRACE_API) Log.d(LOGTAG, "setNetworkAvailable=" + networkUp); + if (TRACE) Log.d(LOGTAG, "setNetworkAvailable=" + networkUp); mProvider.setNetworkAvailable(networkUp); } @@ -760,7 +766,7 @@ public class WebView extends AbsoluteLayout */ public WebBackForwardList saveState(Bundle outState) { checkThread(); - if (DebugFlags.TRACE_API) Log.d(LOGTAG, "saveState"); + if (TRACE) Log.d(LOGTAG, "saveState"); return mProvider.saveState(outState); } @@ -777,7 +783,7 @@ public class WebView extends AbsoluteLayout @Deprecated public boolean savePicture(Bundle b, final File dest) { checkThread(); - if (DebugFlags.TRACE_API) Log.d(LOGTAG, "savePicture=" + dest.getName()); + if (TRACE) Log.d(LOGTAG, "savePicture=" + dest.getName()); return mProvider.savePicture(b, dest); } @@ -795,7 +801,7 @@ public class WebView extends AbsoluteLayout @Deprecated public boolean restorePicture(Bundle b, File src) { checkThread(); - if (DebugFlags.TRACE_API) Log.d(LOGTAG, "restorePicture=" + src.getName()); + if (TRACE) Log.d(LOGTAG, "restorePicture=" + src.getName()); return mProvider.restorePicture(b, src); } @@ -813,7 +819,7 @@ public class WebView extends AbsoluteLayout */ public WebBackForwardList restoreState(Bundle inState) { checkThread(); - if (DebugFlags.TRACE_API) Log.d(LOGTAG, "restoreState"); + if (TRACE) Log.d(LOGTAG, "restoreState"); return mProvider.restoreState(inState); } @@ -830,7 +836,7 @@ public class WebView extends AbsoluteLayout */ public void loadUrl(String url, Map<String, String> additionalHttpHeaders) { checkThread(); - if (DebugFlags.TRACE_API) { + if (TRACE) { StringBuilder headers = new StringBuilder(); if (additionalHttpHeaders != null) { for (Map.Entry<String, String> entry : additionalHttpHeaders.entrySet()) { @@ -849,7 +855,7 @@ public class WebView extends AbsoluteLayout */ public void loadUrl(String url) { checkThread(); - if (DebugFlags.TRACE_API) Log.d(LOGTAG, "loadUrl=" + url); + if (TRACE) Log.d(LOGTAG, "loadUrl=" + url); mProvider.loadUrl(url); } @@ -864,7 +870,7 @@ public class WebView extends AbsoluteLayout */ public void postUrl(String url, byte[] postData) { checkThread(); - if (DebugFlags.TRACE_API) Log.d(LOGTAG, "postUrl=" + url); + if (TRACE) Log.d(LOGTAG, "postUrl=" + url); if (URLUtil.isNetworkUrl(url)) { mProvider.postUrl(url, postData); } else { @@ -903,7 +909,7 @@ public class WebView extends AbsoluteLayout */ public void loadData(String data, String mimeType, String encoding) { checkThread(); - if (DebugFlags.TRACE_API) Log.d(LOGTAG, "loadData"); + if (TRACE) Log.d(LOGTAG, "loadData"); mProvider.loadData(data, mimeType, encoding); } @@ -936,7 +942,7 @@ public class WebView extends AbsoluteLayout public void loadDataWithBaseURL(String baseUrl, String data, String mimeType, String encoding, String historyUrl) { checkThread(); - if (DebugFlags.TRACE_API) Log.d(LOGTAG, "loadDataWithBaseURL=" + baseUrl); + if (TRACE) Log.d(LOGTAG, "loadDataWithBaseURL=" + baseUrl); mProvider.loadDataWithBaseURL(baseUrl, data, mimeType, encoding, historyUrl); } @@ -953,7 +959,7 @@ public class WebView extends AbsoluteLayout */ public void evaluateJavascript(String script, ValueCallback<String> resultCallback) { checkThread(); - if (DebugFlags.TRACE_API) Log.d(LOGTAG, "evaluateJavascript=" + script); + if (TRACE) Log.d(LOGTAG, "evaluateJavascript=" + script); mProvider.evaluateJavaScript(script, resultCallback); } @@ -964,7 +970,7 @@ public class WebView extends AbsoluteLayout */ public void saveWebArchive(String filename) { checkThread(); - if (DebugFlags.TRACE_API) Log.d(LOGTAG, "saveWebArchive=" + filename); + if (TRACE) Log.d(LOGTAG, "saveWebArchive=" + filename); mProvider.saveWebArchive(filename); } @@ -982,7 +988,7 @@ public class WebView extends AbsoluteLayout */ public void saveWebArchive(String basename, boolean autoname, ValueCallback<String> callback) { checkThread(); - if (DebugFlags.TRACE_API) Log.d(LOGTAG, "saveWebArchive(auto)=" + basename); + if (TRACE) Log.d(LOGTAG, "saveWebArchive(auto)=" + basename); mProvider.saveWebArchive(basename, autoname, callback); } @@ -991,7 +997,7 @@ public class WebView extends AbsoluteLayout */ public void stopLoading() { checkThread(); - if (DebugFlags.TRACE_API) Log.d(LOGTAG, "stopLoading"); + if (TRACE) Log.d(LOGTAG, "stopLoading"); mProvider.stopLoading(); } @@ -1000,7 +1006,7 @@ public class WebView extends AbsoluteLayout */ public void reload() { checkThread(); - if (DebugFlags.TRACE_API) Log.d(LOGTAG, "reload"); + if (TRACE) Log.d(LOGTAG, "reload"); mProvider.reload(); } @@ -1019,7 +1025,7 @@ public class WebView extends AbsoluteLayout */ public void goBack() { checkThread(); - if (DebugFlags.TRACE_API) Log.d(LOGTAG, "goBack"); + if (TRACE) Log.d(LOGTAG, "goBack"); mProvider.goBack(); } @@ -1038,7 +1044,7 @@ public class WebView extends AbsoluteLayout */ public void goForward() { checkThread(); - if (DebugFlags.TRACE_API) Log.d(LOGTAG, "goForward"); + if (TRACE) Log.d(LOGTAG, "goForward"); mProvider.goForward(); } @@ -1064,7 +1070,7 @@ public class WebView extends AbsoluteLayout */ public void goBackOrForward(int steps) { checkThread(); - if (DebugFlags.TRACE_API) Log.d(LOGTAG, "goBackOrForwad=" + steps); + if (TRACE) Log.d(LOGTAG, "goBackOrForwad=" + steps); mProvider.goBackOrForward(steps); } @@ -1084,7 +1090,7 @@ public class WebView extends AbsoluteLayout */ public boolean pageUp(boolean top) { checkThread(); - if (DebugFlags.TRACE_API) Log.d(LOGTAG, "pageUp"); + if (TRACE) Log.d(LOGTAG, "pageUp"); return mProvider.pageUp(top); } @@ -1096,7 +1102,7 @@ public class WebView extends AbsoluteLayout */ public boolean pageDown(boolean bottom) { checkThread(); - if (DebugFlags.TRACE_API) Log.d(LOGTAG, "pageDown"); + if (TRACE) Log.d(LOGTAG, "pageDown"); return mProvider.pageDown(bottom); } @@ -1109,7 +1115,7 @@ public class WebView extends AbsoluteLayout @Deprecated public void clearView() { checkThread(); - if (DebugFlags.TRACE_API) Log.d(LOGTAG, "clearView"); + if (TRACE) Log.d(LOGTAG, "clearView"); mProvider.clearView(); } @@ -1140,7 +1146,7 @@ public class WebView extends AbsoluteLayout @Deprecated public Picture capturePicture() { checkThread(); - if (DebugFlags.TRACE_API) Log.d(LOGTAG, "capturePicture"); + if (TRACE) Log.d(LOGTAG, "capturePicture"); return mProvider.capturePicture(); } @@ -1151,7 +1157,7 @@ public class WebView extends AbsoluteLayout @Deprecated public PrintDocumentAdapter createPrintDocumentAdapter() { checkThread(); - if (DebugFlags.TRACE_API) Log.d(LOGTAG, "createPrintDocumentAdapter"); + if (TRACE) Log.d(LOGTAG, "createPrintDocumentAdapter"); return mProvider.createPrintDocumentAdapter("default"); } @@ -1170,7 +1176,7 @@ public class WebView extends AbsoluteLayout */ public PrintDocumentAdapter createPrintDocumentAdapter(String documentName) { checkThread(); - if (DebugFlags.TRACE_API) Log.d(LOGTAG, "createPrintDocumentAdapter"); + if (TRACE) Log.d(LOGTAG, "createPrintDocumentAdapter"); return mProvider.createPrintDocumentAdapter(documentName); } @@ -1210,7 +1216,7 @@ public class WebView extends AbsoluteLayout */ public void setInitialScale(int scaleInPercent) { checkThread(); - if (DebugFlags.TRACE_API) Log.d(LOGTAG, "setInitialScale=" + scaleInPercent); + if (TRACE) Log.d(LOGTAG, "setInitialScale=" + scaleInPercent); mProvider.setInitialScale(scaleInPercent); } @@ -1221,7 +1227,7 @@ public class WebView extends AbsoluteLayout */ public void invokeZoomPicker() { checkThread(); - if (DebugFlags.TRACE_API) Log.d(LOGTAG, "invokeZoomPicker"); + if (TRACE) Log.d(LOGTAG, "invokeZoomPicker"); mProvider.invokeZoomPicker(); } @@ -1245,7 +1251,7 @@ public class WebView extends AbsoluteLayout */ public HitTestResult getHitTestResult() { checkThread(); - if (DebugFlags.TRACE_API) Log.d(LOGTAG, "getHitTestResult"); + if (TRACE) Log.d(LOGTAG, "getHitTestResult"); return mProvider.getHitTestResult(); } @@ -1264,7 +1270,7 @@ public class WebView extends AbsoluteLayout */ public void requestFocusNodeHref(Message hrefMsg) { checkThread(); - if (DebugFlags.TRACE_API) Log.d(LOGTAG, "requestFocusNodeHref"); + if (TRACE) Log.d(LOGTAG, "requestFocusNodeHref"); mProvider.requestFocusNodeHref(hrefMsg); } @@ -1277,7 +1283,7 @@ public class WebView extends AbsoluteLayout */ public void requestImageRef(Message msg) { checkThread(); - if (DebugFlags.TRACE_API) Log.d(LOGTAG, "requestImageRef"); + if (TRACE) Log.d(LOGTAG, "requestImageRef"); mProvider.requestImageRef(msg); } @@ -1382,7 +1388,7 @@ public class WebView extends AbsoluteLayout */ public void pauseTimers() { checkThread(); - if (DebugFlags.TRACE_API) Log.d(LOGTAG, "pauseTimers"); + if (TRACE) Log.d(LOGTAG, "pauseTimers"); mProvider.pauseTimers(); } @@ -1392,7 +1398,7 @@ public class WebView extends AbsoluteLayout */ public void resumeTimers() { checkThread(); - if (DebugFlags.TRACE_API) Log.d(LOGTAG, "resumeTimers"); + if (TRACE) Log.d(LOGTAG, "resumeTimers"); mProvider.resumeTimers(); } @@ -1405,7 +1411,7 @@ public class WebView extends AbsoluteLayout */ public void onPause() { checkThread(); - if (DebugFlags.TRACE_API) Log.d(LOGTAG, "onPause"); + if (TRACE) Log.d(LOGTAG, "onPause"); mProvider.onPause(); } @@ -1414,7 +1420,7 @@ public class WebView extends AbsoluteLayout */ public void onResume() { checkThread(); - if (DebugFlags.TRACE_API) Log.d(LOGTAG, "onResume"); + if (TRACE) Log.d(LOGTAG, "onResume"); mProvider.onResume(); } @@ -1437,7 +1443,7 @@ public class WebView extends AbsoluteLayout @Deprecated public void freeMemory() { checkThread(); - if (DebugFlags.TRACE_API) Log.d(LOGTAG, "freeMemory"); + if (TRACE) Log.d(LOGTAG, "freeMemory"); mProvider.freeMemory(); } @@ -1449,7 +1455,7 @@ public class WebView extends AbsoluteLayout */ public void clearCache(boolean includeDiskFiles) { checkThread(); - if (DebugFlags.TRACE_API) Log.d(LOGTAG, "clearCache"); + if (TRACE) Log.d(LOGTAG, "clearCache"); mProvider.clearCache(includeDiskFiles); } @@ -1461,7 +1467,7 @@ public class WebView extends AbsoluteLayout */ public void clearFormData() { checkThread(); - if (DebugFlags.TRACE_API) Log.d(LOGTAG, "clearFormData"); + if (TRACE) Log.d(LOGTAG, "clearFormData"); mProvider.clearFormData(); } @@ -1470,7 +1476,7 @@ public class WebView extends AbsoluteLayout */ public void clearHistory() { checkThread(); - if (DebugFlags.TRACE_API) Log.d(LOGTAG, "clearHistory"); + if (TRACE) Log.d(LOGTAG, "clearHistory"); mProvider.clearHistory(); } @@ -1480,7 +1486,7 @@ public class WebView extends AbsoluteLayout */ public void clearSslPreferences() { checkThread(); - if (DebugFlags.TRACE_API) Log.d(LOGTAG, "clearSslPreferences"); + if (TRACE) Log.d(LOGTAG, "clearSslPreferences"); mProvider.clearSslPreferences(); } @@ -1496,7 +1502,7 @@ public class WebView extends AbsoluteLayout * callback. The runnable will be called in UI thread. */ public static void clearClientCertPreferences(Runnable onCleared) { - if (DebugFlags.TRACE_API) Log.d(LOGTAG, "clearClientCertPreferences"); + if (TRACE) Log.d(LOGTAG, "clearClientCertPreferences"); getFactory().getStatics().clearClientCertPreferences(onCleared); } @@ -1538,7 +1544,7 @@ public class WebView extends AbsoluteLayout */ public void findNext(boolean forward) { checkThread(); - if (DebugFlags.TRACE_API) Log.d(LOGTAG, "findNext"); + if (TRACE) Log.d(LOGTAG, "findNext"); mProvider.findNext(forward); } @@ -1554,7 +1560,7 @@ public class WebView extends AbsoluteLayout @Deprecated public int findAll(String find) { checkThread(); - if (DebugFlags.TRACE_API) Log.d(LOGTAG, "findAll"); + if (TRACE) Log.d(LOGTAG, "findAll"); StrictMode.noteSlowCall("findAll blocks UI: prefer findAllAsync"); return mProvider.findAll(find); } @@ -1569,7 +1575,7 @@ public class WebView extends AbsoluteLayout */ public void findAllAsync(String find) { checkThread(); - if (DebugFlags.TRACE_API) Log.d(LOGTAG, "findAllAsync"); + if (TRACE) Log.d(LOGTAG, "findAllAsync"); mProvider.findAllAsync(find); } @@ -1590,7 +1596,7 @@ public class WebView extends AbsoluteLayout @Deprecated public boolean showFindDialog(String text, boolean showIme) { checkThread(); - if (DebugFlags.TRACE_API) Log.d(LOGTAG, "showFindDialog"); + if (TRACE) Log.d(LOGTAG, "showFindDialog"); return mProvider.showFindDialog(text, showIme); } @@ -1646,7 +1652,7 @@ public class WebView extends AbsoluteLayout */ public void clearMatches() { checkThread(); - if (DebugFlags.TRACE_API) Log.d(LOGTAG, "clearMatches"); + if (TRACE) Log.d(LOGTAG, "clearMatches"); mProvider.clearMatches(); } @@ -1707,7 +1713,7 @@ public class WebView extends AbsoluteLayout @Deprecated public void setPictureListener(PictureListener listener) { checkThread(); - if (DebugFlags.TRACE_API) Log.d(LOGTAG, "setPictureListener=" + listener); + if (TRACE) Log.d(LOGTAG, "setPictureListener=" + listener); mProvider.setPictureListener(listener); } @@ -1764,7 +1770,7 @@ public class WebView extends AbsoluteLayout */ public void addJavascriptInterface(Object object, String name) { checkThread(); - if (DebugFlags.TRACE_API) Log.d(LOGTAG, "addJavascriptInterface=" + name); + if (TRACE) Log.d(LOGTAG, "addJavascriptInterface=" + name); mProvider.addJavascriptInterface(object, name); } @@ -1777,7 +1783,7 @@ public class WebView extends AbsoluteLayout */ public void removeJavascriptInterface(String name) { checkThread(); - if (DebugFlags.TRACE_API) Log.d(LOGTAG, "removeJavascriptInterface=" + name); + if (TRACE) Log.d(LOGTAG, "removeJavascriptInterface=" + name); mProvider.removeJavascriptInterface(name); } @@ -1881,7 +1887,7 @@ public class WebView extends AbsoluteLayout public void flingScroll(int vx, int vy) { checkThread(); - if (DebugFlags.TRACE_API) Log.d(LOGTAG, "flingScroll"); + if (TRACE) Log.d(LOGTAG, "flingScroll"); mProvider.flingScroll(vx, vy); } @@ -2006,6 +2012,7 @@ public class WebView extends AbsoluteLayout * * @hide WebViewProvider is not public API. */ + @SystemApi public WebViewProvider getWebViewProvider() { return mProvider; } @@ -2015,6 +2022,7 @@ public class WebView extends AbsoluteLayout * and fields, and make super-class calls in this WebView instance. * @hide Only for use by WebViewProvider implementations */ + @SystemApi public class PrivateAccess { // ---- Access to super-class methods ---- public int super_getScrollBarStyle() { diff --git a/core/java/android/webkit/WebViewDatabase.java b/core/java/android/webkit/WebViewDatabase.java index 99e0ffb24171..bfea4811c4cc 100644 --- a/core/java/android/webkit/WebViewDatabase.java +++ b/core/java/android/webkit/WebViewDatabase.java @@ -16,6 +16,7 @@ package android.webkit; +import android.annotation.SystemApi; import android.content.Context; /** @@ -28,18 +29,12 @@ import android.content.Context; * <li>Data entered into text fields (e.g. for autocomplete suggestions)</li> * </ul> */ -public class WebViewDatabase { +public abstract class WebViewDatabase { /** * @hide Since API level {@link android.os.Build.VERSION_CODES#JELLY_BEAN_MR1} */ protected static final String LOGTAG = "webviewdatabase"; - /** - * @hide Only for use by WebViewProvider implementations. - */ - protected WebViewDatabase() { - } - public static WebViewDatabase getInstance(Context context) { return WebViewFactory.getProvider().getWebViewDatabase(context); } @@ -54,9 +49,7 @@ public class WebViewDatabase { * @deprecated Saving passwords in WebView will not be supported in future versions. */ @Deprecated - public boolean hasUsernamePassword() { - throw new MustOverrideException(); - } + public abstract boolean hasUsernamePassword(); /** * Clears any saved username/password pairs for web forms. @@ -67,9 +60,7 @@ public class WebViewDatabase { * @deprecated Saving passwords in WebView will not be supported in future versions. */ @Deprecated - public void clearUsernamePassword() { - throw new MustOverrideException(); - } + public abstract void clearUsernamePassword(); /** * Gets whether there are any saved credentials for HTTP authentication. @@ -79,9 +70,7 @@ public class WebViewDatabase { * @see WebView#setHttpAuthUsernamePassword * @see #clearHttpAuthUsernamePassword */ - public boolean hasHttpAuthUsernamePassword() { - throw new MustOverrideException(); - } + public abstract boolean hasHttpAuthUsernamePassword(); /** * Clears any saved credentials for HTTP authentication. @@ -90,9 +79,7 @@ public class WebViewDatabase { * @see WebView#setHttpAuthUsernamePassword * @see #hasHttpAuthUsernamePassword */ - public void clearHttpAuthUsernamePassword() { - throw new MustOverrideException(); - } + public abstract void clearHttpAuthUsernamePassword(); /** * Gets whether there is any saved data for web forms. @@ -100,16 +87,12 @@ public class WebViewDatabase { * @return whether there is any saved data for web forms * @see #clearFormData */ - public boolean hasFormData() { - throw new MustOverrideException(); - } + public abstract boolean hasFormData(); /** * Clears any saved data for web forms. * * @see #hasFormData */ - public void clearFormData() { - throw new MustOverrideException(); - } + public abstract void clearFormData(); } diff --git a/core/java/android/webkit/WebViewDelegate.java b/core/java/android/webkit/WebViewDelegate.java new file mode 100644 index 000000000000..a247c4610100 --- /dev/null +++ b/core/java/android/webkit/WebViewDelegate.java @@ -0,0 +1,162 @@ +/* + * Copyright (C) 2014 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.webkit; + +import android.annotation.SystemApi; +import android.app.ActivityThread; +import android.app.Application; +import android.content.Context; +import android.content.res.Resources; +import android.graphics.Canvas; +import android.os.SystemProperties; +import android.os.Trace; +import android.util.SparseArray; +import android.view.HardwareCanvas; +import android.view.View; +import android.view.ViewRootImpl; + +/** + * Delegate used by the WebView provider implementation to access + * the required framework functionality needed to implement a {@link WebView}. + * + * @hide + */ +@SystemApi +public final class WebViewDelegate { + + /* package */ WebViewDelegate() { } + + /** + * Listener that gets notified whenever tracing has been enabled/disabled. + */ + public interface OnTraceEnabledChangeListener { + void onTraceEnabledChange(boolean enabled); + } + + /** + * Register a callback to be invoked when tracing for the WebView component has been + * enabled/disabled. + */ + public void setOnTraceEnabledChangeListener(final OnTraceEnabledChangeListener listener) { + SystemProperties.addChangeCallback(new Runnable() { + @Override + public void run() { + listener.onTraceEnabledChange(isTraceTagEnabled()); + } + }); + } + + /** + * Returns true if the WebView trace tag is enabled and false otherwise. + */ + public boolean isTraceTagEnabled() { + return Trace.isTagEnabled(Trace.TRACE_TAG_WEBVIEW); + } + + /** + * Returns true if the draw GL functor can be invoked (see {@link #invokeDrawGlFunctor}) + * and false otherwise. + */ + public boolean canInvokeDrawGlFunctor(View containerView) { + ViewRootImpl viewRootImpl = containerView.getViewRootImpl(); + // viewRootImpl can be null during teardown when window is leaked. + return viewRootImpl != null; + } + + /** + * Invokes the draw GL functor. If waitForCompletion is false the functor + * may be invoked asynchronously. + * + * @param nativeDrawGLFunctor the pointer to the native functor that implements + * system/core/include/utils/Functor.h + */ + public void invokeDrawGlFunctor(View containerView, long nativeDrawGLFunctor, + boolean waitForCompletion) { + ViewRootImpl viewRootImpl = containerView.getViewRootImpl(); + viewRootImpl.invokeFunctor(nativeDrawGLFunctor, waitForCompletion); + } + + /** + * Calls the function specified with the nativeDrawGLFunctor functor pointer. This + * functionality is used by the WebView for calling into their renderer from the + * framework display lists. + * + * @param canvas a hardware accelerated canvas (see {@link Canvas#isHardwareAccelerated()}) + * @param nativeDrawGLFunctor the pointer to the native functor that implements + * system/core/include/utils/Functor.h + * @throws IllegalArgumentException if the canvas is not hardware accelerated + */ + public void callDrawGlFunction(Canvas canvas, long nativeDrawGLFunctor) { + if (!(canvas instanceof HardwareCanvas)) { + // Canvas#isHardwareAccelerated() is only true for subclasses of HardwareCanvas. + throw new IllegalArgumentException(canvas.getClass().getName() + + " is not hardware accelerated"); + } + ((HardwareCanvas) canvas).callDrawGLFunction(nativeDrawGLFunctor); + } + + /** + * Detaches the draw GL functor. + * + * @param nativeDrawGLFunctor the pointer to the native functor that implements + * system/core/include/utils/Functor.h + */ + public void detachDrawGlFunctor(View containerView, long nativeDrawGLFunctor) { + ViewRootImpl viewRootImpl = containerView.getViewRootImpl(); + if (nativeDrawGLFunctor != 0 && viewRootImpl != null) { + viewRootImpl.detachFunctor(nativeDrawGLFunctor); + } + } + + /** + * Returns the package id of the given {@code packageName}. + */ + public int getPackageId(Resources resources, String packageName) { + SparseArray<String> packageIdentifiers = + resources.getAssets().getAssignedPackageIdentifiers(); + for (int i = 0; i < packageIdentifiers.size(); i++) { + final String name = packageIdentifiers.valueAt(i); + + if (packageName.equals(name)) { + return packageIdentifiers.keyAt(i); + } + } + throw new RuntimeException("Package not found: " + packageName); + } + + /** + * Returns the application which is embedding the WebView. + */ + public Application getApplication() { + return ActivityThread.currentApplication(); + } + + /** + * Returns the error string for the given {@code errorCode}. + */ + public String getErrorString(Context context, int errorCode) { + return LegacyErrorStrings.getString(errorCode, context); + } + + /** + * Adds the WebView asset path to {@link AssetManager}. + */ + public void addWebViewAssetPath(Context context) { + context.getAssets().addAssetPath( + WebViewFactory.getLoadedPackageInfo().applicationInfo.sourceDir); + } +} diff --git a/core/java/android/webkit/WebViewFactory.java b/core/java/android/webkit/WebViewFactory.java index c7ffedc1e0f9..7b23d8f9d554 100644 --- a/core/java/android/webkit/WebViewFactory.java +++ b/core/java/android/webkit/WebViewFactory.java @@ -16,6 +16,7 @@ package android.webkit; +import android.annotation.SystemApi; import android.app.ActivityManagerInternal; import android.app.Application; import android.app.AppGlobals; @@ -46,6 +47,7 @@ import com.android.internal.os.Zygote; * * @hide */ +@SystemApi public final class WebViewFactory { private static final String CHROMIUM_WEBVIEW_FACTORY = @@ -109,7 +111,12 @@ public final class WebViewFactory { StrictMode.ThreadPolicy oldPolicy = StrictMode.allowThreadDiskReads(); Trace.traceBegin(Trace.TRACE_TAG_WEBVIEW, "providerClass.newInstance()"); try { - sProviderInstance = providerClass.newInstance(); + try { + sProviderInstance = providerClass.getConstructor(WebViewDelegate.class) + .newInstance(new WebViewDelegate()); + } catch (Exception e) { + sProviderInstance = providerClass.newInstance(); + } if (DEBUG) Log.v(LOGTAG, "Loaded provider: " + sProviderInstance); return sProviderInstance; } catch (Exception e) { diff --git a/core/java/android/webkit/WebViewFactoryProvider.java b/core/java/android/webkit/WebViewFactoryProvider.java index d37d217ae099..91053940f3cd 100644 --- a/core/java/android/webkit/WebViewFactoryProvider.java +++ b/core/java/android/webkit/WebViewFactoryProvider.java @@ -16,6 +16,7 @@ package android.webkit; +import android.annotation.SystemApi; import android.content.Context; import android.content.Intent; import android.net.Uri; @@ -26,6 +27,7 @@ import android.net.Uri; * implementation of this interface, and make it available to the WebView via mechanism TBD. * @hide */ +@SystemApi public interface WebViewFactoryProvider { /** * This Interface provides glue for implementing the backend of WebView static methods which diff --git a/core/java/android/webkit/WebViewProvider.java b/core/java/android/webkit/WebViewProvider.java index fe18138892ad..2aee57b4a63a 100644 --- a/core/java/android/webkit/WebViewProvider.java +++ b/core/java/android/webkit/WebViewProvider.java @@ -16,6 +16,7 @@ package android.webkit; +import android.annotation.SystemApi; import android.content.res.Configuration; import android.graphics.Bitmap; import android.graphics.Canvas; @@ -53,6 +54,7 @@ import java.util.Map; * * @hide Not part of the public API; only required by system implementors. */ +@SystemApi public interface WebViewProvider { //------------------------------------------------------------------------- // Main interface for backend provider of the WebView class. diff --git a/core/java/android/widget/AbsSeekBar.java b/core/java/android/widget/AbsSeekBar.java index b2cfdf7da22f..6033c42458d1 100644 --- a/core/java/android/widget/AbsSeekBar.java +++ b/core/java/android/widget/AbsSeekBar.java @@ -704,19 +704,20 @@ public abstract class AbsSeekBar extends ProgressBar { @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (isEnabled()) { - int progress = getProgress(); + int increment = mKeyProgressIncrement; switch (keyCode) { case KeyEvent.KEYCODE_DPAD_LEFT: - if (progress <= 0) break; - animateSetProgress(progress - mKeyProgressIncrement); - onKeyChange(); - return true; - + increment = -increment; + // fallthrough case KeyEvent.KEYCODE_DPAD_RIGHT: - if (progress >= getMax()) break; - animateSetProgress(progress + mKeyProgressIncrement); - onKeyChange(); - return true; + increment = isLayoutRtl() ? -increment : increment; + int progress = getProgress() + increment; + if (progress > -mKeyProgressIncrement && + progress < getMax() + mKeyProgressIncrement) { + animateSetProgress(progress); + onKeyChange(); + return true; + } } } diff --git a/core/java/android/widget/DateTimeView.java b/core/java/android/widget/DateTimeView.java index 45d1403bc598..86cd52f3b477 100644 --- a/core/java/android/widget/DateTimeView.java +++ b/core/java/android/widget/DateTimeView.java @@ -149,7 +149,7 @@ public class DateTimeView extends TextView { format = getTimeFormat(); break; case SHOW_MONTH_DAY_YEAR: - format = getDateFormat(); + format = DateFormat.getDateInstance(DateFormat.SHORT); break; default: throw new RuntimeException("unknown display value: " + display); @@ -189,21 +189,6 @@ public class DateTimeView extends TextView { return android.text.format.DateFormat.getTimeFormat(getContext()); } - private DateFormat getDateFormat() { - String format = Settings.System.getString(getContext().getContentResolver(), - Settings.System.DATE_FORMAT); - if (format == null || "".equals(format)) { - return DateFormat.getDateInstance(DateFormat.SHORT); - } else { - try { - return new SimpleDateFormat(format); - } catch (IllegalArgumentException e) { - // If we tried to use a bad format string, fall back to a default. - return DateFormat.getDateInstance(DateFormat.SHORT); - } - } - } - private void registerReceivers() { Context context = getContext(); @@ -213,15 +198,11 @@ public class DateTimeView extends TextView { filter.addAction(Intent.ACTION_CONFIGURATION_CHANGED); filter.addAction(Intent.ACTION_TIMEZONE_CHANGED); context.registerReceiver(mBroadcastReceiver, filter); - - Uri uri = Settings.System.getUriFor(Settings.System.DATE_FORMAT); - context.getContentResolver().registerContentObserver(uri, true, mContentObserver); } private void unregisterReceivers() { Context context = getContext(); context.unregisterReceiver(mBroadcastReceiver); - context.getContentResolver().unregisterContentObserver(mContentObserver); } private BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() { @@ -241,12 +222,4 @@ public class DateTimeView extends TextView { update(); } }; - - private ContentObserver mContentObserver = new ContentObserver(new Handler()) { - @Override - public void onChange(boolean selfChange) { - mLastFormat = null; - update(); - } - }; } diff --git a/core/java/android/widget/PopupWindow.java b/core/java/android/widget/PopupWindow.java index 41d3e3208ee2..bde620150b5c 100644 --- a/core/java/android/widget/PopupWindow.java +++ b/core/java/android/widget/PopupWindow.java @@ -375,9 +375,9 @@ public class PopupWindow { } /** - * Set the flag on popup to ignore cheek press eventt; by default this flag + * Set the flag on popup to ignore cheek press events; by default this flag * is set to false - * which means the pop wont ignore cheek press dispatch events. + * which means the popup will not ignore cheek press dispatch events. * * <p>If the popup is showing, calling this method will take effect only * the next time the popup is shown or through a manual call to one of diff --git a/core/java/android/widget/TextView.java b/core/java/android/widget/TextView.java index 6345b79eb81d..dc4d2142cc34 100644 --- a/core/java/android/widget/TextView.java +++ b/core/java/android/widget/TextView.java @@ -3809,7 +3809,9 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener // Display the error later, after the first layout pass post(new Runnable() { public void run() { - setError(error); + if (mEditor == null || !mEditor.mErrorWasChanged) { + setError(error); + } } }); } diff --git a/core/java/com/android/internal/os/ZygoteInit.java b/core/java/com/android/internal/os/ZygoteInit.java index 46850daf0134..62088fa1be1b 100644 --- a/core/java/com/android/internal/os/ZygoteInit.java +++ b/core/java/com/android/internal/os/ZygoteInit.java @@ -45,6 +45,8 @@ import libcore.io.IoUtils; import java.io.BufferedReader; import java.io.FileDescriptor; +import java.io.FileInputStream; +import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; @@ -91,9 +93,9 @@ public class ZygoteInit { private static Resources mResources; /** - * The name of a resource file that contains classes to preload. + * The path of a file that contains classes to preload. */ - private static final String PRELOADED_CLASSES = "preloaded-classes"; + private static final String PRELOADED_CLASSES = "/system/etc/preloaded-classes"; /** Controls whether we should preload resources during zygote init. */ private static final boolean PRELOAD_RESOURCES = true; @@ -278,74 +280,76 @@ public class ZygoteInit { private static void preloadClasses() { final VMRuntime runtime = VMRuntime.getRuntime(); - InputStream is = ClassLoader.getSystemClassLoader().getResourceAsStream( - PRELOADED_CLASSES); - if (is == null) { + InputStream is; + try { + is = new FileInputStream(PRELOADED_CLASSES); + } catch (FileNotFoundException e) { Log.e(TAG, "Couldn't find " + PRELOADED_CLASSES + "."); - } else { - Log.i(TAG, "Preloading classes..."); - long startTime = SystemClock.uptimeMillis(); + return; + } - // Drop root perms while running static initializers. - setEffectiveGroup(UNPRIVILEGED_GID); - setEffectiveUser(UNPRIVILEGED_UID); + Log.i(TAG, "Preloading classes..."); + long startTime = SystemClock.uptimeMillis(); - // Alter the target heap utilization. With explicit GCs this - // is not likely to have any effect. - float defaultUtilization = runtime.getTargetHeapUtilization(); - runtime.setTargetHeapUtilization(0.8f); + // Drop root perms while running static initializers. + setEffectiveGroup(UNPRIVILEGED_GID); + setEffectiveUser(UNPRIVILEGED_UID); - try { - BufferedReader br - = new BufferedReader(new InputStreamReader(is), 256); - - int count = 0; - String line; - while ((line = br.readLine()) != null) { - // Skip comments and blank lines. - line = line.trim(); - if (line.startsWith("#") || line.equals("")) { - continue; - } + // Alter the target heap utilization. With explicit GCs this + // is not likely to have any effect. + float defaultUtilization = runtime.getTargetHeapUtilization(); + runtime.setTargetHeapUtilization(0.8f); - try { - if (false) { - Log.v(TAG, "Preloading " + line + "..."); - } - Class.forName(line); - count++; - } catch (ClassNotFoundException e) { - Log.w(TAG, "Class not found for preloading: " + line); - } catch (UnsatisfiedLinkError e) { - Log.w(TAG, "Problem preloading " + line + ": " + e); - } catch (Throwable t) { - Log.e(TAG, "Error preloading " + line + ".", t); - if (t instanceof Error) { - throw (Error) t; - } - if (t instanceof RuntimeException) { - throw (RuntimeException) t; - } - throw new RuntimeException(t); - } + try { + BufferedReader br + = new BufferedReader(new InputStreamReader(is), 256); + + int count = 0; + String line; + while ((line = br.readLine()) != null) { + // Skip comments and blank lines. + line = line.trim(); + if (line.startsWith("#") || line.equals("")) { + continue; } - Log.i(TAG, "...preloaded " + count + " classes in " - + (SystemClock.uptimeMillis()-startTime) + "ms."); - } catch (IOException e) { - Log.e(TAG, "Error reading " + PRELOADED_CLASSES + ".", e); - } finally { - IoUtils.closeQuietly(is); - // Restore default. - runtime.setTargetHeapUtilization(defaultUtilization); - - // Fill in dex caches with classes, fields, and methods brought in by preloading. - runtime.preloadDexCaches(); - - // Bring back root. We'll need it later. - setEffectiveUser(ROOT_UID); - setEffectiveGroup(ROOT_GID); + try { + if (false) { + Log.v(TAG, "Preloading " + line + "..."); + } + Class.forName(line); + count++; + } catch (ClassNotFoundException e) { + Log.w(TAG, "Class not found for preloading: " + line); + } catch (UnsatisfiedLinkError e) { + Log.w(TAG, "Problem preloading " + line + ": " + e); + } catch (Throwable t) { + Log.e(TAG, "Error preloading " + line + ".", t); + if (t instanceof Error) { + throw (Error) t; + } + if (t instanceof RuntimeException) { + throw (RuntimeException) t; + } + throw new RuntimeException(t); + } } + + Log.i(TAG, "...preloaded " + count + " classes in " + + (SystemClock.uptimeMillis()-startTime) + "ms."); + } catch (IOException e) { + Log.e(TAG, "Error reading " + PRELOADED_CLASSES + ".", e); + } finally { + IoUtils.closeQuietly(is); + // Restore default. + runtime.setTargetHeapUtilization(defaultUtilization); + + // Fill in dex caches with classes, fields, and methods brought in by preloading. + runtime.preloadDexCaches(); + + // Bring back root. We'll need it later. + setEffectiveUser(ROOT_UID); + setEffectiveGroup(ROOT_GID); } } diff --git a/core/jni/Android.mk b/core/jni/Android.mk index 245e0d2330ac..97e0fd3ccb90 100644 --- a/core/jni/Android.mk +++ b/core/jni/Android.mk @@ -11,250 +11,249 @@ LOCAL_CFLAGS += -Wno-maybe-uninitialized -Wno-parentheses LOCAL_CPPFLAGS += -Wno-conversion-null ifeq ($(TARGET_ARCH), arm) - LOCAL_CFLAGS += -DPACKED="__attribute__ ((packed))" + LOCAL_CFLAGS += -DPACKED="__attribute__ ((packed))" else - LOCAL_CFLAGS += -DPACKED="" + LOCAL_CFLAGS += -DPACKED="" endif ifeq ($(USE_OPENGL_RENDERER),true) - LOCAL_CFLAGS += -DUSE_OPENGL_RENDERER + LOCAL_CFLAGS += -DUSE_OPENGL_RENDERER endif LOCAL_CFLAGS += -DGL_GLEXT_PROTOTYPES -DEGL_EGLEXT_PROTOTYPES LOCAL_SRC_FILES:= \ - AndroidRuntime.cpp \ - com_android_internal_content_NativeLibraryHelper.cpp \ - com_google_android_gles_jni_EGLImpl.cpp \ - com_google_android_gles_jni_GLImpl.cpp.arm \ - android_app_NativeActivity.cpp \ - android_opengl_EGL14.cpp \ - android_opengl_EGLExt.cpp \ - android_opengl_GLES10.cpp \ - android_opengl_GLES10Ext.cpp \ - android_opengl_GLES11.cpp \ - android_opengl_GLES11Ext.cpp \ - android_opengl_GLES20.cpp \ - android_opengl_GLES30.cpp \ - android_opengl_GLES31.cpp \ - android_opengl_GLES31Ext.cpp \ - android_database_CursorWindow.cpp \ - android_database_SQLiteCommon.cpp \ - android_database_SQLiteConnection.cpp \ - android_database_SQLiteGlobal.cpp \ - android_database_SQLiteDebug.cpp \ - android_emoji_EmojiFactory.cpp \ - android_view_DisplayEventReceiver.cpp \ - android_view_Surface.cpp \ - android_view_SurfaceControl.cpp \ - android_view_SurfaceSession.cpp \ - android_view_TextureView.cpp \ - android_view_InputChannel.cpp \ - android_view_InputDevice.cpp \ - android_view_InputEventReceiver.cpp \ - android_view_InputEventSender.cpp \ - android_view_InputQueue.cpp \ - android_view_KeyEvent.cpp \ - android_view_KeyCharacterMap.cpp \ - android_view_GraphicBuffer.cpp \ - android_view_GLES20Canvas.cpp \ - android_view_HardwareLayer.cpp \ - android_view_ThreadedRenderer.cpp \ - android_view_MotionEvent.cpp \ - android_view_PointerIcon.cpp \ - android_view_RenderNode.cpp \ - android_view_RenderNodeAnimator.cpp \ - android_view_VelocityTracker.cpp \ - android_text_AndroidCharacter.cpp \ - android_text_AndroidBidi.cpp \ - android_text_StaticLayout.cpp \ - android_os_Debug.cpp \ - android_os_MemoryFile.cpp \ - android_os_MessageQueue.cpp \ - android_os_Parcel.cpp \ - android_os_SELinux.cpp \ - android_os_SystemClock.cpp \ - android_os_SystemProperties.cpp \ - android_os_Trace.cpp \ - android_os_UEventObserver.cpp \ - android_net_LocalSocketImpl.cpp \ - android_net_NetUtils.cpp \ - android_net_TrafficStats.cpp \ - android_nio_utils.cpp \ - android_util_AssetManager.cpp \ - android_util_Binder.cpp \ - android_util_EventLog.cpp \ - android_util_Log.cpp \ - android_util_Process.cpp \ - android_util_StringBlock.cpp \ - android_util_XmlBlock.cpp \ - android_graphics_Canvas.cpp \ - android_graphics_Picture.cpp \ - android/graphics/AutoDecodeCancel.cpp \ - android/graphics/Bitmap.cpp \ - android/graphics/BitmapFactory.cpp \ - android/graphics/Camera.cpp \ - android/graphics/CanvasProperty.cpp \ - android/graphics/ColorFilter.cpp \ - android/graphics/DrawFilter.cpp \ - android/graphics/FontFamily.cpp \ - android/graphics/CreateJavaOutputStreamAdaptor.cpp \ - android/graphics/Graphics.cpp \ - android/graphics/HarfBuzzNGFaceSkia.cpp \ - android/graphics/Interpolator.cpp \ - android/graphics/MaskFilter.cpp \ - android/graphics/Matrix.cpp \ - android/graphics/MinikinSkia.cpp \ - android/graphics/MinikinUtils.cpp \ - android/graphics/Movie.cpp \ - android/graphics/NinePatch.cpp \ - android/graphics/NinePatchImpl.cpp \ - android/graphics/NinePatchPeeker.cpp \ - android/graphics/Paint.cpp \ - android/graphics/PaintImpl.cpp \ - android/graphics/Path.cpp \ - android/graphics/PathMeasure.cpp \ - android/graphics/PathEffect.cpp \ - android/graphics/Picture.cpp \ - android/graphics/PorterDuff.cpp \ - android/graphics/BitmapRegionDecoder.cpp \ - android/graphics/Rasterizer.cpp \ - android/graphics/Region.cpp \ - android/graphics/Shader.cpp \ - android/graphics/SkiaCanvas.cpp \ - android/graphics/SurfaceTexture.cpp \ - android/graphics/Typeface.cpp \ - android/graphics/TypefaceImpl.cpp \ - android/graphics/Utils.cpp \ - android/graphics/Xfermode.cpp \ - android/graphics/YuvToJpegEncoder.cpp \ - android/graphics/pdf/PdfDocument.cpp \ - android/graphics/pdf/PdfEditor.cpp \ - android/graphics/pdf/PdfRenderer.cpp \ - android_media_AudioRecord.cpp \ - android_media_AudioSystem.cpp \ - android_media_AudioTrack.cpp \ - android_media_JetPlayer.cpp \ - android_media_RemoteDisplay.cpp \ - android_media_ToneGenerator.cpp \ - android_hardware_Camera.cpp \ - android_hardware_camera2_CameraMetadata.cpp \ - android_hardware_camera2_legacy_LegacyCameraDevice.cpp \ - android_hardware_camera2_legacy_PerfMeasurement.cpp \ - android_hardware_camera2_DngCreator.cpp \ - android_hardware_SensorManager.cpp \ - android_hardware_SerialPort.cpp \ - android_hardware_SoundTrigger.cpp \ - android_hardware_UsbDevice.cpp \ - android_hardware_UsbDeviceConnection.cpp \ - android_hardware_UsbRequest.cpp \ - android_hardware_location_ActivityRecognitionHardware.cpp \ - android_util_FileObserver.cpp \ - android/opengl/poly_clip.cpp.arm \ - android/opengl/util.cpp.arm \ - android_server_FingerprintManager.cpp \ - android_server_NetworkManagementSocketTagger.cpp \ - android_server_Watchdog.cpp \ - android_ddm_DdmHandleNativeHeap.cpp \ - com_android_internal_os_ZygoteInit.cpp \ - android_backup_BackupDataInput.cpp \ - android_backup_BackupDataOutput.cpp \ - android_backup_FileBackupHelperBase.cpp \ - android_backup_BackupHelperDispatcher.cpp \ - android_app_backup_FullBackup.cpp \ - android_content_res_ObbScanner.cpp \ - android_content_res_Configuration.cpp \ - android_animation_PropertyValuesHolder.cpp \ - com_android_internal_net_NetworkStatsFactory.cpp \ - com_android_internal_os_Zygote.cpp \ - com_android_internal_util_VirtualRefBasePtr.cpp \ - com_android_internal_view_animation_NativeInterpolatorFactoryHelper.cpp + AndroidRuntime.cpp \ + com_android_internal_content_NativeLibraryHelper.cpp \ + com_google_android_gles_jni_EGLImpl.cpp \ + com_google_android_gles_jni_GLImpl.cpp.arm \ + android_app_NativeActivity.cpp \ + android_opengl_EGL14.cpp \ + android_opengl_EGLExt.cpp \ + android_opengl_GLES10.cpp \ + android_opengl_GLES10Ext.cpp \ + android_opengl_GLES11.cpp \ + android_opengl_GLES11Ext.cpp \ + android_opengl_GLES20.cpp \ + android_opengl_GLES30.cpp \ + android_opengl_GLES31.cpp \ + android_opengl_GLES31Ext.cpp \ + android_database_CursorWindow.cpp \ + android_database_SQLiteCommon.cpp \ + android_database_SQLiteConnection.cpp \ + android_database_SQLiteGlobal.cpp \ + android_database_SQLiteDebug.cpp \ + android_emoji_EmojiFactory.cpp \ + android_view_DisplayEventReceiver.cpp \ + android_view_Surface.cpp \ + android_view_SurfaceControl.cpp \ + android_view_SurfaceSession.cpp \ + android_view_TextureView.cpp \ + android_view_InputChannel.cpp \ + android_view_InputDevice.cpp \ + android_view_InputEventReceiver.cpp \ + android_view_InputEventSender.cpp \ + android_view_InputQueue.cpp \ + android_view_KeyEvent.cpp \ + android_view_KeyCharacterMap.cpp \ + android_view_GraphicBuffer.cpp \ + android_view_GLES20Canvas.cpp \ + android_view_HardwareLayer.cpp \ + android_view_ThreadedRenderer.cpp \ + android_view_MotionEvent.cpp \ + android_view_PointerIcon.cpp \ + android_view_RenderNode.cpp \ + android_view_RenderNodeAnimator.cpp \ + android_view_VelocityTracker.cpp \ + android_text_AndroidCharacter.cpp \ + android_text_AndroidBidi.cpp \ + android_text_StaticLayout.cpp \ + android_os_Debug.cpp \ + android_os_MemoryFile.cpp \ + android_os_MessageQueue.cpp \ + android_os_Parcel.cpp \ + android_os_SELinux.cpp \ + android_os_SystemClock.cpp \ + android_os_SystemProperties.cpp \ + android_os_Trace.cpp \ + android_os_UEventObserver.cpp \ + android_net_LocalSocketImpl.cpp \ + android_net_NetUtils.cpp \ + android_net_TrafficStats.cpp \ + android_nio_utils.cpp \ + android_util_AssetManager.cpp \ + android_util_Binder.cpp \ + android_util_EventLog.cpp \ + android_util_Log.cpp \ + android_util_Process.cpp \ + android_util_StringBlock.cpp \ + android_util_XmlBlock.cpp \ + android_graphics_Canvas.cpp \ + android_graphics_Picture.cpp \ + android/graphics/AutoDecodeCancel.cpp \ + android/graphics/Bitmap.cpp \ + android/graphics/BitmapFactory.cpp \ + android/graphics/Camera.cpp \ + android/graphics/CanvasProperty.cpp \ + android/graphics/ColorFilter.cpp \ + android/graphics/DrawFilter.cpp \ + android/graphics/FontFamily.cpp \ + android/graphics/CreateJavaOutputStreamAdaptor.cpp \ + android/graphics/Graphics.cpp \ + android/graphics/HarfBuzzNGFaceSkia.cpp \ + android/graphics/Interpolator.cpp \ + android/graphics/MaskFilter.cpp \ + android/graphics/Matrix.cpp \ + android/graphics/MinikinSkia.cpp \ + android/graphics/MinikinUtils.cpp \ + android/graphics/Movie.cpp \ + android/graphics/NinePatch.cpp \ + android/graphics/NinePatchImpl.cpp \ + android/graphics/NinePatchPeeker.cpp \ + android/graphics/Paint.cpp \ + android/graphics/PaintImpl.cpp \ + android/graphics/Path.cpp \ + android/graphics/PathMeasure.cpp \ + android/graphics/PathEffect.cpp \ + android/graphics/Picture.cpp \ + android/graphics/PorterDuff.cpp \ + android/graphics/BitmapRegionDecoder.cpp \ + android/graphics/Rasterizer.cpp \ + android/graphics/Region.cpp \ + android/graphics/Shader.cpp \ + android/graphics/SkiaCanvas.cpp \ + android/graphics/SurfaceTexture.cpp \ + android/graphics/Typeface.cpp \ + android/graphics/TypefaceImpl.cpp \ + android/graphics/Utils.cpp \ + android/graphics/Xfermode.cpp \ + android/graphics/YuvToJpegEncoder.cpp \ + android/graphics/pdf/PdfDocument.cpp \ + android/graphics/pdf/PdfEditor.cpp \ + android/graphics/pdf/PdfRenderer.cpp \ + android_media_AudioRecord.cpp \ + android_media_AudioSystem.cpp \ + android_media_AudioTrack.cpp \ + android_media_JetPlayer.cpp \ + android_media_RemoteDisplay.cpp \ + android_media_ToneGenerator.cpp \ + android_hardware_Camera.cpp \ + android_hardware_camera2_CameraMetadata.cpp \ + android_hardware_camera2_legacy_LegacyCameraDevice.cpp \ + android_hardware_camera2_legacy_PerfMeasurement.cpp \ + android_hardware_camera2_DngCreator.cpp \ + android_hardware_SensorManager.cpp \ + android_hardware_SerialPort.cpp \ + android_hardware_SoundTrigger.cpp \ + android_hardware_UsbDevice.cpp \ + android_hardware_UsbDeviceConnection.cpp \ + android_hardware_UsbRequest.cpp \ + android_hardware_location_ActivityRecognitionHardware.cpp \ + android_util_FileObserver.cpp \ + android/opengl/poly_clip.cpp.arm \ + android/opengl/util.cpp.arm \ + android_server_FingerprintManager.cpp \ + android_server_NetworkManagementSocketTagger.cpp \ + android_server_Watchdog.cpp \ + android_ddm_DdmHandleNativeHeap.cpp \ + com_android_internal_os_ZygoteInit.cpp \ + android_backup_BackupDataInput.cpp \ + android_backup_BackupDataOutput.cpp \ + android_backup_FileBackupHelperBase.cpp \ + android_backup_BackupHelperDispatcher.cpp \ + android_app_backup_FullBackup.cpp \ + android_content_res_ObbScanner.cpp \ + android_content_res_Configuration.cpp \ + android_animation_PropertyValuesHolder.cpp \ + com_android_internal_net_NetworkStatsFactory.cpp \ + com_android_internal_os_Zygote.cpp \ + com_android_internal_util_VirtualRefBasePtr.cpp \ + com_android_internal_view_animation_NativeInterpolatorFactoryHelper.cpp LOCAL_C_INCLUDES += \ - $(JNI_H_INCLUDE) \ - $(LOCAL_PATH)/android/graphics \ - $(LOCAL_PATH)/../../libs/hwui \ - $(LOCAL_PATH)/../../../native/opengl/libs \ - $(call include-path-for, bluedroid) \ - $(call include-path-for, libhardware)/hardware \ - $(call include-path-for, libhardware_legacy)/hardware_legacy \ - $(TOP)/bionic/libc/dns/include \ - $(TOP)/frameworks/av/include \ - $(TOP)/system/media/camera/include \ - $(TOP)/system/netd/include \ - external/icu/icu4c/source/common \ - external/pdfium/core/include/fpdfapi \ - external/pdfium/core/include/fpdfdoc \ - external/pdfium/fpdfsdk/include \ - external/skia/src/core \ - external/skia/src/effects \ - external/skia/src/images \ - external/sqlite/dist \ - external/sqlite/android \ - external/expat/lib \ - external/openssl/include \ - external/tremor/Tremor \ - external/jpeg \ - external/harfbuzz_ng/src \ - external/zlib \ - frameworks/opt/emoji \ - libcore/include \ - $(call include-path-for, audio-utils) \ - frameworks/minikin/include \ - external/freetype/include + $(JNI_H_INCLUDE) \ + $(LOCAL_PATH)/android/graphics \ + $(LOCAL_PATH)/../../libs/hwui \ + $(LOCAL_PATH)/../../../native/opengl/libs \ + $(call include-path-for, bluedroid) \ + $(call include-path-for, libhardware)/hardware \ + $(call include-path-for, libhardware_legacy)/hardware_legacy \ + $(TOP)/bionic/libc/dns/include \ + $(TOP)/frameworks/av/include \ + $(TOP)/system/media/camera/include \ + $(TOP)/system/netd/include \ + external/icu/icu4c/source/common \ + external/pdfium/core/include/fpdfapi \ + external/pdfium/core/include/fpdfdoc \ + external/pdfium/fpdfsdk/include \ + external/skia/src/core \ + external/skia/src/effects \ + external/skia/src/images \ + external/sqlite/dist \ + external/sqlite/android \ + external/expat/lib \ + external/openssl/include \ + external/tremor/Tremor \ + external/jpeg \ + external/harfbuzz_ng/src \ + external/zlib \ + frameworks/opt/emoji \ + libcore/include \ + $(call include-path-for, audio-utils) \ + frameworks/minikin/include \ + external/freetype/include # TODO: clean up Minikin so it doesn't need the freetype include LOCAL_SHARED_LIBRARIES := \ - libmemtrack \ - libandroidfw \ - libexpat \ - libnativehelper \ - liblog \ - libcutils \ - libutils \ - libbinder \ - libnetutils \ - libui \ - libgui \ - libinput \ - libinputflinger \ - libcamera_client \ - libcamera_metadata \ - libskia \ - libsqlite \ - libEGL \ - libGLESv1_CM \ - libGLESv2 \ - libETC1 \ - libhardware \ - libhardware_legacy \ - libselinux \ - libsonivox \ - libcrypto \ - libssl \ - libicuuc \ - libicui18n \ - libmedia \ - libjpeg \ - libusbhost \ - libharfbuzz_ng \ - libz \ - libaudioutils \ - libpdfium \ - libimg_utils \ - libnetd_client \ - libsoundtrigger \ - libminikin \ - libstlport \ - libprocessgroup \ - libnativebridge \ + libmemtrack \ + libandroidfw \ + libexpat \ + libnativehelper \ + liblog \ + libcutils \ + libutils \ + libbinder \ + libnetutils \ + libui \ + libgui \ + libinput \ + libinputflinger \ + libcamera_client \ + libcamera_metadata \ + libskia \ + libsqlite \ + libEGL \ + libGLESv1_CM \ + libGLESv2 \ + libETC1 \ + libhardware \ + libhardware_legacy \ + libselinux \ + libsonivox \ + libcrypto \ + libssl \ + libicuuc \ + libicui18n \ + libmedia \ + libjpeg \ + libusbhost \ + libharfbuzz_ng \ + libz \ + libaudioutils \ + libpdfium \ + libimg_utils \ + libnetd_client \ + libsoundtrigger \ + libminikin \ + libprocessgroup \ + libnativebridge ifeq ($(USE_OPENGL_RENDERER),true) - LOCAL_SHARED_LIBRARIES += libhwui + LOCAL_SHARED_LIBRARIES += libhwui endif LOCAL_SHARED_LIBRARIES += \ - libdl + libdl # we need to access the private Bionic header # <bionic_tls.h> in com_google_android_gles_jni_GLImpl.cpp @@ -262,7 +261,14 @@ LOCAL_C_INCLUDES += bionic/libc/private LOCAL_MODULE:= libandroid_runtime -include external/stlport/libstlport.mk +# -Wno-unknown-pragmas: necessary for Clang as the GL bindings need to turn +# off a GCC warning that Clang doesn't know. +LOCAL_CFLAGS += -Wall -Werror -Wunused -Wunreachable-code -Wno-unknown-pragmas + +# -Wno-c++11-extensions: Clang warns about Skia using the C++11 override keyword, but this project +# is not being compiled with that level. Remove once this has changed. +LOCAL_CFLAGS += -Wno-c++11-extensions + include $(BUILD_SHARED_LIBRARY) include $(call all-makefiles-under,$(LOCAL_PATH)) diff --git a/core/jni/AndroidRuntime.cpp b/core/jni/AndroidRuntime.cpp index 8bb3173ce11c..644f6a6cafa6 100644 --- a/core/jni/AndroidRuntime.cpp +++ b/core/jni/AndroidRuntime.cpp @@ -191,12 +191,6 @@ extern int register_com_android_internal_util_VirtualRefBasePtr(JNIEnv *env); static AndroidRuntime* gCurRuntime = NULL; -static void doThrow(JNIEnv* env, const char* exc, const char* msg = NULL) -{ - if (jniThrowException(env, exc, msg) != 0) - assert(false); -} - /* * Code written in the Java Programming Language calls here from main(). */ @@ -354,6 +348,15 @@ static int hasDir(const char* dir) return 0; } +static bool hasFile(const char* file) { + struct stat s; + int res = stat(file, &s); + if (res == 0) { + return S_ISREG(s.st_mode); + } + return false; +} + /* * Read the persistent locale. */ @@ -766,10 +769,22 @@ int AndroidRuntime::startVm(JavaVM** pJavaVM, JNIEnv** pEnv) parseCompilerOption("dalvik.vm.image-dex2oat-filter", dex2oatImageCompilerFilterBuf, "--compiler-filter=", "-Ximage-compiler-option"); } + + // Make sure there is a preloaded-classes file. + if (!hasFile("/system/etc/preloaded-classes")) { + ALOGE("Missing preloaded-classes file, /system/etc/preloaded-classes not found: %s\n", + strerror(errno)); + goto bail; + } addOption("-Ximage-compiler-option"); - addOption("--image-classes-zip=/system/framework/framework.jar"); - addOption("-Ximage-compiler-option"); - addOption("--image-classes=preloaded-classes"); + addOption("--image-classes=/system/etc/preloaded-classes"); + + // If there is a compiled-classes file, push it. + if (hasFile("/system/etc/compiled-classes")) { + addOption("-Ximage-compiler-option"); + addOption("--compiled-classes=/system/etc/compiled-classes"); + } + property_get("dalvik.vm.image-dex2oat-flags", dex2oatImageFlagsBuf, ""); parseExtraOpts(dex2oatImageFlagsBuf, "-Ximage-compiler-option"); @@ -1214,13 +1229,6 @@ static int register_jni_procs(const RegJNIRec array[], size_t count, JNIEnv* env return 0; } -static void register_jam_procs(const RegJAMProc array[], size_t count) -{ - for (size_t i = 0; i < count; i++) { - array[i](); - } -} - static const RegJNIRec gRegJNI[] = { REG_JNI(register_com_android_internal_os_RuntimeInit), REG_JNI(register_android_os_SystemClock), diff --git a/core/jni/android/graphics/AutoDecodeCancel.h b/core/jni/android/graphics/AutoDecodeCancel.h index 37b86f92f990..dd6a0d450171 100644 --- a/core/jni/android/graphics/AutoDecodeCancel.h +++ b/core/jni/android/graphics/AutoDecodeCancel.h @@ -1,5 +1,5 @@ -#ifndef AutoDecodeCancel_DEFINED -#define AutoDecodeCancel_DEFINED +#ifndef _ANDROID_GRAPHICS_AUTO_DECODE_CANCEL_H_ +#define _ANDROID_GRAPHICS_AUTO_DECODE_CANCEL_H_ #include <jni.h> #include "SkImageDecoder.h" @@ -24,4 +24,4 @@ private: #endif }; -#endif +#endif // _ANDROID_GRAPHICS_AUTO_DECODE_CANCEL_H_ diff --git a/core/jni/android/graphics/Bitmap.cpp b/core/jni/android/graphics/Bitmap.cpp index 70cf9a803c61..fbc1b356f804 100755 --- a/core/jni/android/graphics/Bitmap.cpp +++ b/core/jni/android/graphics/Bitmap.cpp @@ -15,16 +15,12 @@ #include "android_nio_utils.h" #include "CreateJavaOutputStreamAdaptor.h" +#include "core_jni_helpers.h" + #include <jni.h> #include <Caches.h> -#if 0 - #define TRACE_BITMAP(code) code -#else - #define TRACE_BITMAP(code) -#endif - /////////////////////////////////////////////////////////////////////////////// // Conversions to/from SkColor, for get/setPixels, and the create method, which // is basically like setPixels @@ -43,8 +39,11 @@ static void FromColor_D32(void* dst, const SkColor src[], int width, static void FromColor_D32_Raw(void* dst, const SkColor src[], int width, int, int) { + // Needed to thwart the unreachable code detection from clang. + static const bool sk_color_ne_zero = SK_COLOR_MATCHES_PMCOLOR_BYTE_ORDER; + // SkColor's ordering may be different from SkPMColor - if (SK_COLOR_MATCHES_PMCOLOR_BYTE_ORDER) { + if (sk_color_ne_zero) { memcpy(dst, src, width * sizeof(SkColor)); return; } @@ -873,8 +872,6 @@ static void Bitmap_prepareToDraw(JNIEnv* env, jobject, jlong bitmapHandle) { /////////////////////////////////////////////////////////////////////////////// -#include <android_runtime/AndroidRuntime.h> - static JNINativeMethod gBitmapMethods[] = { { "nativeCreate", "([IIIIIIZ)Landroid/graphics/Bitmap;", (void*)Bitmap_creator }, @@ -914,10 +911,8 @@ static JNINativeMethod gBitmapMethods[] = { { "nativePrepareToDraw", "(J)V", (void*)Bitmap_prepareToDraw }, }; -#define kClassPathName "android/graphics/Bitmap" - int register_android_graphics_Bitmap(JNIEnv* env) { - return android::AndroidRuntime::registerNativeMethods(env, kClassPathName, - gBitmapMethods, SK_ARRAY_COUNT(gBitmapMethods)); + return android::RegisterMethodsOrDie(env, "android/graphics/Bitmap", gBitmapMethods, + NELEM(gBitmapMethods)); } diff --git a/core/jni/android/graphics/BitmapFactory.cpp b/core/jni/android/graphics/BitmapFactory.cpp index 8ea28eca476b..0a95b44a8acb 100644 --- a/core/jni/android/graphics/BitmapFactory.cpp +++ b/core/jni/android/graphics/BitmapFactory.cpp @@ -15,7 +15,7 @@ #include "JNIHelp.h" #include "GraphicsJNI.h" -#include <android_runtime/AndroidRuntime.h> +#include "core_jni_helpers.h" #include <androidfw/Asset.h> #include <androidfw/ResourceTypes.h> #include <cutils/compiler.h> @@ -49,12 +49,6 @@ jmethodID gInsetStruct_constructorMethodID; using namespace android; -static inline int32_t validOrNeg1(bool isValid, int32_t value) { -// return isValid ? value : -1; - SkASSERT((int)isValid == 0 || (int)isValid == 1); - return ((int32_t)isValid - 1) | value; -} - jstring getMimeTypeString(JNIEnv* env, SkImageDecoder::Format format) { static const struct { SkImageDecoder::Format fFormat; @@ -185,8 +179,8 @@ public: const size_t size = sk_64_asS32(size64); if (size > mSize) { - ALOGW("bitmap marked for reuse (%d bytes) can't fit new bitmap (%d bytes)", - mSize, size); + ALOGW("bitmap marked for reuse (%u bytes) can't fit new bitmap " + "(%zu bytes)", mSize, size); return false; } @@ -478,7 +472,7 @@ static jobject nativeDecodeFileDescriptor(JNIEnv* env, jobject clazz, jobject fi NPE_CHECK_RETURN_ZERO(env, fileDescriptor); - jint descriptor = jniGetFDFromFileDescriptor(env, fileDescriptor); + int descriptor = jniGetFDFromFileDescriptor(env, fileDescriptor); struct stat fdStat; if (fstat(descriptor, &fdStat) == -1) { @@ -486,16 +480,27 @@ static jobject nativeDecodeFileDescriptor(JNIEnv* env, jobject clazz, jobject fi return nullObjectReturn("fstat return -1"); } - // Restore the descriptor's offset on exiting this function. + // Restore the descriptor's offset on exiting this function. Even though + // we dup the descriptor, both the original and dup refer to the same open + // file description and changes to the file offset in one impact the other. AutoFDSeek autoRestore(descriptor); - FILE* file = fdopen(descriptor, "r"); + // Duplicate the descriptor here to prevent leaking memory. A leak occurs + // if we only close the file descriptor and not the file object it is used to + // create. If we don't explicitly clean up the file (which in turn closes the + // descriptor) the buffers allocated internally by fseek will be leaked. + int dupDescriptor = dup(descriptor); + + FILE* file = fdopen(dupDescriptor, "r"); if (file == NULL) { + // cleanup the duplicated descriptor since it will not be closed when the + // file is cleaned up (fclose). + close(dupDescriptor); return nullObjectReturn("Could not open file"); } SkAutoTUnref<SkFILEStream> fileStream(new SkFILEStream(file, - SkFILEStream::kCallerRetains_Ownership)); + SkFILEStream::kCallerPasses_Ownership)); // Use a buffered stream. Although an SkFILEStream can be rewound, this // ensures that SkImageDecoder::Factory never rewinds beyond the @@ -568,52 +573,40 @@ static JNINativeMethod gOptionsMethods[] = { { "requestCancel", "()V", (void*)nativeRequestCancel } }; -static jfieldID getFieldIDCheck(JNIEnv* env, jclass clazz, - const char fieldname[], const char type[]) { - jfieldID id = env->GetFieldID(clazz, fieldname, type); - SkASSERT(id); - return id; -} - int register_android_graphics_BitmapFactory(JNIEnv* env) { - jclass options_class = env->FindClass("android/graphics/BitmapFactory$Options"); - SkASSERT(options_class); - gOptions_bitmapFieldID = getFieldIDCheck(env, options_class, "inBitmap", + jclass options_class = FindClassOrDie(env, "android/graphics/BitmapFactory$Options"); + gOptions_bitmapFieldID = GetFieldIDOrDie(env, options_class, "inBitmap", "Landroid/graphics/Bitmap;"); - gOptions_justBoundsFieldID = getFieldIDCheck(env, options_class, "inJustDecodeBounds", "Z"); - gOptions_sampleSizeFieldID = getFieldIDCheck(env, options_class, "inSampleSize", "I"); - gOptions_configFieldID = getFieldIDCheck(env, options_class, "inPreferredConfig", + gOptions_justBoundsFieldID = GetFieldIDOrDie(env, options_class, "inJustDecodeBounds", "Z"); + gOptions_sampleSizeFieldID = GetFieldIDOrDie(env, options_class, "inSampleSize", "I"); + gOptions_configFieldID = GetFieldIDOrDie(env, options_class, "inPreferredConfig", "Landroid/graphics/Bitmap$Config;"); - gOptions_premultipliedFieldID = getFieldIDCheck(env, options_class, "inPremultiplied", "Z"); - gOptions_mutableFieldID = getFieldIDCheck(env, options_class, "inMutable", "Z"); - gOptions_ditherFieldID = getFieldIDCheck(env, options_class, "inDither", "Z"); - gOptions_preferQualityOverSpeedFieldID = getFieldIDCheck(env, options_class, + gOptions_premultipliedFieldID = GetFieldIDOrDie(env, options_class, "inPremultiplied", "Z"); + gOptions_mutableFieldID = GetFieldIDOrDie(env, options_class, "inMutable", "Z"); + gOptions_ditherFieldID = GetFieldIDOrDie(env, options_class, "inDither", "Z"); + gOptions_preferQualityOverSpeedFieldID = GetFieldIDOrDie(env, options_class, "inPreferQualityOverSpeed", "Z"); - gOptions_scaledFieldID = getFieldIDCheck(env, options_class, "inScaled", "Z"); - gOptions_densityFieldID = getFieldIDCheck(env, options_class, "inDensity", "I"); - gOptions_screenDensityFieldID = getFieldIDCheck(env, options_class, "inScreenDensity", "I"); - gOptions_targetDensityFieldID = getFieldIDCheck(env, options_class, "inTargetDensity", "I"); - gOptions_widthFieldID = getFieldIDCheck(env, options_class, "outWidth", "I"); - gOptions_heightFieldID = getFieldIDCheck(env, options_class, "outHeight", "I"); - gOptions_mimeFieldID = getFieldIDCheck(env, options_class, "outMimeType", "Ljava/lang/String;"); - gOptions_mCancelID = getFieldIDCheck(env, options_class, "mCancel", "Z"); - - jclass bitmap_class = env->FindClass("android/graphics/Bitmap"); - SkASSERT(bitmap_class); - gBitmap_nativeBitmapFieldID = getFieldIDCheck(env, bitmap_class, "mNativeBitmap", "J"); - gBitmap_ninePatchInsetsFieldID = getFieldIDCheck(env, bitmap_class, "mNinePatchInsets", + gOptions_scaledFieldID = GetFieldIDOrDie(env, options_class, "inScaled", "Z"); + gOptions_densityFieldID = GetFieldIDOrDie(env, options_class, "inDensity", "I"); + gOptions_screenDensityFieldID = GetFieldIDOrDie(env, options_class, "inScreenDensity", "I"); + gOptions_targetDensityFieldID = GetFieldIDOrDie(env, options_class, "inTargetDensity", "I"); + gOptions_widthFieldID = GetFieldIDOrDie(env, options_class, "outWidth", "I"); + gOptions_heightFieldID = GetFieldIDOrDie(env, options_class, "outHeight", "I"); + gOptions_mimeFieldID = GetFieldIDOrDie(env, options_class, "outMimeType", "Ljava/lang/String;"); + gOptions_mCancelID = GetFieldIDOrDie(env, options_class, "mCancel", "Z"); + + jclass bitmap_class = FindClassOrDie(env, "android/graphics/Bitmap"); + gBitmap_nativeBitmapFieldID = GetFieldIDOrDie(env, bitmap_class, "mNativeBitmap", "J"); + gBitmap_ninePatchInsetsFieldID = GetFieldIDOrDie(env, bitmap_class, "mNinePatchInsets", "Landroid/graphics/NinePatch$InsetStruct;"); - gInsetStruct_class = (jclass) env->NewGlobalRef(env->FindClass("android/graphics/NinePatch$InsetStruct")); - gInsetStruct_constructorMethodID = env->GetMethodID(gInsetStruct_class, "<init>", "(IIIIIIIIFIF)V"); + gInsetStruct_class = MakeGlobalRefOrDie(env, FindClassOrDie(env, + "android/graphics/NinePatch$InsetStruct")); + gInsetStruct_constructorMethodID = GetMethodIDOrDie(env, gInsetStruct_class, "<init>", + "(IIIIIIIIFIF)V"); - int ret = AndroidRuntime::registerNativeMethods(env, - "android/graphics/BitmapFactory$Options", - gOptionsMethods, - SK_ARRAY_COUNT(gOptionsMethods)); - if (ret) { - return ret; - } - return android::AndroidRuntime::registerNativeMethods(env, "android/graphics/BitmapFactory", - gMethods, SK_ARRAY_COUNT(gMethods)); + android::RegisterMethodsOrDie(env, "android/graphics/BitmapFactory$Options", + gOptionsMethods, NELEM(gOptionsMethods)); + return android::RegisterMethodsOrDie(env, "android/graphics/BitmapFactory", + gMethods, NELEM(gMethods)); } diff --git a/core/jni/android/graphics/BitmapFactory.h b/core/jni/android/graphics/BitmapFactory.h index 97dcc6d36a60..a54da43e4ee7 100644 --- a/core/jni/android/graphics/BitmapFactory.h +++ b/core/jni/android/graphics/BitmapFactory.h @@ -1,5 +1,5 @@ -#ifndef BitmapFactory_DEFINE -#define BitmapFactory_DEFINE +#ifndef _ANDROID_GRAPHICS_BITMAP_FACTORY_H_ +#define _ANDROID_GRAPHICS_BITMAP_FACTORY_H_ #include "GraphicsJNI.h" @@ -21,4 +21,4 @@ extern jfieldID gOptions_bitmapFieldID; jstring getMimeTypeString(JNIEnv* env, SkImageDecoder::Format format); -#endif +#endif // _ANDROID_GRAPHICS_BITMAP_FACTORY_H_ diff --git a/core/jni/android/graphics/BitmapRegionDecoder.cpp b/core/jni/android/graphics/BitmapRegionDecoder.cpp index 91efc8ca0da0..3537bcb34124 100644 --- a/core/jni/android/graphics/BitmapRegionDecoder.cpp +++ b/core/jni/android/graphics/BitmapRegionDecoder.cpp @@ -30,7 +30,7 @@ #include "Utils.h" #include "JNIHelp.h" -#include <android_runtime/AndroidRuntime.h> +#include "core_jni_helpers.h" #include "android_util_Binder.h" #include "android_nio_utils.h" #include "CreateJavaOutputStreamAdaptor.h" @@ -40,12 +40,6 @@ #include <androidfw/Asset.h> #include <sys/stat.h> -#if 0 - #define TRACE_BITMAP(code) code -#else - #define TRACE_BITMAP(code) -#endif - using namespace android; class SkBitmapRegionDecoder { @@ -273,8 +267,6 @@ static void nativeClean(JNIEnv* env, jobject, jlong brdHandle) { /////////////////////////////////////////////////////////////////////////////// -#include <android_runtime/AndroidRuntime.h> - static JNINativeMethod gBitmapRegionDecoderMethods[] = { { "nativeDecodeRegion", "(JIIIILandroid/graphics/BitmapFactory$Options;)Landroid/graphics/Bitmap;", @@ -307,10 +299,8 @@ static JNINativeMethod gBitmapRegionDecoderMethods[] = { }, }; -#define kClassPathName "android/graphics/BitmapRegionDecoder" - int register_android_graphics_BitmapRegionDecoder(JNIEnv* env) { - return android::AndroidRuntime::registerNativeMethods(env, kClassPathName, - gBitmapRegionDecoderMethods, SK_ARRAY_COUNT(gBitmapRegionDecoderMethods)); + return android::RegisterMethodsOrDie(env, "android/graphics/BitmapRegionDecoder", + gBitmapRegionDecoderMethods, NELEM(gBitmapRegionDecoderMethods)); } diff --git a/core/jni/android/graphics/Camera.cpp b/core/jni/android/graphics/Camera.cpp index 9f832b070cda..b572604f3f83 100644 --- a/core/jni/android/graphics/Camera.cpp +++ b/core/jni/android/graphics/Camera.cpp @@ -1,5 +1,5 @@ #include "jni.h" -#include <android_runtime/AndroidRuntime.h> +#include "core_jni_helpers.h" #include "SkCamera.h" @@ -137,16 +137,8 @@ static JNINativeMethod gCameraMethods[] = { }; int register_android_graphics_Camera(JNIEnv* env) { - jclass clazz = env->FindClass("android/graphics/Camera"); - if (clazz == 0) { - return -1; - } - gNativeInstanceFieldID = env->GetFieldID(clazz, "native_instance", "J"); - if (gNativeInstanceFieldID == 0) { - return -1; - } - return android::AndroidRuntime::registerNativeMethods(env, - "android/graphics/Camera", - gCameraMethods, - SK_ARRAY_COUNT(gCameraMethods)); + jclass clazz = android::FindClassOrDie(env, "android/graphics/Camera"); + gNativeInstanceFieldID = android::GetFieldIDOrDie(env, clazz, "native_instance", "J"); + return android::RegisterMethodsOrDie(env, "android/graphics/Camera", gCameraMethods, + NELEM(gCameraMethods)); } diff --git a/core/jni/android/graphics/CanvasProperty.cpp b/core/jni/android/graphics/CanvasProperty.cpp index e63c5faeb390..a69a45711500 100644 --- a/core/jni/android/graphics/CanvasProperty.cpp +++ b/core/jni/android/graphics/CanvasProperty.cpp @@ -17,16 +17,20 @@ #include "jni.h" #include "GraphicsJNI.h" #include "Paint.h" -#include <android_runtime/AndroidRuntime.h> +#include <core_jni_helpers.h> #include <utils/RefBase.h> #include <CanvasProperty.h> namespace android { -using namespace uirenderer; - #ifdef USE_OPENGL_RENDERER +static const bool kUseOpenGLRenderer = true; +#else +static const bool kUseOpenGLRenderer = false; +#endif + +using namespace uirenderer; static jlong createFloat(JNIEnv* env, jobject clazz, jfloat initialValue) { return reinterpret_cast<jlong>(new CanvasPropertyPrimitive(initialValue)); @@ -37,23 +41,21 @@ static jlong createPaint(JNIEnv* env, jobject clazz, jlong paintPtr) { return reinterpret_cast<jlong>(new CanvasPropertyPaint(*paint)); } -#endif - // ---------------------------------------------------------------------------- // JNI Glue // ---------------------------------------------------------------------------- -const char* const kClassPathName = "android/graphics/CanvasProperty"; - static JNINativeMethod gMethods[] = { -#ifdef USE_OPENGL_RENDERER { "nCreateFloat", "(F)J", (void*) createFloat }, { "nCreatePaint", "(J)J", (void*) createPaint }, -#endif }; int register_android_graphics_CanvasProperty(JNIEnv* env) { - return AndroidRuntime::registerNativeMethods(env, kClassPathName, gMethods, NELEM(gMethods)); + if (kUseOpenGLRenderer) { + return RegisterMethodsOrDie(env, "android/graphics/CanvasProperty", gMethods, + NELEM(gMethods)); + } + return 0; } }; // namespace android diff --git a/core/jni/android/graphics/ColorFilter.cpp b/core/jni/android/graphics/ColorFilter.cpp index c66c84416111..026cbeec01e7 100644 --- a/core/jni/android/graphics/ColorFilter.cpp +++ b/core/jni/android/graphics/ColorFilter.cpp @@ -17,7 +17,7 @@ #include "jni.h" #include "GraphicsJNI.h" -#include <android_runtime/AndroidRuntime.h> +#include "core_jni_helpers.h" #include "SkColorFilter.h" #include "SkColorMatrixFilter.h" @@ -74,18 +74,15 @@ static JNINativeMethod colormatrix_methods[] = { { "nativeColorMatrixFilter", "([F)J", (void*) SkColorFilterGlue::CreateColorMatrixFilter }, }; -#define REG(env, name, array) \ - result = android::AndroidRuntime::registerNativeMethods(env, name, array, \ - SK_ARRAY_COUNT(array)); \ - if (result < 0) return result - int register_android_graphics_ColorFilter(JNIEnv* env) { - int result; - - REG(env, "android/graphics/ColorFilter", colorfilter_methods); - REG(env, "android/graphics/PorterDuffColorFilter", porterduff_methods); - REG(env, "android/graphics/LightingColorFilter", lighting_methods); - REG(env, "android/graphics/ColorMatrixColorFilter", colormatrix_methods); + android::RegisterMethodsOrDie(env, "android/graphics/ColorFilter", colorfilter_methods, + NELEM(colorfilter_methods)); + android::RegisterMethodsOrDie(env, "android/graphics/PorterDuffColorFilter", porterduff_methods, + NELEM(porterduff_methods)); + android::RegisterMethodsOrDie(env, "android/graphics/LightingColorFilter", lighting_methods, + NELEM(lighting_methods)); + android::RegisterMethodsOrDie(env, "android/graphics/ColorMatrixColorFilter", + colormatrix_methods, NELEM(colormatrix_methods)); return 0; } diff --git a/core/jni/android/graphics/CreateJavaOutputStreamAdaptor.cpp b/core/jni/android/graphics/CreateJavaOutputStreamAdaptor.cpp index b64ab0d9d3ea..1a3fa145e26a 100644 --- a/core/jni/android/graphics/CreateJavaOutputStreamAdaptor.cpp +++ b/core/jni/android/graphics/CreateJavaOutputStreamAdaptor.cpp @@ -24,7 +24,6 @@ public: } virtual size_t read(void* buffer, size_t size) { - JNIEnv* env = fEnv; if (NULL == buffer) { if (0 == size) { return 0; diff --git a/core/jni/android/graphics/CreateJavaOutputStreamAdaptor.h b/core/jni/android/graphics/CreateJavaOutputStreamAdaptor.h index ecd270f0927d..56cba51222a0 100644 --- a/core/jni/android/graphics/CreateJavaOutputStreamAdaptor.h +++ b/core/jni/android/graphics/CreateJavaOutputStreamAdaptor.h @@ -1,5 +1,5 @@ -#ifndef CreateJavaOutputStream_DEFINED -#define CreateJavaOutputStream_DEFINED +#ifndef _ANDROID_GRAPHICS_CREATE_JAVA_OUTPUT_STREAM_ADAPTOR_H_ +#define _ANDROID_GRAPHICS_CREATE_JAVA_OUTPUT_STREAM_ADAPTOR_H_ //#include <android_runtime/AndroidRuntime.h> #include "jni.h" @@ -38,4 +38,5 @@ SkStreamRewindable* CopyJavaInputStream(JNIEnv* env, jobject stream, SkWStream* CreateJavaOutputStreamAdaptor(JNIEnv* env, jobject stream, jbyteArray storage); -#endif + +#endif // _ANDROID_GRAPHICS_CREATE_JAVA_OUTPUT_STREAM_ADAPTOR_H_ diff --git a/core/jni/android/graphics/DrawFilter.cpp b/core/jni/android/graphics/DrawFilter.cpp index 3275875449b3..bac124fba20b 100644 --- a/core/jni/android/graphics/DrawFilter.cpp +++ b/core/jni/android/graphics/DrawFilter.cpp @@ -24,6 +24,8 @@ #include "GraphicsJNI.h" #include <android_runtime/AndroidRuntime.h> +#include "core_jni_helpers.h" + #include "SkDrawFilter.h" #include "SkPaintFlagsDrawFilter.h" #include "SkPaint.h" @@ -103,16 +105,11 @@ static JNINativeMethod paintflags_methods[] = { {"nativeConstructor","(II)J", (void*) SkDrawFilterGlue::CreatePaintFlagsDF} }; -#define REG(env, name, array) \ - result = android::AndroidRuntime::registerNativeMethods(env, name, array, SK_ARRAY_COUNT(array)); \ - if (result < 0) return result - - int register_android_graphics_DrawFilter(JNIEnv* env) { - int result; - - REG(env, "android/graphics/DrawFilter", drawfilter_methods); - REG(env, "android/graphics/PaintFlagsDrawFilter", paintflags_methods); + int result = RegisterMethodsOrDie(env, "android/graphics/DrawFilter", drawfilter_methods, + NELEM(drawfilter_methods)); + result |= RegisterMethodsOrDie(env, "android/graphics/PaintFlagsDrawFilter", paintflags_methods, + NELEM(paintflags_methods)); return 0; } diff --git a/core/jni/android/graphics/FontFamily.cpp b/core/jni/android/graphics/FontFamily.cpp index bfb30b7efc24..8a85d625e051 100644 --- a/core/jni/android/graphics/FontFamily.cpp +++ b/core/jni/android/graphics/FontFamily.cpp @@ -17,7 +17,7 @@ #define LOG_TAG "Minikin" #include "JNIHelp.h" -#include <android_runtime/AndroidRuntime.h> +#include <core_jni_helpers.h> #include "SkTypeface.h" #include "GraphicsJNI.h" @@ -125,9 +125,8 @@ static JNINativeMethod gFontFamilyMethods[] = { int register_android_graphics_FontFamily(JNIEnv* env) { - return android::AndroidRuntime::registerNativeMethods(env, - "android/graphics/FontFamily", - gFontFamilyMethods, NELEM(gFontFamilyMethods)); + return RegisterMethodsOrDie(env, "android/graphics/FontFamily", gFontFamilyMethods, + NELEM(gFontFamilyMethods)); } } diff --git a/core/jni/android/graphics/GraphicsJNI.h b/core/jni/android/graphics/GraphicsJNI.h index dcc97e546979..0ce6e493a128 100644 --- a/core/jni/android/graphics/GraphicsJNI.h +++ b/core/jni/android/graphics/GraphicsJNI.h @@ -1,5 +1,5 @@ -#ifndef GraphicsJNI_DEFINED -#define GraphicsJNI_DEFINED +#ifndef _ANDROID_GRAPHICS_GRAPHICS_JNI_H_ +#define _ANDROID_GRAPHICS_GRAPHICS_JNI_H_ #include "SkBitmap.h" #include "SkDevice.h" @@ -15,7 +15,7 @@ class SkCanvas; namespace android { class Paint; -class TypefaceImpl; +struct TypefaceImpl; } class GraphicsJNI { @@ -201,7 +201,6 @@ public: private: JavaVM* fVM; - bool fAllocateInJavaHeap; jbyteArray fStorageObj; int fAllocCount; }; @@ -289,4 +288,4 @@ void doThrowIOE(JNIEnv* env, const char* msg = NULL); // IO Exception #define NPE_CHECK_RETURN_VOID(env, object) \ do { if (NULL == (object)) { doThrowNPE(env); return; } } while (0) -#endif +#endif // _ANDROID_GRAPHICS_GRAPHICS_JNI_H_ diff --git a/core/jni/android/graphics/HarfBuzzNGFaceSkia.cpp b/core/jni/android/graphics/HarfBuzzNGFaceSkia.cpp index a75efcf6eb51..ca3a42f44f51 100644 --- a/core/jni/android/graphics/HarfBuzzNGFaceSkia.cpp +++ b/core/jni/android/graphics/HarfBuzzNGFaceSkia.cpp @@ -44,6 +44,8 @@ namespace android { +static const bool kDebugGlyphs = false; + // Our implementation of the callbacks which Harfbuzz requires by using Skia // calls. See the Harfbuzz source for references about what these callbacks do. @@ -62,9 +64,9 @@ static void SkiaGetGlyphWidthAndExtents(SkPaint* paint, hb_codepoint_t codepoint uint16_t glyph = codepoint; paint->getTextWidths(&glyph, sizeof(glyph), &skWidth, &skBounds); -#if DEBUG_GLYPHS - ALOGD("returned glyph for %i: width = %f", codepoint, skWidth); -#endif + if (kDebugGlyphs) { + ALOGD("returned glyph for %i: width = %f", codepoint, skWidth); + } if (width) *width = SkScalarToHBFixed(skWidth); if (extents) { diff --git a/core/jni/android/graphics/HarfBuzzNGFaceSkia.h b/core/jni/android/graphics/HarfBuzzNGFaceSkia.h index 7b71eccaac01..3308d5d51b58 100644 --- a/core/jni/android/graphics/HarfBuzzNGFaceSkia.h +++ b/core/jni/android/graphics/HarfBuzzNGFaceSkia.h @@ -24,8 +24,8 @@ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -#ifndef HarfBuzzNGFaceSkia_h -#define HarfBuzzNGFaceSkia_h +#ifndef _ANDROID_GRAPHICS_HARF_BUZZ_NG_FACE_SKIA_H_ +#define _ANDROID_GRAPHICS_HARF_BUZZ_NG_FACE_SKIA_H_ #include <SkScalar.h> #include <SkPaint.h> @@ -56,4 +56,4 @@ hb_font_t* createFont(hb_face_t* face, SkPaint* paint, float sizeX, float sizeY) } // namespace android -#endif +#endif // _ANDROID_GRAPHICS_HARF_BUZZ_NG_FACE_SKIA_H_ diff --git a/core/jni/android/graphics/Interpolator.cpp b/core/jni/android/graphics/Interpolator.cpp index 455f867bbbcb..f7f3511d15a9 100644 --- a/core/jni/android/graphics/Interpolator.cpp +++ b/core/jni/android/graphics/Interpolator.cpp @@ -1,5 +1,5 @@ #include "jni.h" -#include <android_runtime/AndroidRuntime.h> +#include "core_jni_helpers.h" #include "GraphicsJNI.h" #include "SkInterpolator.h" @@ -83,8 +83,6 @@ static JNINativeMethod gInterpolatorMethods[] = { int register_android_graphics_Interpolator(JNIEnv* env) { - return android::AndroidRuntime::registerNativeMethods(env, - "android/graphics/Interpolator", - gInterpolatorMethods, - SK_ARRAY_COUNT(gInterpolatorMethods)); + return android::RegisterMethodsOrDie(env, "android/graphics/Interpolator", + gInterpolatorMethods, NELEM(gInterpolatorMethods)); } diff --git a/core/jni/android/graphics/MaskFilter.cpp b/core/jni/android/graphics/MaskFilter.cpp index b394905cfe21..d65864312196 100644 --- a/core/jni/android/graphics/MaskFilter.cpp +++ b/core/jni/android/graphics/MaskFilter.cpp @@ -4,6 +4,8 @@ #include "SkBlurMaskFilter.h" #include "SkTableMaskFilter.h" +#include "core_jni_helpers.h" + #include <jni.h> static void ThrowIAE_IfNull(JNIEnv* env, void* ptr) { @@ -77,20 +79,16 @@ static JNINativeMethod gTableMaskFilterMethods[] = { { "nativeNewGamma", "(F)J", (void*)SkMaskFilterGlue::createGammaTable } }; -#include <android_runtime/AndroidRuntime.h> - -#define REG(env, name, array) \ - result = android::AndroidRuntime::registerNativeMethods(env, name, array, SK_ARRAY_COUNT(array)); \ - if (result < 0) return result - int register_android_graphics_MaskFilter(JNIEnv* env) { - int result; - - REG(env, "android/graphics/MaskFilter", gMaskFilterMethods); - REG(env, "android/graphics/BlurMaskFilter", gBlurMaskFilterMethods); - REG(env, "android/graphics/EmbossMaskFilter", gEmbossMaskFilterMethods); - REG(env, "android/graphics/TableMaskFilter", gTableMaskFilterMethods); + android::RegisterMethodsOrDie(env, "android/graphics/MaskFilter", gMaskFilterMethods, + NELEM(gMaskFilterMethods)); + android::RegisterMethodsOrDie(env, "android/graphics/BlurMaskFilter", gBlurMaskFilterMethods, + NELEM(gBlurMaskFilterMethods)); + android::RegisterMethodsOrDie(env, "android/graphics/EmbossMaskFilter", + gEmbossMaskFilterMethods, NELEM(gEmbossMaskFilterMethods)); + android::RegisterMethodsOrDie(env, "android/graphics/TableMaskFilter", gTableMaskFilterMethods, + NELEM(gTableMaskFilterMethods)); return 0; } diff --git a/core/jni/android/graphics/Matrix.cpp b/core/jni/android/graphics/Matrix.cpp index cbd20e90105a..43c1dc9c79ff 100644 --- a/core/jni/android/graphics/Matrix.cpp +++ b/core/jni/android/graphics/Matrix.cpp @@ -17,7 +17,7 @@ #include "jni.h" #include "GraphicsJNI.h" -#include <android_runtime/AndroidRuntime.h> +#include <core_jni_helpers.h> #include "SkMatrix.h" #include "SkTemplates.h" @@ -353,11 +353,10 @@ static JNINativeMethod methods[] = { static jfieldID sNativeInstanceField; int register_android_graphics_Matrix(JNIEnv* env) { - int result = AndroidRuntime::registerNativeMethods(env, "android/graphics/Matrix", methods, - sizeof(methods) / sizeof(methods[0])); + int result = RegisterMethodsOrDie(env, "android/graphics/Matrix", methods, NELEM(methods)); - jclass clazz = env->FindClass("android/graphics/Matrix"); - sNativeInstanceField = env->GetFieldID(clazz, "native_instance", "J"); + jclass clazz = FindClassOrDie(env, "android/graphics/Matrix"); + sNativeInstanceField = GetFieldIDOrDie(env, clazz, "native_instance", "J"); return result; } diff --git a/core/jni/android/graphics/Matrix.h b/core/jni/android/graphics/Matrix.h index 31edf8822776..11c9e727e362 100644 --- a/core/jni/android/graphics/Matrix.h +++ b/core/jni/android/graphics/Matrix.h @@ -14,8 +14,8 @@ * limitations under the License. */ -#ifndef _ANDROID_GRAPHICS_MATRIX_H -#define _ANDROID_GRAPHICS_MATRIX_H +#ifndef _ANDROID_GRAPHICS_MATRIX_H_ +#define _ANDROID_GRAPHICS_MATRIX_H_ #include "jni.h" #include "SkMatrix.h" @@ -27,4 +27,4 @@ extern SkMatrix* android_graphics_Matrix_getSkMatrix(JNIEnv* env, jobject matrix } // namespace android -#endif // _ANDROID_GRAPHICS_MATRIX_H +#endif // _ANDROID_GRAPHICS_MATRIX_H_ diff --git a/core/jni/android/graphics/MinikinSkia.h b/core/jni/android/graphics/MinikinSkia.h index 255617e56ad1..a06428d26e5e 100644 --- a/core/jni/android/graphics/MinikinSkia.h +++ b/core/jni/android/graphics/MinikinSkia.h @@ -14,8 +14,8 @@ * limitations under the License. */ -#ifndef ANDROID_MINIKIN_SKIA_H -#define ANDROID_MINIKIN_SKIA_H +#ifndef _ANDROID_GRAPHICS_MINIKIN_SKIA_H_ +#define _ANDROID_GRAPHICS_MINIKIN_SKIA_H_ #include <minikin/MinikinFont.h> @@ -54,4 +54,4 @@ private: } // namespace android -#endif // ANDROID_MINIKIN_SKIA_H
\ No newline at end of file +#endif // _ANDROID_GRAPHICS_MINIKIN_SKIA_H_
\ No newline at end of file diff --git a/core/jni/android/graphics/MinikinUtils.cpp b/core/jni/android/graphics/MinikinUtils.cpp index f64ad7d4f3a2..7dabf6bcd42a 100644 --- a/core/jni/android/graphics/MinikinUtils.cpp +++ b/core/jni/android/graphics/MinikinUtils.cpp @@ -26,18 +26,6 @@ namespace android { -// Do an sprintf starting at offset n, abort on overflow -static int snprintfcat(char* buf, int off, int size, const char* format, ...) - __attribute__((__format__(__printf__, 4, 5))); -static int snprintfcat(char* buf, int off, int size, const char* format, ...) { - va_list args; - va_start(args, format); - int n = vsnprintf(buf + off, size - off, format, args); - LOG_ALWAYS_FATAL_IF(n >= size - off, "String overflow in setting layout properties"); - va_end(args); - return off + n; -} - void MinikinUtils::doLayout(Layout* layout, const Paint* paint, int bidiFlags, TypefaceImpl* typeface, const uint16_t* buf, size_t start, size_t count, size_t bufSize) { TypefaceImpl* resolvedFace = TypefaceImpl_resolveDefault(typeface); diff --git a/core/jni/android/graphics/MinikinUtils.h b/core/jni/android/graphics/MinikinUtils.h index 3646c1a5c0aa..236f1fd8000e 100644 --- a/core/jni/android/graphics/MinikinUtils.h +++ b/core/jni/android/graphics/MinikinUtils.h @@ -21,8 +21,8 @@ // TODO: does this really need to be separate from MinikinSkia? -#ifndef ANDROID_MINIKIN_UTILS_H -#define ANDROID_MINIKIN_UTILS_H +#ifndef _ANDROID_GRAPHICS_MINIKIN_UTILS_H_ +#define _ANDROID_GRAPHICS_MINIKIN_UTILS_H_ #include <minikin/Layout.h> #include "Paint.h" @@ -81,4 +81,4 @@ public: } // namespace android -#endif // ANDROID_MINIKIN_UTILS_H +#endif // _ANDROID_GRAPHICS_MINIKIN_UTILS_H_ diff --git a/core/jni/android/graphics/Movie.cpp b/core/jni/android/graphics/Movie.cpp index 226f83e57def..b25fa848b777 100644 --- a/core/jni/android/graphics/Movie.cpp +++ b/core/jni/android/graphics/Movie.cpp @@ -13,11 +13,7 @@ #include <androidfw/ResourceTypes.h> #include <netinet/in.h> -#if 0 - #define TRACE_BITMAP(code) code -#else - #define TRACE_BITMAP(code) -#endif +#include "core_jni_helpers.h" static jclass gMovie_class; static jmethodID gMovie_constructorMethodID; @@ -138,8 +134,6 @@ static void movie_destructor(JNIEnv* env, jobject, jlong movieHandle) { ////////////////////////////////////////////////////////////////////////////////////////////// -#include <android_runtime/AndroidRuntime.h> - static JNINativeMethod gMethods[] = { { "width", "()I", (void*)movie_width }, { "height", "()I", (void*)movie_height }, @@ -157,22 +151,14 @@ static JNINativeMethod gMethods[] = { (void*)movie_decodeByteArray }, }; -#define kClassPathName "android/graphics/Movie" - -#define RETURN_ERR_IF_NULL(value) do { if (!(value)) { assert(0); return -1; } } while (false) - int register_android_graphics_Movie(JNIEnv* env) { - gMovie_class = env->FindClass(kClassPathName); - RETURN_ERR_IF_NULL(gMovie_class); - gMovie_class = (jclass)env->NewGlobalRef(gMovie_class); + gMovie_class = android::FindClassOrDie(env, "android/graphics/Movie"); + gMovie_class = android::MakeGlobalRefOrDie(env, gMovie_class); - gMovie_constructorMethodID = env->GetMethodID(gMovie_class, "<init>", "(J)V"); - RETURN_ERR_IF_NULL(gMovie_constructorMethodID); + gMovie_constructorMethodID = android::GetMethodIDOrDie(env, gMovie_class, "<init>", "(J)V"); - gMovie_nativeInstanceID = env->GetFieldID(gMovie_class, "mNativeMovie", "J"); - RETURN_ERR_IF_NULL(gMovie_nativeInstanceID); + gMovie_nativeInstanceID = android::GetFieldIDOrDie(env, gMovie_class, "mNativeMovie", "J"); - return android::AndroidRuntime::registerNativeMethods(env, kClassPathName, - gMethods, SK_ARRAY_COUNT(gMethods)); + return android::RegisterMethodsOrDie(env, "android/graphics/Movie", gMethods, NELEM(gMethods)); } diff --git a/core/jni/android/graphics/NinePatch.cpp b/core/jni/android/graphics/NinePatch.cpp index cf23771e98b6..c7c5131989fd 100644 --- a/core/jni/android/graphics/NinePatch.cpp +++ b/core/jni/android/graphics/NinePatch.cpp @@ -30,6 +30,7 @@ #include "GraphicsJNI.h" #include "JNIHelp.h" +#include "core_jni_helpers.h" extern void NinePatch_Draw(SkCanvas* canvas, const SkRect& bounds, const SkBitmap& bitmap, const android::Res_png_9patch& chunk, const SkPaint* paint, SkRegion** outRegion); @@ -176,8 +177,6 @@ public: ///////////////////////////////////////////////////////////////////////////////////////// -#include <android_runtime/AndroidRuntime.h> - static JNINativeMethod gNinePatchMethods[] = { { "isNinePatchChunk", "([B)Z", (void*) SkNinePatchGlue::isNinePatchChunk }, { "validateNinePatchChunk", "(J[B)J", (void*) SkNinePatchGlue::validateNinePatchChunk }, @@ -189,6 +188,6 @@ static JNINativeMethod gNinePatchMethods[] = { }; int register_android_graphics_NinePatch(JNIEnv* env) { - return android::AndroidRuntime::registerNativeMethods(env, - "android/graphics/NinePatch", gNinePatchMethods, SK_ARRAY_COUNT(gNinePatchMethods)); + return android::RegisterMethodsOrDie(env, + "android/graphics/NinePatch", gNinePatchMethods, NELEM(gNinePatchMethods)); } diff --git a/core/jni/android/graphics/NinePatchImpl.cpp b/core/jni/android/graphics/NinePatchImpl.cpp index c162c4892d5f..4c589b703b80 100644 --- a/core/jni/android/graphics/NinePatchImpl.cpp +++ b/core/jni/android/graphics/NinePatchImpl.cpp @@ -23,20 +23,16 @@ #include "SkBitmap.h" #include "SkCanvas.h" +#include "SkColorPriv.h" #include "SkNinePatch.h" #include "SkPaint.h" #include "SkUnPreMultiply.h" -#define USE_TRACE - -#ifdef USE_TRACE - static bool gTrace; -#endif - -#include "SkColorPriv.h" - #include <utils/Log.h> +static const bool kUseTrace = true; +static bool gTrace = false; + static bool getColor(const SkBitmap& bitmap, int x, int y, SkColor* c) { switch (bitmap.colorType()) { case kN32_SkColorType: @@ -120,7 +116,7 @@ void NinePatch_Draw(SkCanvas* canvas, const SkRect& bounds, const int32_t* yDivs = chunk.getYDivs(); // if our SkCanvas were back by GL we should enable this and draw this as // a mesh, which will be faster in most cases. - if (false) { + if ((false)) { SkNinePatch::DrawMesh(canvas, bounds, bitmap, xDivs, chunk.numXDivs, yDivs, chunk.numYDivs, @@ -128,37 +124,34 @@ void NinePatch_Draw(SkCanvas* canvas, const SkRect& bounds, return; } -#ifdef USE_TRACE - gTrace = true; -#endif + if (kUseTrace) { + gTrace = true; + } SkASSERT(canvas || outRegion); -#ifdef USE_TRACE - if (canvas) { - const SkMatrix& m = canvas->getTotalMatrix(); - ALOGV("ninepatch [%g %g %g] [%g %g %g]\n", - SkScalarToFloat(m[0]), SkScalarToFloat(m[1]), SkScalarToFloat(m[2]), - SkScalarToFloat(m[3]), SkScalarToFloat(m[4]), SkScalarToFloat(m[5])); - } -#endif + if (kUseTrace) { + if (canvas) { + const SkMatrix& m = canvas->getTotalMatrix(); + ALOGV("ninepatch [%g %g %g] [%g %g %g]\n", + SkScalarToFloat(m[0]), SkScalarToFloat(m[1]), SkScalarToFloat(m[2]), + SkScalarToFloat(m[3]), SkScalarToFloat(m[4]), SkScalarToFloat(m[5])); + } -#ifdef USE_TRACE - if (gTrace) { - ALOGV("======== ninepatch bounds [%g %g]\n", SkScalarToFloat(bounds.width()), SkScalarToFloat(bounds.height())); + ALOGV("======== ninepatch bounds [%g %g]\n", SkScalarToFloat(bounds.width()), + SkScalarToFloat(bounds.height())); ALOGV("======== ninepatch paint bm [%d,%d]\n", bitmap.width(), bitmap.height()); ALOGV("======== ninepatch xDivs [%d,%d]\n", xDivs[0], xDivs[1]); ALOGV("======== ninepatch yDivs [%d,%d]\n", yDivs[0], yDivs[1]); } -#endif if (bounds.isEmpty() || bitmap.width() == 0 || bitmap.height() == 0 || (paint && paint->getXfermode() == NULL && paint->getAlpha() == 0)) { -#ifdef USE_TRACE - if (gTrace) ALOGV("======== abort ninepatch draw\n"); -#endif + if (kUseTrace) { + ALOGV("======== abort ninepatch draw\n"); + } return; } @@ -202,13 +195,13 @@ void NinePatch_Draw(SkCanvas* canvas, const SkRect& bounds, } int numFixedYPixelsRemaining = bitmapHeight - numStretchyYPixelsRemaining; -#ifdef USE_TRACE - ALOGV("NinePatch [%d %d] bounds [%g %g %g %g] divs [%d %d]\n", - bitmap.width(), bitmap.height(), - SkScalarToFloat(bounds.fLeft), SkScalarToFloat(bounds.fTop), - SkScalarToFloat(bounds.width()), SkScalarToFloat(bounds.height()), - numXDivs, numYDivs); -#endif + if (kUseTrace) { + ALOGV("NinePatch [%d %d] bounds [%g %g %g %g] divs [%d %d]\n", + bitmap.width(), bitmap.height(), + SkScalarToFloat(bounds.fLeft), SkScalarToFloat(bounds.fTop), + SkScalarToFloat(bounds.width()), SkScalarToFloat(bounds.height()), + numXDivs, numYDivs); + } src.fTop = 0; dst.fTop = bounds.fTop; @@ -307,15 +300,15 @@ void NinePatch_Draw(SkCanvas* canvas, const SkRect& bounds, goto nextDiv; } if (canvas) { -#ifdef USE_TRACE - ALOGV("-- src [%d %d %d %d] dst [%g %g %g %g]\n", - src.fLeft, src.fTop, src.width(), src.height(), - SkScalarToFloat(dst.fLeft), SkScalarToFloat(dst.fTop), - SkScalarToFloat(dst.width()), SkScalarToFloat(dst.height())); - if (2 == src.width() && SkIntToScalar(5) == dst.width()) { - ALOGV("--- skip patch\n"); + if (kUseTrace) { + ALOGV("-- src [%d %d %d %d] dst [%g %g %g %g]\n", + src.fLeft, src.fTop, src.width(), src.height(), + SkScalarToFloat(dst.fLeft), SkScalarToFloat(dst.fTop), + SkScalarToFloat(dst.width()), SkScalarToFloat(dst.height())); + if (2 == src.width() && SkIntToScalar(5) == dst.width()) { + ALOGV("--- skip patch\n"); + } } -#endif drawStretchyPatch(canvas, src, dst, bitmap, *paint, initColor, color, hasXfer); } diff --git a/core/jni/android/graphics/NinePatchPeeker.h b/core/jni/android/graphics/NinePatchPeeker.h index 7c18b2db8d8f..2d49b38f8e78 100644 --- a/core/jni/android/graphics/NinePatchPeeker.h +++ b/core/jni/android/graphics/NinePatchPeeker.h @@ -14,8 +14,8 @@ * limitations under the License. */ -#ifndef NinePatchPeeker_h -#define NinePatchPeeker_h +#ifndef _ANDROID_GRAPHICS_NINE_PATCH_PEEKER_H_ +#define _ANDROID_GRAPHICS_NINE_PATCH_PEEKER_H_ #include "SkImageDecoder.h" #include <androidfw/ResourceTypes.h> @@ -53,4 +53,4 @@ public: uint8_t mOutlineAlpha; }; -#endif // NinePatchPeeker_h +#endif // _ANDROID_GRAPHICS_NINE_PATCH_PEEKER_H_ diff --git a/core/jni/android/graphics/Paint.cpp b/core/jni/android/graphics/Paint.cpp index 4bb31fcd169c..8b5a73057a94 100644 --- a/core/jni/android/graphics/Paint.cpp +++ b/core/jni/android/graphics/Paint.cpp @@ -21,7 +21,7 @@ #include "jni.h" #include "GraphicsJNI.h" -#include <android_runtime/AndroidRuntime.h> +#include "core_jni_helpers.h" #include <ScopedUtfChars.h> #include "SkBlurDrawLooper.h" @@ -1018,35 +1018,26 @@ static JNINativeMethod methods[] = { {"native_hasShadowLayer", "(J)Z", (void*)PaintGlue::hasShadowLayer} }; -static jfieldID req_fieldID(jfieldID id) { - SkASSERT(id); - return id; -} - int register_android_graphics_Paint(JNIEnv* env) { - gFontMetrics_class = env->FindClass("android/graphics/Paint$FontMetrics"); - SkASSERT(gFontMetrics_class); - gFontMetrics_class = (jclass)env->NewGlobalRef(gFontMetrics_class); - - gFontMetrics_fieldID.top = req_fieldID(env->GetFieldID(gFontMetrics_class, "top", "F")); - gFontMetrics_fieldID.ascent = req_fieldID(env->GetFieldID(gFontMetrics_class, "ascent", "F")); - gFontMetrics_fieldID.descent = req_fieldID(env->GetFieldID(gFontMetrics_class, "descent", "F")); - gFontMetrics_fieldID.bottom = req_fieldID(env->GetFieldID(gFontMetrics_class, "bottom", "F")); - gFontMetrics_fieldID.leading = req_fieldID(env->GetFieldID(gFontMetrics_class, "leading", "F")); - - gFontMetricsInt_class = env->FindClass("android/graphics/Paint$FontMetricsInt"); - SkASSERT(gFontMetricsInt_class); - gFontMetricsInt_class = (jclass)env->NewGlobalRef(gFontMetricsInt_class); - - gFontMetricsInt_fieldID.top = req_fieldID(env->GetFieldID(gFontMetricsInt_class, "top", "I")); - gFontMetricsInt_fieldID.ascent = req_fieldID(env->GetFieldID(gFontMetricsInt_class, "ascent", "I")); - gFontMetricsInt_fieldID.descent = req_fieldID(env->GetFieldID(gFontMetricsInt_class, "descent", "I")); - gFontMetricsInt_fieldID.bottom = req_fieldID(env->GetFieldID(gFontMetricsInt_class, "bottom", "I")); - gFontMetricsInt_fieldID.leading = req_fieldID(env->GetFieldID(gFontMetricsInt_class, "leading", "I")); - - int result = AndroidRuntime::registerNativeMethods(env, "android/graphics/Paint", methods, - sizeof(methods) / sizeof(methods[0])); - return result; + gFontMetrics_class = FindClassOrDie(env, "android/graphics/Paint$FontMetrics"); + gFontMetrics_class = MakeGlobalRefOrDie(env, gFontMetrics_class); + + gFontMetrics_fieldID.top = GetFieldIDOrDie(env, gFontMetrics_class, "top", "F"); + gFontMetrics_fieldID.ascent = GetFieldIDOrDie(env, gFontMetrics_class, "ascent", "F"); + gFontMetrics_fieldID.descent = GetFieldIDOrDie(env, gFontMetrics_class, "descent", "F"); + gFontMetrics_fieldID.bottom = GetFieldIDOrDie(env, gFontMetrics_class, "bottom", "F"); + gFontMetrics_fieldID.leading = GetFieldIDOrDie(env, gFontMetrics_class, "leading", "F"); + + gFontMetricsInt_class = FindClassOrDie(env, "android/graphics/Paint$FontMetricsInt"); + gFontMetricsInt_class = MakeGlobalRefOrDie(env, gFontMetricsInt_class); + + gFontMetricsInt_fieldID.top = GetFieldIDOrDie(env, gFontMetricsInt_class, "top", "I"); + gFontMetricsInt_fieldID.ascent = GetFieldIDOrDie(env, gFontMetricsInt_class, "ascent", "I"); + gFontMetricsInt_fieldID.descent = GetFieldIDOrDie(env, gFontMetricsInt_class, "descent", "I"); + gFontMetricsInt_fieldID.bottom = GetFieldIDOrDie(env, gFontMetricsInt_class, "bottom", "I"); + gFontMetricsInt_fieldID.leading = GetFieldIDOrDie(env, gFontMetricsInt_class, "leading", "I"); + + return RegisterMethodsOrDie(env, "android/graphics/Paint", methods, NELEM(methods)); } } diff --git a/core/jni/android/graphics/Paint.h b/core/jni/android/graphics/Paint.h index a20bb4b8f314..fa539f5b8452 100644 --- a/core/jni/android/graphics/Paint.h +++ b/core/jni/android/graphics/Paint.h @@ -14,8 +14,8 @@ * limitations under the License. */ -#ifndef ANDROID_GRAPHICS_PAINT_H -#define ANDROID_GRAPHICS_PAINT_H +#ifndef ANDROID_GRAPHICS_PAINT_H_ +#define ANDROID_GRAPHICS_PAINT_H_ #include <SkPaint.h> #include <string> @@ -78,4 +78,4 @@ private: } // namespace android -#endif // ANDROID_GRAPHICS_PAINT_H +#endif // ANDROID_GRAPHICS_PAINT_H_ diff --git a/core/jni/android/graphics/Path.cpp b/core/jni/android/graphics/Path.cpp index 9d3e74b6ba46..ad46053ffaf1 100644 --- a/core/jni/android/graphics/Path.cpp +++ b/core/jni/android/graphics/Path.cpp @@ -22,7 +22,7 @@ #include "jni.h" #include "GraphicsJNI.h" -#include <android_runtime/AndroidRuntime.h> +#include "core_jni_helpers.h" #include "SkPath.h" #include "SkPathOps.h" @@ -520,9 +520,7 @@ static JNINativeMethod methods[] = { }; int register_android_graphics_Path(JNIEnv* env) { - int result = AndroidRuntime::registerNativeMethods(env, "android/graphics/Path", methods, - sizeof(methods) / sizeof(methods[0])); - return result; + return RegisterMethodsOrDie(env, "android/graphics/Path", methods, NELEM(methods)); } } diff --git a/core/jni/android/graphics/PathEffect.cpp b/core/jni/android/graphics/PathEffect.cpp index 28d881d38f62..9d0f0ad68755 100644 --- a/core/jni/android/graphics/PathEffect.cpp +++ b/core/jni/android/graphics/PathEffect.cpp @@ -1,6 +1,8 @@ #include <jni.h> #include "GraphicsJNI.h" +#include "core_jni_helpers.h" + #include "SkPathEffect.h" #include "SkCornerPathEffect.h" #include "SkDashPathEffect.h" @@ -97,24 +99,22 @@ static JNINativeMethod gDiscretePathEffectMethods[] = { { "nativeCreate", "(FF)J", (void*)SkPathEffectGlue::Discrete_constructor } }; -#include <android_runtime/AndroidRuntime.h> - -#define REG(env, name, array) \ - result = android::AndroidRuntime::registerNativeMethods(env, name, array, \ - SK_ARRAY_COUNT(array)); \ - if (result < 0) return result - int register_android_graphics_PathEffect(JNIEnv* env) { - int result; - - REG(env, "android/graphics/PathEffect", gPathEffectMethods); - REG(env, "android/graphics/ComposePathEffect", gComposePathEffectMethods); - REG(env, "android/graphics/SumPathEffect", gSumPathEffectMethods); - REG(env, "android/graphics/DashPathEffect", gDashPathEffectMethods); - REG(env, "android/graphics/PathDashPathEffect", gPathDashPathEffectMethods); - REG(env, "android/graphics/CornerPathEffect", gCornerPathEffectMethods); - REG(env, "android/graphics/DiscretePathEffect", gDiscretePathEffectMethods); + android::RegisterMethodsOrDie(env, "android/graphics/PathEffect", gPathEffectMethods, + NELEM(gPathEffectMethods)); + android::RegisterMethodsOrDie(env, "android/graphics/ComposePathEffect", + gComposePathEffectMethods, NELEM(gComposePathEffectMethods)); + android::RegisterMethodsOrDie(env, "android/graphics/SumPathEffect", gSumPathEffectMethods, + NELEM(gSumPathEffectMethods)); + android::RegisterMethodsOrDie(env, "android/graphics/DashPathEffect", gDashPathEffectMethods, + NELEM(gDashPathEffectMethods)); + android::RegisterMethodsOrDie(env, "android/graphics/PathDashPathEffect", + gPathDashPathEffectMethods, NELEM(gPathDashPathEffectMethods)); + android::RegisterMethodsOrDie(env, "android/graphics/CornerPathEffect", + gCornerPathEffectMethods, NELEM(gCornerPathEffectMethods)); + android::RegisterMethodsOrDie(env, "android/graphics/DiscretePathEffect", + gDiscretePathEffectMethods, NELEM(gDiscretePathEffectMethods)); return 0; } diff --git a/core/jni/android/graphics/PathMeasure.cpp b/core/jni/android/graphics/PathMeasure.cpp index 13f68a931c58..fec5d9db3a6a 100644 --- a/core/jni/android/graphics/PathMeasure.cpp +++ b/core/jni/android/graphics/PathMeasure.cpp @@ -17,7 +17,7 @@ #include "jni.h" #include "GraphicsJNI.h" -#include <android_runtime/AndroidRuntime.h> +#include <core_jni_helpers.h> #include "SkPathMeasure.h" @@ -156,9 +156,7 @@ static JNINativeMethod methods[] = { }; int register_android_graphics_PathMeasure(JNIEnv* env) { - int result = AndroidRuntime::registerNativeMethods(env, "android/graphics/PathMeasure", methods, - sizeof(methods) / sizeof(methods[0])); - return result; + return RegisterMethodsOrDie(env, "android/graphics/PathMeasure", methods, NELEM(methods)); } } diff --git a/core/jni/android/graphics/Picture.h b/core/jni/android/graphics/Picture.h index a2e5d4a79d17..4db923db2c6f 100644 --- a/core/jni/android/graphics/Picture.h +++ b/core/jni/android/graphics/Picture.h @@ -14,8 +14,8 @@ * limitations under the License. */ -#ifndef ANDROID_GRAPHICS_PICTURE_H -#define ANDROID_GRAPHICS_PICTURE_H +#ifndef ANDROID_GRAPHICS_PICTURE_H_ +#define ANDROID_GRAPHICS_PICTURE_H_ #include "SkPicture.h" #include "SkPictureRecorder.h" @@ -63,4 +63,4 @@ private: }; }; // namespace android -#endif // ANDROID_GRAPHICS_PICTURE_H +#endif // ANDROID_GRAPHICS_PICTURE_H_ diff --git a/core/jni/android/graphics/PorterDuff.cpp b/core/jni/android/graphics/PorterDuff.cpp index 8a49eb5da460..73b169176bf8 100644 --- a/core/jni/android/graphics/PorterDuff.cpp +++ b/core/jni/android/graphics/PorterDuff.cpp @@ -22,7 +22,7 @@ #include "jni.h" #include "GraphicsJNI.h" -#include <android_runtime/AndroidRuntime.h> +#include "core_jni_helpers.h" #include "SkPorterDuff.h" @@ -43,10 +43,7 @@ static JNINativeMethod methods[] = { }; int register_android_graphics_PorterDuff(JNIEnv* env) { - int result = AndroidRuntime::registerNativeMethods(env, - "android/graphics/PorterDuffXfermode", methods, - sizeof(methods) / sizeof(methods[0])); - return result; + return RegisterMethodsOrDie(env, "android/graphics/PorterDuffXfermode", methods, NELEM(methods)); } } diff --git a/core/jni/android/graphics/Rasterizer.cpp b/core/jni/android/graphics/Rasterizer.cpp index 2b1aca1eb110..cfc23ac8ecb3 100644 --- a/core/jni/android/graphics/Rasterizer.cpp +++ b/core/jni/android/graphics/Rasterizer.cpp @@ -24,7 +24,7 @@ #include "GraphicsJNI.h" #include "Paint.h" #include "SkLayerRasterizer.h" -#include <android_runtime/AndroidRuntime.h> +#include "core_jni_helpers.h" // Rasterizer.java holds a pointer (jlong) to this guy class NativeRasterizer { @@ -59,7 +59,6 @@ public: static void finalizer(JNIEnv* env, jobject clazz, jlong objHandle) { delete reinterpret_cast<NativeRasterizer *>(objHandle); } - }; static JNINativeMethod gRasterizerMethods[] = { @@ -67,9 +66,8 @@ static JNINativeMethod gRasterizerMethods[] = { }; int register_android_graphics_Rasterizer(JNIEnv* env) { - int result = AndroidRuntime::registerNativeMethods(env, "android/graphics/Rasterizer", gRasterizerMethods, - sizeof(gRasterizerMethods) / sizeof(gRasterizerMethods[0])); - return result; + return RegisterMethodsOrDie(env, "android/graphics/Rasterizer", gRasterizerMethods, + NELEM(gRasterizerMethods)); } class SkLayerRasterizerGlue { @@ -94,10 +92,8 @@ static JNINativeMethod gLayerRasterizerMethods[] = { int register_android_graphics_LayerRasterizer(JNIEnv* env) { - return android::AndroidRuntime::registerNativeMethods(env, - "android/graphics/LayerRasterizer", - gLayerRasterizerMethods, - SK_ARRAY_COUNT(gLayerRasterizerMethods)); + return RegisterMethodsOrDie(env, "android/graphics/LayerRasterizer", + gLayerRasterizerMethods, NELEM(gLayerRasterizerMethods)); } } diff --git a/core/jni/android/graphics/Region.cpp b/core/jni/android/graphics/Region.cpp index 912968a9da3f..90a020eb5828 100644 --- a/core/jni/android/graphics/Region.cpp +++ b/core/jni/android/graphics/Region.cpp @@ -23,7 +23,7 @@ #include "android_util_Binder.h" #include <jni.h> -#include <android_runtime/AndroidRuntime.h> +#include <core_jni_helpers.h> namespace android { @@ -325,19 +325,13 @@ static JNINativeMethod gRegionMethods[] = { int register_android_graphics_Region(JNIEnv* env) { - jclass clazz = env->FindClass("android/graphics/Region"); - SkASSERT(clazz); + jclass clazz = FindClassOrDie(env, "android/graphics/Region"); - gRegion_nativeInstanceFieldID = env->GetFieldID(clazz, "mNativeRegion", "J"); - SkASSERT(gRegion_nativeInstanceFieldID); + gRegion_nativeInstanceFieldID = GetFieldIDOrDie(env, clazz, "mNativeRegion", "J"); - int result = android::AndroidRuntime::registerNativeMethods(env, "android/graphics/Region", - gRegionMethods, SK_ARRAY_COUNT(gRegionMethods)); - if (result < 0) - return result; - - return android::AndroidRuntime::registerNativeMethods(env, "android/graphics/RegionIterator", - gRegionIterMethods, SK_ARRAY_COUNT(gRegionIterMethods)); + RegisterMethodsOrDie(env, "android/graphics/Region", gRegionMethods, NELEM(gRegionMethods)); + return RegisterMethodsOrDie(env, "android/graphics/RegionIterator", gRegionIterMethods, + NELEM(gRegionIterMethods)); } SkRegion* android_graphics_Region_getSkRegion(JNIEnv* env, jobject regionObj) { diff --git a/core/jni/android/graphics/Region.h b/core/jni/android/graphics/Region.h index c15f06edd3cb..2e8e10977e78 100644 --- a/core/jni/android/graphics/Region.h +++ b/core/jni/android/graphics/Region.h @@ -14,8 +14,8 @@ * limitations under the License. */ -#ifndef _ANDROID_GRAPHICS_REGION_H -#define _ANDROID_GRAPHICS_REGION_H +#ifndef _ANDROID_GRAPHICS_REGION_H_ +#define _ANDROID_GRAPHICS_REGION_H_ #include "jni.h" #include "SkRegion.h" @@ -27,4 +27,4 @@ extern SkRegion* android_graphics_Region_getSkRegion(JNIEnv* env, jobject region } // namespace android -#endif // _ANDROID_GRAPHICS_REGION_H +#endif // _ANDROID_GRAPHICS_REGION_H_ diff --git a/core/jni/android/graphics/RtlProperties.h b/core/jni/android/graphics/RtlProperties.h index d43745fb191a..907dd59b6e68 100644 --- a/core/jni/android/graphics/RtlProperties.h +++ b/core/jni/android/graphics/RtlProperties.h @@ -14,8 +14,8 @@ * limitations under the License. */ -#ifndef ANDROID_RTL_PROPERTIES_H -#define ANDROID_RTL_PROPERTIES_H +#ifndef _ANDROID_GRAPHICS_RTL_PROPERTIES_H_ +#define _ANDROID_GRAPHICS_RTL_PROPERTIES_H_ #include <cutils/properties.h> #include <stdlib.h> @@ -45,11 +45,5 @@ static RtlDebugLevel readRtlDebugLevel() { return kRtlDebugDisabled; } -// Define if we want (1) to have Advances debug values or not (0) -#define DEBUG_ADVANCES 0 - -// Define if we want (1) to have Glyphs debug values or not (0) -#define DEBUG_GLYPHS 0 - } // namespace android -#endif // ANDROID_RTL_PROPERTIES_H +#endif // _ANDROID_GRAPHICS_RTL_PROPERTIES_H_ diff --git a/core/jni/android/graphics/Shader.cpp b/core/jni/android/graphics/Shader.cpp index 6146fff58d50..9ec9c581e533 100644 --- a/core/jni/android/graphics/Shader.cpp +++ b/core/jni/android/graphics/Shader.cpp @@ -11,12 +11,9 @@ #include <SkiaShader.h> #include <Caches.h> -using namespace android::uirenderer; +#include "core_jni_helpers.h" -static struct { - jclass clazz; - jfieldID shader; -} gShaderClassInfo; +using namespace android::uirenderer; static void ThrowIAE_IfNull(JNIEnv* env, void* ptr) { if (NULL == ptr) { @@ -265,23 +262,22 @@ static JNINativeMethod gComposeShaderMethods[] = { { "nativeCreate2", "(JJI)J", (void*)ComposeShader_create2 }, }; -#include <android_runtime/AndroidRuntime.h> - -#define REG(env, name, array) \ - result = android::AndroidRuntime::registerNativeMethods(env, name, array, SK_ARRAY_COUNT(array)); \ - if (result < 0) return result - int register_android_graphics_Shader(JNIEnv* env) { - int result; - - REG(env, "android/graphics/Color", gColorMethods); - REG(env, "android/graphics/Shader", gShaderMethods); - REG(env, "android/graphics/BitmapShader", gBitmapShaderMethods); - REG(env, "android/graphics/LinearGradient", gLinearGradientMethods); - REG(env, "android/graphics/RadialGradient", gRadialGradientMethods); - REG(env, "android/graphics/SweepGradient", gSweepGradientMethods); - REG(env, "android/graphics/ComposeShader", gComposeShaderMethods); - - return result; + android::RegisterMethodsOrDie(env, "android/graphics/Color", gColorMethods, + NELEM(gColorMethods)); + android::RegisterMethodsOrDie(env, "android/graphics/Shader", gShaderMethods, + NELEM(gShaderMethods)); + android::RegisterMethodsOrDie(env, "android/graphics/BitmapShader", gBitmapShaderMethods, + NELEM(gBitmapShaderMethods)); + android::RegisterMethodsOrDie(env, "android/graphics/LinearGradient", gLinearGradientMethods, + NELEM(gLinearGradientMethods)); + android::RegisterMethodsOrDie(env, "android/graphics/RadialGradient", gRadialGradientMethods, + NELEM(gRadialGradientMethods)); + android::RegisterMethodsOrDie(env, "android/graphics/SweepGradient", gSweepGradientMethods, + NELEM(gSweepGradientMethods)); + android::RegisterMethodsOrDie(env, "android/graphics/ComposeShader", gComposeShaderMethods, + NELEM(gComposeShaderMethods)); + + return 0; } diff --git a/core/jni/android/graphics/SurfaceTexture.cpp b/core/jni/android/graphics/SurfaceTexture.cpp index eea16f1bcb1d..f06bd214a5cb 100644 --- a/core/jni/android/graphics/SurfaceTexture.cpp +++ b/core/jni/android/graphics/SurfaceTexture.cpp @@ -24,7 +24,7 @@ #include <gui/GLConsumer.h> #include <gui/Surface.h> -#include <android_runtime/AndroidRuntime.h> +#include "core_jni_helpers.h" #include <utils/Log.h> #include <utils/misc.h> @@ -359,10 +359,8 @@ static JNINativeMethod gSurfaceTextureMethods[] = { int register_android_graphics_SurfaceTexture(JNIEnv* env) { - int err = 0; - err = AndroidRuntime::registerNativeMethods(env, kSurfaceTextureClassPathName, - gSurfaceTextureMethods, NELEM(gSurfaceTextureMethods)); - return err; + return RegisterMethodsOrDie(env, kSurfaceTextureClassPathName, gSurfaceTextureMethods, + NELEM(gSurfaceTextureMethods)); } } // namespace android diff --git a/core/jni/android/graphics/Typeface.cpp b/core/jni/android/graphics/Typeface.cpp index 2029658e033d..808ae2c2de50 100644 --- a/core/jni/android/graphics/Typeface.cpp +++ b/core/jni/android/graphics/Typeface.cpp @@ -15,7 +15,7 @@ */ #include "jni.h" -#include <android_runtime/AndroidRuntime.h> +#include "core_jni_helpers.h" #include "GraphicsJNI.h" #include <ScopedPrimitiveArray.h> @@ -81,8 +81,6 @@ static JNINativeMethod gTypefaceMethods[] = { int register_android_graphics_Typeface(JNIEnv* env) { - return android::AndroidRuntime::registerNativeMethods(env, - "android/graphics/Typeface", - gTypefaceMethods, - SK_ARRAY_COUNT(gTypefaceMethods)); + return RegisterMethodsOrDie(env, "android/graphics/Typeface", gTypefaceMethods, + NELEM(gTypefaceMethods)); } diff --git a/core/jni/android/graphics/TypefaceImpl.h b/core/jni/android/graphics/TypefaceImpl.h index d129f6217b62..d36f83a1636d 100644 --- a/core/jni/android/graphics/TypefaceImpl.h +++ b/core/jni/android/graphics/TypefaceImpl.h @@ -15,8 +15,8 @@ */ -#ifndef ANDROID_TYPEFACE_IMPL_H -#define ANDROID_TYPEFACE_IMPL_H +#ifndef _ANDROID_GRAPHICS_TYPEFACE_IMPL_H_ +#define _ANDROID_GRAPHICS_TYPEFACE_IMPL_H_ #include "jni.h" // for jlong, eventually remove #include "SkTypeface.h" @@ -62,4 +62,4 @@ void TypefaceImpl_setDefault(TypefaceImpl* face); } -#endif // ANDROID_TYPEFACE_IMPL_H
\ No newline at end of file +#endif // _ANDROID_GRAPHICS_TYPEFACE_IMPL_H_
\ No newline at end of file diff --git a/core/jni/android/graphics/Utils.h b/core/jni/android/graphics/Utils.h index b90593cdc4b0..bde87f09f3fc 100644 --- a/core/jni/android/graphics/Utils.h +++ b/core/jni/android/graphics/Utils.h @@ -14,8 +14,8 @@ * limitations under the License. */ -#ifndef UTILS_DEFINED -#define UTILS_DEFINED +#ifndef _ANDROID_GRAPHICS_UTILS_H_ +#define _ANDROID_GRAPHICS_UTILS_H_ #include "SkStream.h" @@ -89,4 +89,4 @@ jobject nullObjectReturn(const char msg[]); }; // namespace android -#endif +#endif // _ANDROID_GRAPHICS_UTILS_H_ diff --git a/core/jni/android/graphics/Xfermode.cpp b/core/jni/android/graphics/Xfermode.cpp index 6bf6f8a6abe9..5a3883a60dce 100644 --- a/core/jni/android/graphics/Xfermode.cpp +++ b/core/jni/android/graphics/Xfermode.cpp @@ -16,7 +16,7 @@ #include "jni.h" #include "GraphicsJNI.h" -#include <android_runtime/AndroidRuntime.h> +#include "core_jni_helpers.h" #include "SkAvoidXfermode.h" #include "SkPixelXorXfermode.h" @@ -59,19 +59,15 @@ static JNINativeMethod gPixelXorMethods[] = { {"nativeCreate", "(I)J", (void*) SkXfermodeGlue::pixelxor_create} }; -#include <android_runtime/AndroidRuntime.h> - -#define REG(env, name, array) \ - result = android::AndroidRuntime::registerNativeMethods(env, name, array, \ - SK_ARRAY_COUNT(array)); \ - if (result < 0) return result - int register_android_graphics_Xfermode(JNIEnv* env) { - int result; - - REG(env, "android/graphics/Xfermode", gXfermodeMethods); - REG(env, "android/graphics/AvoidXfermode", gAvoidMethods); - REG(env, "android/graphics/PixelXorXfermode", gPixelXorMethods); + android::RegisterMethodsOrDie(env, "android/graphics/Xfermode", gXfermodeMethods, + NELEM(gXfermodeMethods)); + android::RegisterMethodsOrDie(env, "android/graphics/Xfermode", gXfermodeMethods, + NELEM(gXfermodeMethods)); + android::RegisterMethodsOrDie(env, "android/graphics/AvoidXfermode", gAvoidMethods, + NELEM(gAvoidMethods)); + android::RegisterMethodsOrDie(env, "android/graphics/PixelXorXfermode", gPixelXorMethods, + NELEM(gPixelXorMethods)); return 0; } diff --git a/core/jni/android/graphics/YuvToJpegEncoder.cpp b/core/jni/android/graphics/YuvToJpegEncoder.cpp index 6591d60b1eec..5eede2aee286 100644 --- a/core/jni/android/graphics/YuvToJpegEncoder.cpp +++ b/core/jni/android/graphics/YuvToJpegEncoder.cpp @@ -4,6 +4,8 @@ #include <ui/PixelFormat.h> #include <hardware/hardware.h> +#include "core_jni_helpers.h" + #include <jni.h> YuvToJpegEncoder* YuvToJpegEncoder::create(int format, int* strides) { @@ -236,21 +238,18 @@ static jboolean YuvImage_compressToJpeg(JNIEnv* env, jobject, jbyteArray inYuv, env->ReleaseByteArrayElements(inYuv, yuv, 0); env->ReleaseIntArrayElements(offsets, imgOffsets, 0); env->ReleaseIntArrayElements(strides, imgStrides, 0); + delete strm; return result; } /////////////////////////////////////////////////////////////////////////////// -#include <android_runtime/AndroidRuntime.h> - static JNINativeMethod gYuvImageMethods[] = { { "nativeCompressToJpeg", "([BIII[I[IILjava/io/OutputStream;[B)Z", (void*)YuvImage_compressToJpeg } }; -#define kClassPathName "android/graphics/YuvImage" - int register_android_graphics_YuvImage(JNIEnv* env) { - return android::AndroidRuntime::registerNativeMethods(env, kClassPathName, - gYuvImageMethods, SK_ARRAY_COUNT(gYuvImageMethods)); + return android::RegisterMethodsOrDie(env, "android/graphics/YuvImage", gYuvImageMethods, + NELEM(gYuvImageMethods)); } diff --git a/core/jni/android/graphics/YuvToJpegEncoder.h b/core/jni/android/graphics/YuvToJpegEncoder.h index 0d418ed38a38..1ea844ae3eb6 100644 --- a/core/jni/android/graphics/YuvToJpegEncoder.h +++ b/core/jni/android/graphics/YuvToJpegEncoder.h @@ -1,5 +1,5 @@ -#ifndef YuvToJpegEncoder_DEFINED -#define YuvToJpegEncoder_DEFINED +#ifndef _ANDROID_GRAPHICS_YUV_TO_JPEG_ENCODER_H_ +#define _ANDROID_GRAPHICS_YUV_TO_JPEG_ENCODER_H_ #include "SkTypes.h" #include "SkStream.h" @@ -47,16 +47,16 @@ protected: class Yuv420SpToJpegEncoder : public YuvToJpegEncoder { public: - Yuv420SpToJpegEncoder(int* strides); - virtual ~Yuv420SpToJpegEncoder() {} + Yuv420SpToJpegEncoder(int* strides); + virtual ~Yuv420SpToJpegEncoder() {} private: - void configSamplingFactors(jpeg_compress_struct* cinfo); - void deinterleaveYuv(uint8_t* yuv, int width, int height, + void configSamplingFactors(jpeg_compress_struct* cinfo); + void deinterleaveYuv(uint8_t* yuv, int width, int height, uint8_t*& yPlanar, uint8_t*& uPlanar, uint8_t*& vPlanar); - void deinterleave(uint8_t* vuPlanar, uint8_t* uRows, uint8_t* vRows, - int rowIndex, int width, int height); - void compress(jpeg_compress_struct* cinfo, uint8_t* yuv, int* offsets); + void deinterleave(uint8_t* vuPlanar, uint8_t* uRows, uint8_t* vRows, + int rowIndex, int width, int height); + void compress(jpeg_compress_struct* cinfo, uint8_t* yuv, int* offsets); }; class Yuv422IToJpegEncoder : public YuvToJpegEncoder { @@ -71,4 +71,4 @@ private: uint8_t* vRows, int rowIndex, int width, int height); }; -#endif +#endif // _ANDROID_GRAPHICS_YUV_TO_JPEG_ENCODER_H_ diff --git a/core/jni/android/graphics/pdf/PdfDocument.cpp b/core/jni/android/graphics/pdf/PdfDocument.cpp index 9436a47705e5..be906124dd46 100644 --- a/core/jni/android/graphics/pdf/PdfDocument.cpp +++ b/core/jni/android/graphics/pdf/PdfDocument.cpp @@ -16,7 +16,7 @@ #include "jni.h" #include "GraphicsJNI.h" -#include <android_runtime/AndroidRuntime.h> +#include "core_jni_helpers.h" #include <vector> #include "Canvas.h" @@ -164,10 +164,9 @@ static JNINativeMethod gPdfDocument_Methods[] = { }; int register_android_graphics_pdf_PdfDocument(JNIEnv* env) { - int result = android::AndroidRuntime::registerNativeMethods( + return RegisterMethodsOrDie( env, "android/graphics/pdf/PdfDocument", gPdfDocument_Methods, NELEM(gPdfDocument_Methods)); - return result; } }; diff --git a/core/jni/android/graphics/pdf/PdfEditor.cpp b/core/jni/android/graphics/pdf/PdfEditor.cpp index 5f60c9e3bfc8..a1196afc6eaf 100644 --- a/core/jni/android/graphics/pdf/PdfEditor.cpp +++ b/core/jni/android/graphics/pdf/PdfEditor.cpp @@ -20,7 +20,7 @@ #include "fpdfedit.h" #include "fpdfsave.h" -#include <android_runtime/AndroidRuntime.h> +#include <core_jni_helpers.h> #include <vector> #include <utils/Log.h> #include <unistd.h> @@ -72,8 +72,8 @@ static jlong nativeOpen(JNIEnv* env, jclass thiz, jint fd, jlong size) { if (!document) { const long error = FPDF_GetLastError(); - jniThrowException(env, "java/io/IOException", - "cannot create document. Error:" + error); + jniThrowExceptionFmt(env, "java/io/IOException", + "cannot create document. Error: %ld", error); destroyLibraryIfNeeded(); return -1; } @@ -124,7 +124,7 @@ static bool writeAllBytes(const int fd, const void* buffer, const size_t byteCou static int writeBlock(FPDF_FILEWRITE* owner, const void* buffer, unsigned long size) { const PdfToFdWriter* writer = reinterpret_cast<PdfToFdWriter*>(owner); const bool success = writeAllBytes(writer->dstFd, buffer, size); - if (success < 0) { + if (!success) { ALOGE("Cannot write to file descriptor. Error:%d", errno); return 0; } @@ -138,8 +138,8 @@ static void nativeWrite(JNIEnv* env, jclass thiz, jlong documentPtr, jint fd) { writer.WriteBlock = &writeBlock; const bool success = FPDF_SaveAsCopy(document, &writer, FPDF_NO_INCREMENTAL); if (!success) { - jniThrowException(env, "java/io/IOException", - "cannot write to fd. Error:" + errno); + jniThrowExceptionFmt(env, "java/io/IOException", + "cannot write to fd. Error: %d", errno); destroyLibraryIfNeeded(); } } @@ -153,7 +153,7 @@ static JNINativeMethod gPdfEditor_Methods[] = { }; int register_android_graphics_pdf_PdfEditor(JNIEnv* env) { - return android::AndroidRuntime::registerNativeMethods( + return android::RegisterMethodsOrDie( env, "android/graphics/pdf/PdfEditor", gPdfEditor_Methods, NELEM(gPdfEditor_Methods)); }; diff --git a/core/jni/android/graphics/pdf/PdfRenderer.cpp b/core/jni/android/graphics/pdf/PdfRenderer.cpp index 303ddea9d1ab..bb729eaf4177 100644 --- a/core/jni/android/graphics/pdf/PdfRenderer.cpp +++ b/core/jni/android/graphics/pdf/PdfRenderer.cpp @@ -20,9 +20,13 @@ #include "SkBitmap.h" #include "SkMatrix.h" #include "fpdfview.h" + +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wdelete-non-virtual-dtor" #include "fsdk_rendercontext.h" +#pragma GCC diagnostic pop -#include <android_runtime/AndroidRuntime.h> +#include "core_jni_helpers.h" #include <vector> #include <utils/Log.h> #include <unistd.h> @@ -82,8 +86,8 @@ static jlong nativeCreate(JNIEnv* env, jclass thiz, jint fd, jlong size) { if (!document) { const long error = FPDF_GetLastError(); - jniThrowException(env, "java/io/IOException", - "cannot create document. Error:" + error); + jniThrowExceptionFmt(env, "java/io/IOException", + "cannot create document. Error: %ld", error); destroyLibraryIfNeeded(); return -1; } @@ -228,7 +232,6 @@ static void nativeRenderPage(JNIEnv* env, jclass thiz, jlong documentPtr, jlong jlong bitmapPtr, jint destLeft, jint destTop, jint destRight, jint destBottom, jlong matrixPtr, jint renderMode) { - FPDF_DOCUMENT document = reinterpret_cast<FPDF_DOCUMENT>(documentPtr); FPDF_PAGE page = reinterpret_cast<FPDF_PAGE>(pagePtr); SkBitmap* skBitmap = reinterpret_cast<SkBitmap*>(bitmapPtr); SkMatrix* skMatrix = reinterpret_cast<SkMatrix*>(matrixPtr); @@ -270,13 +273,13 @@ static JNINativeMethod gPdfRenderer_Methods[] = { }; int register_android_graphics_pdf_PdfRenderer(JNIEnv* env) { - int result = android::AndroidRuntime::registerNativeMethods( + int result = RegisterMethodsOrDie( env, "android/graphics/pdf/PdfRenderer", gPdfRenderer_Methods, NELEM(gPdfRenderer_Methods)); - jclass clazz = env->FindClass("android/graphics/Point"); - gPointClassInfo.x = env->GetFieldID(clazz, "x", "I"); - gPointClassInfo.y = env->GetFieldID(clazz, "y", "I"); + jclass clazz = FindClassOrDie(env, "android/graphics/Point"); + gPointClassInfo.x = GetFieldIDOrDie(env, clazz, "x", "I"); + gPointClassInfo.y = GetFieldIDOrDie(env, clazz, "y", "I"); return result; }; diff --git a/core/jni/android/opengl/poly_clip.cpp b/core/jni/android/opengl/poly_clip.cpp index 04e4b17ac627..5c652205b223 100644 --- a/core/jni/android/opengl/poly_clip.cpp +++ b/core/jni/android/opengl/poly_clip.cpp @@ -58,7 +58,6 @@ namespace android { void poly_clip_to_halfspace(Poly* p, Poly* q, int index, float sign, float k) { - unsigned long m; float *up, *vp, *wp; Poly_vert *v; int i; diff --git a/core/jni/android/opengl/util.cpp b/core/jni/android/opengl/util.cpp index 89baef8603ce..da30044ce782 100644 --- a/core/jni/android/opengl/util.cpp +++ b/core/jni/android/opengl/util.cpp @@ -29,7 +29,7 @@ #include <SkBitmap.h> -#include "android_runtime/AndroidRuntime.h" +#include "core_jni_helpers.h" #undef LOG_TAG #define LOG_TAG "OpenGLUtil" @@ -471,13 +471,13 @@ static void multiplyMM(float* r, const float* lhs, const float* rhs) { for (int i=0 ; i<4 ; i++) { - register const float rhs_i0 = rhs[ I(i,0) ]; - register float ri0 = lhs[ I(0,0) ] * rhs_i0; - register float ri1 = lhs[ I(0,1) ] * rhs_i0; - register float ri2 = lhs[ I(0,2) ] * rhs_i0; - register float ri3 = lhs[ I(0,3) ] * rhs_i0; + const float rhs_i0 = rhs[ I(i,0) ]; + float ri0 = lhs[ I(0,0) ] * rhs_i0; + float ri1 = lhs[ I(0,1) ] * rhs_i0; + float ri2 = lhs[ I(0,2) ] * rhs_i0; + float ri3 = lhs[ I(0,3) ] * rhs_i0; for (int j=1 ; j<4 ; j++) { - register const float rhs_ij = rhs[ I(i,j) ]; + const float rhs_ij = rhs[ I(i,j) ]; ri0 += lhs[ I(j,0) ] * rhs_ij; ri1 += lhs[ I(j,1) ] * rhs_ij; ri2 += lhs[ I(j,2) ] * rhs_ij; @@ -732,24 +732,22 @@ static jfieldID elementSizeShiftID; /* Cache method IDs each time the class is loaded. */ static void -nativeClassInitBuffer(JNIEnv *_env) +nativeClassInitBuffer(JNIEnv *env) { - jclass nioAccessClassLocal = _env->FindClass("java/nio/NIOAccess"); - nioAccessClass = (jclass) _env->NewGlobalRef(nioAccessClassLocal); - - jclass bufferClassLocal = _env->FindClass("java/nio/Buffer"); - bufferClass = (jclass) _env->NewGlobalRef(bufferClassLocal); - - getBasePointerID = _env->GetStaticMethodID(nioAccessClass, + jclass nioAccessClassLocal = FindClassOrDie(env, "java/nio/NIOAccess"); + nioAccessClass = MakeGlobalRefOrDie(env, nioAccessClassLocal); + getBasePointerID = GetStaticMethodIDOrDie(env, nioAccessClass, "getBasePointer", "(Ljava/nio/Buffer;)J"); - getBaseArrayID = _env->GetStaticMethodID(nioAccessClass, + getBaseArrayID = GetStaticMethodIDOrDie(env, nioAccessClass, "getBaseArray", "(Ljava/nio/Buffer;)Ljava/lang/Object;"); - getBaseArrayOffsetID = _env->GetStaticMethodID(nioAccessClass, + getBaseArrayOffsetID = GetStaticMethodIDOrDie(env, nioAccessClass, "getBaseArrayOffset", "(Ljava/nio/Buffer;)I"); - positionID = _env->GetFieldID(bufferClass, "position", "I"); - limitID = _env->GetFieldID(bufferClass, "limit", "I"); - elementSizeShiftID = - _env->GetFieldID(bufferClass, "_elementSizeShift", "I"); + + jclass bufferClassLocal = FindClassOrDie(env, "java/nio/Buffer"); + bufferClass = MakeGlobalRefOrDie(env, bufferClassLocal); + positionID = GetFieldIDOrDie(env, bufferClass, "position", "I"); + limitID = GetFieldIDOrDie(env, bufferClass, "limit", "I"); + elementSizeShiftID = GetFieldIDOrDie(env, bufferClass, "_elementSizeShift", "I"); } static void * @@ -759,8 +757,6 @@ getPointer(JNIEnv *_env, jobject buffer, jint *remaining) jint limit; jint elementSizeShift; jlong pointer; - jint offset; - void *data; position = _env->GetIntField(buffer, positionID); limit = _env->GetIntField(buffer, limitID); @@ -900,10 +896,8 @@ static void etc1_encodeImage(JNIEnv *env, jclass clazz, } else if (outB.remaining() < encodedImageSize) { doThrowIAE(env, "out's remaining data < encoded image size"); } else { - int result = etc1_encode_image((etc1_byte*) inB.getData(), - width, height, pixelSize, - stride, - (etc1_byte*) outB.getData()); + etc1_encode_image((etc1_byte*) inB.getData(), width, height, pixelSize, stride, + (etc1_byte*) outB.getData()); } } } @@ -933,10 +927,8 @@ static void etc1_decodeImage(JNIEnv *env, jclass clazz, } else if (outB.remaining() < imageSize) { doThrowIAE(env, "out's remaining data < image size"); } else { - int result = etc1_decode_image((etc1_byte*) inB.getData(), - (etc1_byte*) outB.getData(), - width, height, pixelSize, - stride); + etc1_decode_image((etc1_byte*) inB.getData(), (etc1_byte*) outB.getData(), + width, height, pixelSize, stride); } } } @@ -1062,12 +1054,7 @@ int register_android_opengl_classes(JNIEnv* env) int result = 0; for (int i = 0; i < NELEM(gClasses); i++) { ClassRegistrationInfo* cri = &gClasses[i]; - result = AndroidRuntime::registerNativeMethods(env, - cri->classPath, cri->methods, cri->methodCount); - if (result < 0) { - ALOGE("Failed to register %s: %d", cri->classPath, result); - break; - } + result = RegisterMethodsOrDie(env, cri->classPath, cri->methods, cri->methodCount); } return result; } diff --git a/core/jni/android_animation_PropertyValuesHolder.cpp b/core/jni/android_animation_PropertyValuesHolder.cpp index ef1c4eda1d1e..d11774189901 100644 --- a/core/jni/android_animation_PropertyValuesHolder.cpp +++ b/core/jni/android_animation_PropertyValuesHolder.cpp @@ -18,7 +18,7 @@ #include <assert.h> #include "jni.h" -#include <android_runtime/AndroidRuntime.h> +#include "core_jni_helpers.h" #include <utils/misc.h> // ---------------------------------------------------------------------------- @@ -168,8 +168,7 @@ static JNINativeMethod gMethods[] = { int register_android_animation_PropertyValuesHolder(JNIEnv* env) { - return AndroidRuntime::registerNativeMethods(env, - kClassPathName, gMethods, NELEM(gMethods)); + return RegisterMethodsOrDie(env, kClassPathName, gMethods, NELEM(gMethods)); } }; diff --git a/core/jni/android_app_NativeActivity.cpp b/core/jni/android_app_NativeActivity.cpp index 633a207f8ad8..95be3f27b625 100644 --- a/core/jni/android_app_NativeActivity.cpp +++ b/core/jni/android_app_NativeActivity.cpp @@ -40,12 +40,17 @@ #include "nativebridge/native_bridge.h" +#include "core_jni_helpers.h" + + #define LOG_TRACE(...) //#define LOG_TRACE(...) ALOG(LOG_DEBUG, LOG_TAG, __VA_ARGS__) namespace android { +static const bool kLogTrace = false; + static struct { jmethodID finish; jmethodID setWindowFlags; @@ -75,8 +80,10 @@ static void write_work(int fd, int32_t cmd, int32_t arg1=0, int32_t arg2=0) { work.cmd = cmd; work.arg1 = arg1; work.arg2 = arg2; - - LOG_TRACE("write_work: cmd=%d", cmd); + + if (kLogTrace) { + ALOGD("write_work: cmd=%d", cmd); + } restart: int res = write(fd, &work, sizeof(work)); @@ -206,7 +213,9 @@ static int mainWorkCallback(int fd, int events, void* data) { return 1; } - LOG_TRACE("mainWorkCallback: cmd=%d", work.cmd); + if (kLogTrace) { + ALOGD("mainWorkCallback: cmd=%d", work.cmd); + } switch (work.cmd) { case CMD_FINISH: { @@ -249,7 +258,9 @@ loadNativeCode_native(JNIEnv* env, jobject clazz, jstring path, jstring funcName jstring externalDataDir, jint sdkVersion, jobject jAssetMgr, jbyteArray savedState) { - LOG_TRACE("loadNativeCode_native"); + if (kLogTrace) { + ALOGD("loadNativeCode_native"); + } const char* pathStr = env->GetStringUTFChars(path, NULL); NativeCode* code = NULL; @@ -358,7 +369,9 @@ loadNativeCode_native(JNIEnv* env, jobject clazz, jstring path, jstring funcName static void unloadNativeCode_native(JNIEnv* env, jobject clazz, jlong handle) { - LOG_TRACE("unloadNativeCode_native"); + if (kLogTrace) { + ALOGD("unloadNativeCode_native"); + } if (handle != 0) { NativeCode* code = (NativeCode*)handle; delete code; @@ -368,7 +381,9 @@ unloadNativeCode_native(JNIEnv* env, jobject clazz, jlong handle) static void onStart_native(JNIEnv* env, jobject clazz, jlong handle) { - LOG_TRACE("onStart_native"); + if (kLogTrace) { + ALOGD("onStart_native"); + } if (handle != 0) { NativeCode* code = (NativeCode*)handle; if (code->callbacks.onStart != NULL) { @@ -380,7 +395,9 @@ onStart_native(JNIEnv* env, jobject clazz, jlong handle) static void onResume_native(JNIEnv* env, jobject clazz, jlong handle) { - LOG_TRACE("onResume_native"); + if (kLogTrace) { + ALOGD("onResume_native"); + } if (handle != 0) { NativeCode* code = (NativeCode*)handle; if (code->callbacks.onResume != NULL) { @@ -392,7 +409,9 @@ onResume_native(JNIEnv* env, jobject clazz, jlong handle) static jbyteArray onSaveInstanceState_native(JNIEnv* env, jobject clazz, jlong handle) { - LOG_TRACE("onSaveInstanceState_native"); + if (kLogTrace) { + ALOGD("onSaveInstanceState_native"); + } jbyteArray array = NULL; @@ -419,7 +438,9 @@ onSaveInstanceState_native(JNIEnv* env, jobject clazz, jlong handle) static void onPause_native(JNIEnv* env, jobject clazz, jlong handle) { - LOG_TRACE("onPause_native"); + if (kLogTrace) { + ALOGD("onPause_native"); + } if (handle != 0) { NativeCode* code = (NativeCode*)handle; if (code->callbacks.onPause != NULL) { @@ -431,7 +452,9 @@ onPause_native(JNIEnv* env, jobject clazz, jlong handle) static void onStop_native(JNIEnv* env, jobject clazz, jlong handle) { - LOG_TRACE("onStop_native"); + if (kLogTrace) { + ALOGD("onStop_native"); + } if (handle != 0) { NativeCode* code = (NativeCode*)handle; if (code->callbacks.onStop != NULL) { @@ -443,7 +466,9 @@ onStop_native(JNIEnv* env, jobject clazz, jlong handle) static void onConfigurationChanged_native(JNIEnv* env, jobject clazz, jlong handle) { - LOG_TRACE("onConfigurationChanged_native"); + if (kLogTrace) { + ALOGD("onConfigurationChanged_native"); + } if (handle != 0) { NativeCode* code = (NativeCode*)handle; if (code->callbacks.onConfigurationChanged != NULL) { @@ -455,7 +480,9 @@ onConfigurationChanged_native(JNIEnv* env, jobject clazz, jlong handle) static void onLowMemory_native(JNIEnv* env, jobject clazz, jlong handle) { - LOG_TRACE("onLowMemory_native"); + if (kLogTrace) { + ALOGD("onLowMemory_native"); + } if (handle != 0) { NativeCode* code = (NativeCode*)handle; if (code->callbacks.onLowMemory != NULL) { @@ -467,7 +494,9 @@ onLowMemory_native(JNIEnv* env, jobject clazz, jlong handle) static void onWindowFocusChanged_native(JNIEnv* env, jobject clazz, jlong handle, jboolean focused) { - LOG_TRACE("onWindowFocusChanged_native"); + if (kLogTrace) { + ALOGD("onWindowFocusChanged_native"); + } if (handle != 0) { NativeCode* code = (NativeCode*)handle; if (code->callbacks.onWindowFocusChanged != NULL) { @@ -479,7 +508,9 @@ onWindowFocusChanged_native(JNIEnv* env, jobject clazz, jlong handle, jboolean f static void onSurfaceCreated_native(JNIEnv* env, jobject clazz, jlong handle, jobject surface) { - LOG_TRACE("onSurfaceCreated_native"); + if (kLogTrace) { + ALOGD("onSurfaceCreated_native"); + } if (handle != 0) { NativeCode* code = (NativeCode*)handle; code->setSurface(surface); @@ -500,7 +531,9 @@ static void onSurfaceChanged_native(JNIEnv* env, jobject clazz, jlong handle, jobject surface, jint format, jint width, jint height) { - LOG_TRACE("onSurfaceChanged_native"); + if (kLogTrace) { + ALOGD("onSurfaceChanged_native"); + } if (handle != 0) { NativeCode* code = (NativeCode*)handle; sp<ANativeWindow> oldNativeWindow = code->nativeWindow; @@ -540,7 +573,9 @@ onSurfaceChanged_native(JNIEnv* env, jobject clazz, jlong handle, jobject surfac static void onSurfaceRedrawNeeded_native(JNIEnv* env, jobject clazz, jlong handle) { - LOG_TRACE("onSurfaceRedrawNeeded_native"); + if (kLogTrace) { + ALOGD("onSurfaceRedrawNeeded_native"); + } if (handle != 0) { NativeCode* code = (NativeCode*)handle; if (code->nativeWindow != NULL && code->callbacks.onNativeWindowRedrawNeeded != NULL) { @@ -552,7 +587,9 @@ onSurfaceRedrawNeeded_native(JNIEnv* env, jobject clazz, jlong handle) static void onSurfaceDestroyed_native(JNIEnv* env, jobject clazz, jlong handle, jobject surface) { - LOG_TRACE("onSurfaceDestroyed_native"); + if (kLogTrace) { + ALOGD("onSurfaceDestroyed_native"); + } if (handle != 0) { NativeCode* code = (NativeCode*)handle; if (code->nativeWindow != NULL && code->callbacks.onNativeWindowDestroyed != NULL) { @@ -566,7 +603,9 @@ onSurfaceDestroyed_native(JNIEnv* env, jobject clazz, jlong handle, jobject surf static void onInputQueueCreated_native(JNIEnv* env, jobject clazz, jlong handle, jlong queuePtr) { - LOG_TRACE("onInputChannelCreated_native"); + if (kLogTrace) { + ALOGD("onInputChannelCreated_native"); + } if (handle != 0) { NativeCode* code = (NativeCode*)handle; if (code->callbacks.onInputQueueCreated != NULL) { @@ -579,7 +618,9 @@ onInputQueueCreated_native(JNIEnv* env, jobject clazz, jlong handle, jlong queue static void onInputQueueDestroyed_native(JNIEnv* env, jobject clazz, jlong handle, jlong queuePtr) { - LOG_TRACE("onInputChannelDestroyed_native"); + if (kLogTrace) { + ALOGD("onInputChannelDestroyed_native"); + } if (handle != 0) { NativeCode* code = (NativeCode*)handle; if (code->callbacks.onInputQueueDestroyed != NULL) { @@ -593,7 +634,9 @@ static void onContentRectChanged_native(JNIEnv* env, jobject clazz, jlong handle, jint x, jint y, jint w, jint h) { - LOG_TRACE("onContentRectChanged_native"); + if (kLogTrace) { + ALOGD("onContentRectChanged_native"); + } if (handle != 0) { NativeCode* code = (NativeCode*)handle; if (code->callbacks.onContentRectChanged != NULL) { @@ -632,39 +675,20 @@ static const JNINativeMethod g_methods[] = { static const char* const kNativeActivityPathName = "android/app/NativeActivity"; -#define FIND_CLASS(var, className) \ - var = env->FindClass(className); \ - LOG_FATAL_IF(! var, "Unable to find class %s", className); - -#define GET_METHOD_ID(var, clazz, methodName, fieldDescriptor) \ - var = env->GetMethodID(clazz, methodName, fieldDescriptor); \ - LOG_FATAL_IF(! var, "Unable to find method" methodName); - int register_android_app_NativeActivity(JNIEnv* env) { //ALOGD("register_android_app_NativeActivity"); - jclass clazz; - FIND_CLASS(clazz, kNativeActivityPathName); - - GET_METHOD_ID(gNativeActivityClassInfo.finish, - clazz, - "finish", "()V"); - GET_METHOD_ID(gNativeActivityClassInfo.setWindowFlags, - clazz, - "setWindowFlags", "(II)V"); - GET_METHOD_ID(gNativeActivityClassInfo.setWindowFormat, - clazz, - "setWindowFormat", "(I)V"); - GET_METHOD_ID(gNativeActivityClassInfo.showIme, - clazz, - "showIme", "(I)V"); - GET_METHOD_ID(gNativeActivityClassInfo.hideIme, - clazz, - "hideIme", "(I)V"); - - return AndroidRuntime::registerNativeMethods( - env, kNativeActivityPathName, - g_methods, NELEM(g_methods)); + jclass clazz = FindClassOrDie(env, kNativeActivityPathName); + + gNativeActivityClassInfo.finish = GetMethodIDOrDie(env, clazz, "finish", "()V"); + gNativeActivityClassInfo.setWindowFlags = GetMethodIDOrDie(env, clazz, "setWindowFlags", + "(II)V"); + gNativeActivityClassInfo.setWindowFormat = GetMethodIDOrDie(env, clazz, "setWindowFormat", + "(I)V"); + gNativeActivityClassInfo.showIme = GetMethodIDOrDie(env, clazz, "showIme", "(I)V"); + gNativeActivityClassInfo.hideIme = GetMethodIDOrDie(env, clazz, "hideIme", "(I)V"); + + return RegisterMethodsOrDie(env, kNativeActivityPathName, g_methods, NELEM(g_methods)); } } // namespace android diff --git a/core/jni/android_app_backup_FullBackup.cpp b/core/jni/android_app_backup_FullBackup.cpp index 3cfaa82a55e4..2c02b377933b 100644 --- a/core/jni/android_app_backup_FullBackup.cpp +++ b/core/jni/android_app_backup_FullBackup.cpp @@ -23,6 +23,8 @@ #include <androidfw/BackupHelpers.h> +#include "core_jni_helpers.h" + #include <string.h> namespace android @@ -73,8 +75,6 @@ static struct { static jint backupToTar(JNIEnv* env, jobject clazz, jstring packageNameObj, jstring domainObj, jstring linkdomain, jstring rootpathObj, jstring pathObj, jobject dataOutputObj) { - int ret; - // Extract the various strings, allowing for null object pointers const char* packagenamechars = (packageNameObj) ? env->GetStringUTFChars(packageNameObj, NULL) : NULL; const char* rootchars = (rootpathObj) ? env->GetStringUTFChars(rootpathObj, NULL) : NULL; @@ -118,15 +118,11 @@ static const JNINativeMethod g_methods[] = { int register_android_app_backup_FullBackup(JNIEnv* env) { - jclass clazz = env->FindClass("android/app/backup/BackupDataOutput"); - LOG_FATAL_IF(clazz == NULL, "Unable to find class android.app.backup.BackupDataOutput"); + jclass clazz = FindClassOrDie(env, "android/app/backup/BackupDataOutput"); - sBackupDataOutput.mBackupWriter = env->GetFieldID(clazz, "mBackupWriter", "J"); - LOG_FATAL_IF(sBackupDataOutput.mBackupwriter == NULL, - "Unable to find mBackupWriter field in android.app.backup.BackupDataOutput"); + sBackupDataOutput.mBackupWriter = GetFieldIDOrDie(env, clazz, "mBackupWriter", "J"); - return AndroidRuntime::registerNativeMethods(env, "android/app/backup/FullBackup", - g_methods, NELEM(g_methods)); + return RegisterMethodsOrDie(env, "android/app/backup/FullBackup", g_methods, NELEM(g_methods)); } } diff --git a/core/jni/android_backup_BackupDataInput.cpp b/core/jni/android_backup_BackupDataInput.cpp index 90763b0c4561..096a784b711b 100644 --- a/core/jni/android_backup_BackupDataInput.cpp +++ b/core/jni/android_backup_BackupDataInput.cpp @@ -22,6 +22,8 @@ #include <androidfw/BackupHelpers.h> +#include "core_jni_helpers.h" + namespace android { @@ -135,17 +137,12 @@ int register_android_backup_BackupDataInput(JNIEnv* env) { //ALOGD("register_android_backup_BackupDataInput"); - jclass clazz = env->FindClass("android/app/backup/BackupDataInput$EntityHeader"); - LOG_FATAL_IF(clazz == NULL, "Unable to find class android.app.backup.BackupDataInput.EntityHeader"); - s_keyField = env->GetFieldID(clazz, "key", "Ljava/lang/String;"); - LOG_FATAL_IF(s_keyField == NULL, - "Unable to find key field in android.app.backup.BackupDataInput.EntityHeader"); - s_dataSizeField = env->GetFieldID(clazz, "dataSize", "I"); - LOG_FATAL_IF(s_dataSizeField == NULL, - "Unable to find dataSize field in android.app.backup.BackupDataInput.EntityHeader"); - - return AndroidRuntime::registerNativeMethods(env, "android/app/backup/BackupDataInput", - g_methods, NELEM(g_methods)); + jclass clazz = FindClassOrDie(env, "android/app/backup/BackupDataInput$EntityHeader"); + s_keyField = GetFieldIDOrDie(env, clazz, "key", "Ljava/lang/String;"); + s_dataSizeField = GetFieldIDOrDie(env, clazz, "dataSize", "I"); + + return RegisterMethodsOrDie(env, "android/app/backup/BackupDataInput", g_methods, + NELEM(g_methods)); } } diff --git a/core/jni/android_backup_BackupDataOutput.cpp b/core/jni/android_backup_BackupDataOutput.cpp index 8244e1bfdbf1..a7894f487c55 100644 --- a/core/jni/android_backup_BackupDataOutput.cpp +++ b/core/jni/android_backup_BackupDataOutput.cpp @@ -18,7 +18,7 @@ #include <utils/Log.h> #include "JNIHelp.h" -#include <android_runtime/AndroidRuntime.h> +#include "core_jni_helpers.h" #include <androidfw/BackupHelpers.h> @@ -85,7 +85,6 @@ writeEntityData_native(JNIEnv* env, jobject clazz, jlong w, jbyteArray data, jin static void setKeyPrefix_native(JNIEnv* env, jobject clazz, jlong w, jstring keyPrefixObj) { - int err; BackupDataWriter* writer = (BackupDataWriter*)w; const char* keyPrefixUTF = env->GetStringUTFChars(keyPrefixObj, NULL); @@ -107,7 +106,7 @@ static const JNINativeMethod g_methods[] = { int register_android_backup_BackupDataOutput(JNIEnv* env) { //ALOGD("register_android_backup_BackupDataOutput"); - return AndroidRuntime::registerNativeMethods(env, "android/app/backup/BackupDataOutput", + return RegisterMethodsOrDie(env, "android/app/backup/BackupDataOutput", g_methods, NELEM(g_methods)); } diff --git a/core/jni/android_backup_BackupHelperDispatcher.cpp b/core/jni/android_backup_BackupHelperDispatcher.cpp index a8b7d440dcd2..80bdaf84dca9 100644 --- a/core/jni/android_backup_BackupHelperDispatcher.cpp +++ b/core/jni/android_backup_BackupHelperDispatcher.cpp @@ -24,6 +24,7 @@ #include <sys/uio.h> #include <unistd.h> +#include "core_jni_helpers.h" #define VERSION_1_HEADER 0x01706c48 // 'Hlp'1 little endian @@ -227,18 +228,12 @@ static const JNINativeMethod g_methods[] = { int register_android_backup_BackupHelperDispatcher(JNIEnv* env) { - jclass clazz = env->FindClass("android/app/backup/BackupHelperDispatcher$Header"); - LOG_FATAL_IF(clazz == NULL, - "Unable to find class android.app.backup.BackupHelperDispatcher.Header"); - s_chunkSizeField = env->GetFieldID(clazz, "chunkSize", "I"); - LOG_FATAL_IF(s_chunkSizeField == NULL, - "Unable to find chunkSize field in android.app.backup.BackupHelperDispatcher.Header"); - s_keyPrefixField = env->GetFieldID(clazz, "keyPrefix", "Ljava/lang/String;"); - LOG_FATAL_IF(s_keyPrefixField == NULL, - "Unable to find keyPrefix field in android.app.backup.BackupHelperDispatcher.Header"); - - return AndroidRuntime::registerNativeMethods(env, "android/app/backup/BackupHelperDispatcher", - g_methods, NELEM(g_methods)); + jclass clazz = FindClassOrDie(env, "android/app/backup/BackupHelperDispatcher$Header"); + s_chunkSizeField = GetFieldIDOrDie(env, clazz, "chunkSize", "I"); + s_keyPrefixField = GetFieldIDOrDie(env, clazz, "keyPrefix", "Ljava/lang/String;"); + + return RegisterMethodsOrDie(env, "android/app/backup/BackupHelperDispatcher", g_methods, + NELEM(g_methods)); } } diff --git a/core/jni/android_backup_FileBackupHelperBase.cpp b/core/jni/android_backup_FileBackupHelperBase.cpp index 66e3e9db3483..6d6ac1b47744 100644 --- a/core/jni/android_backup_FileBackupHelperBase.cpp +++ b/core/jni/android_backup_FileBackupHelperBase.cpp @@ -18,7 +18,7 @@ #include <utils/Log.h> #include "JNIHelp.h" -#include <android_runtime/AndroidRuntime.h> +#include "core_jni_helpers.h" #include <androidfw/BackupHelpers.h> @@ -118,7 +118,7 @@ static const JNINativeMethod g_methods[] = { int register_android_backup_FileBackupHelperBase(JNIEnv* env) { - return AndroidRuntime::registerNativeMethods(env, "android/app/backup/FileBackupHelperBase", + return RegisterMethodsOrDie(env, "android/app/backup/FileBackupHelperBase", g_methods, NELEM(g_methods)); } diff --git a/core/jni/android_content_res_Configuration.cpp b/core/jni/android_content_res_Configuration.cpp index 201ffe85b19a..3b45e72c110b 100644 --- a/core/jni/android_content_res_Configuration.cpp +++ b/core/jni/android_content_res_Configuration.cpp @@ -23,6 +23,8 @@ #include <android_runtime/android_content_res_Configuration.h> #include "android_runtime/AndroidRuntime.h" +#include "core_jni_helpers.h" + namespace android { static struct { @@ -70,49 +72,27 @@ void android_Configuration_getFromJava( gConfigurationClassInfo.smallestScreenWidthDp); } -#define FIND_CLASS(var, className) \ - var = env->FindClass(className); \ - LOG_FATAL_IF(! var, "Unable to find class " className); - -#define GET_FIELD_ID(var, clazz, fieldName, fieldDescriptor) \ - var = env->GetFieldID(clazz, fieldName, fieldDescriptor); \ - LOG_FATAL_IF(! var, "Unable to find field " fieldName); - int register_android_content_res_Configuration(JNIEnv* env) { - jclass clazz; - FIND_CLASS(clazz, "android/content/res/Configuration"); + jclass clazz = FindClassOrDie(env, "android/content/res/Configuration"); - GET_FIELD_ID(gConfigurationClassInfo.mcc, clazz, - "mcc", "I"); - GET_FIELD_ID(gConfigurationClassInfo.mnc, clazz, - "mnc", "I"); - GET_FIELD_ID(gConfigurationClassInfo.locale, clazz, - "locale", "Ljava/util/Locale;"); - GET_FIELD_ID(gConfigurationClassInfo.screenLayout, clazz, - "screenLayout", "I"); - GET_FIELD_ID(gConfigurationClassInfo.touchscreen, clazz, - "touchscreen", "I"); - GET_FIELD_ID(gConfigurationClassInfo.keyboard, clazz, - "keyboard", "I"); - GET_FIELD_ID(gConfigurationClassInfo.keyboardHidden, clazz, - "keyboardHidden", "I"); - GET_FIELD_ID(gConfigurationClassInfo.hardKeyboardHidden, clazz, - "hardKeyboardHidden", "I"); - GET_FIELD_ID(gConfigurationClassInfo.navigation, clazz, - "navigation", "I"); - GET_FIELD_ID(gConfigurationClassInfo.navigationHidden, clazz, - "navigationHidden", "I"); - GET_FIELD_ID(gConfigurationClassInfo.orientation, clazz, - "orientation", "I"); - GET_FIELD_ID(gConfigurationClassInfo.uiMode, clazz, - "uiMode", "I"); - GET_FIELD_ID(gConfigurationClassInfo.screenWidthDp, clazz, - "screenWidthDp", "I"); - GET_FIELD_ID(gConfigurationClassInfo.screenHeightDp, clazz, - "screenHeightDp", "I"); - GET_FIELD_ID(gConfigurationClassInfo.smallestScreenWidthDp, clazz, - "smallestScreenWidthDp", "I"); + gConfigurationClassInfo.mcc = GetFieldIDOrDie(env, clazz, "mcc", "I"); + gConfigurationClassInfo.mnc = GetFieldIDOrDie(env, clazz, "mnc", "I"); + gConfigurationClassInfo.locale = GetFieldIDOrDie(env, clazz, "locale", "Ljava/util/Locale;"); + gConfigurationClassInfo.screenLayout = GetFieldIDOrDie(env, clazz, "screenLayout", "I"); + gConfigurationClassInfo.touchscreen = GetFieldIDOrDie(env, clazz, "touchscreen", "I"); + gConfigurationClassInfo.keyboard = GetFieldIDOrDie(env, clazz, "keyboard", "I"); + gConfigurationClassInfo.keyboardHidden = GetFieldIDOrDie(env, clazz, "keyboardHidden", "I"); + gConfigurationClassInfo.hardKeyboardHidden = GetFieldIDOrDie(env, clazz, "hardKeyboardHidden", + "I"); + gConfigurationClassInfo.navigation = GetFieldIDOrDie(env, clazz, "navigation", "I"); + gConfigurationClassInfo.navigationHidden = GetFieldIDOrDie(env, clazz, "navigationHidden", "I"); + gConfigurationClassInfo.orientation = GetFieldIDOrDie(env, clazz, "orientation", "I"); + gConfigurationClassInfo.uiMode = GetFieldIDOrDie(env, clazz, "uiMode", "I"); + gConfigurationClassInfo.screenWidthDp = GetFieldIDOrDie(env, clazz, "screenWidthDp", "I"); + gConfigurationClassInfo.screenHeightDp = GetFieldIDOrDie(env, clazz, "screenHeightDp", "I"); + gConfigurationClassInfo.smallestScreenWidthDp = GetFieldIDOrDie(env, clazz, + "smallestScreenWidthDp", "I"); return 0; } diff --git a/core/jni/android_content_res_ObbScanner.cpp b/core/jni/android_content_res_ObbScanner.cpp index 5d51ee2d82f5..ef17db6b0fdf 100644 --- a/core/jni/android_content_res_ObbScanner.cpp +++ b/core/jni/android_content_res_ObbScanner.cpp @@ -25,6 +25,8 @@ #include "utils/misc.h" #include "android_runtime/AndroidRuntime.h" +#include "core_jni_helpers.h" + namespace android { static struct { @@ -80,30 +82,17 @@ static JNINativeMethod gMethods[] = { (void*) android_content_res_ObbScanner_getObbInfo }, }; -#define FIND_CLASS(var, className) \ - var = env->FindClass(className); \ - LOG_FATAL_IF(! var, "Unable to find class " className); - -#define GET_FIELD_ID(var, clazz, fieldName, fieldDescriptor) \ - var = env->GetFieldID(clazz, fieldName, fieldDescriptor); \ - LOG_FATAL_IF(! var, "Unable to find field " fieldName); - int register_android_content_res_ObbScanner(JNIEnv* env) { - jclass clazz; - FIND_CLASS(clazz, "android/content/res/ObbInfo"); - - GET_FIELD_ID(gObbInfoClassInfo.packageName, clazz, - "packageName", "Ljava/lang/String;"); - GET_FIELD_ID(gObbInfoClassInfo.version, clazz, - "version", "I"); - GET_FIELD_ID(gObbInfoClassInfo.flags, clazz, - "flags", "I"); - GET_FIELD_ID(gObbInfoClassInfo.salt, clazz, - "salt", "[B"); - - return AndroidRuntime::registerNativeMethods(env, "android/content/res/ObbScanner", gMethods, - NELEM(gMethods)); + jclass clazz = FindClassOrDie(env, "android/content/res/ObbInfo"); + + gObbInfoClassInfo.packageName = GetFieldIDOrDie(env, clazz, "packageName", + "Ljava/lang/String;"); + gObbInfoClassInfo.version = GetFieldIDOrDie(env, clazz, "version", "I"); + gObbInfoClassInfo.flags = GetFieldIDOrDie(env, clazz, "flags", "I"); + gObbInfoClassInfo.salt = GetFieldIDOrDie(env, clazz, "salt", "[B"); + + return RegisterMethodsOrDie(env, "android/content/res/ObbScanner", gMethods, NELEM(gMethods)); } }; // namespace android diff --git a/core/jni/android_database_CursorWindow.cpp b/core/jni/android_database_CursorWindow.cpp index af6cc72b588b..580ac02789c5 100644 --- a/core/jni/android_database_CursorWindow.cpp +++ b/core/jni/android_database_CursorWindow.cpp @@ -36,6 +36,8 @@ #include "android_util_Binder.h" #include "android_database_SQLiteCommon.h" +#include "core_jni_helpers.h" + namespace android { static struct { @@ -522,29 +524,16 @@ static JNINativeMethod sMethods[] = (void*)nativePutNull }, }; -#define FIND_CLASS(var, className) \ - var = env->FindClass(className); \ - LOG_FATAL_IF(! var, "Unable to find class " className); - -#define GET_FIELD_ID(var, clazz, fieldName, fieldDescriptor) \ - var = env->GetFieldID(clazz, fieldName, fieldDescriptor); \ - LOG_FATAL_IF(! var, "Unable to find field " fieldName); - -int register_android_database_CursorWindow(JNIEnv * env) +int register_android_database_CursorWindow(JNIEnv* env) { - jclass clazz; - FIND_CLASS(clazz, "android/database/CharArrayBuffer"); + jclass clazz = FindClassOrDie(env, "android/database/CharArrayBuffer"); - GET_FIELD_ID(gCharArrayBufferClassInfo.data, clazz, - "data", "[C"); - GET_FIELD_ID(gCharArrayBufferClassInfo.sizeCopied, clazz, - "sizeCopied", "I"); + gCharArrayBufferClassInfo.data = GetFieldIDOrDie(env, clazz, "data", "[C"); + gCharArrayBufferClassInfo.sizeCopied = GetFieldIDOrDie(env, clazz, "sizeCopied", "I"); - gEmptyString = jstring(env->NewGlobalRef(env->NewStringUTF(""))); - LOG_FATAL_IF(!gEmptyString, "Unable to create empty string"); + gEmptyString = MakeGlobalRefOrDie(env, env->NewStringUTF("")); - return AndroidRuntime::registerNativeMethods(env, "android/database/CursorWindow", - sMethods, NELEM(sMethods)); + return RegisterMethodsOrDie(env, "android/database/CursorWindow", sMethods, NELEM(sMethods)); } } // namespace android diff --git a/core/jni/android_database_SQLiteConnection.cpp b/core/jni/android_database_SQLiteConnection.cpp index ae5643207d8c..7a3cdf68fb18 100644 --- a/core/jni/android_database_SQLiteConnection.cpp +++ b/core/jni/android_database_SQLiteConnection.cpp @@ -37,6 +37,8 @@ #include "android_database_SQLiteCommon.h" +#include "core_jni_helpers.h" + // Set to 1 to use UTF16 storage for localized indexes. #define UTF16_STORAGE 0 @@ -325,7 +327,6 @@ static void nativeFinalizeStatement(JNIEnv* env, jclass clazz, jlong connectionP static jint nativeGetParameterCount(JNIEnv* env, jclass clazz, jlong connectionPtr, jlong statementPtr) { - SQLiteConnection* connection = reinterpret_cast<SQLiteConnection*>(connectionPtr); sqlite3_stmt* statement = reinterpret_cast<sqlite3_stmt*>(statementPtr); return sqlite3_bind_parameter_count(statement); @@ -333,7 +334,6 @@ static jint nativeGetParameterCount(JNIEnv* env, jclass clazz, jlong connectionP static jboolean nativeIsReadOnly(JNIEnv* env, jclass clazz, jlong connectionPtr, jlong statementPtr) { - SQLiteConnection* connection = reinterpret_cast<SQLiteConnection*>(connectionPtr); sqlite3_stmt* statement = reinterpret_cast<sqlite3_stmt*>(statementPtr); return sqlite3_stmt_readonly(statement) != 0; @@ -341,7 +341,6 @@ static jboolean nativeIsReadOnly(JNIEnv* env, jclass clazz, jlong connectionPtr, static jint nativeGetColumnCount(JNIEnv* env, jclass clazz, jlong connectionPtr, jlong statementPtr) { - SQLiteConnection* connection = reinterpret_cast<SQLiteConnection*>(connectionPtr); sqlite3_stmt* statement = reinterpret_cast<sqlite3_stmt*>(statementPtr); return sqlite3_column_count(statement); @@ -349,7 +348,6 @@ static jint nativeGetColumnCount(JNIEnv* env, jclass clazz, jlong connectionPtr, static jstring nativeGetColumnName(JNIEnv* env, jclass clazz, jlong connectionPtr, jlong statementPtr, jint index) { - SQLiteConnection* connection = reinterpret_cast<SQLiteConnection*>(connectionPtr); sqlite3_stmt* statement = reinterpret_cast<sqlite3_stmt*>(statementPtr); const jchar* name = static_cast<const jchar*>(sqlite3_column_name16(statement, index)); @@ -845,35 +843,20 @@ static JNINativeMethod sMethods[] = (void*)nativeResetCancel }, }; -#define FIND_CLASS(var, className) \ - var = env->FindClass(className); \ - LOG_FATAL_IF(! var, "Unable to find class " className); - -#define GET_METHOD_ID(var, clazz, methodName, fieldDescriptor) \ - var = env->GetMethodID(clazz, methodName, fieldDescriptor); \ - LOG_FATAL_IF(! var, "Unable to find method" methodName); - -#define GET_FIELD_ID(var, clazz, fieldName, fieldDescriptor) \ - var = env->GetFieldID(clazz, fieldName, fieldDescriptor); \ - LOG_FATAL_IF(! var, "Unable to find field " fieldName); - int register_android_database_SQLiteConnection(JNIEnv *env) { - jclass clazz; - FIND_CLASS(clazz, "android/database/sqlite/SQLiteCustomFunction"); + jclass clazz = FindClassOrDie(env, "android/database/sqlite/SQLiteCustomFunction"); - GET_FIELD_ID(gSQLiteCustomFunctionClassInfo.name, clazz, - "name", "Ljava/lang/String;"); - GET_FIELD_ID(gSQLiteCustomFunctionClassInfo.numArgs, clazz, - "numArgs", "I"); - GET_METHOD_ID(gSQLiteCustomFunctionClassInfo.dispatchCallback, - clazz, "dispatchCallback", "([Ljava/lang/String;)V"); + gSQLiteCustomFunctionClassInfo.name = GetFieldIDOrDie(env, clazz, "name", "Ljava/lang/String;"); + gSQLiteCustomFunctionClassInfo.numArgs = GetFieldIDOrDie(env, clazz, "numArgs", "I"); + gSQLiteCustomFunctionClassInfo.dispatchCallback = GetMethodIDOrDie(env, clazz, + "dispatchCallback", "([Ljava/lang/String;)V"); - FIND_CLASS(clazz, "java/lang/String"); - gStringClassInfo.clazz = jclass(env->NewGlobalRef(clazz)); + clazz = FindClassOrDie(env, "java/lang/String"); + gStringClassInfo.clazz = MakeGlobalRefOrDie(env, clazz); - return AndroidRuntime::registerNativeMethods(env, "android/database/sqlite/SQLiteConnection", - sMethods, NELEM(sMethods)); + return RegisterMethodsOrDie(env, "android/database/sqlite/SQLiteConnection", sMethods, + NELEM(sMethods)); } } // namespace android diff --git a/core/jni/android_database_SQLiteDebug.cpp b/core/jni/android_database_SQLiteDebug.cpp index c1e7305ee144..26e13cf10e71 100644 --- a/core/jni/android_database_SQLiteDebug.cpp +++ b/core/jni/android_database_SQLiteDebug.cpp @@ -28,6 +28,8 @@ #include <sqlite3.h> +#include "core_jni_helpers.h" + namespace android { static struct { @@ -62,27 +64,17 @@ static JNINativeMethod gMethods[] = (void*) nativeGetPagerStats }, }; -#define FIND_CLASS(var, className) \ - var = env->FindClass(className); \ - LOG_FATAL_IF(! var, "Unable to find class " className); - -#define GET_FIELD_ID(var, clazz, fieldName, fieldDescriptor) \ - var = env->GetFieldID(clazz, fieldName, fieldDescriptor); \ - LOG_FATAL_IF(! var, "Unable to find field " fieldName); - int register_android_database_SQLiteDebug(JNIEnv *env) { - jclass clazz; - FIND_CLASS(clazz, "android/database/sqlite/SQLiteDebug$PagerStats"); + jclass clazz = FindClassOrDie(env, "android/database/sqlite/SQLiteDebug$PagerStats"); - GET_FIELD_ID(gSQLiteDebugPagerStatsClassInfo.memoryUsed, clazz, - "memoryUsed", "I"); - GET_FIELD_ID(gSQLiteDebugPagerStatsClassInfo.largestMemAlloc, clazz, + gSQLiteDebugPagerStatsClassInfo.memoryUsed = GetFieldIDOrDie(env, clazz, "memoryUsed", "I"); + gSQLiteDebugPagerStatsClassInfo.largestMemAlloc = GetFieldIDOrDie(env, clazz, "largestMemAlloc", "I"); - GET_FIELD_ID(gSQLiteDebugPagerStatsClassInfo.pageCacheOverflow, clazz, + gSQLiteDebugPagerStatsClassInfo.pageCacheOverflow = GetFieldIDOrDie(env, clazz, "pageCacheOverflow", "I"); - return AndroidRuntime::registerNativeMethods(env, "android/database/sqlite/SQLiteDebug", + return RegisterMethodsOrDie(env, "android/database/sqlite/SQLiteDebug", gMethods, NELEM(gMethods)); } diff --git a/core/jni/android_database_SQLiteGlobal.cpp b/core/jni/android_database_SQLiteGlobal.cpp index 89d64fa59bef..d0c592e1461c 100644 --- a/core/jni/android_database_SQLiteGlobal.cpp +++ b/core/jni/android_database_SQLiteGlobal.cpp @@ -18,7 +18,7 @@ #include <jni.h> #include <JNIHelp.h> -#include <android_runtime/AndroidRuntime.h> +#include "core_jni_helpers.h" #include <sqlite3.h> #include <sqlite3_android.h> @@ -74,15 +74,14 @@ static jint nativeReleaseMemory(JNIEnv* env, jclass clazz) { static JNINativeMethod sMethods[] = { /* name, signature, funcPtr */ - { "nativeReleaseMemory", "()I", - (void*)nativeReleaseMemory }, + { "nativeReleaseMemory", "()I", (void*)nativeReleaseMemory }, }; int register_android_database_SQLiteGlobal(JNIEnv *env) { sqliteInitialize(); - return AndroidRuntime::registerNativeMethods(env, "android/database/sqlite/SQLiteGlobal", + return RegisterMethodsOrDie(env, "android/database/sqlite/SQLiteGlobal", sMethods, NELEM(sMethods)); } diff --git a/core/jni/android_ddm_DdmHandleNativeHeap.cpp b/core/jni/android_ddm_DdmHandleNativeHeap.cpp index 9b963209f892..ae96936ecba5 100644 --- a/core/jni/android_ddm_DdmHandleNativeHeap.cpp +++ b/core/jni/android_ddm_DdmHandleNativeHeap.cpp @@ -20,7 +20,7 @@ #include <JNIHelp.h> #include <jni.h> -#include <android_runtime/AndroidRuntime.h> +#include "core_jni_helpers.h" #include <utils/Log.h> #include <utils/String8.h> @@ -82,7 +82,7 @@ static jbyteArray DdmHandleNativeHeap_getLeakInfo(JNIEnv* env, jobject) { get_malloc_leak_info(&allocBytes, &header.allocSize, &header.allocInfoSize, &header.totalMemory, &header.backtraceSize); - ALOGD("*** mapSize: %d allocSize: %d allocInfoSize: %d totalMemory: %d", + ALOGD("*** mapSize: %zu allocSize: %zu allocInfoSize: %zu totalMemory: %zu", header.mapSize, header.allocSize, header.allocInfoSize, header.totalMemory); #if defined(__LP64__) @@ -110,7 +110,8 @@ static JNINativeMethod method_table[] = { }; int register_android_ddm_DdmHandleNativeHeap(JNIEnv* env) { - return AndroidRuntime::registerNativeMethods(env, "android/ddm/DdmHandleNativeHeap", method_table, NELEM(method_table)); + return RegisterMethodsOrDie(env, "android/ddm/DdmHandleNativeHeap", method_table, + NELEM(method_table)); } }; diff --git a/core/jni/android_emoji_EmojiFactory.cpp b/core/jni/android_emoji_EmojiFactory.cpp index f127d2915c5e..655b400a13ad 100644 --- a/core/jni/android_emoji_EmojiFactory.cpp +++ b/core/jni/android_emoji_EmojiFactory.cpp @@ -265,14 +265,6 @@ static jclass make_globalref(JNIEnv* env, const char classname[]) return (jclass)env->NewGlobalRef(c); } -static jfieldID getFieldIDCheck(JNIEnv* env, jclass clazz, - const char fieldname[], const char type[]) -{ - jfieldID id = env->GetFieldID(clazz, fieldname, type); - SkASSERT(id); - return id; -} - int register_android_emoji_EmojiFactory(JNIEnv* env) { gEmojiFactory_class = make_globalref(env, "android/emoji/EmojiFactory"); gEmojiFactory_constructorMethodID = env->GetMethodID( diff --git a/core/jni/android_graphics_Canvas.cpp b/core/jni/android_graphics_Canvas.cpp index 96607d22f4cb..19aad6129807 100644 --- a/core/jni/android_graphics_Canvas.cpp +++ b/core/jni/android_graphics_Canvas.cpp @@ -16,7 +16,7 @@ #include "jni.h" #include "GraphicsJNI.h" -#include <android_runtime/AndroidRuntime.h> +#include "core_jni_helpers.h" #include "Canvas.h" #include "SkDrawFilter.h" @@ -556,42 +556,6 @@ static void drawTextRunString(JNIEnv* env, jobject obj, jlong canvasHandle, jstr env->ReleaseStringChars(text, jchars); } -static void drawPosTextChars(JNIEnv* env, jobject, jlong canvasHandle, jcharArray text, - jint index, jint count, jfloatArray pos, jlong paintHandle) { - Paint* paint = reinterpret_cast<Paint*>(paintHandle); - jchar* jchars = text ? env->GetCharArrayElements(text, NULL) : NULL; - float* posArray = pos ? env->GetFloatArrayElements(pos, NULL) : NULL; - int posCount = pos ? env->GetArrayLength(pos) >> 1: 0; - - get_canvas(canvasHandle)->drawPosText(jchars + index, posArray, count << 1, posCount, *paint); - - if (text) { - env->ReleaseCharArrayElements(text, jchars, 0); - } - if (pos) { - env->ReleaseFloatArrayElements(pos, posArray, 0); - } -} - - -static void drawPosTextString(JNIEnv* env, jobject, jlong canvasHandle, jstring text, - jfloatArray pos, jlong paintHandle) { - Paint* paint = reinterpret_cast<Paint*>(paintHandle); - const jchar* jchars = text ? env->GetStringChars(text, NULL) : NULL; - int byteLength = text ? env->GetStringLength(text) : 0; - float* posArray = pos ? env->GetFloatArrayElements(pos, NULL) : NULL; - int posCount = pos ? env->GetArrayLength(pos) >> 1: 0; - - get_canvas(canvasHandle)->drawPosText(jchars , posArray, byteLength << 1, posCount, *paint); - - if (text) { - env->ReleaseStringChars(text, jchars); - } - if (pos) { - env->ReleaseFloatArrayElements(pos, posArray, 0); - } -} - class DrawTextOnPathFunctor { public: DrawTextOnPathFunctor(const Layout& layout, Canvas* canvas, float hOffset, @@ -736,7 +700,7 @@ static JNINativeMethod gMethods[] = { }; int register_android_graphics_Canvas(JNIEnv* env) { - return AndroidRuntime::registerNativeMethods(env, "android/graphics/Canvas", gMethods, NELEM(gMethods)); + return RegisterMethodsOrDie(env, "android/graphics/Canvas", gMethods, NELEM(gMethods)); } }; // namespace android diff --git a/core/jni/android_graphics_Picture.cpp b/core/jni/android_graphics_Picture.cpp index eb8f6dd1fe9b..308ee206d50e 100644 --- a/core/jni/android_graphics_Picture.cpp +++ b/core/jni/android_graphics_Picture.cpp @@ -16,7 +16,7 @@ #include "jni.h" #include "GraphicsJNI.h" -#include <android_runtime/AndroidRuntime.h> +#include "core_jni_helpers.h" #include "Picture.h" @@ -106,7 +106,7 @@ static JNINativeMethod gMethods[] = { }; int register_android_graphics_Picture(JNIEnv* env) { - return AndroidRuntime::registerNativeMethods(env, "android/graphics/Picture", gMethods, NELEM(gMethods)); + return RegisterMethodsOrDie(env, "android/graphics/Picture", gMethods, NELEM(gMethods)); } }; // namespace android diff --git a/core/jni/android_hardware_Camera.cpp b/core/jni/android_hardware_Camera.cpp index f8bab242c23e..6f433c5de341 100644 --- a/core/jni/android_hardware_Camera.cpp +++ b/core/jni/android_hardware_Camera.cpp @@ -21,7 +21,7 @@ #include "jni.h" #include "JNIHelp.h" -#include "android_runtime/AndroidRuntime.h" +#include "core_jni_helpers.h" #include <android_runtime/android_graphics_SurfaceTexture.h> #include <android_runtime/android_view_Surface.h> @@ -206,7 +206,7 @@ jbyteArray JNICameraContext::getCallbackBuffer( // Vector access should be protected by lock in postData() if (!buffers->isEmpty()) { - ALOGV("Using callback buffer from queue of length %d", buffers->size()); + ALOGV("Using callback buffer from queue of length %zu", buffers->size()); jbyteArray globalBuffer = buffers->itemAt(0); buffers->removeAt(0); @@ -216,7 +216,7 @@ jbyteArray JNICameraContext::getCallbackBuffer( if (obj != NULL) { jsize bufferLength = env->GetArrayLength(obj); if ((int)bufferLength < (int)bufferSize) { - ALOGE("Callback buffer was too small! Expected %d bytes, but got %d bytes!", + ALOGE("Callback buffer was too small! Expected %zu bytes, but got %d bytes!", bufferSize, bufferLength); env->DeleteLocalRef(obj); return NULL; @@ -402,7 +402,7 @@ void JNICameraContext::addCallbackBuffer( jbyteArray callbackBuffer = (jbyteArray)env->NewGlobalRef(cbb); mCallbackBuffers.push(callbackBuffer); - ALOGV("Adding callback buffer to queue, %d total", + ALOGV("Adding callback buffer to queue, %zu total", mCallbackBuffers.size()); // We want to make sure the camera knows we're ready for the @@ -438,7 +438,7 @@ void JNICameraContext::clearCallbackBuffers_l(JNIEnv *env) } void JNICameraContext::clearCallbackBuffers_l(JNIEnv *env, Vector<jbyteArray> *buffers) { - ALOGV("Clearing callback buffers, %d remained", buffers->size()); + ALOGV("Clearing callback buffers, %zu remained", buffers->size()); while (!buffers->isEmpty()) { env->DeleteGlobalRef(buffers->top()); buffers->pop(); @@ -474,10 +474,12 @@ static jint android_hardware_Camera_native_setup(JNIEnv *env, jobject thiz, jobject weak_this, jint cameraId, jint halVersion, jstring clientPackageName) { // Convert jstring to String16 - const char16_t *rawClientName = env->GetStringChars(clientPackageName, NULL); + const char16_t *rawClientName = reinterpret_cast<const char16_t*>( + env->GetStringChars(clientPackageName, NULL)); jsize rawClientNameLen = env->GetStringLength(clientPackageName); String16 clientName(rawClientName, rawClientNameLen); - env->ReleaseStringChars(clientPackageName, rawClientName); + env->ReleaseStringChars(clientPackageName, + reinterpret_cast<const jchar*>(rawClientName)); sp<Camera> camera; if (halVersion == CAMERA_HAL_API_VERSION_NORMAL_CONNECT) { @@ -740,7 +742,8 @@ static void android_hardware_Camera_setParameters(JNIEnv *env, jobject thiz, jst const jchar* str = env->GetStringCritical(params, 0); String8 params8; if (params) { - params8 = String8(str, env->GetStringLength(params)); + params8 = String8(reinterpret_cast<const char16_t*>(str), + env->GetStringLength(params)); env->ReleaseStringCritical(params, str); } if (camera->setParameters(params8) != NO_ERROR) { @@ -988,26 +991,14 @@ struct field { jfieldID *jfield; }; -static int find_fields(JNIEnv *env, field *fields, int count) +static void find_fields(JNIEnv *env, field *fields, int count) { for (int i = 0; i < count; i++) { field *f = &fields[i]; - jclass clazz = env->FindClass(f->class_name); - if (clazz == NULL) { - ALOGE("Can't find %s", f->class_name); - return -1; - } - - jfieldID field = env->GetFieldID(clazz, f->field_name, f->field_type); - if (field == NULL) { - ALOGE("Can't find %s.%s", f->class_name, f->field_name); - return -1; - } - + jclass clazz = FindClassOrDie(env, f->class_name); + jfieldID field = GetFieldIDOrDie(env, clazz, f->field_name, f->field_type); *(f->jfield) = field; } - - return 0; } // Get all the required offsets in java class and register native functions @@ -1027,32 +1018,18 @@ int register_android_hardware_Camera(JNIEnv *env) { "android/graphics/Rect", "bottom", "I", &fields.rect_bottom }, }; - if (find_fields(env, fields_to_find, NELEM(fields_to_find)) < 0) - return -1; + find_fields(env, fields_to_find, NELEM(fields_to_find)); - jclass clazz = env->FindClass("android/hardware/Camera"); - fields.post_event = env->GetStaticMethodID(clazz, "postEventFromNative", + jclass clazz = FindClassOrDie(env, "android/hardware/Camera"); + fields.post_event = GetStaticMethodIDOrDie(env, clazz, "postEventFromNative", "(Ljava/lang/Object;IIILjava/lang/Object;)V"); - if (fields.post_event == NULL) { - ALOGE("Can't find android/hardware/Camera.postEventFromNative"); - return -1; - } - clazz = env->FindClass("android/graphics/Rect"); - fields.rect_constructor = env->GetMethodID(clazz, "<init>", "()V"); - if (fields.rect_constructor == NULL) { - ALOGE("Can't find android/graphics/Rect.Rect()"); - return -1; - } + clazz = FindClassOrDie(env, "android/graphics/Rect"); + fields.rect_constructor = GetMethodIDOrDie(env, clazz, "<init>", "()V"); - clazz = env->FindClass("android/hardware/Camera$Face"); - fields.face_constructor = env->GetMethodID(clazz, "<init>", "()V"); - if (fields.face_constructor == NULL) { - ALOGE("Can't find android/hardware/Camera$Face.Face()"); - return -1; - } + clazz = FindClassOrDie(env, "android/hardware/Camera$Face"); + fields.face_constructor = GetMethodIDOrDie(env, clazz, "<init>", "()V"); // Register native functions - return AndroidRuntime::registerNativeMethods(env, "android/hardware/Camera", - camMethods, NELEM(camMethods)); + return RegisterMethodsOrDie(env, "android/hardware/Camera", camMethods, NELEM(camMethods)); } diff --git a/core/jni/android_hardware_SensorManager.cpp b/core/jni/android_hardware_SensorManager.cpp index ec2bd846e97e..d1b1a1a2665a 100644 --- a/core/jni/android_hardware_SensorManager.cpp +++ b/core/jni/android_hardware_SensorManager.cpp @@ -28,6 +28,8 @@ #include "android_os_MessageQueue.h" #include <android_runtime/AndroidRuntime.h> +#include "core_jni_helpers.h" + static struct { jclass clazz; jmethodID dispatchSensorEvent; @@ -294,32 +296,22 @@ static JNINativeMethod gBaseEventQueueMethods[] = { using namespace android; -#define FIND_CLASS(var, className) \ - var = env->FindClass(className); \ - LOG_FATAL_IF(! var, "Unable to find class " className); \ - var = jclass(env->NewGlobalRef(var)); - -#define GET_METHOD_ID(var, clazz, methodName, methodDescriptor) \ - var = env->GetMethodID(clazz, methodName, methodDescriptor); \ - LOG_FATAL_IF(! var, "Unable to find method " methodName); - int register_android_hardware_SensorManager(JNIEnv *env) { - jniRegisterNativeMethods(env, "android/hardware/SystemSensorManager", + RegisterMethodsOrDie(env, "android/hardware/SystemSensorManager", gSystemSensorManagerMethods, NELEM(gSystemSensorManagerMethods)); - jniRegisterNativeMethods(env, "android/hardware/SystemSensorManager$BaseEventQueue", + RegisterMethodsOrDie(env, "android/hardware/SystemSensorManager$BaseEventQueue", gBaseEventQueueMethods, NELEM(gBaseEventQueueMethods)); - FIND_CLASS(gBaseEventQueueClassInfo.clazz, "android/hardware/SystemSensorManager$BaseEventQueue"); + gBaseEventQueueClassInfo.clazz = FindClassOrDie(env, + "android/hardware/SystemSensorManager$BaseEventQueue"); - GET_METHOD_ID(gBaseEventQueueClassInfo.dispatchSensorEvent, - gBaseEventQueueClassInfo.clazz, - "dispatchSensorEvent", "(I[FIJ)V"); + gBaseEventQueueClassInfo.dispatchSensorEvent = GetMethodIDOrDie(env, + gBaseEventQueueClassInfo.clazz, "dispatchSensorEvent", "(I[FIJ)V"); - GET_METHOD_ID(gBaseEventQueueClassInfo.dispatchFlushCompleteEvent, - gBaseEventQueueClassInfo.clazz, - "dispatchFlushCompleteEvent", "(I)V"); + gBaseEventQueueClassInfo.dispatchFlushCompleteEvent = GetMethodIDOrDie(env, + gBaseEventQueueClassInfo.clazz, "dispatchFlushCompleteEvent", "(I)V"); return 0; } diff --git a/core/jni/android_hardware_SerialPort.cpp b/core/jni/android_hardware_SerialPort.cpp index 7f40a5c89806..2d2ff4d97cb9 100644 --- a/core/jni/android_hardware_SerialPort.cpp +++ b/core/jni/android_hardware_SerialPort.cpp @@ -20,7 +20,7 @@ #include "jni.h" #include "JNIHelp.h" -#include "android_runtime/AndroidRuntime.h" +#include "core_jni_helpers.h" #include <stdio.h> #include <sys/types.h> @@ -260,17 +260,9 @@ static JNINativeMethod method_table[] = { int register_android_hardware_SerialPort(JNIEnv *env) { - jclass clazz = env->FindClass("android/hardware/SerialPort"); - if (clazz == NULL) { - ALOGE("Can't find android/hardware/SerialPort"); - return -1; - } - field_context = env->GetFieldID(clazz, "mNativeContext", "I"); - if (field_context == NULL) { - ALOGE("Can't find SerialPort.mNativeContext"); - return -1; - } + jclass clazz = FindClassOrDie(env, "android/hardware/SerialPort"); + field_context = GetFieldIDOrDie(env, clazz, "mNativeContext", "I"); - return AndroidRuntime::registerNativeMethods(env, "android/hardware/SerialPort", + return RegisterMethodsOrDie(env, "android/hardware/SerialPort", method_table, NELEM(method_table)); } diff --git a/core/jni/android_hardware_SoundTrigger.cpp b/core/jni/android_hardware_SoundTrigger.cpp index 7b33bc28d24e..90d1c426f2c5 100644 --- a/core/jni/android_hardware_SoundTrigger.cpp +++ b/core/jni/android_hardware_SoundTrigger.cpp @@ -21,7 +21,7 @@ #include "jni.h" #include "JNIHelp.h" -#include "android_runtime/AndroidRuntime.h" +#include "core_jni_helpers.h" #include <system/sound_trigger.h> #include <soundtrigger/SoundTriggerCallback.h> #include <soundtrigger/SoundTrigger.h> @@ -798,112 +798,102 @@ static JNINativeMethod gModuleMethods[] = { int register_android_hardware_SoundTrigger(JNIEnv *env) { - jclass arrayListClass = env->FindClass("java/util/ArrayList"); - gArrayListClass = (jclass) env->NewGlobalRef(arrayListClass); - gArrayListMethods.add = env->GetMethodID(arrayListClass, "add", "(Ljava/lang/Object;)Z"); - - jclass uuidClass = env->FindClass("java/util/UUID"); - gUUIDClass = (jclass) env->NewGlobalRef(uuidClass); - gUUIDMethods.toString = env->GetMethodID(uuidClass, "toString", "()Ljava/lang/String;"); - - jclass lClass = env->FindClass(kSoundTriggerClassPathName); - gSoundTriggerClass = (jclass) env->NewGlobalRef(lClass); - - jclass moduleClass = env->FindClass(kModuleClassPathName); - gModuleClass = (jclass) env->NewGlobalRef(moduleClass); - gPostEventFromNative = env->GetStaticMethodID(moduleClass, "postEventFromNative", - "(Ljava/lang/Object;IIILjava/lang/Object;)V"); - gModuleFields.mNativeContext = env->GetFieldID(moduleClass, "mNativeContext", "J"); - gModuleFields.mId = env->GetFieldID(moduleClass, "mId", "I"); - - - jclass modulePropertiesClass = env->FindClass(kModulePropertiesClassPathName); - gModulePropertiesClass = (jclass) env->NewGlobalRef(modulePropertiesClass); - gModulePropertiesCstor = env->GetMethodID(modulePropertiesClass, "<init>", - "(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;IIIIIZIZIZ)V"); - - jclass soundModelClass = env->FindClass(kSoundModelClassPathName); - gSoundModelClass = (jclass) env->NewGlobalRef(soundModelClass); - gSoundModelFields.uuid = env->GetFieldID(soundModelClass, "uuid", "Ljava/util/UUID;"); - gSoundModelFields.vendorUuid = env->GetFieldID(soundModelClass, "vendorUuid", "Ljava/util/UUID;"); - gSoundModelFields.data = env->GetFieldID(soundModelClass, "data", "[B"); - - jclass keyphraseClass = env->FindClass(kKeyphraseClassPathName); - gKeyphraseClass = (jclass) env->NewGlobalRef(keyphraseClass); - gKeyphraseFields.id = env->GetFieldID(keyphraseClass, "id", "I"); - gKeyphraseFields.recognitionModes = env->GetFieldID(keyphraseClass, "recognitionModes", "I"); - gKeyphraseFields.locale = env->GetFieldID(keyphraseClass, "locale", "Ljava/lang/String;"); - gKeyphraseFields.text = env->GetFieldID(keyphraseClass, "text", "Ljava/lang/String;"); - gKeyphraseFields.users = env->GetFieldID(keyphraseClass, "users", "[I"); - - jclass keyphraseSoundModelClass = env->FindClass(kKeyphraseSoundModelClassPathName); - gKeyphraseSoundModelClass = (jclass) env->NewGlobalRef(keyphraseSoundModelClass); - gKeyphraseSoundModelFields.keyphrases = env->GetFieldID(keyphraseSoundModelClass, + jclass arrayListClass = FindClassOrDie(env, "java/util/ArrayList"); + gArrayListClass = MakeGlobalRefOrDie(env, arrayListClass); + gArrayListMethods.add = GetMethodIDOrDie(env, arrayListClass, "add", "(Ljava/lang/Object;)Z"); + + jclass uuidClass = FindClassOrDie(env, "java/util/UUID"); + gUUIDClass = MakeGlobalRefOrDie(env, uuidClass); + gUUIDMethods.toString = GetMethodIDOrDie(env, uuidClass, "toString", "()Ljava/lang/String;"); + + jclass lClass = FindClassOrDie(env, kSoundTriggerClassPathName); + gSoundTriggerClass = MakeGlobalRefOrDie(env, lClass); + + jclass moduleClass = FindClassOrDie(env, kModuleClassPathName); + gModuleClass = MakeGlobalRefOrDie(env, moduleClass); + gPostEventFromNative = GetStaticMethodIDOrDie(env, moduleClass, "postEventFromNative", + "(Ljava/lang/Object;IIILjava/lang/Object;)V"); + gModuleFields.mNativeContext = GetFieldIDOrDie(env, moduleClass, "mNativeContext", "J"); + gModuleFields.mId = GetFieldIDOrDie(env, moduleClass, "mId", "I"); + + jclass modulePropertiesClass = FindClassOrDie(env, kModulePropertiesClassPathName); + gModulePropertiesClass = MakeGlobalRefOrDie(env, modulePropertiesClass); + gModulePropertiesCstor = GetMethodIDOrDie(env, modulePropertiesClass, "<init>", + "(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;IIIIIZIZIZ)V"); + + jclass soundModelClass = FindClassOrDie(env, kSoundModelClassPathName); + gSoundModelClass = MakeGlobalRefOrDie(env, soundModelClass); + gSoundModelFields.uuid = GetFieldIDOrDie(env, soundModelClass, "uuid", "Ljava/util/UUID;"); + gSoundModelFields.vendorUuid = GetFieldIDOrDie(env, soundModelClass, "vendorUuid", + "Ljava/util/UUID;"); + gSoundModelFields.data = GetFieldIDOrDie(env, soundModelClass, "data", "[B"); + + jclass keyphraseClass = FindClassOrDie(env, kKeyphraseClassPathName); + gKeyphraseClass = MakeGlobalRefOrDie(env, keyphraseClass); + gKeyphraseFields.id = GetFieldIDOrDie(env, keyphraseClass, "id", "I"); + gKeyphraseFields.recognitionModes = GetFieldIDOrDie(env, keyphraseClass, "recognitionModes", + "I"); + gKeyphraseFields.locale = GetFieldIDOrDie(env, keyphraseClass, "locale", "Ljava/lang/String;"); + gKeyphraseFields.text = GetFieldIDOrDie(env, keyphraseClass, "text", "Ljava/lang/String;"); + gKeyphraseFields.users = GetFieldIDOrDie(env, keyphraseClass, "users", "[I"); + + jclass keyphraseSoundModelClass = FindClassOrDie(env, kKeyphraseSoundModelClassPathName); + gKeyphraseSoundModelClass = MakeGlobalRefOrDie(env, keyphraseSoundModelClass); + gKeyphraseSoundModelFields.keyphrases = GetFieldIDOrDie(env, keyphraseSoundModelClass, "keyphrases", "[Landroid/hardware/soundtrigger/SoundTrigger$Keyphrase;"); - - jclass recognitionEventClass = env->FindClass(kRecognitionEventClassPathName); - gRecognitionEventClass = (jclass) env->NewGlobalRef(recognitionEventClass); - gRecognitionEventCstor = env->GetMethodID(recognitionEventClass, "<init>", + jclass recognitionEventClass = FindClassOrDie(env, kRecognitionEventClassPathName); + gRecognitionEventClass = MakeGlobalRefOrDie(env, recognitionEventClass); + gRecognitionEventCstor = GetMethodIDOrDie(env, recognitionEventClass, "<init>", "(IIZIIIZLandroid/media/AudioFormat;[B)V"); - jclass keyphraseRecognitionEventClass = env->FindClass(kKeyphraseRecognitionEventClassPathName); - gKeyphraseRecognitionEventClass = (jclass) env->NewGlobalRef(keyphraseRecognitionEventClass); - gKeyphraseRecognitionEventCstor = env->GetMethodID(keyphraseRecognitionEventClass, "<init>", + jclass keyphraseRecognitionEventClass = FindClassOrDie(env, + kKeyphraseRecognitionEventClassPathName); + gKeyphraseRecognitionEventClass = MakeGlobalRefOrDie(env, keyphraseRecognitionEventClass); + gKeyphraseRecognitionEventCstor = GetMethodIDOrDie(env, keyphraseRecognitionEventClass, "<init>", "(IIZIIIZLandroid/media/AudioFormat;[B[Landroid/hardware/soundtrigger/SoundTrigger$KeyphraseRecognitionExtra;)V"); - jclass keyRecognitionConfigClass = env->FindClass(kRecognitionConfigClassPathName); - gRecognitionConfigClass = (jclass) env->NewGlobalRef(keyRecognitionConfigClass); - gRecognitionConfigFields.captureRequested = env->GetFieldID(keyRecognitionConfigClass, - "captureRequested", - "Z"); - gRecognitionConfigFields.keyphrases = env->GetFieldID(keyRecognitionConfigClass, - "keyphrases", - "[Landroid/hardware/soundtrigger/SoundTrigger$KeyphraseRecognitionExtra;"); - gRecognitionConfigFields.data = env->GetFieldID(keyRecognitionConfigClass, - "data", - "[B"); - - jclass keyphraseRecognitionExtraClass = env->FindClass(kKeyphraseRecognitionExtraClassPathName); - gKeyphraseRecognitionExtraClass = (jclass) env->NewGlobalRef(keyphraseRecognitionExtraClass); - gKeyphraseRecognitionExtraCstor = env->GetMethodID(keyphraseRecognitionExtraClass, "<init>", - "(III[Landroid/hardware/soundtrigger/SoundTrigger$ConfidenceLevel;)V"); - gKeyphraseRecognitionExtraFields.id = env->GetFieldID(gKeyphraseRecognitionExtraClass, "id", "I"); - gKeyphraseRecognitionExtraFields.recognitionModes = env->GetFieldID(gKeyphraseRecognitionExtraClass, - "recognitionModes", "I"); - gKeyphraseRecognitionExtraFields.coarseConfidenceLevel = env->GetFieldID(gKeyphraseRecognitionExtraClass, - "coarseConfidenceLevel", "I"); - gKeyphraseRecognitionExtraFields.confidenceLevels = env->GetFieldID(gKeyphraseRecognitionExtraClass, - "confidenceLevels", - "[Landroid/hardware/soundtrigger/SoundTrigger$ConfidenceLevel;"); - - jclass confidenceLevelClass = env->FindClass(kConfidenceLevelClassPathName); - gConfidenceLevelClass = (jclass) env->NewGlobalRef(confidenceLevelClass); - gConfidenceLevelCstor = env->GetMethodID(confidenceLevelClass, "<init>", "(II)V"); - gConfidenceLevelFields.userId = env->GetFieldID(confidenceLevelClass, "userId", "I"); - gConfidenceLevelFields.confidenceLevel = env->GetFieldID(confidenceLevelClass, + jclass keyRecognitionConfigClass = FindClassOrDie(env, kRecognitionConfigClassPathName); + gRecognitionConfigClass = MakeGlobalRefOrDie(env, keyRecognitionConfigClass); + gRecognitionConfigFields.captureRequested = GetFieldIDOrDie(env, keyRecognitionConfigClass, + "captureRequested", "Z"); + gRecognitionConfigFields.keyphrases = GetFieldIDOrDie(env, keyRecognitionConfigClass, + "keyphrases", "[Landroid/hardware/soundtrigger/SoundTrigger$KeyphraseRecognitionExtra;"); + gRecognitionConfigFields.data = GetFieldIDOrDie(env, keyRecognitionConfigClass, "data", "[B"); + + jclass keyphraseRecognitionExtraClass = FindClassOrDie(env, + kKeyphraseRecognitionExtraClassPathName); + gKeyphraseRecognitionExtraClass = MakeGlobalRefOrDie(env, keyphraseRecognitionExtraClass); + gKeyphraseRecognitionExtraCstor = GetMethodIDOrDie(env, keyphraseRecognitionExtraClass, + "<init>", "(III[Landroid/hardware/soundtrigger/SoundTrigger$ConfidenceLevel;)V"); + gKeyphraseRecognitionExtraFields.id = GetFieldIDOrDie(env, gKeyphraseRecognitionExtraClass, + "id", "I"); + gKeyphraseRecognitionExtraFields.recognitionModes = GetFieldIDOrDie(env, + gKeyphraseRecognitionExtraClass, "recognitionModes", "I"); + gKeyphraseRecognitionExtraFields.coarseConfidenceLevel = GetFieldIDOrDie(env, + gKeyphraseRecognitionExtraClass, "coarseConfidenceLevel", "I"); + gKeyphraseRecognitionExtraFields.confidenceLevels = GetFieldIDOrDie(env, + gKeyphraseRecognitionExtraClass, "confidenceLevels", + "[Landroid/hardware/soundtrigger/SoundTrigger$ConfidenceLevel;"); + + jclass confidenceLevelClass = FindClassOrDie(env, kConfidenceLevelClassPathName); + gConfidenceLevelClass = MakeGlobalRefOrDie(env, confidenceLevelClass); + gConfidenceLevelCstor = GetMethodIDOrDie(env, confidenceLevelClass, "<init>", "(II)V"); + gConfidenceLevelFields.userId = GetFieldIDOrDie(env, confidenceLevelClass, "userId", "I"); + gConfidenceLevelFields.confidenceLevel = GetFieldIDOrDie(env, confidenceLevelClass, "confidenceLevel", "I"); - jclass audioFormatClass = env->FindClass(kAudioFormatClassPathName); - gAudioFormatClass = (jclass) env->NewGlobalRef(audioFormatClass); - gAudioFormatCstor = env->GetMethodID(audioFormatClass, "<init>", "(III)V"); - - jclass soundModelEventClass = env->FindClass(kSoundModelEventClassPathName); - gSoundModelEventClass = (jclass) env->NewGlobalRef(soundModelEventClass); - gSoundModelEventCstor = env->GetMethodID(soundModelEventClass, "<init>", - "(II[B)V"); - + jclass audioFormatClass = FindClassOrDie(env, kAudioFormatClassPathName); + gAudioFormatClass = MakeGlobalRefOrDie(env, audioFormatClass); + gAudioFormatCstor = GetMethodIDOrDie(env, audioFormatClass, "<init>", "(III)V"); - int status = AndroidRuntime::registerNativeMethods(env, - kSoundTriggerClassPathName, gMethods, NELEM(gMethods)); - - if (status == 0) { - status = AndroidRuntime::registerNativeMethods(env, - kModuleClassPathName, gModuleMethods, NELEM(gModuleMethods)); - } + jclass soundModelEventClass = FindClassOrDie(env, kSoundModelEventClassPathName); + gSoundModelEventClass = MakeGlobalRefOrDie(env, soundModelEventClass); + gSoundModelEventCstor = GetMethodIDOrDie(env, soundModelEventClass, "<init>", "(II[B)V"); - return status; + RegisterMethodsOrDie(env, kSoundTriggerClassPathName, gMethods, NELEM(gMethods)); + return RegisterMethodsOrDie(env, kModuleClassPathName, gModuleMethods, NELEM(gModuleMethods)); } diff --git a/core/jni/android_hardware_UsbDevice.cpp b/core/jni/android_hardware_UsbDevice.cpp index 25f901b96b33..ef3b6463cd97 100644 --- a/core/jni/android_hardware_UsbDevice.cpp +++ b/core/jni/android_hardware_UsbDevice.cpp @@ -20,7 +20,7 @@ #include "jni.h" #include "JNIHelp.h" -#include "android_runtime/AndroidRuntime.h" +#include "core_jni_helpers.h" #include <usbhost/usbhost.h> @@ -54,6 +54,6 @@ static JNINativeMethod method_table[] = { int register_android_hardware_UsbDevice(JNIEnv *env) { - return AndroidRuntime::registerNativeMethods(env, "android/hardware/usb/UsbDevice", + return RegisterMethodsOrDie(env, "android/hardware/usb/UsbDevice", method_table, NELEM(method_table)); } diff --git a/core/jni/android_hardware_UsbDeviceConnection.cpp b/core/jni/android_hardware_UsbDeviceConnection.cpp index 467a9a124fc4..e0cae6f3136f 100644 --- a/core/jni/android_hardware_UsbDeviceConnection.cpp +++ b/core/jni/android_hardware_UsbDeviceConnection.cpp @@ -20,7 +20,7 @@ #include "jni.h" #include "JNIHelp.h" -#include "android_runtime/AndroidRuntime.h" +#include "core_jni_helpers.h" #include <usbhost/usbhost.h> @@ -268,17 +268,9 @@ static JNINativeMethod method_table[] = { int register_android_hardware_UsbDeviceConnection(JNIEnv *env) { - jclass clazz = env->FindClass("android/hardware/usb/UsbDeviceConnection"); - if (clazz == NULL) { - ALOGE("Can't find android/hardware/usb/UsbDeviceConnection"); - return -1; - } - field_context = env->GetFieldID(clazz, "mNativeContext", "J"); - if (field_context == NULL) { - ALOGE("Can't find UsbDeviceConnection.mNativeContext"); - return -1; - } + jclass clazz = FindClassOrDie(env, "android/hardware/usb/UsbDeviceConnection"); + field_context = GetFieldIDOrDie(env, clazz, "mNativeContext", "J"); - return AndroidRuntime::registerNativeMethods(env, "android/hardware/usb/UsbDeviceConnection", + return RegisterMethodsOrDie(env, "android/hardware/usb/UsbDeviceConnection", method_table, NELEM(method_table)); } diff --git a/core/jni/android_hardware_UsbRequest.cpp b/core/jni/android_hardware_UsbRequest.cpp index a3c7b0a523a4..ce99e15bffc0 100644 --- a/core/jni/android_hardware_UsbRequest.cpp +++ b/core/jni/android_hardware_UsbRequest.cpp @@ -20,7 +20,7 @@ #include "jni.h" #include "JNIHelp.h" -#include "android_runtime/AndroidRuntime.h" +#include "core_jni_helpers.h" #include <usbhost/usbhost.h> @@ -215,7 +215,7 @@ int register_android_hardware_UsbRequest(JNIEnv *env) return -1; } - return AndroidRuntime::registerNativeMethods(env, "android/hardware/usb/UsbRequest", + return RegisterMethodsOrDie(env, "android/hardware/usb/UsbRequest", method_table, NELEM(method_table)); } diff --git a/core/jni/android_hardware_camera2_CameraMetadata.cpp b/core/jni/android_hardware_camera2_CameraMetadata.cpp index 79353299d7a8..7c8769d0e93f 100644 --- a/core/jni/android_hardware_camera2_CameraMetadata.cpp +++ b/core/jni/android_hardware_camera2_CameraMetadata.cpp @@ -16,7 +16,6 @@ */ // #define LOG_NDEBUG 0 -// #define LOG_NNDEBUG 0 #define LOG_TAG "CameraMetadata-JNI" #include <utils/Errors.h> #include <utils/Log.h> @@ -29,7 +28,7 @@ #include "jni.h" #include "JNIHelp.h" #include "android_os_Parcel.h" -#include "android_runtime/AndroidRuntime.h" +#include "core_jni_helpers.h" #include "android_runtime/android_hardware_camera2_CameraMetadata.h" #include <binder/IServiceManager.h> @@ -42,13 +41,7 @@ #include <sys/types.h> // for socketpair #include <sys/socket.h> // for socketpair -#if defined(LOG_NNDEBUG) -#if !LOG_NNDEBUG -#define ALOGVV ALOGV -#endif -#else -#define ALOGVV(...) -#endif +static const bool kIsDebug = false; // fully-qualified class name #define CAMERA_METADATA_CLASS_NAME "android/hardware/camera2/impl/CameraMetadataNative" @@ -111,8 +104,8 @@ struct Helpers { size_t typeSize = getTypeSize(type); if (dataBytes % typeSize != 0) { - ALOGE("%s: Expected dataBytes (%ud) to be divisible by typeSize " - "(%ud)", __FUNCTION__, dataBytes, typeSize); + ALOGE("%s: Expected dataBytes (%zu) to be divisible by typeSize " + "(%zu)", __FUNCTION__, dataBytes, typeSize); return BAD_VALUE; } @@ -219,7 +212,7 @@ static jboolean CameraMetadata_isEmpty(JNIEnv *env, jobject thiz) { jboolean empty = metadata->isEmpty(); - ALOGV("%s: Empty returned %d, entry count was %d", + ALOGV("%s: Empty returned %d, entry count was %zu", __FUNCTION__, empty, metadata->entryCount()); return empty; @@ -315,7 +308,6 @@ static void CameraMetadata_writeValues(JNIEnv *env, jobject thiz, jint tag, jbyt "Tag (%d) did not have a type", tag); return; } - size_t tagSize = Helpers::getTypeSize(tagType); status_t res; @@ -597,7 +589,7 @@ static int find_fields(JNIEnv *env, field *fields, int count) int register_android_hardware_camera2_CameraMetadata(JNIEnv *env) { // Register native functions - return AndroidRuntime::registerNativeMethods(env, + return RegisterMethodsOrDie(env, CAMERA_METADATA_CLASS_NAME, gCameraMetadataMethods, NELEM(gCameraMetadataMethods)); @@ -617,7 +609,7 @@ static void CameraMetadata_classInit(JNIEnv *env, jobject thiz) { if (find_fields(env, fields_to_find, NELEM(fields_to_find)) < 0) return; - jclass clazz = env->FindClass(CAMERA_METADATA_CLASS_NAME); + env->FindClass(CAMERA_METADATA_CLASS_NAME); } static jint CameraMetadata_getTagFromKey(JNIEnv *env, jobject thiz, jstring keyName) { @@ -651,12 +643,15 @@ static jint CameraMetadata_getTagFromKey(JNIEnv *env, jobject thiz, jstring keyN const char *str = (i < ANDROID_SECTION_COUNT) ? camera_metadata_section_names[i] : vendorSections[i - ANDROID_SECTION_COUNT].string(); - ALOGVV("%s: Trying to match against section '%s'", - __FUNCTION__, str); + if (kIsDebug) { + ALOGV("%s: Trying to match against section '%s'", __FUNCTION__, str); + } if (strstr(key, str) == key) { // key begins with the section name size_t strLength = strlen(str); - ALOGVV("%s: Key begins with section name", __FUNCTION__); + if (kIsDebug) { + ALOGV("%s: Key begins with section name", __FUNCTION__); + } // section name is the longest we've found so far if (section == NULL || sectionLength < strLength) { @@ -664,7 +659,9 @@ static jint CameraMetadata_getTagFromKey(JNIEnv *env, jobject thiz, jstring keyN sectionIndex = i; sectionLength = strLength; - ALOGVV("%s: Found new best section (%s)", __FUNCTION__, section); + if (kIsDebug) { + ALOGV("%s: Found new best section (%s)", __FUNCTION__, section); + } } } } @@ -676,7 +673,7 @@ static jint CameraMetadata_getTagFromKey(JNIEnv *env, jobject thiz, jstring keyN "Could not find section name for key '%s')", key); return 0; } else { - ALOGV("%s: Found matched section '%s' (%d)", + ALOGV("%s: Found matched section '%s' (%zu)", __FUNCTION__, section, sectionIndex); } diff --git a/core/jni/android_hardware_camera2_DngCreator.cpp b/core/jni/android_hardware_camera2_DngCreator.cpp index 31c7b9f33658..bb8de28e3c5e 100644 --- a/core/jni/android_hardware_camera2_DngCreator.cpp +++ b/core/jni/android_hardware_camera2_DngCreator.cpp @@ -16,6 +16,15 @@ //#define LOG_NDEBUG 0 #define LOG_TAG "DngCreator_JNI" +#include <inttypes.h> +#include <string.h> + +#include <utils/Log.h> +#include <utils/Errors.h> +#include <utils/StrongPointer.h> +#include <utils/RefBase.h> +#include <utils/Vector.h> +#include <cutils/properties.h> #include <system/camera_metadata.h> #include <camera/CameraMetadata.h> @@ -27,16 +36,7 @@ #include <img_utils/Input.h> #include <img_utils/StripSource.h> -#include <utils/Log.h> -#include <utils/Errors.h> -#include <utils/StrongPointer.h> -#include <utils/RefBase.h> -#include <utils/Vector.h> -#include <cutils/properties.h> - -#include <string.h> - -#include "android_runtime/AndroidRuntime.h" +#include "core_jni_helpers.h" #include "android_runtime/android_hardware_camera2_CameraMetadata.h" #include <jni.h> @@ -427,7 +427,6 @@ InputStripSource::InputStripSource(JNIEnv* env, Input& input, uint32_t ifd, uint InputStripSource::~InputStripSource() {} status_t InputStripSource::writeToStream(Output& stream, uint32_t count) { - status_t err = OK; uint32_t fullSize = mWidth * mHeight * mBytesPerSample * mSamplesPerPixel; jlong offset = mOffset; @@ -759,7 +758,8 @@ static status_t generateNoiseProfile(const double* perChannelNoiseProfile, uint8 } } if (uninitialized) { - ALOGE("%s: No valid NoiseProfile coefficients for color plane %u", __FUNCTION__, p); + ALOGE("%s: No valid NoiseProfile coefficients for color plane %zu", + __FUNCTION__, p); return BAD_VALUE; } } @@ -803,29 +803,20 @@ static TiffWriter* DngCreator_getCreator(JNIEnv* env, jobject thiz) { static void DngCreator_nativeClassInit(JNIEnv* env, jclass clazz) { ALOGV("%s:", __FUNCTION__); - gDngCreatorClassInfo.mNativeContext = env->GetFieldID(clazz, - ANDROID_DNGCREATOR_CTX_JNI_ID, "J"); - LOG_ALWAYS_FATAL_IF(gDngCreatorClassInfo.mNativeContext == NULL, - "can't find android/hardware/camera2/DngCreator.%s", - ANDROID_DNGCREATOR_CTX_JNI_ID); - - jclass outputStreamClazz = env->FindClass("java/io/OutputStream"); - LOG_ALWAYS_FATAL_IF(outputStreamClazz == NULL, "Can't find java/io/OutputStream class"); - gOutputStreamClassInfo.mWriteMethod = env->GetMethodID(outputStreamClazz, "write", "([BII)V"); - LOG_ALWAYS_FATAL_IF(gOutputStreamClassInfo.mWriteMethod == NULL, "Can't find write method"); - - jclass inputStreamClazz = env->FindClass("java/io/InputStream"); - LOG_ALWAYS_FATAL_IF(inputStreamClazz == NULL, "Can't find java/io/InputStream class"); - gInputStreamClassInfo.mReadMethod = env->GetMethodID(inputStreamClazz, "read", "([BII)I"); - LOG_ALWAYS_FATAL_IF(gInputStreamClassInfo.mReadMethod == NULL, "Can't find read method"); - gInputStreamClassInfo.mSkipMethod = env->GetMethodID(inputStreamClazz, "skip", "(J)J"); - LOG_ALWAYS_FATAL_IF(gInputStreamClassInfo.mSkipMethod == NULL, "Can't find skip method"); - - jclass inputBufferClazz = env->FindClass("java/nio/ByteBuffer"); - LOG_ALWAYS_FATAL_IF(inputBufferClazz == NULL, "Can't find java/nio/ByteBuffer class"); - gInputByteBufferClassInfo.mGetMethod = env->GetMethodID(inputBufferClazz, "get", - "([BII)Ljava/nio/ByteBuffer;"); - LOG_ALWAYS_FATAL_IF(gInputByteBufferClassInfo.mGetMethod == NULL, "Can't find get method"); + gDngCreatorClassInfo.mNativeContext = GetFieldIDOrDie(env, + clazz, ANDROID_DNGCREATOR_CTX_JNI_ID, "J"); + + jclass outputStreamClazz = FindClassOrDie(env, "java/io/OutputStream"); + gOutputStreamClassInfo.mWriteMethod = GetMethodIDOrDie(env, + outputStreamClazz, "write", "([BII)V"); + + jclass inputStreamClazz = FindClassOrDie(env, "java/io/InputStream"); + gInputStreamClassInfo.mReadMethod = GetMethodIDOrDie(env, inputStreamClazz, "read", "([BII)I"); + gInputStreamClassInfo.mSkipMethod = GetMethodIDOrDie(env, inputStreamClazz, "skip", "(J)J"); + + jclass inputBufferClazz = FindClassOrDie(env, "java/nio/ByteBuffer"); + gInputByteBufferClassInfo.mGetMethod = GetMethodIDOrDie(env, + inputBufferClazz, "get", "([BII)Ljava/nio/ByteBuffer;"); } static void DngCreator_init(JNIEnv* env, jobject thiz, jobject characteristicsPtr, @@ -853,7 +844,6 @@ static void DngCreator_init(JNIEnv* env, jobject thiz, jobject characteristicsPt const uint32_t samplesPerPixel = 1; const uint32_t bitsPerSample = BITS_PER_SAMPLE; - const uint32_t bitsPerByte = BITS_PER_SAMPLE / BYTES_PER_SAMPLE; uint32_t imageWidth = 0; uint32_t imageHeight = 0; @@ -1278,7 +1268,7 @@ static void DngCreator_init(JNIEnv* env, jobject thiz, jobject characteristicsPt } BAIL_IF_INVALID(writer->addEntry(TAG_CAMERACALIBRATION2, entry2.count, - calibrationTransform1, TIFF_IFD_0), env, TAG_CAMERACALIBRATION2, writer); + calibrationTransform2, TIFF_IFD_0), env, TAG_CAMERACALIBRATION2, writer); } } @@ -1401,8 +1391,9 @@ static void DngCreator_init(JNIEnv* env, jobject thiz, jobject characteristicsPt if (entry.count > 0) { if (entry.count != numCfaChannels * 2) { - ALOGW("%s: Invalid entry count %u for noise profile returned in characteristics," - " no noise profile tag written...", __FUNCTION__, entry.count); + ALOGW("%s: Invalid entry count %zu for noise profile returned " + "in characteristics, no noise profile tag written...", + __FUNCTION__, entry.count); } else { if ((err = generateNoiseProfile(entry.data.d, cfaOut, numCfaChannels, cfaPlaneColor, numPlaneColors, /*out*/ noiseProfile)) == OK) { @@ -1637,7 +1628,7 @@ static void DngCreator_nativeSetThumbnail(JNIEnv* env, jobject thiz, jobject buf size_t fullSize = width * height * BYTES_PER_RGB_PIXEL; jlong capacity = env->GetDirectBufferCapacity(buffer); - if (capacity != fullSize) { + if (static_cast<uint64_t>(capacity) != static_cast<uint64_t>(fullSize)) { jniThrowExceptionFmt(env, "java/lang/AssertionError", "Invalid size %d for thumbnail, expected size was %d", capacity, fullSize); @@ -1797,8 +1788,9 @@ static void DngCreator_nativeWriteImage(JNIEnv* env, jobject thiz, jobject outSt jint height, jobject inBuffer, jint rowStride, jint pixStride, jlong offset, jboolean isDirect) { ALOGV("%s:", __FUNCTION__); - ALOGV("%s: nativeWriteImage called with: width=%d, height=%d, rowStride=%d, pixStride=%d," - " offset=%lld", __FUNCTION__, width, height, rowStride, pixStride, offset); + ALOGV("%s: nativeWriteImage called with: width=%d, height=%d, " + "rowStride=%d, pixStride=%d, offset=%" PRId64, __FUNCTION__, width, + height, rowStride, pixStride, offset); uint32_t rStride = static_cast<uint32_t>(rowStride); uint32_t pStride = static_cast<uint32_t>(pixStride); uint32_t uWidth = static_cast<uint32_t>(width); @@ -1905,12 +1897,12 @@ static void DngCreator_nativeWriteInputStream(JNIEnv* env, jobject thiz, jobject uint32_t uHeight = static_cast<uint32_t>(height); uint64_t uOffset = static_cast<uint32_t>(offset); - ALOGV("%s: nativeWriteInputStream called with: width=%d, height=%d, rowStride=%u," - "pixStride=%u, offset=%lld", __FUNCTION__, width, height, rowStride, pixStride, - offset); + ALOGV("%s: nativeWriteInputStream called with: width=%d, height=%d, " + "rowStride=%d, pixStride=%d, offset=%" PRId64, __FUNCTION__, width, + height, rowStride, pixStride, offset); sp<JniOutputStream> out = new JniOutputStream(env, outStream); - if(env->ExceptionCheck()) { + if (env->ExceptionCheck()) { ALOGE("%s: Could not allocate buffers for output stream", __FUNCTION__); return; } @@ -1984,7 +1976,6 @@ static JNINativeMethod gDngCreatorMethods[] = { }; int register_android_hardware_camera2_DngCreator(JNIEnv *env) { - return AndroidRuntime::registerNativeMethods(env, - "android/hardware/camera2/DngCreator", gDngCreatorMethods, - NELEM(gDngCreatorMethods)); + return RegisterMethodsOrDie(env, + "android/hardware/camera2/DngCreator", gDngCreatorMethods, NELEM(gDngCreatorMethods)); } diff --git a/core/jni/android_hardware_camera2_legacy_LegacyCameraDevice.cpp b/core/jni/android_hardware_camera2_legacy_LegacyCameraDevice.cpp index 8440a0e7c493..f75ab1770849 100644 --- a/core/jni/android_hardware_camera2_legacy_LegacyCameraDevice.cpp +++ b/core/jni/android_hardware_camera2_legacy_LegacyCameraDevice.cpp @@ -23,7 +23,7 @@ #include "jni.h" #include "JNIHelp.h" -#include "android_runtime/AndroidRuntime.h" +#include "core_jni_helpers.h" #include "android_runtime/android_view_Surface.h" #include "android_runtime/android_graphics_SurfaceTexture.h" @@ -312,8 +312,8 @@ static status_t produceFrame(const sp<ANativeWindow>& anw, case HAL_PIXEL_FORMAT_BLOB: { int8_t* img = NULL; struct camera3_jpeg_blob footer = { - jpeg_blob_id: CAMERA3_JPEG_BLOB_ID, - jpeg_size: (uint32_t)bufferLength + .jpeg_blob_id = CAMERA3_JPEG_BLOB_ID, + .jpeg_size = (uint32_t)bufferLength }; size_t totalJpegSize = bufferLength + sizeof(footer); @@ -604,7 +604,7 @@ static jlong LegacyCameraDevice_nativeGetSurfaceId(JNIEnv* env, jobject thiz, jo ALOGE("%s: Could not retrieve IGraphicBufferProducer from surface.", __FUNCTION__); return 0; } - sp<IBinder> b = gbp->asBinder(); + sp<IBinder> b = IInterface::asBinder(gbp); if (b == NULL) { ALOGE("%s: Could not retrieve IBinder from surface.", __FUNCTION__); return 0; @@ -719,7 +719,7 @@ static JNINativeMethod gCameraDeviceMethods[] = { int register_android_hardware_camera2_legacy_LegacyCameraDevice(JNIEnv* env) { // Register native functions - return AndroidRuntime::registerNativeMethods(env, + return RegisterMethodsOrDie(env, CAMERA_DEVICE_CLASS_NAME, gCameraDeviceMethods, NELEM(gCameraDeviceMethods)); diff --git a/core/jni/android_hardware_camera2_legacy_PerfMeasurement.cpp b/core/jni/android_hardware_camera2_legacy_PerfMeasurement.cpp index 93473a55ac24..7257597ca6cf 100644 --- a/core/jni/android_hardware_camera2_legacy_PerfMeasurement.cpp +++ b/core/jni/android_hardware_camera2_legacy_PerfMeasurement.cpp @@ -22,7 +22,7 @@ #include "jni.h" #include "JNIHelp.h" -#include "android_runtime/AndroidRuntime.h" +#include "core_jni_helpers.h" #include <ui/GraphicBuffer.h> #include <system/window.h> @@ -328,7 +328,7 @@ static JNINativeMethod gPerfMeasurementMethods[] = { int register_android_hardware_camera2_legacy_PerfMeasurement(JNIEnv* env) { // Register native functions - return AndroidRuntime::registerNativeMethods(env, + return RegisterMethodsOrDie(env, PERF_MEASUREMENT_CLASS_NAME, gPerfMeasurementMethods, NELEM(gPerfMeasurementMethods)); diff --git a/core/jni/android_hardware_location_ActivityRecognitionHardware.cpp b/core/jni/android_hardware_location_ActivityRecognitionHardware.cpp index b8fa04c80c6e..470c5ba8e2a3 100644 --- a/core/jni/android_hardware_location_ActivityRecognitionHardware.cpp +++ b/core/jni/android_hardware_location_ActivityRecognitionHardware.cpp @@ -123,7 +123,7 @@ static void activity_callback( detach_thread(); } -activity_recognition_callback_procs_t sCallbacks { +activity_recognition_callback_procs_t sCallbacks = { activity_callback, }; diff --git a/core/jni/android_media_AudioRecord.cpp b/core/jni/android_media_AudioRecord.cpp index e38f3d42a50b..2c36d3de99f1 100644 --- a/core/jni/android_media_AudioRecord.cpp +++ b/core/jni/android_media_AudioRecord.cpp @@ -21,7 +21,7 @@ #include <inttypes.h> #include <jni.h> #include <JNIHelp.h> -#include <android_runtime/AndroidRuntime.h> +#include "core_jni_helpers.h" #include <utils/Log.h> #include <media/AudioRecord.h> @@ -605,59 +605,28 @@ int register_android_media_AudioRecord(JNIEnv *env) // Get the AudioRecord class - jclass audioRecordClass = env->FindClass(kClassPathName); - if (audioRecordClass == NULL) { - ALOGE("Can't find %s", kClassPathName); - return -1; - } + jclass audioRecordClass = FindClassOrDie(env, kClassPathName); // Get the postEvent method - javaAudioRecordFields.postNativeEventInJava = env->GetStaticMethodID( - audioRecordClass, - JAVA_POSTEVENT_CALLBACK_NAME, "(Ljava/lang/Object;IIILjava/lang/Object;)V"); - if (javaAudioRecordFields.postNativeEventInJava == NULL) { - ALOGE("Can't find AudioRecord.%s", JAVA_POSTEVENT_CALLBACK_NAME); - return -1; - } + javaAudioRecordFields.postNativeEventInJava = GetStaticMethodIDOrDie(env, + audioRecordClass, JAVA_POSTEVENT_CALLBACK_NAME, + "(Ljava/lang/Object;IIILjava/lang/Object;)V"); // Get the variables // mNativeRecorderInJavaObj - javaAudioRecordFields.nativeRecorderInJavaObj = - env->GetFieldID(audioRecordClass, - JAVA_NATIVERECORDERINJAVAOBJ_FIELD_NAME, "J"); - if (javaAudioRecordFields.nativeRecorderInJavaObj == NULL) { - ALOGE("Can't find AudioRecord.%s", JAVA_NATIVERECORDERINJAVAOBJ_FIELD_NAME); - return -1; - } + javaAudioRecordFields.nativeRecorderInJavaObj = GetFieldIDOrDie(env, + audioRecordClass, JAVA_NATIVERECORDERINJAVAOBJ_FIELD_NAME, "J"); // mNativeCallbackCookie - javaAudioRecordFields.nativeCallbackCookie = env->GetFieldID( - audioRecordClass, - JAVA_NATIVECALLBACKINFO_FIELD_NAME, "J"); - if (javaAudioRecordFields.nativeCallbackCookie == NULL) { - ALOGE("Can't find AudioRecord.%s", JAVA_NATIVECALLBACKINFO_FIELD_NAME); - return -1; - } + javaAudioRecordFields.nativeCallbackCookie = GetFieldIDOrDie(env, + audioRecordClass, JAVA_NATIVECALLBACKINFO_FIELD_NAME, "J"); // Get the AudioAttributes class and fields - jclass audioAttrClass = env->FindClass(kAudioAttributesClassPathName); - if (audioAttrClass == NULL) { - ALOGE("Can't find %s", kAudioAttributesClassPathName); - return -1; - } - jclass audioAttributesClassRef = (jclass)env->NewGlobalRef(audioAttrClass); - javaAudioAttrFields.fieldRecSource = env->GetFieldID(audioAttributesClassRef, "mSource", "I"); - javaAudioAttrFields.fieldFlags = env->GetFieldID(audioAttributesClassRef, "mFlags", "I"); - javaAudioAttrFields.fieldFormattedTags = - env->GetFieldID(audioAttributesClassRef, "mFormattedTags", "Ljava/lang/String;"); - env->DeleteGlobalRef(audioAttributesClassRef); - if (javaAudioAttrFields.fieldRecSource == NULL - || javaAudioAttrFields.fieldFlags == NULL - || javaAudioAttrFields.fieldFormattedTags == NULL) { - ALOGE("Can't initialize AudioAttributes fields"); - return -1; - } + jclass audioAttrClass = FindClassOrDie(env, kAudioAttributesClassPathName); + javaAudioAttrFields.fieldRecSource = GetFieldIDOrDie(env, audioAttrClass, "mSource", "I"); + javaAudioAttrFields.fieldFlags = GetFieldIDOrDie(env, audioAttrClass, "mFlags", "I"); + javaAudioAttrFields.fieldFormattedTags = GetFieldIDOrDie(env, + audioAttrClass, "mFormattedTags", "Ljava/lang/String;"); - return AndroidRuntime::registerNativeMethods(env, - kClassPathName, gMethods, NELEM(gMethods)); + return RegisterMethodsOrDie(env, kClassPathName, gMethods, NELEM(gMethods)); } // ---------------------------------------------------------------------------- diff --git a/core/jni/android_media_AudioSystem.cpp b/core/jni/android_media_AudioSystem.cpp index f09928979be4..1ef70ea52ada 100644 --- a/core/jni/android_media_AudioSystem.cpp +++ b/core/jni/android_media_AudioSystem.cpp @@ -22,7 +22,7 @@ #include <jni.h> #include <JNIHelp.h> -#include <android_runtime/AndroidRuntime.h> +#include "core_jni_helpers.h" #include <media/AudioSystem.h> @@ -255,7 +255,9 @@ android_media_AudioSystem_setParameters(JNIEnv *env, jobject thiz, jstring keyVa const jchar* c_keyValuePairs = env->GetStringCritical(keyValuePairs, 0); String8 c_keyValuePairs8; if (keyValuePairs) { - c_keyValuePairs8 = String8(c_keyValuePairs, env->GetStringLength(keyValuePairs)); + c_keyValuePairs8 = String8( + reinterpret_cast<const char16_t*>(c_keyValuePairs), + env->GetStringLength(keyValuePairs)); env->ReleaseStringCritical(keyValuePairs, c_keyValuePairs); } int status = check_AudioSystem_Command(AudioSystem::setParameters(c_keyValuePairs8)); @@ -268,7 +270,8 @@ android_media_AudioSystem_getParameters(JNIEnv *env, jobject thiz, jstring keys) const jchar* c_keys = env->GetStringCritical(keys, 0); String8 c_keys8; if (keys) { - c_keys8 = String8(c_keys, env->GetStringLength(keys)); + c_keys8 = String8(reinterpret_cast<const char16_t*>(c_keys), + env->GetStringLength(keys)); env->ReleaseStringCritical(keys, c_keys); } return env->NewStringUTF(AudioSystem::getParameters(c_keys8).string()); @@ -1059,7 +1062,7 @@ exit: return jStatus; } -static int +static jint android_media_AudioSystem_releaseAudioPatch(JNIEnv *env, jobject clazz, jobject jPatch) { @@ -1081,7 +1084,7 @@ android_media_AudioSystem_releaseAudioPatch(JNIEnv *env, jobject clazz, status_t status = AudioSystem::releaseAudioPatch(handle); ALOGV("AudioSystem::releaseAudioPatch() returned %d", status); jint jStatus = nativeToJavaStatus(status); - return status; + return jStatus; } static jint @@ -1161,7 +1164,7 @@ android_media_AudioSystem_listAudioPatches(JNIEnv *env, jobject clazz, jStatus = AUDIO_JAVA_ERROR; goto exit; } - ALOGV("listAudioPatches patch %d num_sources %d num_sinks %d", + ALOGV("listAudioPatches patch %zu num_sources %d num_sinks %d", i, nPatches[i].num_sources, nPatches[i].num_sinks); env->SetIntField(patchHandle, gAudioHandleFields.mId, nPatches[i].id); @@ -1185,7 +1188,7 @@ android_media_AudioSystem_listAudioPatches(JNIEnv *env, jobject clazz, env->SetObjectArrayElement(jSources, j, jSource); env->DeleteLocalRef(jSource); jSource = NULL; - ALOGV("listAudioPatches patch %d source %d is a %s handle %d", + ALOGV("listAudioPatches patch %zu source %zu is a %s handle %d", i, j, nPatches[i].sources[j].type == AUDIO_PORT_TYPE_DEVICE ? "device" : "mix", nPatches[i].sources[j].id); @@ -1210,7 +1213,7 @@ android_media_AudioSystem_listAudioPatches(JNIEnv *env, jobject clazz, env->SetObjectArrayElement(jSinks, j, jSink); env->DeleteLocalRef(jSink); jSink = NULL; - ALOGV("listAudioPatches patch %d sink %d is a %s handle %d", + ALOGV("listAudioPatches patch %zu sink %zu is a %s handle %d", i, j, nPatches[i].sinks[j].type == AUDIO_PORT_TYPE_DEVICE ? "device" : "mix", nPatches[i].sinks[j].id); @@ -1354,99 +1357,94 @@ static JNINativeMethod gEventHandlerMethods[] = { int register_android_media_AudioSystem(JNIEnv *env) { - - jclass arrayListClass = env->FindClass("java/util/ArrayList"); - gArrayListClass = (jclass) env->NewGlobalRef(arrayListClass); - gArrayListMethods.add = env->GetMethodID(arrayListClass, "add", "(Ljava/lang/Object;)Z"); - - jclass audioHandleClass = env->FindClass("android/media/AudioHandle"); - gAudioHandleClass = (jclass) env->NewGlobalRef(audioHandleClass); - gAudioHandleCstor = env->GetMethodID(audioHandleClass, "<init>", "(I)V"); - gAudioHandleFields.mId = env->GetFieldID(audioHandleClass, "mId", "I"); - - jclass audioPortClass = env->FindClass("android/media/AudioPort"); - gAudioPortClass = (jclass) env->NewGlobalRef(audioPortClass); - gAudioPortCstor = env->GetMethodID(audioPortClass, "<init>", - "(Landroid/media/AudioHandle;I[I[I[I[Landroid/media/AudioGain;)V"); - gAudioPortFields.mHandle = env->GetFieldID(audioPortClass, "mHandle", + jclass arrayListClass = FindClassOrDie(env, "java/util/ArrayList"); + gArrayListClass = MakeGlobalRefOrDie(env, arrayListClass); + gArrayListMethods.add = GetMethodIDOrDie(env, arrayListClass, "add", "(Ljava/lang/Object;)Z"); + + jclass audioHandleClass = FindClassOrDie(env, "android/media/AudioHandle"); + gAudioHandleClass = MakeGlobalRefOrDie(env, audioHandleClass); + gAudioHandleCstor = GetMethodIDOrDie(env, audioHandleClass, "<init>", "(I)V"); + gAudioHandleFields.mId = GetFieldIDOrDie(env, audioHandleClass, "mId", "I"); + + jclass audioPortClass = FindClassOrDie(env, "android/media/AudioPort"); + gAudioPortClass = MakeGlobalRefOrDie(env, audioPortClass); + gAudioPortCstor = GetMethodIDOrDie(env, audioPortClass, "<init>", + "(Landroid/media/AudioHandle;I[I[I[I[Landroid/media/AudioGain;)V"); + gAudioPortFields.mHandle = GetFieldIDOrDie(env, audioPortClass, "mHandle", "Landroid/media/AudioHandle;"); - gAudioPortFields.mRole = env->GetFieldID(audioPortClass, "mRole", "I"); - gAudioPortFields.mGains = env->GetFieldID(audioPortClass, "mGains", + gAudioPortFields.mRole = GetFieldIDOrDie(env, audioPortClass, "mRole", "I"); + gAudioPortFields.mGains = GetFieldIDOrDie(env, audioPortClass, "mGains", "[Landroid/media/AudioGain;"); - gAudioPortFields.mActiveConfig = env->GetFieldID(audioPortClass, "mActiveConfig", - "Landroid/media/AudioPortConfig;"); - - jclass audioPortConfigClass = env->FindClass("android/media/AudioPortConfig"); - gAudioPortConfigClass = (jclass) env->NewGlobalRef(audioPortConfigClass); - gAudioPortConfigCstor = env->GetMethodID(audioPortConfigClass, "<init>", - "(Landroid/media/AudioPort;IIILandroid/media/AudioGainConfig;)V"); - gAudioPortConfigFields.mPort = env->GetFieldID(audioPortConfigClass, "mPort", + gAudioPortFields.mActiveConfig = GetFieldIDOrDie(env, audioPortClass, "mActiveConfig", + "Landroid/media/AudioPortConfig;"); + + jclass audioPortConfigClass = FindClassOrDie(env, "android/media/AudioPortConfig"); + gAudioPortConfigClass = MakeGlobalRefOrDie(env, audioPortConfigClass); + gAudioPortConfigCstor = GetMethodIDOrDie(env, audioPortConfigClass, "<init>", + "(Landroid/media/AudioPort;IIILandroid/media/AudioGainConfig;)V"); + gAudioPortConfigFields.mPort = GetFieldIDOrDie(env, audioPortConfigClass, "mPort", "Landroid/media/AudioPort;"); - gAudioPortConfigFields.mSamplingRate = env->GetFieldID(audioPortConfigClass, + gAudioPortConfigFields.mSamplingRate = GetFieldIDOrDie(env, audioPortConfigClass, "mSamplingRate", "I"); - gAudioPortConfigFields.mChannelMask = env->GetFieldID(audioPortConfigClass, + gAudioPortConfigFields.mChannelMask = GetFieldIDOrDie(env, audioPortConfigClass, "mChannelMask", "I"); - gAudioPortConfigFields.mFormat = env->GetFieldID(audioPortConfigClass, "mFormat", "I"); - gAudioPortConfigFields.mGain = env->GetFieldID(audioPortConfigClass, "mGain", + gAudioPortConfigFields.mFormat = GetFieldIDOrDie(env, audioPortConfigClass, "mFormat", "I"); + gAudioPortConfigFields.mGain = GetFieldIDOrDie(env, audioPortConfigClass, "mGain", "Landroid/media/AudioGainConfig;"); - gAudioPortConfigFields.mConfigMask = env->GetFieldID(audioPortConfigClass, "mConfigMask", "I"); - - jclass audioDevicePortConfigClass = env->FindClass("android/media/AudioDevicePortConfig"); - gAudioDevicePortConfigClass = (jclass) env->NewGlobalRef(audioDevicePortConfigClass); - gAudioDevicePortConfigCstor = env->GetMethodID(audioDevicePortConfigClass, "<init>", - "(Landroid/media/AudioDevicePort;IIILandroid/media/AudioGainConfig;)V"); - - jclass audioMixPortConfigClass = env->FindClass("android/media/AudioMixPortConfig"); - gAudioMixPortConfigClass = (jclass) env->NewGlobalRef(audioMixPortConfigClass); - gAudioMixPortConfigCstor = env->GetMethodID(audioMixPortConfigClass, "<init>", - "(Landroid/media/AudioMixPort;IIILandroid/media/AudioGainConfig;)V"); - - jclass audioDevicePortClass = env->FindClass("android/media/AudioDevicePort"); - gAudioDevicePortClass = (jclass) env->NewGlobalRef(audioDevicePortClass); - gAudioDevicePortCstor = env->GetMethodID(audioDevicePortClass, "<init>", - "(Landroid/media/AudioHandle;[I[I[I[Landroid/media/AudioGain;ILjava/lang/String;)V"); - - jclass audioMixPortClass = env->FindClass("android/media/AudioMixPort"); - gAudioMixPortClass = (jclass) env->NewGlobalRef(audioMixPortClass); - gAudioMixPortCstor = env->GetMethodID(audioMixPortClass, "<init>", - "(Landroid/media/AudioHandle;I[I[I[I[Landroid/media/AudioGain;)V"); - - jclass audioGainClass = env->FindClass("android/media/AudioGain"); - gAudioGainClass = (jclass) env->NewGlobalRef(audioGainClass); - gAudioGainCstor = env->GetMethodID(audioGainClass, "<init>", "(IIIIIIIII)V"); - - jclass audioGainConfigClass = env->FindClass("android/media/AudioGainConfig"); - gAudioGainConfigClass = (jclass) env->NewGlobalRef(audioGainConfigClass); - gAudioGainConfigCstor = env->GetMethodID(audioGainConfigClass, "<init>", + gAudioPortConfigFields.mConfigMask = GetFieldIDOrDie(env, audioPortConfigClass, "mConfigMask", + "I"); + + jclass audioDevicePortConfigClass = FindClassOrDie(env, "android/media/AudioDevicePortConfig"); + gAudioDevicePortConfigClass = MakeGlobalRefOrDie(env, audioDevicePortConfigClass); + gAudioDevicePortConfigCstor = GetMethodIDOrDie(env, audioDevicePortConfigClass, "<init>", + "(Landroid/media/AudioDevicePort;IIILandroid/media/AudioGainConfig;)V"); + + jclass audioMixPortConfigClass = FindClassOrDie(env, "android/media/AudioMixPortConfig"); + gAudioMixPortConfigClass = MakeGlobalRefOrDie(env, audioMixPortConfigClass); + gAudioMixPortConfigCstor = GetMethodIDOrDie(env, audioMixPortConfigClass, "<init>", + "(Landroid/media/AudioMixPort;IIILandroid/media/AudioGainConfig;)V"); + + jclass audioDevicePortClass = FindClassOrDie(env, "android/media/AudioDevicePort"); + gAudioDevicePortClass = MakeGlobalRefOrDie(env, audioDevicePortClass); + gAudioDevicePortCstor = GetMethodIDOrDie(env, audioDevicePortClass, "<init>", + "(Landroid/media/AudioHandle;[I[I[I[Landroid/media/AudioGain;ILjava/lang/String;)V"); + + jclass audioMixPortClass = FindClassOrDie(env, "android/media/AudioMixPort"); + gAudioMixPortClass = MakeGlobalRefOrDie(env, audioMixPortClass); + gAudioMixPortCstor = GetMethodIDOrDie(env, audioMixPortClass, "<init>", + "(Landroid/media/AudioHandle;I[I[I[I[Landroid/media/AudioGain;)V"); + + jclass audioGainClass = FindClassOrDie(env, "android/media/AudioGain"); + gAudioGainClass = MakeGlobalRefOrDie(env, audioGainClass); + gAudioGainCstor = GetMethodIDOrDie(env, audioGainClass, "<init>", "(IIIIIIIII)V"); + + jclass audioGainConfigClass = FindClassOrDie(env, "android/media/AudioGainConfig"); + gAudioGainConfigClass = MakeGlobalRefOrDie(env, audioGainConfigClass); + gAudioGainConfigCstor = GetMethodIDOrDie(env, audioGainConfigClass, "<init>", "(ILandroid/media/AudioGain;II[II)V"); - gAudioGainConfigFields.mIndex = env->GetFieldID(gAudioGainConfigClass, "mIndex", "I"); - gAudioGainConfigFields.mMode = env->GetFieldID(audioGainConfigClass, "mMode", "I"); - gAudioGainConfigFields.mChannelMask = env->GetFieldID(audioGainConfigClass, "mChannelMask", + gAudioGainConfigFields.mIndex = GetFieldIDOrDie(env, gAudioGainConfigClass, "mIndex", "I"); + gAudioGainConfigFields.mMode = GetFieldIDOrDie(env, audioGainConfigClass, "mMode", "I"); + gAudioGainConfigFields.mChannelMask = GetFieldIDOrDie(env, audioGainConfigClass, "mChannelMask", "I"); - gAudioGainConfigFields.mValues = env->GetFieldID(audioGainConfigClass, "mValues", "[I"); - gAudioGainConfigFields.mRampDurationMs = env->GetFieldID(audioGainConfigClass, + gAudioGainConfigFields.mValues = GetFieldIDOrDie(env, audioGainConfigClass, "mValues", "[I"); + gAudioGainConfigFields.mRampDurationMs = GetFieldIDOrDie(env, audioGainConfigClass, "mRampDurationMs", "I"); - jclass audioPatchClass = env->FindClass("android/media/AudioPatch"); - gAudioPatchClass = (jclass) env->NewGlobalRef(audioPatchClass); - gAudioPatchCstor = env->GetMethodID(audioPatchClass, "<init>", + jclass audioPatchClass = FindClassOrDie(env, "android/media/AudioPatch"); + gAudioPatchClass = MakeGlobalRefOrDie(env, audioPatchClass); + gAudioPatchCstor = GetMethodIDOrDie(env, audioPatchClass, "<init>", "(Landroid/media/AudioHandle;[Landroid/media/AudioPortConfig;[Landroid/media/AudioPortConfig;)V"); - gAudioPatchFields.mHandle = env->GetFieldID(audioPatchClass, "mHandle", + gAudioPatchFields.mHandle = GetFieldIDOrDie(env, audioPatchClass, "mHandle", "Landroid/media/AudioHandle;"); - jclass eventHandlerClass = env->FindClass(kEventHandlerClassPathName); - gPostEventFromNative = env->GetStaticMethodID(eventHandlerClass, "postEventFromNative", - "(Ljava/lang/Object;IIILjava/lang/Object;)V"); + jclass eventHandlerClass = FindClassOrDie(env, kEventHandlerClassPathName); + gPostEventFromNative = GetStaticMethodIDOrDie(env, eventHandlerClass, "postEventFromNative", + "(Ljava/lang/Object;IIILjava/lang/Object;)V"); AudioSystem::setErrorCallback(android_media_AudioSystem_error_callback); - int status = AndroidRuntime::registerNativeMethods(env, - kClassPathName, gMethods, NELEM(gMethods)); - - if (status == 0) { - status = AndroidRuntime::registerNativeMethods(env, - kEventHandlerClassPathName, gEventHandlerMethods, NELEM(gEventHandlerMethods)); - } - return status; + RegisterMethodsOrDie(env, kClassPathName, gMethods, NELEM(gMethods)); + return RegisterMethodsOrDie(env, kEventHandlerClassPathName, gEventHandlerMethods, + NELEM(gEventHandlerMethods)); } diff --git a/core/jni/android_media_AudioTrack.cpp b/core/jni/android_media_AudioTrack.cpp index ab38864301f3..c6f4199ab7bc 100644 --- a/core/jni/android_media_AudioTrack.cpp +++ b/core/jni/android_media_AudioTrack.cpp @@ -19,7 +19,7 @@ #include <JNIHelp.h> #include <JniConstants.h> -#include <android_runtime/AndroidRuntime.h> +#include "core_jni_helpers.h" #include "ScopedBytes.h" @@ -1062,68 +1062,34 @@ int register_android_media_AudioTrack(JNIEnv *env) javaAudioTrackFields.postNativeEventInJava = NULL; // Get the AudioTrack class - jclass audioTrackClass = env->FindClass(kClassPathName); - if (audioTrackClass == NULL) { - ALOGE("Can't find %s", kClassPathName); - return -1; - } + jclass audioTrackClass = FindClassOrDie(env, kClassPathName); // Get the postEvent method - javaAudioTrackFields.postNativeEventInJava = env->GetStaticMethodID( - audioTrackClass, - JAVA_POSTEVENT_CALLBACK_NAME, "(Ljava/lang/Object;IIILjava/lang/Object;)V"); - if (javaAudioTrackFields.postNativeEventInJava == NULL) { - ALOGE("Can't find AudioTrack.%s", JAVA_POSTEVENT_CALLBACK_NAME); - return -1; - } + javaAudioTrackFields.postNativeEventInJava = GetStaticMethodIDOrDie(env, + audioTrackClass, JAVA_POSTEVENT_CALLBACK_NAME, + "(Ljava/lang/Object;IIILjava/lang/Object;)V"); // Get the variables fields // nativeTrackInJavaObj - javaAudioTrackFields.nativeTrackInJavaObj = env->GetFieldID( - audioTrackClass, - JAVA_NATIVETRACKINJAVAOBJ_FIELD_NAME, "J"); - if (javaAudioTrackFields.nativeTrackInJavaObj == NULL) { - ALOGE("Can't find AudioTrack.%s", JAVA_NATIVETRACKINJAVAOBJ_FIELD_NAME); - return -1; - } + javaAudioTrackFields.nativeTrackInJavaObj = GetFieldIDOrDie(env, + audioTrackClass, JAVA_NATIVETRACKINJAVAOBJ_FIELD_NAME, "J"); // jniData - javaAudioTrackFields.jniData = env->GetFieldID( - audioTrackClass, - JAVA_JNIDATA_FIELD_NAME, "J"); - if (javaAudioTrackFields.jniData == NULL) { - ALOGE("Can't find AudioTrack.%s", JAVA_JNIDATA_FIELD_NAME); - return -1; - } + javaAudioTrackFields.jniData = GetFieldIDOrDie(env, + audioTrackClass, JAVA_JNIDATA_FIELD_NAME, "J"); // fieldStreamType - javaAudioTrackFields.fieldStreamType = env->GetFieldID(audioTrackClass, - JAVA_STREAMTYPE_FIELD_NAME, "I"); - if (javaAudioTrackFields.fieldStreamType == NULL) { - ALOGE("Can't find AudioTrack.%s", JAVA_STREAMTYPE_FIELD_NAME); - return -1; - } + javaAudioTrackFields.fieldStreamType = GetFieldIDOrDie(env, + audioTrackClass, JAVA_STREAMTYPE_FIELD_NAME, "I"); // Get the AudioAttributes class and fields - jclass audioAttrClass = env->FindClass(kAudioAttributesClassPathName); - if (audioAttrClass == NULL) { - ALOGE("Can't find %s", kAudioAttributesClassPathName); - return -1; - } - jclass audioAttributesClassRef = (jclass)env->NewGlobalRef(audioAttrClass); - javaAudioAttrFields.fieldUsage = env->GetFieldID(audioAttributesClassRef, "mUsage", "I"); - javaAudioAttrFields.fieldContentType - = env->GetFieldID(audioAttributesClassRef, "mContentType", "I"); - javaAudioAttrFields.fieldFlags = env->GetFieldID(audioAttributesClassRef, "mFlags", "I"); - javaAudioAttrFields.fieldFormattedTags = - env->GetFieldID(audioAttributesClassRef, "mFormattedTags", "Ljava/lang/String;"); - env->DeleteGlobalRef(audioAttributesClassRef); - if (javaAudioAttrFields.fieldUsage == NULL || javaAudioAttrFields.fieldContentType == NULL - || javaAudioAttrFields.fieldFlags == NULL - || javaAudioAttrFields.fieldFormattedTags == NULL) { - ALOGE("Can't initialize AudioAttributes fields"); - return -1; - } - - return AndroidRuntime::registerNativeMethods(env, kClassPathName, gMethods, NELEM(gMethods)); + jclass audioAttrClass = FindClassOrDie(env, kAudioAttributesClassPathName); + javaAudioAttrFields.fieldUsage = GetFieldIDOrDie(env, audioAttrClass, "mUsage", "I"); + javaAudioAttrFields.fieldContentType = GetFieldIDOrDie(env, + audioAttrClass, "mContentType", "I"); + javaAudioAttrFields.fieldFlags = GetFieldIDOrDie(env, audioAttrClass, "mFlags", "I"); + javaAudioAttrFields.fieldFormattedTags = GetFieldIDOrDie(env, + audioAttrClass, "mFormattedTags", "Ljava/lang/String;"); + + return RegisterMethodsOrDie(env, kClassPathName, gMethods, NELEM(gMethods)); } diff --git a/core/jni/android_media_JetPlayer.cpp b/core/jni/android_media_JetPlayer.cpp index 69f57118aa2c..d441f1015dfc 100644 --- a/core/jni/android_media_JetPlayer.cpp +++ b/core/jni/android_media_JetPlayer.cpp @@ -24,7 +24,7 @@ #include <jni.h> #include <JNIHelp.h> -#include <android_runtime/AndroidRuntime.h> +#include "core_jni_helpers.h" #include <utils/Log.h> #include <media/JetPlayer.h> @@ -517,36 +517,22 @@ static JNINativeMethod gMethods[] = { int register_android_media_JetPlayer(JNIEnv *env) { - jclass jetPlayerClass = NULL; javaJetPlayerFields.jetClass = NULL; javaJetPlayerFields.postNativeEventInJava = NULL; javaJetPlayerFields.nativePlayerInJavaObj = NULL; // Get the JetPlayer java class - jetPlayerClass = env->FindClass(kClassPathName); - if (jetPlayerClass == NULL) { - ALOGE("Can't find %s", kClassPathName); - return -1; - } - javaJetPlayerFields.jetClass = (jclass)env->NewGlobalRef(jetPlayerClass); + jclass jetPlayerClass = FindClassOrDie(env, kClassPathName); + javaJetPlayerFields.jetClass = MakeGlobalRefOrDie(env, jetPlayerClass); // Get the mNativePlayerInJavaObj variable field - javaJetPlayerFields.nativePlayerInJavaObj = env->GetFieldID( - jetPlayerClass, - JAVA_NATIVEJETPLAYERINJAVAOBJ_FIELD_NAME, "J"); - if (javaJetPlayerFields.nativePlayerInJavaObj == NULL) { - ALOGE("Can't find JetPlayer.%s", JAVA_NATIVEJETPLAYERINJAVAOBJ_FIELD_NAME); - return -1; - } + javaJetPlayerFields.nativePlayerInJavaObj = GetFieldIDOrDie(env, + jetPlayerClass, JAVA_NATIVEJETPLAYERINJAVAOBJ_FIELD_NAME, "J"); // Get the callback to post events from this native code to Java - javaJetPlayerFields.postNativeEventInJava = env->GetStaticMethodID(javaJetPlayerFields.jetClass, - JAVA_NATIVEJETPOSTEVENT_CALLBACK_NAME, "(Ljava/lang/Object;III)V"); - if (javaJetPlayerFields.postNativeEventInJava == NULL) { - ALOGE("Can't find Jet.%s", JAVA_NATIVEJETPOSTEVENT_CALLBACK_NAME); - return -1; - } + javaJetPlayerFields.postNativeEventInJava = GetStaticMethodIDOrDie(env, + javaJetPlayerFields.jetClass, JAVA_NATIVEJETPOSTEVENT_CALLBACK_NAME, + "(Ljava/lang/Object;III)V"); - return AndroidRuntime::registerNativeMethods(env, - kClassPathName, gMethods, NELEM(gMethods)); + return RegisterMethodsOrDie(env, kClassPathName, gMethods, NELEM(gMethods)); } diff --git a/core/jni/android_media_RemoteDisplay.cpp b/core/jni/android_media_RemoteDisplay.cpp index 1cd3fbbadcb2..e2bba30d1d66 100644 --- a/core/jni/android_media_RemoteDisplay.cpp +++ b/core/jni/android_media_RemoteDisplay.cpp @@ -22,7 +22,7 @@ #include "android_os_Parcel.h" #include "android_util_Binder.h" -#include <android_runtime/AndroidRuntime.h> +#include "core_jni_helpers.h" #include <android_runtime/android_view_Surface.h> #include <android_runtime/Log.h> @@ -188,17 +188,15 @@ static JNINativeMethod gMethods[] = { int register_android_media_RemoteDisplay(JNIEnv* env) { - int err = AndroidRuntime::registerNativeMethods(env, "android/media/RemoteDisplay", - gMethods, NELEM(gMethods)); - - jclass clazz = env->FindClass("android/media/RemoteDisplay"); - gRemoteDisplayClassInfo.notifyDisplayConnected = - env->GetMethodID(clazz, "notifyDisplayConnected", - "(Landroid/view/Surface;IIII)V"); - gRemoteDisplayClassInfo.notifyDisplayDisconnected = - env->GetMethodID(clazz, "notifyDisplayDisconnected", "()V"); - gRemoteDisplayClassInfo.notifyDisplayError = - env->GetMethodID(clazz, "notifyDisplayError", "(I)V"); + int err = RegisterMethodsOrDie(env, "android/media/RemoteDisplay", gMethods, NELEM(gMethods)); + + jclass clazz = FindClassOrDie(env, "android/media/RemoteDisplay"); + gRemoteDisplayClassInfo.notifyDisplayConnected = GetMethodIDOrDie(env, + clazz, "notifyDisplayConnected", "(Landroid/view/Surface;IIII)V"); + gRemoteDisplayClassInfo.notifyDisplayDisconnected = GetMethodIDOrDie(env, + clazz, "notifyDisplayDisconnected", "()V"); + gRemoteDisplayClassInfo.notifyDisplayError = GetMethodIDOrDie(env, + clazz, "notifyDisplayError", "(I)V"); return err; } diff --git a/core/jni/android_media_ToneGenerator.cpp b/core/jni/android_media_ToneGenerator.cpp index ca00709e179c..243f0400775e 100644 --- a/core/jni/android_media_ToneGenerator.cpp +++ b/core/jni/android_media_ToneGenerator.cpp @@ -23,7 +23,7 @@ #include <jni.h> #include <JNIHelp.h> -#include <android_runtime/AndroidRuntime.h> +#include "core_jni_helpers.h" #include <utils/Log.h> #include <media/AudioSystem.h> @@ -134,21 +134,10 @@ static JNINativeMethod gMethods[] = { int register_android_media_ToneGenerator(JNIEnv *env) { - jclass clazz; + jclass clazz = FindClassOrDie(env, "android/media/ToneGenerator"); - clazz = env->FindClass("android/media/ToneGenerator"); - if (clazz == NULL) { - ALOGE("Can't find %s", "android/media/ToneGenerator"); - return -1; - } - - fields.context = env->GetFieldID(clazz, "mNativeContext", "J"); - if (fields.context == NULL) { - ALOGE("Can't find ToneGenerator.mNativeContext"); - return -1; - } + fields.context = GetFieldIDOrDie(env, clazz, "mNativeContext", "J"); ALOGV("register_android_media_ToneGenerator ToneGenerator fields.context: %p", fields.context); - return AndroidRuntime::registerNativeMethods(env, - "android/media/ToneGenerator", gMethods, NELEM(gMethods)); + return RegisterMethodsOrDie(env, "android/media/ToneGenerator", gMethods, NELEM(gMethods)); } diff --git a/core/jni/android_net_LocalSocketImpl.cpp b/core/jni/android_net_LocalSocketImpl.cpp index a408a96cd2fa..97abe6bb7324 100644 --- a/core/jni/android_net_LocalSocketImpl.cpp +++ b/core/jni/android_net_LocalSocketImpl.cpp @@ -39,6 +39,9 @@ namespace android { +template <typename T> +void UNUSED(T t) {} + static jfieldID field_inboundFileDescriptors; static jfieldID field_outboundFileDescriptors; static jclass class_Credentials; @@ -492,7 +495,6 @@ static ssize_t socket_read_all(JNIEnv *env, jobject thisJ, int fd, void *buffer, size_t len) { ssize_t ret; - ssize_t bytesread = 0; struct msghdr msg; struct iovec iv; unsigned char *buf = (unsigned char *)buffer; @@ -722,7 +724,7 @@ static void socket_write (JNIEnv *env, jobject object, } err = socket_write_all(env, object, fd, &b, 1); - + UNUSED(err); // A return of -1 above means an exception is pending } @@ -758,7 +760,7 @@ static void socket_writeba (JNIEnv *env, jobject object, err = socket_write_all(env, object, fd, byteBuffer + off, len); - + UNUSED(err); // A return of -1 above means an exception is pending env->ReleaseByteArrayElements(buffer, byteBuffer, JNI_ABORT); diff --git a/core/jni/android_net_NetUtils.cpp b/core/jni/android_net_NetUtils.cpp index 8b9f5744d244..991b43fd28bf 100644 --- a/core/jni/android_net_NetUtils.cpp +++ b/core/jni/android_net_NetUtils.cpp @@ -26,6 +26,8 @@ #include <arpa/inet.h> #include <cutils/properties.h> +#include "core_jni_helpers.h" + extern "C" { int ifc_enable(const char *ifname); int ifc_disable(const char *ifname); @@ -269,27 +271,26 @@ static JNINativeMethod gNetworkUtilMethods[] = { int register_android_net_NetworkUtils(JNIEnv* env) { - jclass dhcpResultsClass = env->FindClass("android/net/DhcpResults"); - LOG_FATAL_IF(dhcpResultsClass == NULL, "Unable to find class android/net/DhcpResults"); - dhcpResultsFieldIds.clear = - env->GetMethodID(dhcpResultsClass, "clear", "()V"); - dhcpResultsFieldIds.setIpAddress = - env->GetMethodID(dhcpResultsClass, "setIpAddress", "(Ljava/lang/String;I)Z"); - dhcpResultsFieldIds.setGateway = - env->GetMethodID(dhcpResultsClass, "setGateway", "(Ljava/lang/String;)Z"); - dhcpResultsFieldIds.addDns = - env->GetMethodID(dhcpResultsClass, "addDns", "(Ljava/lang/String;)Z"); - dhcpResultsFieldIds.setDomains = - env->GetMethodID(dhcpResultsClass, "setDomains", "(Ljava/lang/String;)V"); - dhcpResultsFieldIds.setServerAddress = - env->GetMethodID(dhcpResultsClass, "setServerAddress", "(Ljava/lang/String;)Z"); - dhcpResultsFieldIds.setLeaseDuration = - env->GetMethodID(dhcpResultsClass, "setLeaseDuration", "(I)V"); - dhcpResultsFieldIds.setVendorInfo = - env->GetMethodID(dhcpResultsClass, "setVendorInfo", "(Ljava/lang/String;)V"); - - return AndroidRuntime::registerNativeMethods(env, - NETUTILS_PKG_NAME, gNetworkUtilMethods, NELEM(gNetworkUtilMethods)); + jclass dhcpResultsClass = FindClassOrDie(env, "android/net/DhcpResults"); + + dhcpResultsFieldIds.clear = GetMethodIDOrDie(env, dhcpResultsClass, "clear", "()V"); + dhcpResultsFieldIds.setIpAddress =GetMethodIDOrDie(env, dhcpResultsClass, "setIpAddress", + "(Ljava/lang/String;I)Z"); + dhcpResultsFieldIds.setGateway = GetMethodIDOrDie(env, dhcpResultsClass, "setGateway", + "(Ljava/lang/String;)Z"); + dhcpResultsFieldIds.addDns = GetMethodIDOrDie(env, dhcpResultsClass, "addDns", + "(Ljava/lang/String;)Z"); + dhcpResultsFieldIds.setDomains = GetMethodIDOrDie(env, dhcpResultsClass, "setDomains", + "(Ljava/lang/String;)V"); + dhcpResultsFieldIds.setServerAddress = GetMethodIDOrDie(env, dhcpResultsClass, + "setServerAddress", "(Ljava/lang/String;)Z"); + dhcpResultsFieldIds.setLeaseDuration = GetMethodIDOrDie(env, dhcpResultsClass, + "setLeaseDuration", "(I)V"); + dhcpResultsFieldIds.setVendorInfo = GetMethodIDOrDie(env, dhcpResultsClass, "setVendorInfo", + "(Ljava/lang/String;)V"); + + return RegisterMethodsOrDie(env, NETUTILS_PKG_NAME, gNetworkUtilMethods, + NELEM(gNetworkUtilMethods)); } }; // namespace android diff --git a/core/jni/android_net_TrafficStats.cpp b/core/jni/android_net_TrafficStats.cpp index 031637f41db1..735441743516 100644 --- a/core/jni/android_net_TrafficStats.cpp +++ b/core/jni/android_net_TrafficStats.cpp @@ -23,7 +23,7 @@ #include <sys/stat.h> #include <sys/types.h> -#include <android_runtime/AndroidRuntime.h> +#include "core_jni_helpers.h" #include <jni.h> #include <ScopedUtfChars.h> #include <utils/misc.h> @@ -192,8 +192,7 @@ static JNINativeMethod gMethods[] = { }; int register_android_net_TrafficStats(JNIEnv* env) { - return AndroidRuntime::registerNativeMethods(env, "android/net/TrafficStats", - gMethods, NELEM(gMethods)); + return RegisterMethodsOrDie(env, "android/net/TrafficStats", gMethods, NELEM(gMethods)); } } diff --git a/core/jni/android_nfc.h b/core/jni/android_nfc.h deleted file mode 100644 index 36346e359b59..000000000000 --- a/core/jni/android_nfc.h +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Copyright (C) 2010 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. - */ - -/* - * Contains the bare minimum header so that framework NFC jni can link - * against NFC native library - */ - -#ifndef __ANDROID_NFC_H__ -#define __ANDROID_NFC_H__ - -#define LOG_TAG "NdefMessage" -#include <utils/Log.h> - -extern "C" { - -#if 0 - #define TRACE(...) ALOG(LOG_DEBUG, "NdefMessage", __VA_ARGS__) -#else - #define TRACE(...) -#endif - -typedef struct phFriNfc_NdefRecord { - uint8_t Flags; - uint8_t Tnf; - uint8_t TypeLength; - uint8_t *Type; - uint8_t IdLength; - uint8_t *Id; - uint32_t PayloadLength; - uint8_t *PayloadData; -} phFriNfc_NdefRecord_t; - -uint16_t phFriNfc_NdefRecord_GetRecords(uint8_t* pBuffer, - uint32_t BufferLength, - uint8_t* pRawRecords[ ], - uint8_t IsChunked[ ], - uint32_t* pNumberOfRawRecords - ); -uint16_t phFriNfc_NdefRecord_Parse(phFriNfc_NdefRecord_t* pRecord, - uint8_t* pRawRecord); - -uint16_t phFriNfc_NdefRecord_Generate(phFriNfc_NdefRecord_t* pRecord, - uint8_t* pBuffer, - uint32_t MaxBufferSize, - uint32_t* pBytesWritten - ); -} - -#endif diff --git a/core/jni/android_nio_utils.cpp b/core/jni/android_nio_utils.cpp index 59d6e41cec6a..ed8c6038f69d 100644 --- a/core/jni/android_nio_utils.cpp +++ b/core/jni/android_nio_utils.cpp @@ -16,6 +16,8 @@ #include "android_nio_utils.h" +#include "core_jni_helpers.h" + struct NioJNIData { jclass nioAccessClass; @@ -73,39 +75,19 @@ android::AutoBufferPointer::~AutoBufferPointer() { /////////////////////////////////////////////////////////////////////////////// -static jclass findClass(JNIEnv* env, const char name[]) { - jclass c = env->FindClass(name); - LOG_FATAL_IF(!c, "Unable to find class %s", name); - return c; -} - -static jmethodID findStaticMethod(JNIEnv* env, jclass c, const char method[], - const char params[]) { - jmethodID m = env->GetStaticMethodID(c, method, params); - LOG_FATAL_IF(!m, "Unable to find method %s", method); - return m; -} - -static jfieldID getFieldID(JNIEnv* env, jclass c, const char name[], - const char type[]) { - jfieldID f = env->GetFieldID(c, name, type); - LOG_FATAL_IF(!f, "Unable to find field %s", name); - return f; -} - namespace android { int register_android_nio_utils(JNIEnv* env) { - jclass localClass = findClass(env, "java/nio/NIOAccess"); - gNioJNI.getBasePointerID = findStaticMethod(env, localClass, - "getBasePointer", "(Ljava/nio/Buffer;)J"); - gNioJNI.getBaseArrayID = findStaticMethod(env, localClass, - "getBaseArray", "(Ljava/nio/Buffer;)Ljava/lang/Object;"); - gNioJNI.getBaseArrayOffsetID = findStaticMethod(env, localClass, - "getBaseArrayOffset", "(Ljava/nio/Buffer;)I"); + jclass localClass = FindClassOrDie(env, "java/nio/NIOAccess"); + gNioJNI.getBasePointerID = GetStaticMethodIDOrDie(env, localClass, "getBasePointer", + "(Ljava/nio/Buffer;)J"); + gNioJNI.getBaseArrayID = GetStaticMethodIDOrDie(env, localClass, "getBaseArray", + "(Ljava/nio/Buffer;)Ljava/lang/Object;"); + gNioJNI.getBaseArrayOffsetID = GetStaticMethodIDOrDie(env, localClass, "getBaseArrayOffset", + "(Ljava/nio/Buffer;)I"); // now record a permanent version of the class ID - gNioJNI.nioAccessClass = (jclass) env->NewGlobalRef(localClass); + gNioJNI.nioAccessClass = MakeGlobalRefOrDie(env, localClass); return 0; } diff --git a/core/jni/android_nio_utils.h b/core/jni/android_nio_utils.h index 69c360c7b569..c634cb917719 100644 --- a/core/jni/android_nio_utils.h +++ b/core/jni/android_nio_utils.h @@ -14,8 +14,8 @@ * limitations under the License. */ -#ifndef android_nio_utils_DEFINED -#define android_nio_utils_DEFINED +#ifndef _ANDROID_NIO_UTILS_H_ +#define _ANDROID_NIO_UTILS_H_ #include <android_runtime/AndroidRuntime.h> @@ -58,17 +58,16 @@ class AutoBufferPointer { public: AutoBufferPointer(JNIEnv* env, jobject nioBuffer, jboolean commit); ~AutoBufferPointer(); - + void* pointer() const { return fPointer; } - + private: JNIEnv* fEnv; void* fPointer; jarray fArray; - jint fRemaining; jboolean fCommit; }; } /* namespace android */ -#endif +#endif // _ANDROID_NIO_UTILS_H_ diff --git a/core/jni/android_opengl_EGL14.cpp b/core/jni/android_opengl_EGL14.cpp index 19e4d99cb21d..1afcf736cea8 100644 --- a/core/jni/android_opengl_EGL14.cpp +++ b/core/jni/android_opengl_EGL14.cpp @@ -16,6 +16,10 @@ // This source file is automatically generated +#pragma GCC diagnostic ignored "-Wunused-variable" +#pragma GCC diagnostic ignored "-Wunused-but-set-variable" +#pragma GCC diagnostic ignored "-Wunused-function" + #include "jni.h" #include "JNIHelp.h" #include <android_runtime/AndroidRuntime.h> diff --git a/core/jni/android_opengl_EGLExt.cpp b/core/jni/android_opengl_EGLExt.cpp index 15899f50a9fe..60a3bf642915 100644 --- a/core/jni/android_opengl_EGLExt.cpp +++ b/core/jni/android_opengl_EGLExt.cpp @@ -16,6 +16,10 @@ // This source file is automatically generated +#pragma GCC diagnostic ignored "-Wunused-variable" +#pragma GCC diagnostic ignored "-Wunused-but-set-variable" +#pragma GCC diagnostic ignored "-Wunused-function" + #include "jni.h" #include "JNIHelp.h" #include <android_runtime/AndroidRuntime.h> @@ -81,23 +85,19 @@ nativeClassInit(JNIEnv *_env, jclass glImplClass) eglsurfaceConstructor = _env->GetMethodID(eglsurfaceClass, "<init>", "(J)V"); eglconfigConstructor = _env->GetMethodID(eglconfigClass, "<init>", "(J)V"); - jobject localeglNoContextObject = _env->NewObject(eglcontextClass, eglcontextConstructor, reinterpret_cast<jlong>(EGL_NO_CONTEXT)); - eglNoContextObject = _env->NewGlobalRef(localeglNoContextObject); - jobject localeglNoDisplayObject = _env->NewObject(egldisplayClass, egldisplayConstructor, reinterpret_cast<jlong>(EGL_NO_DISPLAY)); - eglNoDisplayObject = _env->NewGlobalRef(localeglNoDisplayObject); - jobject localeglNoSurfaceObject = _env->NewObject(eglsurfaceClass, eglsurfaceConstructor, reinterpret_cast<jlong>(EGL_NO_SURFACE)); - eglNoSurfaceObject = _env->NewGlobalRef(localeglNoSurfaceObject); - jclass eglClass = _env->FindClass("android/opengl/EGL14"); jfieldID noContextFieldID = _env->GetStaticFieldID(eglClass, "EGL_NO_CONTEXT", "Landroid/opengl/EGLContext;"); - _env->SetStaticObjectField(eglClass, noContextFieldID, eglNoContextObject); + jobject localeglNoContextObject = _env->GetStaticObjectField(eglClass, noContextFieldID); + eglNoContextObject = _env->NewGlobalRef(localeglNoContextObject); jfieldID noDisplayFieldID = _env->GetStaticFieldID(eglClass, "EGL_NO_DISPLAY", "Landroid/opengl/EGLDisplay;"); - _env->SetStaticObjectField(eglClass, noDisplayFieldID, eglNoDisplayObject); + jobject localeglNoDisplayObject = _env->GetStaticObjectField(eglClass, noDisplayFieldID); + eglNoDisplayObject = _env->NewGlobalRef(localeglNoDisplayObject); jfieldID noSurfaceFieldID = _env->GetStaticFieldID(eglClass, "EGL_NO_SURFACE", "Landroid/opengl/EGLSurface;"); - _env->SetStaticObjectField(eglClass, noSurfaceFieldID, eglNoSurfaceObject); + jobject localeglNoSurfaceObject = _env->GetStaticObjectField(eglClass, noSurfaceFieldID); + eglNoSurfaceObject = _env->NewGlobalRef(localeglNoSurfaceObject); } static void * diff --git a/core/jni/android_opengl_GLES10.cpp b/core/jni/android_opengl_GLES10.cpp index 0a39a8e41dc6..c9b68bfe661a 100644 --- a/core/jni/android_opengl_GLES10.cpp +++ b/core/jni/android_opengl_GLES10.cpp @@ -17,6 +17,10 @@ // This source file is automatically generated +#pragma GCC diagnostic ignored "-Wunused-variable" +#pragma GCC diagnostic ignored "-Wunused-but-set-variable" +#pragma GCC diagnostic ignored "-Wunused-function" + #include <GLES/gl.h> #include <GLES/glext.h> diff --git a/core/jni/android_opengl_GLES10Ext.cpp b/core/jni/android_opengl_GLES10Ext.cpp index 83d9bda05f5b..4f1eaa52e780 100644 --- a/core/jni/android_opengl_GLES10Ext.cpp +++ b/core/jni/android_opengl_GLES10Ext.cpp @@ -17,6 +17,10 @@ // This source file is automatically generated +#pragma GCC diagnostic ignored "-Wunused-variable" +#pragma GCC diagnostic ignored "-Wunused-but-set-variable" +#pragma GCC diagnostic ignored "-Wunused-function" + #include <GLES/gl.h> #include <GLES/glext.h> diff --git a/core/jni/android_opengl_GLES11.cpp b/core/jni/android_opengl_GLES11.cpp index a292cf2d8dba..08c4740bc1c5 100644 --- a/core/jni/android_opengl_GLES11.cpp +++ b/core/jni/android_opengl_GLES11.cpp @@ -17,6 +17,10 @@ // This source file is automatically generated +#pragma GCC diagnostic ignored "-Wunused-variable" +#pragma GCC diagnostic ignored "-Wunused-but-set-variable" +#pragma GCC diagnostic ignored "-Wunused-function" + #include <GLES/gl.h> #include <GLES/glext.h> diff --git a/core/jni/android_opengl_GLES11Ext.cpp b/core/jni/android_opengl_GLES11Ext.cpp index 4ee5f153df21..21e5670f75aa 100644 --- a/core/jni/android_opengl_GLES11Ext.cpp +++ b/core/jni/android_opengl_GLES11Ext.cpp @@ -17,6 +17,10 @@ // This source file is automatically generated +#pragma GCC diagnostic ignored "-Wunused-variable" +#pragma GCC diagnostic ignored "-Wunused-but-set-variable" +#pragma GCC diagnostic ignored "-Wunused-function" + #include <GLES/gl.h> #include <GLES/glext.h> diff --git a/core/jni/android_opengl_GLES20.cpp b/core/jni/android_opengl_GLES20.cpp index 60ab37b69d44..cd0c1354f111 100644 --- a/core/jni/android_opengl_GLES20.cpp +++ b/core/jni/android_opengl_GLES20.cpp @@ -17,6 +17,10 @@ // This source file is automatically generated +#pragma GCC diagnostic ignored "-Wunused-variable" +#pragma GCC diagnostic ignored "-Wunused-but-set-variable" +#pragma GCC diagnostic ignored "-Wunused-function" + #include <GLES2/gl2.h> #include <GLES2/gl2ext.h> diff --git a/core/jni/android_opengl_GLES30.cpp b/core/jni/android_opengl_GLES30.cpp index ba324b09001e..713fff9cd463 100644 --- a/core/jni/android_opengl_GLES30.cpp +++ b/core/jni/android_opengl_GLES30.cpp @@ -17,6 +17,10 @@ // This source file is automatically generated +#pragma GCC diagnostic ignored "-Wunused-variable" +#pragma GCC diagnostic ignored "-Wunused-but-set-variable" +#pragma GCC diagnostic ignored "-Wunused-function" + #include <GLES3/gl3.h> #include <GLES3/gl3ext.h> diff --git a/core/jni/android_opengl_GLES31.cpp b/core/jni/android_opengl_GLES31.cpp index bc9fc5d6b437..e5ea9504716a 100644 --- a/core/jni/android_opengl_GLES31.cpp +++ b/core/jni/android_opengl_GLES31.cpp @@ -16,6 +16,10 @@ // This source file is automatically generated +#pragma GCC diagnostic ignored "-Wunused-variable" +#pragma GCC diagnostic ignored "-Wunused-but-set-variable" +#pragma GCC diagnostic ignored "-Wunused-function" + #include <stdint.h> #include <GLES3/gl31.h> #include <jni.h> @@ -351,7 +355,7 @@ static void android_glDrawArraysIndirect(JNIEnv *_env, jobject, int mode, jlong // In OpenGL ES, 'indirect' is a byte offset into a buffer, not a raw pointer. // GL checks for too-large values. Here we only need to check for successful signed 64-bit // to unsigned 32-bit conversion. - if (sizeof(void*) != sizeof(jlong) && indirect > UINTPTR_MAX) { + if (sizeof(void*) != sizeof(jlong) && indirect > static_cast<jlong>(UINT32_MAX)) { jniThrowException(_env, "java/lang/IllegalArgumentException", "indirect offset too large"); return; } @@ -363,7 +367,7 @@ static void android_glDrawElementsIndirect(JNIEnv *_env, jobject, jint mode, jin // In OpenGL ES, 'indirect' is a byte offset into a buffer, not a raw pointer. // GL checks for too-large values. Here we only need to check for successful signed 64-bit // to unsigned 32-bit conversion. - if (sizeof(void*) != sizeof(jlong) && indirect > UINTPTR_MAX) { + if (sizeof(void*) != sizeof(jlong) && indirect > static_cast<jlong>(UINT32_MAX)) { jniThrowException(_env, "java/lang/IllegalArgumentException", "indirect offset too large"); return; } diff --git a/core/jni/android_opengl_GLES31Ext.cpp b/core/jni/android_opengl_GLES31Ext.cpp index d76c166489c2..7317e9f48a0b 100644 --- a/core/jni/android_opengl_GLES31Ext.cpp +++ b/core/jni/android_opengl_GLES31Ext.cpp @@ -16,6 +16,10 @@ // This source file is automatically generated +#pragma GCC diagnostic ignored "-Wunused-variable" +#pragma GCC diagnostic ignored "-Wunused-but-set-variable" +#pragma GCC diagnostic ignored "-Wunused-function" + #include <GLES3/gl31.h> #include <GLES2/gl2ext.h> diff --git a/core/jni/android_os_Debug.cpp b/core/jni/android_os_Debug.cpp index 7b3528b23823..db32272ea197 100644 --- a/core/jni/android_os_Debug.cpp +++ b/core/jni/android_os_Debug.cpp @@ -222,13 +222,12 @@ static void read_mapinfo(FILE *fp, stats_t* stats) int len, nameLen; bool skip, done = false; - unsigned size = 0, resident = 0, pss = 0, swappable_pss = 0; + unsigned pss = 0, swappable_pss = 0; float sharing_proportion = 0.0; unsigned shared_clean = 0, shared_dirty = 0; unsigned private_clean = 0, private_dirty = 0; unsigned swapped_out = 0; bool is_swappable = false; - unsigned referenced = 0; unsigned temp; uint64_t start; @@ -273,6 +272,7 @@ static void read_mapinfo(FILE *fp, stats_t* stats) subHeap = HEAP_DALVIK_LINEARALLOC; } else if ((strstr(name, "/dev/ashmem/dalvik-alloc space") == name) || (strstr(name, "/dev/ashmem/dalvik-main space") == name) || + (strstr(name, "/dev/ashmem/dalvik-zygote space") == name) || (strstr(name, "/dev/ashmem/dalvik-non moving space") == name)) { // This is the regular Dalvik heap. whichHeap = HEAP_DALVIK; @@ -346,9 +346,9 @@ static void read_mapinfo(FILE *fp, stats_t* stats) } if (line[0] == 'S' && sscanf(line, "Size: %d kB", &temp) == 1) { - size = temp; + /* size = temp; */ } else if (line[0] == 'R' && sscanf(line, "Rss: %d kB", &temp) == 1) { - resident = temp; + /* resident = temp; */ } else if (line[0] == 'P' && sscanf(line, "Pss: %d kB", &temp) == 1) { pss = temp; } else if (line[0] == 'S' && sscanf(line, "Shared_Clean: %d kB", &temp) == 1) { @@ -360,7 +360,7 @@ static void read_mapinfo(FILE *fp, stats_t* stats) } else if (line[0] == 'P' && sscanf(line, "Private_Dirty: %d kB", &temp) == 1) { private_dirty = temp; } else if (line[0] == 'R' && sscanf(line, "Referenced: %d kB", &temp) == 1) { - referenced = temp; + /* referenced = temp; */ } else if (line[0] == 'S' && sscanf(line, "Swap: %d kB", &temp) == 1) { swapped_out = temp; } else if (sscanf(line, "%" SCNx64 "-%" SCNx64 " %*s %*x %*x:%*x %*d", &start, &end) == 2) { @@ -484,7 +484,6 @@ static jlong android_os_Debug_getPssPid(JNIEnv *env, jobject clazz, jint pid, jl char line[1024]; jlong pss = 0; jlong uss = 0; - unsigned temp; char tmp[128]; FILE *fp; @@ -897,7 +896,8 @@ static void android_os_Debug_dumpNativeBacktraceToFile(JNIEnv* env, jobject claz const jchar* str = env->GetStringCritical(fileName, 0); String8 fileName8; if (str) { - fileName8 = String8(str, env->GetStringLength(fileName)); + fileName8 = String8(reinterpret_cast<const char16_t*>(str), + env->GetStringLength(fileName)); env->ReleaseStringCritical(fileName, str); } diff --git a/core/jni/android_os_MemoryFile.cpp b/core/jni/android_os_MemoryFile.cpp index 27b29bc11930..c198a733103d 100644 --- a/core/jni/android_os_MemoryFile.cpp +++ b/core/jni/android_os_MemoryFile.cpp @@ -18,7 +18,7 @@ #include <utils/Log.h> #include <cutils/ashmem.h> -#include <android_runtime/AndroidRuntime.h> +#include "core_jni_helpers.h" #include "JNIHelp.h" #include <unistd.h> #include <sys/mman.h> @@ -151,9 +151,7 @@ static const JNINativeMethod methods[] = { int register_android_os_MemoryFile(JNIEnv* env) { - return AndroidRuntime::registerNativeMethods( - env, "android/os/MemoryFile", - methods, NELEM(methods)); + return RegisterMethodsOrDie(env, "android/os/MemoryFile", methods, NELEM(methods)); } } diff --git a/core/jni/android_os_MessageQueue.cpp b/core/jni/android_os_MessageQueue.cpp index 15d62a2bd476..5d7877b5640b 100644 --- a/core/jni/android_os_MessageQueue.cpp +++ b/core/jni/android_os_MessageQueue.cpp @@ -23,6 +23,8 @@ #include <utils/Log.h> #include "android_os_MessageQueue.h" +#include "core_jni_helpers.h" + namespace android { static struct { @@ -157,26 +159,15 @@ static JNINativeMethod gMessageQueueMethods[] = { { "nativeIsIdling", "(J)Z", (void*)android_os_MessageQueue_nativeIsIdling } }; -#define FIND_CLASS(var, className) \ - var = env->FindClass(className); \ - LOG_FATAL_IF(! var, "Unable to find class " className); - -#define GET_FIELD_ID(var, clazz, fieldName, fieldDescriptor) \ - var = env->GetFieldID(clazz, fieldName, fieldDescriptor); \ - LOG_FATAL_IF(! var, "Unable to find field " fieldName); - int register_android_os_MessageQueue(JNIEnv* env) { - int res = jniRegisterNativeMethods(env, "android/os/MessageQueue", - gMessageQueueMethods, NELEM(gMessageQueueMethods)); - LOG_FATAL_IF(res < 0, "Unable to register native methods."); + int res = RegisterMethodsOrDie(env, "android/os/MessageQueue", gMessageQueueMethods, + NELEM(gMessageQueueMethods)); + + jclass clazz = FindClassOrDie(env, "android/os/MessageQueue"); - jclass clazz; - FIND_CLASS(clazz, "android/os/MessageQueue"); + gMessageQueueClassInfo.mPtr = GetFieldIDOrDie(env, clazz, "mPtr", "J"); - GET_FIELD_ID(gMessageQueueClassInfo.mPtr, clazz, - "mPtr", "J"); - - return 0; + return res; } } // namespace android diff --git a/core/jni/android_os_Parcel.cpp b/core/jni/android_os_Parcel.cpp index 44863cc7ef4c..16f7d128bfee 100644 --- a/core/jni/android_os_Parcel.cpp +++ b/core/jni/android_os_Parcel.cpp @@ -46,6 +46,8 @@ #include <android_runtime/AndroidRuntime.h> +#include "core_jni_helpers.h" + //#undef ALOGV //#define ALOGV(...) fprintf(stderr, __VA_ARGS__) @@ -275,7 +277,9 @@ static void android_os_Parcel_writeString(JNIEnv* env, jclass clazz, jlong nativ if (val) { const jchar* str = env->GetStringCritical(val, 0); if (str) { - err = parcel->writeString16(str, env->GetStringLength(val)); + err = parcel->writeString16( + reinterpret_cast<const char16_t*>(str), + env->GetStringLength(val)); env->ReleaseStringCritical(val, str); } } else { @@ -409,7 +413,7 @@ static jstring android_os_Parcel_readString(JNIEnv* env, jclass clazz, jlong nat size_t len; const char16_t* str = parcel->readString16Inplace(&len); if (str) { - return env->NewString(str, len); + return env->NewString(reinterpret_cast<const jchar*>(str), len); } return NULL; } @@ -451,7 +455,8 @@ static jobject android_os_Parcel_openFileDescriptor(JNIEnv* env, jclass clazz, jniThrowException(env, "java/lang/IllegalStateException", NULL); return NULL; } - String8 name8(str, env->GetStringLength(name)); + String8 name8(reinterpret_cast<const char16_t*>(str), + env->GetStringLength(name)); env->ReleaseStringCritical(name, str); int flags=0; switch (mode&0x30000000) { @@ -646,7 +651,9 @@ static void android_os_Parcel_writeInterfaceToken(JNIEnv* env, jclass clazz, jlo // the caller expects to be invoking const jchar* str = env->GetStringCritical(name, 0); if (str != NULL) { - parcel->writeInterfaceToken(String16(str, env->GetStringLength(name))); + parcel->writeInterfaceToken(String16( + reinterpret_cast<const char16_t*>(str), + env->GetStringLength(name))); env->ReleaseStringCritical(name, str); } } @@ -654,8 +661,6 @@ static void android_os_Parcel_writeInterfaceToken(JNIEnv* env, jclass clazz, jlo static void android_os_Parcel_enforceInterface(JNIEnv* env, jclass clazz, jlong nativePtr, jstring name) { - jboolean ret = JNI_FALSE; - Parcel* parcel = reinterpret_cast<Parcel*>(nativePtr); if (parcel != NULL) { const jchar* str = env->GetStringCritical(name, 0); @@ -663,7 +668,8 @@ static void android_os_Parcel_enforceInterface(JNIEnv* env, jclass clazz, jlong IPCThreadState* threadState = IPCThreadState::self(); const int32_t oldPolicy = threadState->getStrictModePolicy(); const bool isValid = parcel->enforceInterface( - String16(str, env->GetStringLength(name)), + String16(reinterpret_cast<const char16_t*>(str), + env->GetStringLength(name)), threadState); env->ReleaseStringCritical(name, str); if (isValid) { @@ -743,20 +749,14 @@ const char* const kParcelPathName = "android/os/Parcel"; int register_android_os_Parcel(JNIEnv* env) { - jclass clazz; - - clazz = env->FindClass(kParcelPathName); - LOG_FATAL_IF(clazz == NULL, "Unable to find class android.os.Parcel"); + jclass clazz = FindClassOrDie(env, kParcelPathName); - gParcelOffsets.clazz = (jclass) env->NewGlobalRef(clazz); - gParcelOffsets.mNativePtr = env->GetFieldID(clazz, "mNativePtr", "J"); - gParcelOffsets.obtain = env->GetStaticMethodID(clazz, "obtain", - "()Landroid/os/Parcel;"); - gParcelOffsets.recycle = env->GetMethodID(clazz, "recycle", "()V"); + gParcelOffsets.clazz = MakeGlobalRefOrDie(env, clazz); + gParcelOffsets.mNativePtr = GetFieldIDOrDie(env, clazz, "mNativePtr", "J"); + gParcelOffsets.obtain = GetStaticMethodIDOrDie(env, clazz, "obtain", "()Landroid/os/Parcel;"); + gParcelOffsets.recycle = GetMethodIDOrDie(env, clazz, "recycle", "()V"); - return AndroidRuntime::registerNativeMethods( - env, kParcelPathName, - gParcelMethods, NELEM(gParcelMethods)); + return RegisterMethodsOrDie(env, kParcelPathName, gParcelMethods, NELEM(gParcelMethods)); } }; diff --git a/core/jni/android_os_SELinux.cpp b/core/jni/android_os_SELinux.cpp index c28254973346..136e758c31a4 100644 --- a/core/jni/android_os_SELinux.cpp +++ b/core/jni/android_os_SELinux.cpp @@ -19,7 +19,7 @@ #include "JNIHelp.h" #include "jni.h" -#include "android_runtime/AndroidRuntime.h" +#include "core_jni_helpers.h" #include "selinux/selinux.h" #include "selinux/android.h" #include <errno.h> @@ -469,8 +469,7 @@ int register_android_os_SELinux(JNIEnv *env) { isSELinuxDisabled = (is_selinux_enabled() != 1) ? true : false; - return AndroidRuntime::registerNativeMethods(env, "android/os/SELinux", method_table, - NELEM(method_table)); + return RegisterMethodsOrDie(env, "android/os/SELinux", method_table, NELEM(method_table)); } } diff --git a/core/jni/android_os_SystemClock.cpp b/core/jni/android_os_SystemClock.cpp index 624784420aaf..dfe024e8a473 100644 --- a/core/jni/android_os_SystemClock.cpp +++ b/core/jni/android_os_SystemClock.cpp @@ -27,7 +27,7 @@ #include "JNIHelp.h" #include "jni.h" -#include "android_runtime/AndroidRuntime.h" +#include "core_jni_helpers.h" #include <sys/time.h> #include <time.h> @@ -60,18 +60,11 @@ static jlong android_os_SystemClock_elapsedRealtime(JNIEnv* env, static jlong android_os_SystemClock_currentThreadTimeMillis(JNIEnv* env, jobject clazz) { -#if defined(HAVE_POSIX_CLOCKS) struct timespec tm; clock_gettime(CLOCK_THREAD_CPUTIME_ID, &tm); return tm.tv_sec * 1000LL + tm.tv_nsec / 1000000; -#else - struct timeval tv; - - gettimeofday(&tv, NULL); - return tv.tv_sec * 1000LL + tv.tv_usec / 1000; -#endif } /* @@ -80,18 +73,11 @@ static jlong android_os_SystemClock_currentThreadTimeMillis(JNIEnv* env, static jlong android_os_SystemClock_currentThreadTimeMicro(JNIEnv* env, jobject clazz) { -#if defined(HAVE_POSIX_CLOCKS) struct timespec tm; clock_gettime(CLOCK_THREAD_CPUTIME_ID, &tm); return tm.tv_sec * 1000000LL + tm.tv_nsec / 1000; -#else - struct timeval tv; - - gettimeofday(&tv, NULL); - return tv.tv_sec * 1000000LL + tv.tv_nsec / 1000; -#endif } /* @@ -135,8 +121,7 @@ static JNINativeMethod gMethods[] = { }; int register_android_os_SystemClock(JNIEnv* env) { - return AndroidRuntime::registerNativeMethods(env, - "android/os/SystemClock", gMethods, NELEM(gMethods)); + return RegisterMethodsOrDie(env, "android/os/SystemClock", gMethods, NELEM(gMethods)); } }; // namespace android diff --git a/core/jni/android_os_SystemProperties.cpp b/core/jni/android_os_SystemProperties.cpp index 677396d13736..554d304290cf 100644 --- a/core/jni/android_os_SystemProperties.cpp +++ b/core/jni/android_os_SystemProperties.cpp @@ -21,7 +21,7 @@ #include "utils/misc.h" #include <utils/Log.h> #include "jni.h" -#include "android_runtime/AndroidRuntime.h" +#include "core_jni_helpers.h" #include <nativehelper/JNIHelp.h> namespace android @@ -239,9 +239,8 @@ static JNINativeMethod method_table[] = { int register_android_os_SystemProperties(JNIEnv *env) { - return AndroidRuntime::registerNativeMethods( - env, "android/os/SystemProperties", - method_table, NELEM(method_table)); + return RegisterMethodsOrDie(env, "android/os/SystemProperties", method_table, + NELEM(method_table)); } }; diff --git a/core/jni/android_os_Trace.cpp b/core/jni/android_os_Trace.cpp index b11c5bbdac29..52fd111715a8 100644 --- a/core/jni/android_os_Trace.cpp +++ b/core/jni/android_os_Trace.cpp @@ -17,6 +17,8 @@ #define LOG_TAG "Trace" // #define LOG_NDEBUG 0 +#include <inttypes.h> + #include <JNIHelp.h> #include <ScopedUtfChars.h> #include <ScopedStringChars.h> @@ -48,47 +50,44 @@ static void android_os_Trace_nativeTraceCounter(JNIEnv* env, jclass clazz, jlong tag, jstring nameStr, jint value) { ScopedUtfChars name(env, nameStr); - ALOGV("%s: %lld %s %d", __FUNCTION__, tag, name.c_str(), value); + ALOGV("%s: %" PRId64 " %s %d", __FUNCTION__, tag, name.c_str(), value); atrace_int(tag, name.c_str(), value); } static void android_os_Trace_nativeTraceBegin(JNIEnv* env, jclass clazz, jlong tag, jstring nameStr) { - const size_t MAX_SECTION_NAME_LEN = 127; ScopedStringChars jchars(env, nameStr); String8 utf8Chars(reinterpret_cast<const char16_t*>(jchars.get()), jchars.size()); sanitizeString(utf8Chars); - ALOGV("%s: %lld %s", __FUNCTION__, tag, utf8Chars.string()); + ALOGV("%s: %" PRId64 " %s", __FUNCTION__, tag, utf8Chars.string()); atrace_begin(tag, utf8Chars.string()); } static void android_os_Trace_nativeTraceEnd(JNIEnv* env, jclass clazz, jlong tag) { - ALOGV("%s: %lld", __FUNCTION__, tag); + ALOGV("%s: %" PRId64, __FUNCTION__, tag); atrace_end(tag); } static void android_os_Trace_nativeAsyncTraceBegin(JNIEnv* env, jclass clazz, jlong tag, jstring nameStr, jint cookie) { - const size_t MAX_SECTION_NAME_LEN = 127; ScopedStringChars jchars(env, nameStr); String8 utf8Chars(reinterpret_cast<const char16_t*>(jchars.get()), jchars.size()); sanitizeString(utf8Chars); - ALOGV("%s: %lld %s %d", __FUNCTION__, tag, utf8Chars.string(), cookie); + ALOGV("%s: %" PRId64 " %s %d", __FUNCTION__, tag, utf8Chars.string(), cookie); atrace_async_begin(tag, utf8Chars.string(), cookie); } static void android_os_Trace_nativeAsyncTraceEnd(JNIEnv* env, jclass clazz, jlong tag, jstring nameStr, jint cookie) { - const size_t MAX_SECTION_NAME_LEN = 127; ScopedStringChars jchars(env, nameStr); String8 utf8Chars(reinterpret_cast<const char16_t*>(jchars.get()), jchars.size()); sanitizeString(utf8Chars); - ALOGV("%s: %lld %s %d", __FUNCTION__, tag, utf8Chars.string(), cookie); + ALOGV("%s: %" PRId64 " %s %d", __FUNCTION__, tag, utf8Chars.string(), cookie); atrace_async_end(tag, utf8Chars.string(), cookie); } @@ -137,7 +136,7 @@ static JNINativeMethod gTraceMethods[] = { int register_android_os_Trace(JNIEnv* env) { int res = jniRegisterNativeMethods(env, "android/os/Trace", gTraceMethods, NELEM(gTraceMethods)); - LOG_FATAL_IF(res < 0, "Unable to register native methods."); + LOG_ALWAYS_FATAL_IF(res < 0, "Unable to register native methods."); return 0; } diff --git a/core/jni/android_os_UEventObserver.cpp b/core/jni/android_os_UEventObserver.cpp index 3f7c7d28f8b5..eb36f8549cfa 100644 --- a/core/jni/android_os_UEventObserver.cpp +++ b/core/jni/android_os_UEventObserver.cpp @@ -22,7 +22,7 @@ #include "hardware_legacy/uevent.h" #include "jni.h" #include "JNIHelp.h" -#include "android_runtime/AndroidRuntime.h" +#include "core_jni_helpers.h" #include <utils/Mutex.h> #include <utils/Vector.h> @@ -117,16 +117,9 @@ static JNINativeMethod gMethods[] = { int register_android_os_UEventObserver(JNIEnv *env) { - jclass clazz; + FindClassOrDie(env, "android/os/UEventObserver"); - clazz = env->FindClass("android/os/UEventObserver"); - if (clazz == NULL) { - ALOGE("Can't find android/os/UEventObserver"); - return -1; - } - - return AndroidRuntime::registerNativeMethods(env, - "android/os/UEventObserver", gMethods, NELEM(gMethods)); + return RegisterMethodsOrDie(env, "android/os/UEventObserver", gMethods, NELEM(gMethods)); } } // namespace android diff --git a/core/jni/android_server_FingerprintManager.cpp b/core/jni/android_server_FingerprintManager.cpp index b174d1b0f853..c8aa22f718e7 100644 --- a/core/jni/android_server_FingerprintManager.cpp +++ b/core/jni/android_server_FingerprintManager.cpp @@ -24,22 +24,7 @@ #include <hardware/fingerprint.h> #include <utils/Log.h> -#define FIND_CLASS(var, className) \ - var = env->FindClass(className); \ - LOG_FATAL_IF(! var, "Unable to find class " className); \ - var = jclass(env->NewGlobalRef(var)); - -#define GET_STATIC_METHOD_ID(var, clazz, methodName, fieldDescriptor) \ - var = env->GetStaticMethodID(clazz, methodName, fieldDescriptor); \ - LOG_FATAL_IF(! var, "Unable to find static method" methodName); - -#define GET_METHOD_ID(var, clazz, methodName, fieldDescriptor) \ - var = env->GetMethodID(clazz, methodName, fieldDescriptor); \ - LOG_FATAL_IF(! var, "Unable to find method" methodName); - -#define GET_FIELD_ID(var, clazz, fieldName, fieldDescriptor) \ - var = env->GetFieldID(clazz, fieldName, fieldDescriptor); \ - LOG_FATAL_IF(! var, "Unable to find field " fieldName); +#include "core_jni_helpers.h" namespace android { @@ -84,6 +69,7 @@ static void hal_notify_callback(fingerprint_msg_t msg) { ALOGE("fingerprint: invalid msg: %d", msg.type); return; } + (void)arg3; //ALOG(LOG_VERBOSE, LOG_TAG, "hal_notify(msg=%d, arg1=%d, arg2=%d)\n", msg.type, arg1, arg2); // TODO: fix gross hack to attach JNI to calling thread @@ -103,10 +89,12 @@ static void hal_notify_callback(fingerprint_msg_t msg) { static void nativeInit(JNIEnv *env, jobject clazz, jobject callbackObj) { ALOG(LOG_VERBOSE, LOG_TAG, "nativeInit()\n"); - FIND_CLASS(gFingerprintServiceClassInfo.clazz, FINGERPRINT_SERVICE); - GET_METHOD_ID(gFingerprintServiceClassInfo.notify, gFingerprintServiceClassInfo.clazz, + gFingerprintServiceClassInfo.clazz = FindClassOrDie(env, FINGERPRINT_SERVICE); + gFingerprintServiceClassInfo.clazz = MakeGlobalRefOrDie(env, + gFingerprintServiceClassInfo.clazz); + gFingerprintServiceClassInfo.notify = GetMethodIDOrDie(env, gFingerprintServiceClassInfo.clazz, "notify", "(III)V"); - gFingerprintServiceClassInfo.callbackObject = env->NewGlobalRef(callbackObj); + gFingerprintServiceClassInfo.callbackObject = MakeGlobalRefOrDie(env, callbackObj); } static jint nativeEnroll(JNIEnv* env, jobject clazz, jint timeout) { @@ -184,7 +172,7 @@ static jint nativeCloseHal(JNIEnv* env, jobject clazz) { // TODO: clean up void methods static const JNINativeMethod g_methods[] = { { "nativeEnroll", "(I)I", (void*)nativeEnroll }, - { "nativeEnrollCancel", "()I", (void*)nativeEnroll }, + { "nativeEnrollCancel", "()I", (void*)nativeEnrollCancel }, { "nativeRemove", "(I)I", (void*)nativeRemove }, { "nativeOpenHal", "()I", (void*)nativeOpenHal }, { "nativeCloseHal", "()I", (void*)nativeCloseHal }, @@ -192,11 +180,11 @@ static const JNINativeMethod g_methods[] = { }; int register_android_server_fingerprint_FingerprintService(JNIEnv* env) { - FIND_CLASS(gFingerprintServiceClassInfo.clazz, FINGERPRINT_SERVICE); - GET_METHOD_ID(gFingerprintServiceClassInfo.notify, gFingerprintServiceClassInfo.clazz, "notify", - "(III)V"); - int result = AndroidRuntime::registerNativeMethods( - env, FINGERPRINT_SERVICE, g_methods, NELEM(g_methods)); + jclass clazz = FindClassOrDie(env, FINGERPRINT_SERVICE); + gFingerprintServiceClassInfo.clazz = MakeGlobalRefOrDie(env, clazz); + gFingerprintServiceClassInfo.notify = GetMethodIDOrDie(env, gFingerprintServiceClassInfo.clazz, + "notify", "(III)V"); + int result = RegisterMethodsOrDie(env, FINGERPRINT_SERVICE, g_methods, NELEM(g_methods)); ALOG(LOG_VERBOSE, LOG_TAG, "FingerprintManager JNI ready.\n"); return result; } diff --git a/core/jni/android_server_Watchdog.cpp b/core/jni/android_server_Watchdog.cpp index 6726c14a26e2..d1f943458d90 100644 --- a/core/jni/android_server_Watchdog.cpp +++ b/core/jni/android_server_Watchdog.cpp @@ -26,7 +26,7 @@ #include "jni.h" #include "JNIHelp.h" -#include <android_runtime/AndroidRuntime.h> +#include "core_jni_helpers.h" static void dumpOneStack(int tid, int outFd) { char buf[64]; @@ -106,8 +106,7 @@ static const JNINativeMethod g_methods[] = { }; int register_android_server_Watchdog(JNIEnv* env) { - return AndroidRuntime::registerNativeMethods(env, "com/android/server/Watchdog", - g_methods, NELEM(g_methods)); + return RegisterMethodsOrDie(env, "com/android/server/Watchdog", g_methods, NELEM(g_methods)); } } diff --git a/core/jni/android_text_AndroidBidi.cpp b/core/jni/android_text_AndroidBidi.cpp index 6f7ee49e9e99..328542954efa 100644 --- a/core/jni/android_text_AndroidBidi.cpp +++ b/core/jni/android_text_AndroidBidi.cpp @@ -18,7 +18,7 @@ #define LOG_TAG "AndroidUnicode" #include "JNIHelp.h" -#include <android_runtime/AndroidRuntime.h> +#include "core_jni_helpers.h" #include "utils/misc.h" #include "utils/Log.h" #include "unicode/ubidi.h" @@ -57,14 +57,12 @@ static jint runBidi(JNIEnv* env, jobject obj, jint dir, jcharArray chsArray, } static JNINativeMethod gMethods[] = { - { "runBidi", "(I[C[BIZ)I", - (void*) runBidi } + { "runBidi", "(I[C[BIZ)I", (void*) runBidi } }; int register_android_text_AndroidBidi(JNIEnv* env) { - return AndroidRuntime::registerNativeMethods(env, "android/text/AndroidBidi", - gMethods, NELEM(gMethods)); + return RegisterMethodsOrDie(env, "android/text/AndroidBidi", gMethods, NELEM(gMethods)); } } diff --git a/core/jni/android_text_AndroidCharacter.cpp b/core/jni/android_text_AndroidCharacter.cpp index 94bd40f4904a..9258248083d0 100644 --- a/core/jni/android_text_AndroidCharacter.cpp +++ b/core/jni/android_text_AndroidCharacter.cpp @@ -19,7 +19,7 @@ #include "JNIHelp.h" #include "ScopedPrimitiveArray.h" -#include <android_runtime/AndroidRuntime.h> +#include "core_jni_helpers.h" #include "utils/misc.h" #include "utils/Log.h" #include "unicode/uchar.h" @@ -193,8 +193,7 @@ static JNINativeMethod gMethods[] = { int register_android_text_AndroidCharacter(JNIEnv* env) { - return AndroidRuntime::registerNativeMethods(env, "android/text/AndroidCharacter", - gMethods, NELEM(gMethods)); + return RegisterMethodsOrDie(env, "android/text/AndroidCharacter", gMethods, NELEM(gMethods)); } } diff --git a/core/jni/android_text_StaticLayout.cpp b/core/jni/android_text_StaticLayout.cpp index 9e20d18c4c40..0c2ebf41468c 100644 --- a/core/jni/android_text_StaticLayout.cpp +++ b/core/jni/android_text_StaticLayout.cpp @@ -23,7 +23,7 @@ #include "utils/Log.h" #include "ScopedPrimitiveArray.h" #include "JNIHelp.h" -#include <android_runtime/AndroidRuntime.h> +#include "core_jni_helpers.h" #include <vector> namespace android { @@ -103,8 +103,7 @@ static JNINativeMethod gMethods[] = { int register_android_text_StaticLayout(JNIEnv* env) { - return AndroidRuntime::registerNativeMethods(env, "android/text/StaticLayout", - gMethods, NELEM(gMethods)); + return RegisterMethodsOrDie(env, "android/text/StaticLayout", gMethods, NELEM(gMethods)); } } diff --git a/core/jni/android_util_AssetManager.cpp b/core/jni/android_util_AssetManager.cpp index 0dd35ea8e76c..e5cdee035f70 100644 --- a/core/jni/android_util_AssetManager.cpp +++ b/core/jni/android_util_AssetManager.cpp @@ -17,37 +17,38 @@ #define LOG_TAG "asset" -#define DEBUG_STYLES(x) //x -#define THROW_ON_BAD_ID 0 - #include <android_runtime/android_util_AssetManager.h> -#include "jni.h" +#include <inttypes.h> +#include <linux/capability.h> +#include <stdio.h> +#include <sys/types.h> +#include <sys/wait.h> + +#include <private/android_filesystem_config.h> // for AID_SYSTEM + #include "JNIHelp.h" #include "ScopedStringChars.h" #include "ScopedUtfChars.h" +#include "android_runtime/AndroidRuntime.h" #include "android_util_Binder.h" -#include <utils/misc.h> -#include <android_runtime/AndroidRuntime.h> -#include <utils/Log.h> - -#include <androidfw/Asset.h> -#include <androidfw/AssetManager.h> -#include <androidfw/ResourceTypes.h> - -#include <private/android_filesystem_config.h> // for AID_SYSTEM - -#include <stdio.h> -#include <sys/types.h> -#include <sys/wait.h> +#include "androidfw/Asset.h" +#include "androidfw/AssetManager.h" +#include "androidfw/ResourceTypes.h" +#include "core_jni_helpers.h" +#include "jni.h" +#include "utils/Log.h" +#include "utils/misc.h" -#include <linux/capability.h> extern "C" int capget(cap_user_header_t hdrp, cap_user_data_t datap); extern "C" int capset(cap_user_header_t hdrp, const cap_user_data_t datap); namespace android { +static const bool kThrowOnBadId = false; +static const bool kDebugStyles = false; + // ---------------------------------------------------------------------------- static struct typedvalue_offsets_t @@ -650,23 +651,29 @@ static jint android_content_AssetManager_getResourceIdentifier(JNIEnv* env, jobj return 0; } - const char16_t* defType16 = defType - ? env->GetStringChars(defType, NULL) : NULL; + const char16_t* defType16 = reinterpret_cast<const char16_t*>(defType) + ? reinterpret_cast<const char16_t*>(env->GetStringChars(defType, NULL)) + : NULL; jsize defTypeLen = defType ? env->GetStringLength(defType) : 0; - const char16_t* defPackage16 = defPackage - ? env->GetStringChars(defPackage, NULL) : NULL; + const char16_t* defPackage16 = reinterpret_cast<const char16_t*>(defPackage) + ? reinterpret_cast<const char16_t*>(env->GetStringChars(defPackage, + NULL)) + : NULL; jsize defPackageLen = defPackage ? env->GetStringLength(defPackage) : 0; jint ident = am->getResources().identifierForName( - name16.get(), name16.size(), defType16, defTypeLen, defPackage16, defPackageLen); + reinterpret_cast<const char16_t*>(name16.get()), name16.size(), + defType16, defTypeLen, defPackage16, defPackageLen); if (defPackage16) { - env->ReleaseStringChars(defPackage, defPackage16); + env->ReleaseStringChars(defPackage, + reinterpret_cast<const jchar*>(defPackage16)); } if (defType16) { - env->ReleaseStringChars(defType, defType16); + env->ReleaseStringChars(defType, + reinterpret_cast<const jchar*>(defType16)); } return ident; @@ -803,21 +810,21 @@ static jint android_content_AssetManager_loadResourceValue(JNIEnv* env, jobject ResTable_config config; uint32_t typeSpecFlags; ssize_t block = res.getResource(ident, &value, false, density, &typeSpecFlags, &config); -#if THROW_ON_BAD_ID - if (block == BAD_INDEX) { - jniThrowException(env, "java/lang/IllegalStateException", "Bad resource!"); - return 0; + if (kThrowOnBadId) { + if (block == BAD_INDEX) { + jniThrowException(env, "java/lang/IllegalStateException", "Bad resource!"); + return 0; + } } -#endif uint32_t ref = ident; if (resolve) { block = res.resolveReference(&value, block, &ref, &typeSpecFlags, &config); -#if THROW_ON_BAD_ID - if (block == BAD_INDEX) { - jniThrowException(env, "java/lang/IllegalStateException", "Bad resource!"); - return 0; + if (kThrowOnBadId) { + if (block == BAD_INDEX) { + jniThrowException(env, "java/lang/IllegalStateException", "Bad resource!"); + return 0; + } } -#endif } if (block >= 0) { return copyValue(env, outValue, &res, value, ref, block, typeSpecFlags, &config); @@ -863,12 +870,12 @@ static jint android_content_AssetManager_loadResourceBagValue(JNIEnv* env, jobje uint32_t ref = ident; if (resolve) { block = res.resolveReference(&value, block, &ref, &typeSpecFlags); -#if THROW_ON_BAD_ID - if (block == BAD_INDEX) { - jniThrowException(env, "java/lang/IllegalStateException", "Bad resource!"); - return 0; + if (kThrowOnBadId) { + if (block == BAD_INDEX) { + jniThrowException(env, "java/lang/IllegalStateException", "Bad resource!"); + return 0; + } } -#endif } if (block >= 0) { return copyValue(env, outValue, &res, value, ref, block, typeSpecFlags); @@ -926,8 +933,11 @@ static jobject android_content_AssetManager_getAssignedPackageIdentifiers(JNIEnv const size_t N = res.getBasePackageCount(); for (size_t i = 0; i < N; i++) { const String16 name = res.getBasePackageName(i); - env->CallVoidMethod(sparseArray, gSparseArrayOffsets.put, (jint) res.getBasePackageId(i), - env->NewString(name, name.size())); + env->CallVoidMethod( + sparseArray, gSparseArrayOffsets.put, + static_cast<jint>(res.getBasePackageId(i)), + env->NewString(reinterpret_cast<const jchar*>(name.string()), + name.size())); } return sparseArray; } @@ -978,12 +988,12 @@ static jint android_content_AssetManager_loadThemeAttributeValue( uint32_t ref = 0; if (resolve) { block = res.resolveReference(&value, block, &ref, &typeSpecFlags); -#if THROW_ON_BAD_ID - if (block == BAD_INDEX) { - jniThrowException(env, "java/lang/IllegalStateException", "Bad resource!"); - return 0; + if (kThrowOnBadId) { + if (block == BAD_INDEX) { + jniThrowException(env, "java/lang/IllegalStateException", "Bad resource!"); + return 0; + } } -#endif } return block >= 0 ? copyValue(env, outValue, &res, value, ref, block, typeSpecFlags) : block; } @@ -994,6 +1004,7 @@ static void android_content_AssetManager_dumpTheme(JNIEnv* env, jobject clazz, { ResTable::Theme* theme = reinterpret_cast<ResTable::Theme*>(themeHandle); const ResTable& res(theme->getResTable()); + (void)res; // XXX Need to use params. theme->dumpToLog(); @@ -1021,8 +1032,10 @@ static jboolean android_content_AssetManager_resolveAttrs(JNIEnv* env, jobject c return JNI_FALSE; } - DEBUG_STYLES(ALOGI("APPLY STYLE: theme=0x%x defStyleAttr=0x%x defStyleRes=0x%x", - themeToken, defStyleAttr, defStyleRes)); + if (kDebugStyles) { + ALOGI("APPLY STYLE: theme=0x%" PRIx64 " defStyleAttr=0x%x " + "defStyleRes=0x%x", themeToken, defStyleAttr, defStyleRes); + } ResTable::Theme* theme = reinterpret_cast<ResTable::Theme*>(themeToken); const ResTable& res = theme->getResTable(); @@ -1089,7 +1102,9 @@ static jboolean android_content_AssetManager_resolveAttrs(JNIEnv* env, jobject c for (jsize ii=0; ii<NI; ii++) { const uint32_t curIdent = (uint32_t)src[ii]; - DEBUG_STYLES(ALOGI("RETRIEVING ATTR 0x%08x...", curIdent)); + if (kDebugStyles) { + ALOGI("RETRIEVING ATTR 0x%08x...", curIdent); + } // Try to find a value for this attribute... we prioritize values // coming from, first XML attributes, then XML style, then default @@ -1104,8 +1119,9 @@ static jboolean android_content_AssetManager_resolveAttrs(JNIEnv* env, jobject c block = -1; value.dataType = Res_value::TYPE_ATTRIBUTE; value.data = srcValues[ii]; - DEBUG_STYLES(ALOGI("-> From values: type=0x%x, data=0x%08x", - value.dataType, value.data)); + if (kDebugStyles) { + ALOGI("-> From values: type=0x%x, data=0x%08x", value.dataType, value.data); + } } // Skip through the default style values until the end or the next possible match. @@ -1118,8 +1134,9 @@ static jboolean android_content_AssetManager_resolveAttrs(JNIEnv* env, jobject c block = defStyleEnt->stringBlock; typeSetFlags = defStyleTypeSetFlags; value = defStyleEnt->map.value; - DEBUG_STYLES(ALOGI("-> From def style: type=0x%x, data=0x%08x", - value.dataType, value.data)); + if (kDebugStyles) { + ALOGI("-> From def style: type=0x%x, data=0x%08x", value.dataType, value.data); + } } defStyleEnt++; } @@ -1130,38 +1147,45 @@ static jboolean android_content_AssetManager_resolveAttrs(JNIEnv* env, jobject c ssize_t newBlock = theme->resolveAttributeReference(&value, block, &resid, &typeSetFlags, &config); if (newBlock >= 0) block = newBlock; - DEBUG_STYLES(ALOGI("-> Resolved attr: type=0x%x, data=0x%08x", - value.dataType, value.data)); + if (kDebugStyles) { + ALOGI("-> Resolved attr: type=0x%x, data=0x%08x", value.dataType, value.data); + } } else { // If we still don't have a value for this attribute, try to find // it in the theme! ssize_t newBlock = theme->getAttribute(curIdent, &value, &typeSetFlags); if (newBlock >= 0) { - DEBUG_STYLES(ALOGI("-> From theme: type=0x%x, data=0x%08x", - value.dataType, value.data)); + if (kDebugStyles) { + ALOGI("-> From theme: type=0x%x, data=0x%08x", value.dataType, value.data); + } newBlock = res.resolveReference(&value, block, &resid, &typeSetFlags, &config); -#if THROW_ON_BAD_ID - if (newBlock == BAD_INDEX) { - jniThrowException(env, "java/lang/IllegalStateException", "Bad resource!"); - return JNI_FALSE; + if (kThrowOnBadId) { + if (newBlock == BAD_INDEX) { + jniThrowException(env, "java/lang/IllegalStateException", "Bad resource!"); + return JNI_FALSE; + } } -#endif if (newBlock >= 0) block = newBlock; - DEBUG_STYLES(ALOGI("-> Resolved theme: type=0x%x, data=0x%08x", - value.dataType, value.data)); + if (kDebugStyles) { + ALOGI("-> Resolved theme: type=0x%x, data=0x%08x", value.dataType, value.data); + } } } // Deal with the special @null value -- it turns back to TYPE_NULL. if (value.dataType == Res_value::TYPE_REFERENCE && value.data == 0) { - DEBUG_STYLES(ALOGI("-> Setting to @null!")); + if (kDebugStyles) { + ALOGI("-> Setting to @null!"); + } value.dataType = Res_value::TYPE_NULL; block = -1; } - DEBUG_STYLES(ALOGI("Attribute 0x%08x: type=0x%x, data=0x%08x", - curIdent, value.dataType, value.data)); + if (kDebugStyles) { + ALOGI("Attribute 0x%08x: type=0x%x, data=0x%08x", curIdent, value.dataType, + value.data); + } // Write the final value back to Java. dest[STYLE_TYPE] = value.dataType; @@ -1215,8 +1239,11 @@ static jboolean android_content_AssetManager_applyStyle(JNIEnv* env, jobject cla return JNI_FALSE; } - DEBUG_STYLES(ALOGI("APPLY STYLE: theme=0x%x defStyleAttr=0x%x defStyleRes=0x%x xml=0x%x", - themeToken, defStyleAttr, defStyleRes, xmlParserToken)); + if (kDebugStyles) { + ALOGI("APPLY STYLE: theme=0x%" PRIx64 " defStyleAttr=0x%x defStyleRes=0x%x " + "xml=0x%" PRIx64, themeToken, defStyleAttr, defStyleRes, + xmlParserToken); + } ResTable::Theme* theme = reinterpret_cast<ResTable::Theme*>(themeToken); const ResTable& res = theme->getResTable(); @@ -1313,7 +1340,9 @@ static jboolean android_content_AssetManager_applyStyle(JNIEnv* env, jobject cla for (jsize ii=0; ii<NI; ii++) { const uint32_t curIdent = (uint32_t)src[ii]; - DEBUG_STYLES(ALOGI("RETRIEVING ATTR 0x%08x...", curIdent)); + if (kDebugStyles) { + ALOGI("RETRIEVING ATTR 0x%08x...", curIdent); + } // Try to find a value for this attribute... we prioritize values // coming from, first XML attributes, then XML style, then default @@ -1334,8 +1363,9 @@ static jboolean android_content_AssetManager_applyStyle(JNIEnv* env, jobject cla xmlParser->getAttributeValue(ix, &value); ix++; curXmlAttr = xmlParser->getAttributeNameResID(ix); - DEBUG_STYLES(ALOGI("-> From XML: type=0x%x, data=0x%08x", - value.dataType, value.data)); + if (kDebugStyles) { + ALOGI("-> From XML: type=0x%x, data=0x%08x", value.dataType, value.data); + } } // Skip through the style values until the end or the next possible match. @@ -1348,8 +1378,9 @@ static jboolean android_content_AssetManager_applyStyle(JNIEnv* env, jobject cla block = styleEnt->stringBlock; typeSetFlags = styleTypeSetFlags; value = styleEnt->map.value; - DEBUG_STYLES(ALOGI("-> From style: type=0x%x, data=0x%08x", - value.dataType, value.data)); + if (kDebugStyles) { + ALOGI("-> From style: type=0x%x, data=0x%08x", value.dataType, value.data); + } } styleEnt++; } @@ -1364,8 +1395,9 @@ static jboolean android_content_AssetManager_applyStyle(JNIEnv* env, jobject cla block = defStyleEnt->stringBlock; typeSetFlags = defStyleTypeSetFlags; value = defStyleEnt->map.value; - DEBUG_STYLES(ALOGI("-> From def style: type=0x%x, data=0x%08x", - value.dataType, value.data)); + if (kDebugStyles) { + ALOGI("-> From def style: type=0x%x, data=0x%08x", value.dataType, value.data); + } } defStyleEnt++; } @@ -1376,38 +1408,44 @@ static jboolean android_content_AssetManager_applyStyle(JNIEnv* env, jobject cla ssize_t newBlock = theme->resolveAttributeReference(&value, block, &resid, &typeSetFlags, &config); if (newBlock >= 0) block = newBlock; - DEBUG_STYLES(ALOGI("-> Resolved attr: type=0x%x, data=0x%08x", - value.dataType, value.data)); + if (kDebugStyles) { + ALOGI("-> Resolved attr: type=0x%x, data=0x%08x", value.dataType, value.data); + } } else { // If we still don't have a value for this attribute, try to find // it in the theme! ssize_t newBlock = theme->getAttribute(curIdent, &value, &typeSetFlags); if (newBlock >= 0) { - DEBUG_STYLES(ALOGI("-> From theme: type=0x%x, data=0x%08x", - value.dataType, value.data)); + if (kDebugStyles) { + ALOGI("-> From theme: type=0x%x, data=0x%08x", value.dataType, value.data); + } newBlock = res.resolveReference(&value, block, &resid, &typeSetFlags, &config); -#if THROW_ON_BAD_ID - if (newBlock == BAD_INDEX) { - jniThrowException(env, "java/lang/IllegalStateException", "Bad resource!"); - return JNI_FALSE; + if (kThrowOnBadId) { + if (newBlock == BAD_INDEX) { + jniThrowException(env, "java/lang/IllegalStateException", "Bad resource!"); + return JNI_FALSE; + } } -#endif if (newBlock >= 0) block = newBlock; - DEBUG_STYLES(ALOGI("-> Resolved theme: type=0x%x, data=0x%08x", - value.dataType, value.data)); + if (kDebugStyles) { + ALOGI("-> Resolved theme: type=0x%x, data=0x%08x", value.dataType, value.data); + } } } // Deal with the special @null value -- it turns back to TYPE_NULL. if (value.dataType == Res_value::TYPE_REFERENCE && value.data == 0) { - DEBUG_STYLES(ALOGI("-> Setting to @null!")); + if (kDebugStyles) { + ALOGI("-> Setting to @null!"); + } value.dataType = Res_value::TYPE_NULL; block = kXmlBlock; } - DEBUG_STYLES(ALOGI("Attribute 0x%08x: type=0x%x, data=0x%08x", - curIdent, value.dataType, value.data)); + if (kDebugStyles) { + ALOGI("Attribute 0x%08x: type=0x%x, data=0x%08x", curIdent, value.dataType, value.data); + } // Write the final value back to Java. dest[STYLE_TYPE] = value.dataType; @@ -1536,12 +1574,12 @@ static jboolean android_content_AssetManager_retrieveAttributes(JNIEnv* env, job //printf("Resolving attribute reference\n"); ssize_t newBlock = res.resolveReference(&value, block, &resid, &typeSetFlags, &config); -#if THROW_ON_BAD_ID - if (newBlock == BAD_INDEX) { - jniThrowException(env, "java/lang/IllegalStateException", "Bad resource!"); - return JNI_FALSE; + if (kThrowOnBadId) { + if (newBlock == BAD_INDEX) { + jniThrowException(env, "java/lang/IllegalStateException", "Bad resource!"); + return JNI_FALSE; + } } -#endif if (newBlock >= 0) block = newBlock; } @@ -1649,12 +1687,12 @@ static jint android_content_AssetManager_retrieveArray(JNIEnv* env, jobject claz //printf("Resolving attribute reference\n"); ssize_t newBlock = res.resolveReference(&value, block, &resid, &typeSetFlags, &config); -#if THROW_ON_BAD_ID - if (newBlock == BAD_INDEX) { - jniThrowException(env, "java/lang/IllegalStateException", "Bad resource!"); - return JNI_FALSE; + if (kThrowOnBadId) { + if (newBlock == BAD_INDEX) { + jniThrowException(env, "java/lang/IllegalStateException", "Bad resource!"); + return JNI_FALSE; + } } -#endif if (newBlock >= 0) block = newBlock; } @@ -1761,12 +1799,12 @@ static jintArray android_content_AssetManager_getArrayStringInfo(JNIEnv* env, jo stringIndex = value.data; } -#if THROW_ON_BAD_ID - if (stringBlock == BAD_INDEX) { - jniThrowException(env, "java/lang/IllegalStateException", "Bad resource!"); - return array; + if (kThrowOnBadId) { + if (stringBlock == BAD_INDEX) { + jniThrowException(env, "java/lang/IllegalStateException", "Bad resource!"); + return array; + } } -#endif //todo: It might be faster to allocate a C array to contain // the blocknums and indices, put them in there and then @@ -1809,12 +1847,12 @@ static jobjectArray android_content_AssetManager_getArrayStringResource(JNIEnv* // Take care of resolving the found resource to its final value. ssize_t block = res.resolveReference(&value, bag->stringBlock, NULL); -#if THROW_ON_BAD_ID - if (block == BAD_INDEX) { - jniThrowException(env, "java/lang/IllegalStateException", "Bad resource!"); - return array; + if (kThrowOnBadId) { + if (block == BAD_INDEX) { + jniThrowException(env, "java/lang/IllegalStateException", "Bad resource!"); + return array; + } } -#endif if (value.dataType == Res_value::TYPE_STRING) { const ResStringPool* pool = res.getTableStringBlock(block); const char* str8 = pool->string8At(value.data, &strLen); @@ -1822,7 +1860,8 @@ static jobjectArray android_content_AssetManager_getArrayStringResource(JNIEnv* str = env->NewStringUTF(str8); } else { const char16_t* str16 = pool->stringAt(value.data, &strLen); - str = env->NewString(str16, strLen); + str = env->NewString(reinterpret_cast<const jchar*>(str16), + strLen); } // If one of our NewString{UTF} calls failed due to memory, an @@ -1872,12 +1911,12 @@ static jintArray android_content_AssetManager_getArrayIntResource(JNIEnv* env, j // Take care of resolving the found resource to its final value. ssize_t block = res.resolveReference(&value, bag->stringBlock, NULL); -#if THROW_ON_BAD_ID - if (block == BAD_INDEX) { - jniThrowException(env, "java/lang/IllegalStateException", "Bad resource!"); - return array; + if (kThrowOnBadId) { + if (block == BAD_INDEX) { + jniThrowException(env, "java/lang/IllegalStateException", "Bad resource!"); + return array; + } } -#endif if (value.dataType >= Res_value::TYPE_FIRST_INT && value.dataType <= Res_value::TYPE_LAST_INT) { int intVal = value.data; @@ -1909,7 +1948,6 @@ static jintArray android_content_AssetManager_getStyleAttributes(JNIEnv* env, jo return NULL; } - Res_value value; const ResTable::bag_entry* bag = startOfBag; for (size_t i=0; ((ssize_t)i)<N; i++, bag++) { int resourceId = bag->map.name.ident; @@ -2084,69 +2122,43 @@ static JNINativeMethod gAssetManagerMethods[] = { { "getAssetAllocations", "()Ljava/lang/String;", (void*) android_content_AssetManager_getAssetAllocations }, { "getGlobalAssetManagerCount", "()I", - (void*) android_content_AssetManager_getGlobalAssetCount }, + (void*) android_content_AssetManager_getGlobalAssetManagerCount }, }; int register_android_content_AssetManager(JNIEnv* env) { - jclass typedValue = env->FindClass("android/util/TypedValue"); - LOG_FATAL_IF(typedValue == NULL, "Unable to find class android/util/TypedValue"); - gTypedValueOffsets.mType - = env->GetFieldID(typedValue, "type", "I"); - LOG_FATAL_IF(gTypedValueOffsets.mType == NULL, "Unable to find TypedValue.type"); - gTypedValueOffsets.mData - = env->GetFieldID(typedValue, "data", "I"); - LOG_FATAL_IF(gTypedValueOffsets.mData == NULL, "Unable to find TypedValue.data"); - gTypedValueOffsets.mString - = env->GetFieldID(typedValue, "string", "Ljava/lang/CharSequence;"); - LOG_FATAL_IF(gTypedValueOffsets.mString == NULL, "Unable to find TypedValue.string"); - gTypedValueOffsets.mAssetCookie - = env->GetFieldID(typedValue, "assetCookie", "I"); - LOG_FATAL_IF(gTypedValueOffsets.mAssetCookie == NULL, "Unable to find TypedValue.assetCookie"); - gTypedValueOffsets.mResourceId - = env->GetFieldID(typedValue, "resourceId", "I"); - LOG_FATAL_IF(gTypedValueOffsets.mResourceId == NULL, "Unable to find TypedValue.resourceId"); - gTypedValueOffsets.mChangingConfigurations - = env->GetFieldID(typedValue, "changingConfigurations", "I"); - LOG_FATAL_IF(gTypedValueOffsets.mChangingConfigurations == NULL, "Unable to find TypedValue.changingConfigurations"); - gTypedValueOffsets.mDensity = env->GetFieldID(typedValue, "density", "I"); - LOG_FATAL_IF(gTypedValueOffsets.mDensity == NULL, "Unable to find TypedValue.density"); - - jclass assetFd = env->FindClass("android/content/res/AssetFileDescriptor"); - LOG_FATAL_IF(assetFd == NULL, "Unable to find class android/content/res/AssetFileDescriptor"); - gAssetFileDescriptorOffsets.mFd - = env->GetFieldID(assetFd, "mFd", "Landroid/os/ParcelFileDescriptor;"); - LOG_FATAL_IF(gAssetFileDescriptorOffsets.mFd == NULL, "Unable to find AssetFileDescriptor.mFd"); - gAssetFileDescriptorOffsets.mStartOffset - = env->GetFieldID(assetFd, "mStartOffset", "J"); - LOG_FATAL_IF(gAssetFileDescriptorOffsets.mStartOffset == NULL, "Unable to find AssetFileDescriptor.mStartOffset"); - gAssetFileDescriptorOffsets.mLength - = env->GetFieldID(assetFd, "mLength", "J"); - LOG_FATAL_IF(gAssetFileDescriptorOffsets.mLength == NULL, "Unable to find AssetFileDescriptor.mLength"); - - jclass assetManager = env->FindClass("android/content/res/AssetManager"); - LOG_FATAL_IF(assetManager == NULL, "Unable to find class android/content/res/AssetManager"); - gAssetManagerOffsets.mObject - = env->GetFieldID(assetManager, "mObject", "J"); - LOG_FATAL_IF(gAssetManagerOffsets.mObject == NULL, "Unable to find AssetManager.mObject"); - - jclass stringClass = env->FindClass("java/lang/String"); - LOG_FATAL_IF(stringClass == NULL, "Unable to find class java/lang/String"); - g_stringClass = (jclass)env->NewGlobalRef(stringClass); - LOG_FATAL_IF(g_stringClass == NULL, "Unable to create global reference for class java/lang/String"); - - jclass sparseArrayClass = env->FindClass("android/util/SparseArray"); - LOG_FATAL_IF(sparseArrayClass == NULL, "Unable to find class android/util/SparseArray"); - gSparseArrayOffsets.classObject = (jclass) env->NewGlobalRef(sparseArrayClass); - gSparseArrayOffsets.constructor = - env->GetMethodID(gSparseArrayOffsets.classObject, "<init>", "()V"); - LOG_FATAL_IF(gSparseArrayOffsets.constructor == NULL, "Unable to find SparseArray.<init>()"); - gSparseArrayOffsets.put = - env->GetMethodID(gSparseArrayOffsets.classObject, "put", "(ILjava/lang/Object;)V"); - LOG_FATAL_IF(gSparseArrayOffsets.put == NULL, "Unable to find SparseArray.put(int, V)"); - - return AndroidRuntime::registerNativeMethods(env, - "android/content/res/AssetManager", gAssetManagerMethods, NELEM(gAssetManagerMethods)); + jclass typedValue = FindClassOrDie(env, "android/util/TypedValue"); + gTypedValueOffsets.mType = GetFieldIDOrDie(env, typedValue, "type", "I"); + gTypedValueOffsets.mData = GetFieldIDOrDie(env, typedValue, "data", "I"); + gTypedValueOffsets.mString = GetFieldIDOrDie(env, typedValue, "string", + "Ljava/lang/CharSequence;"); + gTypedValueOffsets.mAssetCookie = GetFieldIDOrDie(env, typedValue, "assetCookie", "I"); + gTypedValueOffsets.mResourceId = GetFieldIDOrDie(env, typedValue, "resourceId", "I"); + gTypedValueOffsets.mChangingConfigurations = GetFieldIDOrDie(env, typedValue, + "changingConfigurations", "I"); + gTypedValueOffsets.mDensity = GetFieldIDOrDie(env, typedValue, "density", "I"); + + jclass assetFd = FindClassOrDie(env, "android/content/res/AssetFileDescriptor"); + gAssetFileDescriptorOffsets.mFd = GetFieldIDOrDie(env, assetFd, "mFd", + "Landroid/os/ParcelFileDescriptor;"); + gAssetFileDescriptorOffsets.mStartOffset = GetFieldIDOrDie(env, assetFd, "mStartOffset", "J"); + gAssetFileDescriptorOffsets.mLength = GetFieldIDOrDie(env, assetFd, "mLength", "J"); + + jclass assetManager = FindClassOrDie(env, "android/content/res/AssetManager"); + gAssetManagerOffsets.mObject = GetFieldIDOrDie(env, assetManager, "mObject", "J"); + + jclass stringClass = FindClassOrDie(env, "java/lang/String"); + g_stringClass = MakeGlobalRefOrDie(env, stringClass); + + jclass sparseArrayClass = FindClassOrDie(env, "android/util/SparseArray"); + gSparseArrayOffsets.classObject = MakeGlobalRefOrDie(env, sparseArrayClass); + gSparseArrayOffsets.constructor = GetMethodIDOrDie(env, gSparseArrayOffsets.classObject, + "<init>", "()V"); + gSparseArrayOffsets.put = GetMethodIDOrDie(env, gSparseArrayOffsets.classObject, "put", + "(ILjava/lang/Object;)V"); + + return RegisterMethodsOrDie(env, "android/content/res/AssetManager", gAssetManagerMethods, + NELEM(gAssetManagerMethods)); } }; // namespace android diff --git a/core/jni/android_util_Binder.cpp b/core/jni/android_util_Binder.cpp index a78c38692f26..5f42c3da10af 100644 --- a/core/jni/android_util_Binder.cpp +++ b/core/jni/android_util_Binder.cpp @@ -46,7 +46,7 @@ #include <ScopedUtfChars.h> #include <ScopedLocalRef.h> -#include <android_runtime/AndroidRuntime.h> +#include "core_jni_helpers.h" //#undef ALOGV //#define ALOGV(...) fprintf(stderr, __VA_ARGS__) @@ -85,15 +85,6 @@ static struct binderinternal_offsets_t // ---------------------------------------------------------------------------- -static struct debug_offsets_t -{ - // Class state. - jclass mClass; - -} gDebugOffsets; - -// ---------------------------------------------------------------------------- - static struct error_offsets_t { jclass mClass; @@ -215,7 +206,6 @@ static void report_exception(JNIEnv* env, jthrowable excep, const char* msg) sleep(60); ALOGE("Forcefully exiting"); exit(1); - *((int *) 1) = 1; } bail: @@ -836,21 +826,13 @@ const char* const kBinderPathName = "android/os/Binder"; static int int_register_android_os_Binder(JNIEnv* env) { - jclass clazz; + jclass clazz = FindClassOrDie(env, kBinderPathName); - clazz = env->FindClass(kBinderPathName); - LOG_FATAL_IF(clazz == NULL, "Unable to find class android.os.Binder"); + gBinderOffsets.mClass = MakeGlobalRefOrDie(env, clazz); + gBinderOffsets.mExecTransact = GetMethodIDOrDie(env, clazz, "execTransact", "(IJJI)Z"); + gBinderOffsets.mObject = GetFieldIDOrDie(env, clazz, "mObject", "J"); - gBinderOffsets.mClass = (jclass) env->NewGlobalRef(clazz); - gBinderOffsets.mExecTransact - = env->GetMethodID(clazz, "execTransact", "(IJJI)Z"); - assert(gBinderOffsets.mExecTransact); - - gBinderOffsets.mObject - = env->GetFieldID(clazz, "mObject", "J"); - assert(gBinderOffsets.mObject); - - return AndroidRuntime::registerNativeMethods( + return RegisterMethodsOrDie( env, kBinderPathName, gBinderMethods, NELEM(gBinderMethods)); } @@ -920,17 +902,12 @@ const char* const kBinderInternalPathName = "com/android/internal/os/BinderInter static int int_register_android_os_BinderInternal(JNIEnv* env) { - jclass clazz; - - clazz = env->FindClass(kBinderInternalPathName); - LOG_FATAL_IF(clazz == NULL, "Unable to find class com.android.internal.os.BinderInternal"); + jclass clazz = FindClassOrDie(env, kBinderInternalPathName); - gBinderInternalOffsets.mClass = (jclass) env->NewGlobalRef(clazz); - gBinderInternalOffsets.mForceGc - = env->GetStaticMethodID(clazz, "forceBinderGc", "()V"); - assert(gBinderInternalOffsets.mForceGc); + gBinderInternalOffsets.mClass = MakeGlobalRefOrDie(env, clazz); + gBinderInternalOffsets.mForceGc = GetStaticMethodIDOrDie(env, clazz, "forceBinderGc", "()V"); - return AndroidRuntime::registerNativeMethods( + return RegisterMethodsOrDie( env, kBinderInternalPathName, gBinderInternalMethods, NELEM(gBinderInternalMethods)); } @@ -955,7 +932,8 @@ static jstring android_os_BinderProxy_getInterfaceDescriptor(JNIEnv* env, jobjec IBinder* target = (IBinder*) env->GetLongField(obj, gBinderProxyOffsets.mObject); if (target != NULL) { const String16& desc = target->getInterfaceDescriptor(); - return env->NewString(desc.string(), desc.size()); + return env->NewString(reinterpret_cast<const jchar*>(desc.string()), + desc.size()); } jniThrowException(env, "java/lang/RuntimeException", "No binder found for object"); @@ -1024,7 +1002,9 @@ static bool push_eventlog_int(char** pos, const char* end, jint val) { } // From frameworks/base/core/java/android/content/EventLogTags.logtags: -#define ENABLE_BINDER_SAMPLE 0 + +static const bool kEnableBinderSample = false; + #define LOGTAG_BINDER_OPERATION 52004 static void conditionally_log_binder_call(int64_t start_millis, @@ -1095,24 +1075,28 @@ static jboolean android_os_BinderProxy_transact(JNIEnv* env, jobject obj, ALOGV("Java code calling transact on %p in Java object %p with code %" PRId32 "\n", target, obj, code); -#if ENABLE_BINDER_SAMPLE - // Only log the binder call duration for things on the Java-level main thread. - // But if we don't - const bool time_binder_calls = should_time_binder_calls(); + bool time_binder_calls; int64_t start_millis; - if (time_binder_calls) { - start_millis = uptimeMillis(); + if (kEnableBinderSample) { + // Only log the binder call duration for things on the Java-level main thread. + // But if we don't + time_binder_calls = should_time_binder_calls(); + + if (time_binder_calls) { + start_millis = uptimeMillis(); + } } -#endif + //printf("Transact from Java code to %p sending: ", target); data->print(); status_t err = target->transact(code, *data, reply, flags); //if (reply) printf("Transact from Java code to %p received: ", target); reply->print(); -#if ENABLE_BINDER_SAMPLE - if (time_binder_calls) { - conditionally_log_binder_call(start_millis, target, code); + + if (kEnableBinderSample) { + if (time_binder_calls) { + conditionally_log_binder_call(start_millis, target, code); + } } -#endif if (err == NO_ERROR) { return JNI_TRUE; @@ -1237,39 +1221,24 @@ const char* const kBinderProxyPathName = "android/os/BinderProxy"; static int int_register_android_os_BinderProxy(JNIEnv* env) { - jclass clazz; - - clazz = env->FindClass("java/lang/Error"); - LOG_FATAL_IF(clazz == NULL, "Unable to find class java.lang.Error"); - gErrorOffsets.mClass = (jclass) env->NewGlobalRef(clazz); - - clazz = env->FindClass(kBinderProxyPathName); - LOG_FATAL_IF(clazz == NULL, "Unable to find class android.os.BinderProxy"); - - gBinderProxyOffsets.mClass = (jclass) env->NewGlobalRef(clazz); - gBinderProxyOffsets.mConstructor - = env->GetMethodID(clazz, "<init>", "()V"); - assert(gBinderProxyOffsets.mConstructor); - gBinderProxyOffsets.mSendDeathNotice - = env->GetStaticMethodID(clazz, "sendDeathNotice", "(Landroid/os/IBinder$DeathRecipient;)V"); - assert(gBinderProxyOffsets.mSendDeathNotice); - - gBinderProxyOffsets.mObject - = env->GetFieldID(clazz, "mObject", "J"); - assert(gBinderProxyOffsets.mObject); - gBinderProxyOffsets.mSelf - = env->GetFieldID(clazz, "mSelf", "Ljava/lang/ref/WeakReference;"); - assert(gBinderProxyOffsets.mSelf); - gBinderProxyOffsets.mOrgue - = env->GetFieldID(clazz, "mOrgue", "J"); - assert(gBinderProxyOffsets.mOrgue); - - clazz = env->FindClass("java/lang/Class"); - LOG_FATAL_IF(clazz == NULL, "Unable to find java.lang.Class"); - gClassOffsets.mGetName = env->GetMethodID(clazz, "getName", "()Ljava/lang/String;"); - assert(gClassOffsets.mGetName); - - return AndroidRuntime::registerNativeMethods( + jclass clazz = FindClassOrDie(env, "java/lang/Error"); + gErrorOffsets.mClass = MakeGlobalRefOrDie(env, clazz); + + clazz = FindClassOrDie(env, kBinderProxyPathName); + gBinderProxyOffsets.mClass = MakeGlobalRefOrDie(env, clazz); + gBinderProxyOffsets.mConstructor = GetMethodIDOrDie(env, clazz, "<init>", "()V"); + gBinderProxyOffsets.mSendDeathNotice = GetStaticMethodIDOrDie(env, clazz, "sendDeathNotice", + "(Landroid/os/IBinder$DeathRecipient;)V"); + + gBinderProxyOffsets.mObject = GetFieldIDOrDie(env, clazz, "mObject", "J"); + gBinderProxyOffsets.mSelf = GetFieldIDOrDie(env, clazz, "mSelf", + "Ljava/lang/ref/WeakReference;"); + gBinderProxyOffsets.mOrgue = GetFieldIDOrDie(env, clazz, "mOrgue", "J"); + + clazz = FindClassOrDie(env, "java/lang/Class"); + gClassOffsets.mGetName = GetMethodIDOrDie(env, clazz, "getName", "()Ljava/lang/String;"); + + return RegisterMethodsOrDie( env, kBinderProxyPathName, gBinderProxyMethods, NELEM(gBinderProxyMethods)); } @@ -1287,28 +1256,20 @@ int register_android_os_Binder(JNIEnv* env) if (int_register_android_os_BinderProxy(env) < 0) return -1; - jclass clazz; - - clazz = env->FindClass("android/util/Log"); - LOG_FATAL_IF(clazz == NULL, "Unable to find class android.util.Log"); - gLogOffsets.mClass = (jclass) env->NewGlobalRef(clazz); - gLogOffsets.mLogE = env->GetStaticMethodID( - clazz, "e", "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)I"); - assert(gLogOffsets.mLogE); - - clazz = env->FindClass("android/os/ParcelFileDescriptor"); - LOG_FATAL_IF(clazz == NULL, "Unable to find class android.os.ParcelFileDescriptor"); - gParcelFileDescriptorOffsets.mClass = (jclass) env->NewGlobalRef(clazz); - gParcelFileDescriptorOffsets.mConstructor - = env->GetMethodID(clazz, "<init>", "(Ljava/io/FileDescriptor;)V"); - - clazz = env->FindClass("android/os/StrictMode"); - LOG_FATAL_IF(clazz == NULL, "Unable to find class android.os.StrictMode"); - gStrictModeCallbackOffsets.mClass = (jclass) env->NewGlobalRef(clazz); - gStrictModeCallbackOffsets.mCallback = env->GetStaticMethodID( - clazz, "onBinderStrictModePolicyChange", "(I)V"); - LOG_FATAL_IF(gStrictModeCallbackOffsets.mCallback == NULL, - "Unable to find strict mode callback."); + jclass clazz = FindClassOrDie(env, "android/util/Log"); + gLogOffsets.mClass = MakeGlobalRefOrDie(env, clazz); + gLogOffsets.mLogE = GetStaticMethodIDOrDie(env, clazz, "e", + "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)I"); + + clazz = FindClassOrDie(env, "android/os/ParcelFileDescriptor"); + gParcelFileDescriptorOffsets.mClass = MakeGlobalRefOrDie(env, clazz); + gParcelFileDescriptorOffsets.mConstructor = GetMethodIDOrDie(env, clazz, "<init>", + "(Ljava/io/FileDescriptor;)V"); + + clazz = FindClassOrDie(env, "android/os/StrictMode"); + gStrictModeCallbackOffsets.mClass = MakeGlobalRefOrDie(env, clazz); + gStrictModeCallbackOffsets.mCallback = GetStaticMethodIDOrDie(env, clazz, + "onBinderStrictModePolicyChange", "(I)V"); return 0; } diff --git a/core/jni/android_util_EventLog.cpp b/core/jni/android_util_EventLog.cpp index 8a0eaa26acda..2df13b7a9c80 100644 --- a/core/jni/android_util_EventLog.cpp +++ b/core/jni/android_util_EventLog.cpp @@ -17,7 +17,7 @@ #include <fcntl.h> #include "JNIHelp.h" -#include "android_runtime/AndroidRuntime.h" +#include "core_jni_helpers.h" #include "jni.h" #include "log/logger.h" @@ -263,33 +263,21 @@ static struct { jclass *c; const char *name, *mt; jmethodID *id; } gMethods[] = int register_android_util_EventLog(JNIEnv* env) { for (int i = 0; i < NELEM(gClasses); ++i) { - jclass clazz = env->FindClass(gClasses[i].name); - if (clazz == NULL) { - ALOGE("Can't find class: %s\n", gClasses[i].name); - return -1; - } - *gClasses[i].clazz = (jclass) env->NewGlobalRef(clazz); + jclass clazz = FindClassOrDie(env, gClasses[i].name); + *gClasses[i].clazz = MakeGlobalRefOrDie(env, clazz); } for (int i = 0; i < NELEM(gFields); ++i) { - *gFields[i].id = env->GetFieldID( + *gFields[i].id = GetFieldIDOrDie(env, *gFields[i].c, gFields[i].name, gFields[i].ft); - if (*gFields[i].id == NULL) { - ALOGE("Can't find field: %s\n", gFields[i].name); - return -1; - } } for (int i = 0; i < NELEM(gMethods); ++i) { - *gMethods[i].id = env->GetMethodID( + *gMethods[i].id = GetMethodIDOrDie(env, *gMethods[i].c, gMethods[i].name, gMethods[i].mt); - if (*gMethods[i].id == NULL) { - ALOGE("Can't find method: %s\n", gMethods[i].name); - return -1; - } } - return AndroidRuntime::registerNativeMethods( + return RegisterMethodsOrDie( env, "android/util/EventLog", gRegisterMethods, NELEM(gRegisterMethods)); diff --git a/core/jni/android_util_FileObserver.cpp b/core/jni/android_util_FileObserver.cpp index 0327d8c491d9..067d298580bc 100644 --- a/core/jni/android_util_FileObserver.cpp +++ b/core/jni/android_util_FileObserver.cpp @@ -19,7 +19,7 @@ #include "jni.h" #include "utils/Log.h" #include "utils/misc.h" -#include "android_runtime/AndroidRuntime.h" +#include "core_jni_helpers.h" #include <stdio.h> #include <stdlib.h> @@ -29,7 +29,7 @@ #include <sys/ioctl.h> #include <errno.h> -#ifdef HAVE_INOTIFY +#if defined(__linux__) #include <sys/inotify.h> #endif @@ -39,29 +39,25 @@ static jmethodID method_onEvent; static jint android_os_fileobserver_init(JNIEnv* env, jobject object) { -#ifdef HAVE_INOTIFY - - return (jint)inotify_init(); - -#else // HAVE_INOTIFY - +#if defined(__linux__) + return (jint)inotify_init(); +#else return -1; - -#endif // HAVE_INOTIFY +#endif } static void android_os_fileobserver_observe(JNIEnv* env, jobject object, jint fd) { -#ifdef HAVE_INOTIFY - +#if defined(__linux__) + char event_buf[512]; struct inotify_event* event; - + while (1) { int event_pos = 0; int num_bytes = read(fd, event_buf, sizeof(event_buf)); - + if (num_bytes < (int)sizeof(*event)) { if (errno == EINTR) @@ -70,14 +66,14 @@ static void android_os_fileobserver_observe(JNIEnv* env, jobject object, jint fd ALOGE("***** ERROR! android_os_fileobserver_observe() got a short event!"); return; } - + while (num_bytes >= (int)sizeof(*event)) { int event_size; event = (struct inotify_event *)(event_buf + event_pos); jstring path = NULL; - + if (event->len > 0) { path = env->NewStringUTF(event->name); @@ -98,37 +94,37 @@ static void android_os_fileobserver_observe(JNIEnv* env, jobject object, jint fd event_pos += event_size; } } - -#endif // HAVE_INOTIFY + +#endif } static jint android_os_fileobserver_startWatching(JNIEnv* env, jobject object, jint fd, jstring pathString, jint mask) { int res = -1; - -#ifdef HAVE_INOTIFY - + +#if defined(__linux__) + if (fd >= 0) { const char* path = env->GetStringUTFChars(pathString, NULL); - + res = inotify_add_watch(fd, path, mask); - + env->ReleaseStringUTFChars(pathString, path); } -#endif // HAVE_INOTIFY - +#endif + return res; } static void android_os_fileobserver_stopWatching(JNIEnv* env, jobject object, jint fd, jint wfd) { -#ifdef HAVE_INOTIFY +#if defined(__linux__) inotify_rm_watch((int)fd, (uint32_t)wfd); -#endif // HAVE_INOTIFY +#endif } static JNINativeMethod sMethods[] = { @@ -137,29 +133,17 @@ static JNINativeMethod sMethods[] = { { "observe", "(I)V", (void*)android_os_fileobserver_observe }, { "startWatching", "(ILjava/lang/String;I)I", (void*)android_os_fileobserver_startWatching }, { "stopWatching", "(II)V", (void*)android_os_fileobserver_stopWatching } - + }; int register_android_os_FileObserver(JNIEnv* env) { - jclass clazz; - - clazz = env->FindClass("android/os/FileObserver$ObserverThread"); - - if (clazz == NULL) - { - ALOGE("Can't find android/os/FileObserver$ObserverThread"); - return -1; - } + jclass clazz = FindClassOrDie(env, "android/os/FileObserver$ObserverThread"); - method_onEvent = env->GetMethodID(clazz, "onEvent", "(IILjava/lang/String;)V"); - if (method_onEvent == NULL) - { - ALOGE("Can't find FileObserver.onEvent(int, int, String)"); - return -1; - } + method_onEvent = GetMethodIDOrDie(env, clazz, "onEvent", "(IILjava/lang/String;)V"); - return AndroidRuntime::registerNativeMethods(env, "android/os/FileObserver$ObserverThread", sMethods, NELEM(sMethods)); + return RegisterMethodsOrDie(env, "android/os/FileObserver$ObserverThread", sMethods, + NELEM(sMethods)); } } /* namespace android */ diff --git a/core/jni/android_util_Log.cpp b/core/jni/android_util_Log.cpp index 93dcbefbd1d3..9a80f1d960b2 100644 --- a/core/jni/android_util_Log.cpp +++ b/core/jni/android_util_Log.cpp @@ -26,11 +26,9 @@ #include "jni.h" #include "JNIHelp.h" #include "utils/misc.h" -#include "android_runtime/AndroidRuntime.h" +#include "core_jni_helpers.h" #include "android_util_Log.h" -#define MIN(a,b) ((a<b)?a:b) - namespace android { struct levels_t { @@ -145,21 +143,16 @@ static JNINativeMethod gMethods[] = { int register_android_util_Log(JNIEnv* env) { - jclass clazz = env->FindClass("android/util/Log"); - - if (clazz == NULL) { - ALOGE("Can't find android/util/Log"); - return -1; - } + jclass clazz = FindClassOrDie(env, "android/util/Log"); - levels.verbose = env->GetStaticIntField(clazz, env->GetStaticFieldID(clazz, "VERBOSE", "I")); - levels.debug = env->GetStaticIntField(clazz, env->GetStaticFieldID(clazz, "DEBUG", "I")); - levels.info = env->GetStaticIntField(clazz, env->GetStaticFieldID(clazz, "INFO", "I")); - levels.warn = env->GetStaticIntField(clazz, env->GetStaticFieldID(clazz, "WARN", "I")); - levels.error = env->GetStaticIntField(clazz, env->GetStaticFieldID(clazz, "ERROR", "I")); - levels.assert = env->GetStaticIntField(clazz, env->GetStaticFieldID(clazz, "ASSERT", "I")); + levels.verbose = env->GetStaticIntField(clazz, GetStaticFieldIDOrDie(env, clazz, "VERBOSE", "I")); + levels.debug = env->GetStaticIntField(clazz, GetStaticFieldIDOrDie(env, clazz, "DEBUG", "I")); + levels.info = env->GetStaticIntField(clazz, GetStaticFieldIDOrDie(env, clazz, "INFO", "I")); + levels.warn = env->GetStaticIntField(clazz, GetStaticFieldIDOrDie(env, clazz, "WARN", "I")); + levels.error = env->GetStaticIntField(clazz, GetStaticFieldIDOrDie(env, clazz, "ERROR", "I")); + levels.assert = env->GetStaticIntField(clazz, GetStaticFieldIDOrDie(env, clazz, "ASSERT", "I")); - return AndroidRuntime::registerNativeMethods(env, "android/util/Log", gMethods, NELEM(gMethods)); + return RegisterMethodsOrDie(env, "android/util/Log", gMethods, NELEM(gMethods)); } }; // namespace android diff --git a/core/jni/android_util_Process.cpp b/core/jni/android_util_Process.cpp index 65061900ffbb..28307249249f 100644 --- a/core/jni/android_util_Process.cpp +++ b/core/jni/android_util_Process.cpp @@ -26,7 +26,7 @@ #include <utils/Vector.h> #include <processgroup/processgroup.h> -#include <android_runtime/AndroidRuntime.h> +#include "core_jni_helpers.h" #include "android_util_Binder.h" #include "JNIHelp.h" @@ -43,13 +43,13 @@ #include <sys/types.h> #include <unistd.h> -#define POLICY_DEBUG 0 #define GUARD_THREAD_PRIORITY 0 -#define DEBUG_PROC(x) //x - using namespace android; +static const bool kDebugPolicy = false; +static const bool kDebugProc = false; + #if GUARD_THREAD_PRIORITY Mutex gKeyCreateMutex; static pthread_key_t gBgKey = -1; @@ -109,7 +109,8 @@ jint android_os_Process_getUidForName(JNIEnv* env, jobject clazz, jstring name) const jchar* str16 = env->GetStringCritical(name, 0); String8 name8; if (str16) { - name8 = String8(str16, env->GetStringLength(name)); + name8 = String8(reinterpret_cast<const char16_t*>(str16), + env->GetStringLength(name)); env->ReleaseStringCritical(name, str16); } @@ -140,7 +141,8 @@ jint android_os_Process_getGidForName(JNIEnv* env, jobject clazz, jstring name) const jchar* str16 = env->GetStringCritical(name, 0); String8 name8; if (str16) { - name8 = String8(str16, env->GetStringLength(name)); + name8 = String8(reinterpret_cast<const char16_t*>(str16), + env->GetStringLength(name)); env->ReleaseStringCritical(name, str16); } @@ -175,7 +177,6 @@ void android_os_Process_setProcessGroup(JNIEnv* env, jobject clazz, int pid, jin { ALOGV("%s pid=%d grp=%" PRId32, __func__, pid, grp); DIR *d; - FILE *fp; char proc_path[255]; struct dirent *de; @@ -191,26 +192,27 @@ void android_os_Process_setProcessGroup(JNIEnv* env, jobject clazz, int pid, jin } SchedPolicy sp = (SchedPolicy) grp; -#if POLICY_DEBUG - char cmdline[32]; - int fd; + if (kDebugPolicy) { + char cmdline[32]; + int fd; - strcpy(cmdline, "unknown"); + strcpy(cmdline, "unknown"); - sprintf(proc_path, "/proc/%d/cmdline", pid); - fd = open(proc_path, O_RDONLY); - if (fd >= 0) { - int rc = read(fd, cmdline, sizeof(cmdline)-1); - cmdline[rc] = 0; - close(fd); - } + sprintf(proc_path, "/proc/%d/cmdline", pid); + fd = open(proc_path, O_RDONLY); + if (fd >= 0) { + int rc = read(fd, cmdline, sizeof(cmdline)-1); + cmdline[rc] = 0; + close(fd); + } - if (sp == SP_BACKGROUND) { - ALOGD("setProcessGroup: vvv pid %d (%s)", pid, cmdline); - } else { - ALOGD("setProcessGroup: ^^^ pid %d (%s)", pid, cmdline); + if (sp == SP_BACKGROUND) { + ALOGD("setProcessGroup: vvv pid %d (%s)", pid, cmdline); + } else { + ALOGD("setProcessGroup: ^^^ pid %d (%s)", pid, cmdline); + } } -#endif + sprintf(proc_path, "/proc/%d/task", pid); if (!(d = opendir(proc_path))) { // If the process exited on us, don't generate an exception @@ -287,7 +289,8 @@ static void android_os_Process_setCanSelfBackground(JNIEnv* env, jobject clazz, void android_os_Process_setThreadScheduler(JNIEnv* env, jclass clazz, jint tid, jint policy, jint pri) { -#ifdef HAVE_SCHED_SETSCHEDULER +// linux has sched_setscheduler(), others don't. +#if defined(__linux__) struct sched_param param; param.sched_priority = pri; int rc = sched_setscheduler(tid, policy, ¶m); @@ -384,7 +387,8 @@ void android_os_Process_setArgV0(JNIEnv* env, jobject clazz, jstring name) const jchar* str = env->GetStringCritical(name, 0); String8 name8; if (str) { - name8 = String8(str, env->GetStringLength(name)); + name8 = String8(reinterpret_cast<const char16_t*>(str), + env->GetStringLength(name)); env->ReleaseStringCritical(name, str); } @@ -718,7 +722,7 @@ jboolean android_os_Process_parseProcLineArray(JNIEnv* env, jobject clazz, jint mode = formatData[fi]; if ((mode&PROC_PARENS) != 0) { i++; - } else if ((mode&PROC_QUOTES != 0)) { + } else if ((mode&PROC_QUOTES) != 0) { if (buffer[i] == '"') { i++; } else { @@ -728,7 +732,9 @@ jboolean android_os_Process_parseProcLineArray(JNIEnv* env, jobject clazz, const char term = (char)(mode&PROC_TERM_MASK); const jsize start = i; if (i >= endIndex) { - DEBUG_PROC(ALOGW("Ran off end of data @%d", i)); + if (kDebugProc) { + ALOGW("Ran off end of data @%d", i); + } res = JNI_FALSE; break; } @@ -828,7 +834,9 @@ jboolean android_os_Process_readProcFile(JNIEnv* env, jobject clazz, int fd = open(file8, O_RDONLY); if (fd < 0) { - DEBUG_PROC(ALOGW("Unable to open process file: %s\n", file8)); + if (kDebugProc) { + ALOGW("Unable to open process file: %s\n", file8); + } env->ReleaseStringUTFChars(file, file8); return JNI_FALSE; } @@ -839,7 +847,9 @@ jboolean android_os_Process_readProcFile(JNIEnv* env, jobject clazz, close(fd); if (len < 0) { - DEBUG_PROC(ALOGW("Unable to open process file: %s fd=%d\n", file8, fd)); + if (kDebugProc) { + ALOGW("Unable to open process file: %s fd=%d\n", file8, fd); + } return JNI_FALSE; } buffer[len] = 0; @@ -1044,11 +1054,7 @@ static const JNINativeMethod methods[] = { {"removeAllProcessGroups", "()V", (void*)android_os_Process_removeAllProcessGroups}, }; -const char* const kProcessPathName = "android/os/Process"; - int register_android_os_Process(JNIEnv* env) { - return AndroidRuntime::registerNativeMethods( - env, kProcessPathName, - methods, NELEM(methods)); + return RegisterMethodsOrDie(env, "android/os/Process", methods, NELEM(methods)); } diff --git a/core/jni/android_util_StringBlock.cpp b/core/jni/android_util_StringBlock.cpp index f29250f4619d..f83eaec409d5 100644 --- a/core/jni/android_util_StringBlock.cpp +++ b/core/jni/android_util_StringBlock.cpp @@ -20,7 +20,7 @@ #include "jni.h" #include "JNIHelp.h" #include <utils/misc.h> -#include <android_runtime/AndroidRuntime.h> +#include <core_jni_helpers.h> #include <utils/Log.h> #include <androidfw/ResourceTypes.h> @@ -171,7 +171,7 @@ static JNINativeMethod gStringBlockMethods[] = { int register_android_content_StringBlock(JNIEnv* env) { - return AndroidRuntime::registerNativeMethods(env, + return RegisterMethodsOrDie(env, "android/content/res/StringBlock", gStringBlockMethods, NELEM(gStringBlockMethods)); } diff --git a/core/jni/android_util_XmlBlock.cpp b/core/jni/android_util_XmlBlock.cpp index 2cccb83977dc..375710e6faca 100644 --- a/core/jni/android_util_XmlBlock.cpp +++ b/core/jni/android_util_XmlBlock.cpp @@ -19,7 +19,7 @@ #include "jni.h" #include "JNIHelp.h" -#include <android_runtime/AndroidRuntime.h> +#include <core_jni_helpers.h> #include <androidfw/AssetManager.h> #include <androidfw/ResourceTypes.h> #include <utils/Log.h> @@ -267,19 +267,20 @@ static jint android_content_XmlBlock_nativeGetAttributeIndex(JNIEnv* env, jobjec const char16_t* ns16 = NULL; jsize nsLen = 0; if (ns) { - ns16 = env->GetStringChars(ns, NULL); + ns16 = reinterpret_cast<const char16_t*>(env->GetStringChars(ns, NULL)); nsLen = env->GetStringLength(ns); } - const char16_t* name16 = env->GetStringChars(name, NULL); + const char16_t* name16 = reinterpret_cast<const char16_t*>( + env->GetStringChars(name, NULL)); jsize nameLen = env->GetStringLength(name); jint idx = static_cast<jint>(st->indexOfAttribute(ns16, nsLen, name16, nameLen)); if (ns) { - env->ReleaseStringChars(ns, ns16); + env->ReleaseStringChars(ns, reinterpret_cast<const jchar*>(ns16)); } - env->ReleaseStringChars(name, name16); + env->ReleaseStringChars(name, reinterpret_cast<const jchar*>(name16)); return idx; } @@ -411,7 +412,7 @@ static JNINativeMethod gXmlBlockMethods[] = { int register_android_content_XmlBlock(JNIEnv* env) { - return AndroidRuntime::registerNativeMethods(env, + return RegisterMethodsOrDie(env, "android/content/res/XmlBlock", gXmlBlockMethods, NELEM(gXmlBlockMethods)); } diff --git a/core/jni/android_view_DisplayEventReceiver.cpp b/core/jni/android_view_DisplayEventReceiver.cpp index d4cc159b871c..0d5495356fad 100644 --- a/core/jni/android_view_DisplayEventReceiver.cpp +++ b/core/jni/android_view_DisplayEventReceiver.cpp @@ -18,9 +18,10 @@ //#define LOG_NDEBUG 0 - #include "JNIHelp.h" +#include <inttypes.h> + #include <android_runtime/AndroidRuntime.h> #include <utils/Log.h> #include <utils/Looper.h> @@ -28,6 +29,8 @@ #include <gui/DisplayEventReceiver.h> #include "android_os_MessageQueue.h" +#include "core_jni_helpers.h" + namespace android { // Number of events to read at a time from the DisplayEventReceiver pipe. @@ -142,7 +145,7 @@ int NativeDisplayEventReceiver::handleEvent(int receiveFd, int events, void* dat int32_t vsyncDisplayId; uint32_t vsyncCount; if (processPendingEvents(&vsyncTimestamp, &vsyncDisplayId, &vsyncCount)) { - ALOGV("receiver %p ~ Vsync pulse: timestamp=%lld, id=%d, count=%d", + ALOGV("receiver %p ~ Vsync pulse: timestamp=%" PRId64 ", id=%d, count=%d", this, vsyncTimestamp, vsyncDisplayId, vsyncCount); mWaitingForVsync = false; dispatchVsync(vsyncTimestamp, vsyncDisplayId, vsyncCount); @@ -260,29 +263,19 @@ static JNINativeMethod gMethods[] = { (void*)nativeScheduleVsync } }; -#define FIND_CLASS(var, className) \ - var = env->FindClass(className); \ - LOG_FATAL_IF(! var, "Unable to find class " className); \ - var = jclass(env->NewGlobalRef(var)); +int register_android_view_DisplayEventReceiver(JNIEnv* env) { + int res = RegisterMethodsOrDie(env, "android/view/DisplayEventReceiver", gMethods, + NELEM(gMethods)); -#define GET_METHOD_ID(var, clazz, methodName, methodDescriptor) \ - var = env->GetMethodID(clazz, methodName, methodDescriptor); \ - LOG_FATAL_IF(! var, "Unable to find method " methodName); + jclass clazz = FindClassOrDie(env, "android/view/DisplayEventReceiver"); + gDisplayEventReceiverClassInfo.clazz = MakeGlobalRefOrDie(env, clazz); -int register_android_view_DisplayEventReceiver(JNIEnv* env) { - int res = jniRegisterNativeMethods(env, "android/view/DisplayEventReceiver", - gMethods, NELEM(gMethods)); - LOG_FATAL_IF(res < 0, "Unable to register native methods."); - - FIND_CLASS(gDisplayEventReceiverClassInfo.clazz, "android/view/DisplayEventReceiver"); - - GET_METHOD_ID(gDisplayEventReceiverClassInfo.dispatchVsync, - gDisplayEventReceiverClassInfo.clazz, - "dispatchVsync", "(JII)V"); - GET_METHOD_ID(gDisplayEventReceiverClassInfo.dispatchHotplug, - gDisplayEventReceiverClassInfo.clazz, - "dispatchHotplug", "(JIZ)V"); - return 0; + gDisplayEventReceiverClassInfo.dispatchVsync = GetMethodIDOrDie(env, + gDisplayEventReceiverClassInfo.clazz, "dispatchVsync", "(JII)V"); + gDisplayEventReceiverClassInfo.dispatchHotplug = GetMethodIDOrDie(env, + gDisplayEventReceiverClassInfo.clazz, "dispatchHotplug", "(JIZ)V"); + + return res; } } // namespace android diff --git a/core/jni/android_view_GLES20Canvas.cpp b/core/jni/android_view_GLES20Canvas.cpp index 2e2b23f25d3d..bd125a5a53ec 100644 --- a/core/jni/android_view_GLES20Canvas.cpp +++ b/core/jni/android_view_GLES20Canvas.cpp @@ -46,10 +46,16 @@ #include "MinikinUtils.h" +#include "core_jni_helpers.h" + namespace android { using namespace uirenderer; +static struct { + jmethodID set; +} gRectClassInfo; + /** * Note: DisplayListRenderer JNI layer is generated and compiled only on supported * devices. This means all the logic must be compiled only when the @@ -61,21 +67,7 @@ using namespace uirenderer; // Defines // ---------------------------------------------------------------------------- -// Debug -#define DEBUG_RENDERER 0 - -// Debug -#if DEBUG_RENDERER - #define RENDERER_LOGD(...) ALOGD(__VA_ARGS__) -#else - #define RENDERER_LOGD(...) -#endif - -// ---------------------------------------------------------------------------- - -static struct { - jmethodID set; -} gRectClassInfo; +static const bool kDebugRenderer = false; // ---------------------------------------------------------------------------- // Constructors @@ -84,7 +76,9 @@ static struct { static void android_view_GLES20Canvas_destroyRenderer(JNIEnv* env, jobject clazz, jlong rendererPtr) { DisplayListRenderer* renderer = reinterpret_cast<DisplayListRenderer*>(rendererPtr); - RENDERER_LOGD("Destroy DisplayListRenderer"); + if (kDebugRenderer) { + ALOGD("Destroy DisplayListRenderer"); + } delete renderer; } @@ -833,24 +827,30 @@ static void android_view_GLES20Canvas_drawLayer(JNIEnv* env, jobject clazz, #endif // USE_OPENGL_RENDERER +#ifdef USE_OPENGL_RENDERER +static const bool kUseOpenGLRenderer = true; +#else +static const bool kUseOpenGLRenderer = false; +#endif + // ---------------------------------------------------------------------------- // Common // ---------------------------------------------------------------------------- static jboolean android_view_GLES20Canvas_isAvailable(JNIEnv* env, jobject clazz) { -#ifdef USE_OPENGL_RENDERER - char prop[PROPERTY_VALUE_MAX]; - if (property_get("ro.kernel.qemu", prop, NULL) == 0) { - // not in the emulator - return JNI_TRUE; + if (kUseOpenGLRenderer) { + char prop[PROPERTY_VALUE_MAX]; + if (property_get("ro.kernel.qemu", prop, NULL) == 0) { + // not in the emulator + return JNI_TRUE; + } + // In the emulator this property will be set to 1 when hardware GLES is + // enabled, 0 otherwise. On old emulator versions it will be undefined. + property_get("ro.kernel.qemu.gles", prop, "0"); + return atoi(prop) == 1 ? JNI_TRUE : JNI_FALSE; + } else { + return JNI_FALSE; } - // In the emulator this property will be set to 1 when hardware GLES is - // enabled, 0 otherwise. On old emulator versions it will be undefined. - property_get("ro.kernel.qemu.gles", prop, "0"); - return atoi(prop) == 1 ? JNI_TRUE : JNI_FALSE; -#else - return JNI_FALSE; -#endif } // ---------------------------------------------------------------------------- @@ -859,10 +859,10 @@ static jboolean android_view_GLES20Canvas_isAvailable(JNIEnv* env, jobject clazz static void android_app_ActivityThread_dumpGraphics(JNIEnv* env, jobject clazz, jobject javaFileDescriptor) { -#ifdef USE_OPENGL_RENDERER - int fd = jniGetFDFromFileDescriptor(env, javaFileDescriptor); - android::uirenderer::RenderNode::outputLogBuffer(fd); -#endif // USE_OPENGL_RENDERER + if (kUseOpenGLRenderer) { + int fd = jniGetFDFromFileDescriptor(env, javaFileDescriptor); + android::uirenderer::RenderNode::outputLogBuffer(fd); + } } // ---------------------------------------------------------------------------- @@ -971,32 +971,17 @@ static JNINativeMethod gActivityThreadMethods[] = { (void*) android_app_ActivityThread_dumpGraphics } }; - -#ifdef USE_OPENGL_RENDERER - #define FIND_CLASS(var, className) \ - var = env->FindClass(className); \ - LOG_FATAL_IF(! var, "Unable to find class " className); - - #define GET_METHOD_ID(var, clazz, methodName, methodDescriptor) \ - var = env->GetMethodID(clazz, methodName, methodDescriptor); \ - LOG_FATAL_IF(! var, "Unable to find method " methodName); -#else - #define FIND_CLASS(var, className) - #define GET_METHOD_ID(var, clazz, methodName, methodDescriptor) -#endif - int register_android_view_GLES20Canvas(JNIEnv* env) { - jclass clazz; - FIND_CLASS(clazz, "android/graphics/Rect"); - GET_METHOD_ID(gRectClassInfo.set, clazz, "set", "(IIII)V"); + if (kUseOpenGLRenderer) { + jclass clazz = FindClassOrDie(env, "android/graphics/Rect"); + gRectClassInfo.set = GetMethodIDOrDie(env, clazz, "set", "(IIII)V"); + } - return AndroidRuntime::registerNativeMethods(env, kClassPathName, gMethods, NELEM(gMethods)); + return RegisterMethodsOrDie(env, kClassPathName, gMethods, NELEM(gMethods)); } -const char* const kActivityThreadPathName = "android/app/ActivityThread"; - int register_android_app_ActivityThread(JNIEnv* env) { - return AndroidRuntime::registerNativeMethods(env, kActivityThreadPathName, + return RegisterMethodsOrDie(env, "android/app/ActivityThread", gActivityThreadMethods, NELEM(gActivityThreadMethods)); } diff --git a/core/jni/android_view_GraphicBuffer.cpp b/core/jni/android_view_GraphicBuffer.cpp index 5ebed9c38fa8..a12629f7d9ba 100644 --- a/core/jni/android_view_GraphicBuffer.cpp +++ b/core/jni/android_view_GraphicBuffer.cpp @@ -38,6 +38,8 @@ #include <private/gui/ComposerService.h> +#include "core_jni_helpers.h" + namespace android { // ---------------------------------------------------------------------------- @@ -45,16 +47,7 @@ namespace android { // ---------------------------------------------------------------------------- // Debug -#define DEBUG_GRAPHIC_BUFFER 0 - -// Debug -#if DEBUG_GRAPHIC_BUFFER - #define GB_LOGD(...) ALOGD(__VA_ARGS__) - #define GB_LOGW(...) ALOGW(__VA_ARGS__) -#else - #define GB_LOGD(...) - #define GB_LOGW(...) -#endif +static const bool kDebugGraphicBuffer = false; #define LOCK_CANVAS_USAGE GraphicBuffer::USAGE_SW_READ_OFTEN | GraphicBuffer::USAGE_SW_WRITE_OFTEN @@ -116,14 +109,18 @@ static jlong android_view_GraphiceBuffer_create(JNIEnv* env, jobject clazz, sp<ISurfaceComposer> composer(ComposerService::getComposerService()); sp<IGraphicBufferAlloc> alloc(composer->createGraphicBufferAlloc()); if (alloc == NULL) { - GB_LOGW("createGraphicBufferAlloc() failed in GraphicBuffer.create()"); + if (kDebugGraphicBuffer) { + ALOGW("createGraphicBufferAlloc() failed in GraphicBuffer.create()"); + } return NULL; } status_t error; sp<GraphicBuffer> buffer(alloc->createGraphicBuffer(width, height, format, usage, &error)); if (buffer == NULL) { - GB_LOGW("createGraphicBuffer() failed in GraphicBuffer.create()"); + if (kDebugGraphicBuffer) { + ALOGW("createGraphicBuffer() failed in GraphicBuffer.create()"); + } return NULL; } @@ -277,18 +274,6 @@ sp<GraphicBuffer> graphicBufferForJavaObject(JNIEnv* env, jobject obj) { // JNI Glue // ---------------------------------------------------------------------------- -#define FIND_CLASS(var, className) \ - var = env->FindClass(className); \ - LOG_FATAL_IF(! var, "Unable to find class " className); - -#define GET_FIELD_ID(var, clazz, fieldName, fieldDescriptor) \ - var = env->GetFieldID(clazz, fieldName, fieldDescriptor); \ - LOG_FATAL_IF(! var, "Unable to find field " fieldName); - -#define GET_METHOD_ID(var, clazz, methodName, methodDescriptor) \ - var = env->GetMethodID(clazz, methodName, methodDescriptor); \ - LOG_FATAL_IF(!var, "Unable to find method " methodName); - const char* const kClassPathName = "android/view/GraphicBuffer"; static JNINativeMethod gMethods[] = { @@ -307,22 +292,21 @@ static JNINativeMethod gMethods[] = { }; int register_android_view_GraphicBuffer(JNIEnv* env) { - jclass clazz; - FIND_CLASS(clazz, "android/view/GraphicBuffer"); - GET_FIELD_ID(gGraphicBufferClassInfo.mNativeObject, clazz, "mNativeObject", "J"); - - FIND_CLASS(clazz, "android/graphics/Rect"); - GET_METHOD_ID(gRectClassInfo.set, clazz, "set", "(IIII)V"); - GET_FIELD_ID(gRectClassInfo.left, clazz, "left", "I"); - GET_FIELD_ID(gRectClassInfo.top, clazz, "top", "I"); - GET_FIELD_ID(gRectClassInfo.right, clazz, "right", "I"); - GET_FIELD_ID(gRectClassInfo.bottom, clazz, "bottom", "I"); - - FIND_CLASS(clazz, "android/graphics/Canvas"); - GET_FIELD_ID(gCanvasClassInfo.mSurfaceFormat, clazz, "mSurfaceFormat", "I"); - GET_METHOD_ID(gCanvasClassInfo.setNativeBitmap, clazz, "setNativeBitmap", "(J)V"); - - return AndroidRuntime::registerNativeMethods(env, kClassPathName, gMethods, NELEM(gMethods)); + jclass clazz = FindClassOrDie(env, "android/view/GraphicBuffer"); + gGraphicBufferClassInfo.mNativeObject = GetFieldIDOrDie(env, clazz, "mNativeObject", "J"); + + clazz = FindClassOrDie(env, "android/graphics/Rect"); + gRectClassInfo.set = GetMethodIDOrDie(env, clazz, "set", "(IIII)V"); + gRectClassInfo.left = GetFieldIDOrDie(env, clazz, "left", "I"); + gRectClassInfo.top = GetFieldIDOrDie(env, clazz, "top", "I"); + gRectClassInfo.right = GetFieldIDOrDie(env, clazz, "right", "I"); + gRectClassInfo.bottom = GetFieldIDOrDie(env, clazz, "bottom", "I"); + + clazz = FindClassOrDie(env, "android/graphics/Canvas"); + gCanvasClassInfo.mSurfaceFormat = GetFieldIDOrDie(env, clazz, "mSurfaceFormat", "I"); + gCanvasClassInfo.setNativeBitmap = GetMethodIDOrDie(env, clazz, "setNativeBitmap", "(J)V"); + + return RegisterMethodsOrDie(env, kClassPathName, gMethods, NELEM(gMethods)); } }; diff --git a/core/jni/android_view_HardwareLayer.cpp b/core/jni/android_view_HardwareLayer.cpp index aa674de16af5..648d1e398399 100644 --- a/core/jni/android_view_HardwareLayer.cpp +++ b/core/jni/android_view_HardwareLayer.cpp @@ -20,7 +20,7 @@ #include "GraphicsJNI.h" #include <nativehelper/JNIHelp.h> -#include <android_runtime/AndroidRuntime.h> +#include "core_jni_helpers.h" #include <android_runtime/android_graphics_SurfaceTexture.h> #include <gui/GLConsumer.h> @@ -117,7 +117,7 @@ static JNINativeMethod gMethods[] = { }; int register_android_view_HardwareLayer(JNIEnv* env) { - return AndroidRuntime::registerNativeMethods(env, kClassPathName, gMethods, NELEM(gMethods)); + return RegisterMethodsOrDie(env, kClassPathName, gMethods, NELEM(gMethods)); } }; diff --git a/core/jni/android_view_InputChannel.cpp b/core/jni/android_view_InputChannel.cpp index d667920045e7..4b42ab5d213a 100644 --- a/core/jni/android_view_InputChannel.cpp +++ b/core/jni/android_view_InputChannel.cpp @@ -26,6 +26,8 @@ #include "android_os_Parcel.h" #include "android_util_Binder.h" +#include "core_jni_helpers.h" + namespace android { // ---------------------------------------------------------------------------- @@ -275,33 +277,19 @@ static JNINativeMethod gInputChannelMethods[] = { (void*)android_view_InputChannel_nativeDup }, }; -#define FIND_CLASS(var, className) \ - var = env->FindClass(className); \ - LOG_FATAL_IF(! var, "Unable to find class " className); \ - var = jclass(env->NewGlobalRef(var)); - -#define GET_METHOD_ID(var, clazz, methodName, methodDescriptor) \ - var = env->GetMethodID(clazz, methodName, methodDescriptor); \ - LOG_FATAL_IF(! var, "Unable to find method " methodName); - -#define GET_FIELD_ID(var, clazz, fieldName, fieldDescriptor) \ - var = env->GetFieldID(clazz, fieldName, fieldDescriptor); \ - LOG_FATAL_IF(! var, "Unable to find field " fieldName); - int register_android_view_InputChannel(JNIEnv* env) { - int res = jniRegisterNativeMethods(env, "android/view/InputChannel", - gInputChannelMethods, NELEM(gInputChannelMethods)); - LOG_FATAL_IF(res < 0, "Unable to register native methods."); + int res = RegisterMethodsOrDie(env, "android/view/InputChannel", gInputChannelMethods, + NELEM(gInputChannelMethods)); + + jclass clazz = FindClassOrDie(env, "android/view/InputChannel"); + gInputChannelClassInfo.clazz = MakeGlobalRefOrDie(env, clazz); - FIND_CLASS(gInputChannelClassInfo.clazz, "android/view/InputChannel"); + gInputChannelClassInfo.mPtr = GetFieldIDOrDie(env, gInputChannelClassInfo.clazz, "mPtr", "J"); - GET_FIELD_ID(gInputChannelClassInfo.mPtr, gInputChannelClassInfo.clazz, - "mPtr", "J"); - - GET_METHOD_ID(gInputChannelClassInfo.ctor, gInputChannelClassInfo.clazz, - "<init>", "()V"); + gInputChannelClassInfo.ctor = GetMethodIDOrDie(env, gInputChannelClassInfo.clazz, "<init>", + "()V"); - return 0; + return res; } } // namespace android diff --git a/core/jni/android_view_InputDevice.cpp b/core/jni/android_view_InputDevice.cpp index bef0f848c25b..2323f4385f00 100644 --- a/core/jni/android_view_InputDevice.cpp +++ b/core/jni/android_view_InputDevice.cpp @@ -25,6 +25,8 @@ #include "android_view_InputDevice.h" #include "android_view_KeyCharacterMap.h" +#include "core_jni_helpers.h" + namespace android { static struct { @@ -77,24 +79,15 @@ jobject android_view_InputDevice_create(JNIEnv* env, const InputDeviceInfo& devi } -#define FIND_CLASS(var, className) \ - var = env->FindClass(className); \ - LOG_FATAL_IF(! var, "Unable to find class " className); - -#define GET_METHOD_ID(var, clazz, methodName, methodDescriptor) \ - var = env->GetMethodID(clazz, methodName, methodDescriptor); \ - LOG_FATAL_IF(! var, "Unable to find method " methodName); - int register_android_view_InputDevice(JNIEnv* env) { - FIND_CLASS(gInputDeviceClassInfo.clazz, "android/view/InputDevice"); - gInputDeviceClassInfo.clazz = jclass(env->NewGlobalRef(gInputDeviceClassInfo.clazz)); + gInputDeviceClassInfo.clazz = FindClassOrDie(env, "android/view/InputDevice"); + gInputDeviceClassInfo.clazz = MakeGlobalRefOrDie(env, gInputDeviceClassInfo.clazz); - GET_METHOD_ID(gInputDeviceClassInfo.ctor, gInputDeviceClassInfo.clazz, - "<init>", + gInputDeviceClassInfo.ctor = GetMethodIDOrDie(env, gInputDeviceClassInfo.clazz, "<init>", "(IIILjava/lang/String;IILjava/lang/String;ZIILandroid/view/KeyCharacterMap;ZZ)V"); - GET_METHOD_ID(gInputDeviceClassInfo.addMotionRange, gInputDeviceClassInfo.clazz, + gInputDeviceClassInfo.addMotionRange = GetMethodIDOrDie(env, gInputDeviceClassInfo.clazz, "addMotionRange", "(IIFFFFF)V"); return 0; diff --git a/core/jni/android_view_InputEventReceiver.cpp b/core/jni/android_view_InputEventReceiver.cpp index f36bf31daa5f..37f50620a821 100644 --- a/core/jni/android_view_InputEventReceiver.cpp +++ b/core/jni/android_view_InputEventReceiver.cpp @@ -18,10 +18,6 @@ //#define LOG_NDEBUG 0 -// Log debug messages about the dispatch cycle. -#define DEBUG_DISPATCH_CYCLE 0 - - #include "JNIHelp.h" #include <android_runtime/AndroidRuntime.h> @@ -37,8 +33,12 @@ #include <ScopedLocalRef.h> +#include "core_jni_helpers.h" + namespace android { +static const bool kDebugDispatchCycle = false; + static struct { jclass clazz; @@ -92,9 +92,9 @@ NativeInputEventReceiver::NativeInputEventReceiver(JNIEnv* env, mReceiverWeakGlobal(env->NewGlobalRef(receiverWeak)), mInputConsumer(inputChannel), mMessageQueue(messageQueue), mBatchedInputEventPending(false), mFdEvents(0) { -#if DEBUG_DISPATCH_CYCLE - ALOGD("channel '%s' ~ Initializing input event receiver.", getInputChannelName()); -#endif + if (kDebugDispatchCycle) { + ALOGD("channel '%s' ~ Initializing input event receiver.", getInputChannelName()); + } } NativeInputEventReceiver::~NativeInputEventReceiver() { @@ -108,25 +108,25 @@ status_t NativeInputEventReceiver::initialize() { } void NativeInputEventReceiver::dispose() { -#if DEBUG_DISPATCH_CYCLE - ALOGD("channel '%s' ~ Disposing input event receiver.", getInputChannelName()); -#endif + if (kDebugDispatchCycle) { + ALOGD("channel '%s' ~ Disposing input event receiver.", getInputChannelName()); + } setFdEvents(0); } status_t NativeInputEventReceiver::finishInputEvent(uint32_t seq, bool handled) { -#if DEBUG_DISPATCH_CYCLE - ALOGD("channel '%s' ~ Finished input event.", getInputChannelName()); -#endif + if (kDebugDispatchCycle) { + ALOGD("channel '%s' ~ Finished input event.", getInputChannelName()); + } status_t status = mInputConsumer.sendFinishedSignal(seq, handled); if (status) { if (status == WOULD_BLOCK) { -#if DEBUG_DISPATCH_CYCLE - ALOGD("channel '%s' ~ Could not send finished signal immediately. " - "Enqueued for later.", getInputChannelName()); -#endif + if (kDebugDispatchCycle) { + ALOGD("channel '%s' ~ Could not send finished signal immediately. " + "Enqueued for later.", getInputChannelName()); + } Finish finish; finish.seq = seq; finish.handled = handled; @@ -156,13 +156,13 @@ void NativeInputEventReceiver::setFdEvents(int events) { int NativeInputEventReceiver::handleEvent(int receiveFd, int events, void* data) { if (events & (ALOOPER_EVENT_ERROR | ALOOPER_EVENT_HANGUP)) { -#if DEBUG_DISPATCH_CYCLE // This error typically occurs when the publisher has closed the input channel // as part of removing a window or finishing an IME session, in which case // the consumer will soon be disposed as well. - ALOGD("channel '%s' ~ Publisher closed input channel or an error occurred. " - "events=0x%x", getInputChannelName(), events); -#endif + if (kDebugDispatchCycle) { + ALOGD("channel '%s' ~ Publisher closed input channel or an error occurred. " + "events=0x%x", getInputChannelName(), events); + } return 0; // remove the callback } @@ -181,10 +181,10 @@ int NativeInputEventReceiver::handleEvent(int receiveFd, int events, void* data) mFinishQueue.removeItemsAt(0, i); if (status == WOULD_BLOCK) { -#if DEBUG_DISPATCH_CYCLE - ALOGD("channel '%s' ~ Sent %u queued finish events; %u left.", - getInputChannelName(), i, mFinishQueue.size()); -#endif + if (kDebugDispatchCycle) { + ALOGD("channel '%s' ~ Sent %u queued finish events; %u left.", + getInputChannelName(), i, mFinishQueue.size()); + } return 1; // keep the callback, try again later } @@ -200,10 +200,10 @@ int NativeInputEventReceiver::handleEvent(int receiveFd, int events, void* data) return 0; // remove the callback } } -#if DEBUG_DISPATCH_CYCLE - ALOGD("channel '%s' ~ Sent %u queued finish events; none left.", - getInputChannelName(), mFinishQueue.size()); -#endif + if (kDebugDispatchCycle) { + ALOGD("channel '%s' ~ Sent %u queued finish events; none left.", + getInputChannelName(), mFinishQueue.size()); + } mFinishQueue.clear(); setFdEvents(ALOOPER_EVENT_INPUT); return 1; @@ -216,10 +216,10 @@ int NativeInputEventReceiver::handleEvent(int receiveFd, int events, void* data) status_t NativeInputEventReceiver::consumeEvents(JNIEnv* env, bool consumeBatches, nsecs_t frameTime, bool* outConsumedBatch) { -#if DEBUG_DISPATCH_CYCLE - ALOGD("channel '%s' ~ Consuming input events, consumeBatches=%s, frameTime=%lld.", - getInputChannelName(), consumeBatches ? "true" : "false", frameTime); -#endif + if (kDebugDispatchCycle) { + ALOGD("channel '%s' ~ Consuming input events, consumeBatches=%s, frameTime=%lld.", + getInputChannelName(), consumeBatches ? "true" : "false", frameTime); + } if (consumeBatches) { mBatchedInputEventPending = false; @@ -250,10 +250,10 @@ status_t NativeInputEventReceiver::consumeEvents(JNIEnv* env, } mBatchedInputEventPending = true; -#if DEBUG_DISPATCH_CYCLE - ALOGD("channel '%s' ~ Dispatching batched input event pending notification.", - getInputChannelName()); -#endif + if (kDebugDispatchCycle) { + ALOGD("channel '%s' ~ Dispatching batched input event pending notification.", + getInputChannelName()); + } env->CallVoidMethod(receiverObj.get(), gInputEventReceiverClassInfo.dispatchBatchedInputEventPending); if (env->ExceptionCheck()) { @@ -282,17 +282,17 @@ status_t NativeInputEventReceiver::consumeEvents(JNIEnv* env, jobject inputEventObj; switch (inputEvent->getType()) { case AINPUT_EVENT_TYPE_KEY: -#if DEBUG_DISPATCH_CYCLE - ALOGD("channel '%s' ~ Received key event.", getInputChannelName()); -#endif + if (kDebugDispatchCycle) { + ALOGD("channel '%s' ~ Received key event.", getInputChannelName()); + } inputEventObj = android_view_KeyEvent_fromNative(env, static_cast<KeyEvent*>(inputEvent)); break; case AINPUT_EVENT_TYPE_MOTION: { -#if DEBUG_DISPATCH_CYCLE - ALOGD("channel '%s' ~ Received motion event.", getInputChannelName()); -#endif + if (kDebugDispatchCycle) { + ALOGD("channel '%s' ~ Received motion event.", getInputChannelName()); + } MotionEvent* motionEvent = static_cast<MotionEvent*>(inputEvent); if ((motionEvent->getAction() & AMOTION_EVENT_ACTION_MOVE) && outConsumedBatch) { *outConsumedBatch = true; @@ -307,9 +307,9 @@ status_t NativeInputEventReceiver::consumeEvents(JNIEnv* env, } if (inputEventObj) { -#if DEBUG_DISPATCH_CYCLE - ALOGD("channel '%s' ~ Dispatching input event.", getInputChannelName()); -#endif + if (kDebugDispatchCycle) { + ALOGD("channel '%s' ~ Dispatching input event.", getInputChannelName()); + } env->CallVoidMethod(receiverObj.get(), gInputEventReceiverClassInfo.dispatchInputEvent, seq, inputEventObj); if (env->ExceptionCheck()) { @@ -408,29 +408,20 @@ static JNINativeMethod gMethods[] = { (void*)nativeConsumeBatchedInputEvents }, }; -#define FIND_CLASS(var, className) \ - var = env->FindClass(className); \ - LOG_FATAL_IF(! var, "Unable to find class " className); \ - var = jclass(env->NewGlobalRef(var)); - -#define GET_METHOD_ID(var, clazz, methodName, methodDescriptor) \ - var = env->GetMethodID(clazz, methodName, methodDescriptor); \ - LOG_FATAL_IF(! var, "Unable to find method " methodName); - int register_android_view_InputEventReceiver(JNIEnv* env) { - int res = jniRegisterNativeMethods(env, "android/view/InputEventReceiver", + int res = RegisterMethodsOrDie(env, "android/view/InputEventReceiver", gMethods, NELEM(gMethods)); - LOG_FATAL_IF(res < 0, "Unable to register native methods."); - FIND_CLASS(gInputEventReceiverClassInfo.clazz, "android/view/InputEventReceiver"); + jclass clazz = FindClassOrDie(env, "android/view/InputEventReceiver"); + gInputEventReceiverClassInfo.clazz = MakeGlobalRefOrDie(env, clazz); - GET_METHOD_ID(gInputEventReceiverClassInfo.dispatchInputEvent, + gInputEventReceiverClassInfo.dispatchInputEvent = GetMethodIDOrDie(env, gInputEventReceiverClassInfo.clazz, "dispatchInputEvent", "(ILandroid/view/InputEvent;)V"); - GET_METHOD_ID(gInputEventReceiverClassInfo.dispatchBatchedInputEventPending, - gInputEventReceiverClassInfo.clazz, - "dispatchBatchedInputEventPending", "()V"); - return 0; + gInputEventReceiverClassInfo.dispatchBatchedInputEventPending = GetMethodIDOrDie(env, + gInputEventReceiverClassInfo.clazz, "dispatchBatchedInputEventPending", "()V"); + + return res; } } // namespace android diff --git a/core/jni/android_view_InputEventSender.cpp b/core/jni/android_view_InputEventSender.cpp index f156b9ada99e..e7388cfcd86b 100644 --- a/core/jni/android_view_InputEventSender.cpp +++ b/core/jni/android_view_InputEventSender.cpp @@ -18,10 +18,6 @@ //#define LOG_NDEBUG 0 -// Log debug messages about the dispatch cycle. -#define DEBUG_DISPATCH_CYCLE 0 - - #include "JNIHelp.h" #include <android_runtime/AndroidRuntime.h> @@ -37,8 +33,13 @@ #include <ScopedLocalRef.h> +#include "core_jni_helpers.h" + namespace android { +// Log debug messages about the dispatch cycle. +static const bool kDebugDispatchCycle = false; + static struct { jclass clazz; @@ -82,9 +83,9 @@ NativeInputEventSender::NativeInputEventSender(JNIEnv* env, mSenderWeakGlobal(env->NewGlobalRef(senderWeak)), mInputPublisher(inputChannel), mMessageQueue(messageQueue), mNextPublishedSeq(1) { -#if DEBUG_DISPATCH_CYCLE - ALOGD("channel '%s' ~ Initializing input event sender.", getInputChannelName()); -#endif + if (kDebugDispatchCycle) { + ALOGD("channel '%s' ~ Initializing input event sender.", getInputChannelName()); + } } NativeInputEventSender::~NativeInputEventSender() { @@ -99,17 +100,17 @@ status_t NativeInputEventSender::initialize() { } void NativeInputEventSender::dispose() { -#if DEBUG_DISPATCH_CYCLE - ALOGD("channel '%s' ~ Disposing input event sender.", getInputChannelName()); -#endif + if (kDebugDispatchCycle) { + ALOGD("channel '%s' ~ Disposing input event sender.", getInputChannelName()); + } mMessageQueue->getLooper()->removeFd(mInputPublisher.getChannel()->getFd()); } status_t NativeInputEventSender::sendKeyEvent(uint32_t seq, const KeyEvent* event) { -#if DEBUG_DISPATCH_CYCLE - ALOGD("channel '%s' ~ Sending key event, seq=%u.", getInputChannelName(), seq); -#endif + if (kDebugDispatchCycle) { + ALOGD("channel '%s' ~ Sending key event, seq=%u.", getInputChannelName(), seq); + } uint32_t publishedSeq = mNextPublishedSeq++; status_t status = mInputPublisher.publishKeyEvent(publishedSeq, @@ -126,9 +127,9 @@ status_t NativeInputEventSender::sendKeyEvent(uint32_t seq, const KeyEvent* even } status_t NativeInputEventSender::sendMotionEvent(uint32_t seq, const MotionEvent* event) { -#if DEBUG_DISPATCH_CYCLE - ALOGD("channel '%s' ~ Sending motion event, seq=%u.", getInputChannelName(), seq); -#endif + if (kDebugDispatchCycle) { + ALOGD("channel '%s' ~ Sending motion event, seq=%u.", getInputChannelName(), seq); + } uint32_t publishedSeq; for (size_t i = 0; i <= event->getHistorySize(); i++) { @@ -153,13 +154,14 @@ status_t NativeInputEventSender::sendMotionEvent(uint32_t seq, const MotionEvent int NativeInputEventSender::handleEvent(int receiveFd, int events, void* data) { if (events & (ALOOPER_EVENT_ERROR | ALOOPER_EVENT_HANGUP)) { -#if DEBUG_DISPATCH_CYCLE // This error typically occurs when the consumer has closed the input channel // as part of finishing an IME session, in which case the publisher will // soon be disposed as well. - ALOGD("channel '%s' ~ Consumer closed input channel or an error occurred. " - "events=0x%x", getInputChannelName(), events); -#endif + if (kDebugDispatchCycle) { + ALOGD("channel '%s' ~ Consumer closed input channel or an error occurred. " + "events=0x%x", getInputChannelName(), events); + } + return 0; // remove the callback } @@ -176,9 +178,9 @@ int NativeInputEventSender::handleEvent(int receiveFd, int events, void* data) { } status_t NativeInputEventSender::receiveFinishedSignals(JNIEnv* env) { -#if DEBUG_DISPATCH_CYCLE - ALOGD("channel '%s' ~ Receiving finished signals.", getInputChannelName()); -#endif + if (kDebugDispatchCycle) { + ALOGD("channel '%s' ~ Receiving finished signals.", getInputChannelName()); + } ScopedLocalRef<jobject> senderObj(env, NULL); bool skipCallbacks = false; @@ -200,12 +202,12 @@ status_t NativeInputEventSender::receiveFinishedSignals(JNIEnv* env) { uint32_t seq = mPublishedSeqMap.valueAt(index); mPublishedSeqMap.removeItemsAt(index); -#if DEBUG_DISPATCH_CYCLE - ALOGD("channel '%s' ~ Received finished signal, seq=%u, handled=%s, " - "pendingEvents=%u.", - getInputChannelName(), seq, handled ? "true" : "false", - mPublishedSeqMap.size()); -#endif + if (kDebugDispatchCycle) { + ALOGD("channel '%s' ~ Received finished signal, seq=%u, handled=%s, " + "pendingEvents=%u.", + getInputChannelName(), seq, handled ? "true" : "false", + mPublishedSeqMap.size()); + } if (!skipCallbacks) { if (!senderObj.get()) { @@ -299,26 +301,16 @@ static JNINativeMethod gMethods[] = { (void*)nativeSendMotionEvent }, }; -#define FIND_CLASS(var, className) \ - var = env->FindClass(className); \ - LOG_FATAL_IF(! var, "Unable to find class " className); \ - var = jclass(env->NewGlobalRef(var)); - -#define GET_METHOD_ID(var, clazz, methodName, methodDescriptor) \ - var = env->GetMethodID(clazz, methodName, methodDescriptor); \ - LOG_FATAL_IF(! var, "Unable to find method " methodName); - int register_android_view_InputEventSender(JNIEnv* env) { - int res = jniRegisterNativeMethods(env, "android/view/InputEventSender", - gMethods, NELEM(gMethods)); - LOG_FATAL_IF(res < 0, "Unable to register native methods."); + int res = RegisterMethodsOrDie(env, "android/view/InputEventSender", gMethods, NELEM(gMethods)); + + jclass clazz = FindClassOrDie(env, "android/view/InputEventSender"); + gInputEventSenderClassInfo.clazz = MakeGlobalRefOrDie(env, clazz); - FIND_CLASS(gInputEventSenderClassInfo.clazz, "android/view/InputEventSender"); + gInputEventSenderClassInfo.dispatchInputEventFinished = GetMethodIDOrDie( + env, gInputEventSenderClassInfo.clazz, "dispatchInputEventFinished", "(IZ)V"); - GET_METHOD_ID(gInputEventSenderClassInfo.dispatchInputEventFinished, - gInputEventSenderClassInfo.clazz, - "dispatchInputEventFinished", "(IZ)V"); - return 0; + return res; } } // namespace android diff --git a/core/jni/android_view_InputQueue.cpp b/core/jni/android_view_InputQueue.cpp index 21b73b1480dd..96ccdee20c7c 100644 --- a/core/jni/android_view_InputQueue.cpp +++ b/core/jni/android_view_InputQueue.cpp @@ -33,6 +33,8 @@ #include "android_view_KeyEvent.h" #include "android_view_MotionEvent.h" +#include "core_jni_helpers.h" + namespace android { static struct { @@ -256,27 +258,13 @@ static const JNINativeMethod g_methods[] = { static const char* const kInputQueuePathName = "android/view/InputQueue"; -#define FIND_CLASS(var, className) \ - do { \ - var = env->FindClass(className); \ - LOG_FATAL_IF(! var, "Unable to find class %s", className); \ - } while(0) - -#define GET_METHOD_ID(var, clazz, methodName, fieldDescriptor) \ - do { \ - var = env->GetMethodID(clazz, methodName, fieldDescriptor); \ - LOG_FATAL_IF(! var, "Unable to find method" methodName); \ - } while(0) - int register_android_view_InputQueue(JNIEnv* env) { - jclass clazz; - FIND_CLASS(clazz, kInputQueuePathName); - GET_METHOD_ID(gInputQueueClassInfo.finishInputEvent, clazz, "finishInputEvent", "(JZ)V"); + jclass clazz = FindClassOrDie(env, kInputQueuePathName); + gInputQueueClassInfo.finishInputEvent = GetMethodIDOrDie(env, clazz, "finishInputEvent", + "(JZ)V"); - return AndroidRuntime::registerNativeMethods( - env, kInputQueuePathName, - g_methods, NELEM(g_methods)); + return RegisterMethodsOrDie(env, kInputQueuePathName, g_methods, NELEM(g_methods)); } } // namespace android diff --git a/core/jni/android_view_KeyCharacterMap.cpp b/core/jni/android_view_KeyCharacterMap.cpp index 62d51296cbbf..7653f58778dd 100644 --- a/core/jni/android_view_KeyCharacterMap.cpp +++ b/core/jni/android_view_KeyCharacterMap.cpp @@ -26,6 +26,8 @@ #include "android_os_Parcel.h" #include "android_view_KeyEvent.h" +#include "core_jni_helpers.h" + namespace android { static struct { @@ -148,7 +150,9 @@ static jchar nativeGetMatch(JNIEnv *env, jobject clazz, jlong ptr, jint keyCode, return 0; } - char16_t result = map->getMap()->getMatch(keyCode, chars, size_t(numChars), metaState); + char16_t result = map->getMap()->getMatch( + keyCode, reinterpret_cast<char16_t*>(chars), size_t(numChars), + metaState); env->ReleasePrimitiveArrayCritical(charsArray, chars, JNI_ABORT); return result; @@ -176,7 +180,9 @@ static jobjectArray nativeGetEvents(JNIEnv *env, jobject clazz, jlong ptr, Vector<KeyEvent> events; jobjectArray result = NULL; - if (map->getMap()->getEvents(map->getDeviceId(), chars, size_t(numChars), events)) { + if (map->getMap()->getEvents(map->getDeviceId(), + reinterpret_cast<char16_t*>(chars), + size_t(numChars), events)) { result = env->NewObjectArray(jsize(events.size()), gKeyEventClassInfo.clazz, NULL); if (result) { for (size_t i = 0; i < events.size(); i++) { @@ -221,40 +227,23 @@ static JNINativeMethod g_methods[] = { (void*)nativeGetEvents }, }; -#define FIND_CLASS(var, className) \ - var = env->FindClass(className); \ - LOG_FATAL_IF(! var, "Unable to find class " className); - -#define GET_METHOD_ID(var, clazz, methodName, methodDescriptor) \ - var = env->GetMethodID(clazz, methodName, methodDescriptor); \ - LOG_FATAL_IF(! var, "Unable to find method " methodName); - -#define GET_FIELD_ID(var, clazz, fieldName, fieldDescriptor) \ - var = env->GetFieldID(clazz, fieldName, fieldDescriptor); \ - LOG_FATAL_IF(! var, "Unable to find field " fieldName); - int register_android_view_KeyCharacterMap(JNIEnv* env) { - FIND_CLASS(gKeyCharacterMapClassInfo.clazz, "android/view/KeyCharacterMap"); - gKeyCharacterMapClassInfo.clazz = jclass(env->NewGlobalRef(gKeyCharacterMapClassInfo.clazz)); + gKeyCharacterMapClassInfo.clazz = FindClassOrDie(env, "android/view/KeyCharacterMap"); + gKeyCharacterMapClassInfo.clazz = MakeGlobalRefOrDie(env, gKeyCharacterMapClassInfo.clazz); - GET_METHOD_ID(gKeyCharacterMapClassInfo.ctor, gKeyCharacterMapClassInfo.clazz, + gKeyCharacterMapClassInfo.ctor = GetMethodIDOrDie(env, gKeyCharacterMapClassInfo.clazz, "<init>", "(J)V"); - FIND_CLASS(gKeyEventClassInfo.clazz, "android/view/KeyEvent"); - gKeyEventClassInfo.clazz = jclass(env->NewGlobalRef(gKeyEventClassInfo.clazz)); - - jclass clazz; - FIND_CLASS(clazz, "android/view/KeyCharacterMap$FallbackAction"); + gKeyEventClassInfo.clazz = FindClassOrDie(env, "android/view/KeyEvent"); + gKeyEventClassInfo.clazz = MakeGlobalRefOrDie(env, gKeyEventClassInfo.clazz); - GET_FIELD_ID(gFallbackActionClassInfo.keyCode, clazz, - "keyCode", "I"); + jclass clazz = FindClassOrDie(env, "android/view/KeyCharacterMap$FallbackAction"); - GET_FIELD_ID(gFallbackActionClassInfo.metaState, clazz, - "metaState", "I"); + gFallbackActionClassInfo.keyCode = GetFieldIDOrDie(env, clazz, "keyCode", "I"); + gFallbackActionClassInfo.metaState = GetFieldIDOrDie(env, clazz, "metaState", "I"); - return AndroidRuntime::registerNativeMethods(env, - "android/view/KeyCharacterMap", g_methods, NELEM(g_methods)); + return RegisterMethodsOrDie(env, "android/view/KeyCharacterMap", g_methods, NELEM(g_methods)); } }; // namespace android diff --git a/core/jni/android_view_KeyEvent.cpp b/core/jni/android_view_KeyEvent.cpp index 7ae21a79ac08..216e6f64a9f8 100644 --- a/core/jni/android_view_KeyEvent.cpp +++ b/core/jni/android_view_KeyEvent.cpp @@ -25,6 +25,8 @@ #include <ScopedUtfChars.h> #include "android_view_KeyEvent.h" +#include "core_jni_helpers.h" + namespace android { // ---------------------------------------------------------------------------- @@ -124,56 +126,32 @@ static const JNINativeMethod g_methods[] = { (void*)android_view_KeyEvent_nativeKeyCodeFromString}, }; -#define FIND_CLASS(var, className) \ - var = env->FindClass(className); \ - LOG_FATAL_IF(! var, "Unable to find class " className); \ - var = jclass(env->NewGlobalRef(var)); - -#define GET_STATIC_METHOD_ID(var, clazz, methodName, fieldDescriptor) \ - var = env->GetStaticMethodID(clazz, methodName, fieldDescriptor); \ - LOG_FATAL_IF(! var, "Unable to find static method" methodName); - -#define GET_METHOD_ID(var, clazz, methodName, fieldDescriptor) \ - var = env->GetMethodID(clazz, methodName, fieldDescriptor); \ - LOG_FATAL_IF(! var, "Unable to find method" methodName); - -#define GET_FIELD_ID(var, clazz, fieldName, fieldDescriptor) \ - var = env->GetFieldID(clazz, fieldName, fieldDescriptor); \ - LOG_FATAL_IF(! var, "Unable to find field " fieldName); - int register_android_view_KeyEvent(JNIEnv* env) { - FIND_CLASS(gKeyEventClassInfo.clazz, "android/view/KeyEvent"); + jclass clazz = FindClassOrDie(env, "android/view/KeyEvent"); + gKeyEventClassInfo.clazz = MakeGlobalRefOrDie(env, clazz); - GET_STATIC_METHOD_ID(gKeyEventClassInfo.obtain, gKeyEventClassInfo.clazz, + gKeyEventClassInfo.obtain = GetStaticMethodIDOrDie(env, gKeyEventClassInfo.clazz, "obtain", "(JJIIIIIIIILjava/lang/String;)Landroid/view/KeyEvent;"); - GET_METHOD_ID(gKeyEventClassInfo.recycle, gKeyEventClassInfo.clazz, + gKeyEventClassInfo.recycle = GetMethodIDOrDie(env, gKeyEventClassInfo.clazz, "recycle", "()V"); - GET_FIELD_ID(gKeyEventClassInfo.mDeviceId, gKeyEventClassInfo.clazz, - "mDeviceId", "I"); - GET_FIELD_ID(gKeyEventClassInfo.mSource, gKeyEventClassInfo.clazz, - "mSource", "I"); - GET_FIELD_ID(gKeyEventClassInfo.mMetaState, gKeyEventClassInfo.clazz, - "mMetaState", "I"); - GET_FIELD_ID(gKeyEventClassInfo.mAction, gKeyEventClassInfo.clazz, - "mAction", "I"); - GET_FIELD_ID(gKeyEventClassInfo.mKeyCode, gKeyEventClassInfo.clazz, - "mKeyCode", "I"); - GET_FIELD_ID(gKeyEventClassInfo.mScanCode, gKeyEventClassInfo.clazz, - "mScanCode", "I"); - GET_FIELD_ID(gKeyEventClassInfo.mRepeatCount, gKeyEventClassInfo.clazz, - "mRepeatCount", "I"); - GET_FIELD_ID(gKeyEventClassInfo.mFlags, gKeyEventClassInfo.clazz, - "mFlags", "I"); - GET_FIELD_ID(gKeyEventClassInfo.mDownTime, gKeyEventClassInfo.clazz, - "mDownTime", "J"); - GET_FIELD_ID(gKeyEventClassInfo.mEventTime, gKeyEventClassInfo.clazz, - "mEventTime", "J"); - GET_FIELD_ID(gKeyEventClassInfo.mCharacters, gKeyEventClassInfo.clazz, - "mCharacters", "Ljava/lang/String;"); - - return AndroidRuntime::registerNativeMethods( - env, "android/view/KeyEvent", g_methods, NELEM(g_methods)); + gKeyEventClassInfo.mDeviceId = GetFieldIDOrDie(env, gKeyEventClassInfo.clazz, "mDeviceId", "I"); + gKeyEventClassInfo.mSource = GetFieldIDOrDie(env, gKeyEventClassInfo.clazz, "mSource", "I"); + gKeyEventClassInfo.mMetaState = GetFieldIDOrDie(env, gKeyEventClassInfo.clazz, "mMetaState", + "I"); + gKeyEventClassInfo.mAction = GetFieldIDOrDie(env, gKeyEventClassInfo.clazz, "mAction", "I"); + gKeyEventClassInfo.mKeyCode = GetFieldIDOrDie(env, gKeyEventClassInfo.clazz, "mKeyCode", "I"); + gKeyEventClassInfo.mScanCode = GetFieldIDOrDie(env, gKeyEventClassInfo.clazz, "mScanCode", "I"); + gKeyEventClassInfo.mRepeatCount = GetFieldIDOrDie(env, gKeyEventClassInfo.clazz, "mRepeatCount", + "I"); + gKeyEventClassInfo.mFlags = GetFieldIDOrDie(env, gKeyEventClassInfo.clazz, "mFlags", "I"); + gKeyEventClassInfo.mDownTime = GetFieldIDOrDie(env, gKeyEventClassInfo.clazz, "mDownTime", "J"); + gKeyEventClassInfo.mEventTime = GetFieldIDOrDie(env, gKeyEventClassInfo.clazz, "mEventTime", + "J"); + gKeyEventClassInfo.mCharacters = GetFieldIDOrDie(env, gKeyEventClassInfo.clazz, "mCharacters", + "Ljava/lang/String;"); + + return RegisterMethodsOrDie(env, "android/view/KeyEvent", g_methods, NELEM(g_methods)); } } // namespace android diff --git a/core/jni/android_view_MotionEvent.cpp b/core/jni/android_view_MotionEvent.cpp index a590dbf0dac3..e62276821c83 100644 --- a/core/jni/android_view_MotionEvent.cpp +++ b/core/jni/android_view_MotionEvent.cpp @@ -29,6 +29,8 @@ #include "android_util_Binder.h" #include "android/graphics/Matrix.h" +#include "core_jni_helpers.h" + namespace android { // ---------------------------------------------------------------------------- @@ -296,7 +298,6 @@ static void pointerCoordsFromNative(JNIEnv* env, const PointerCoords* rawPointer jfloat* outValues = static_cast<jfloat*>(env->GetPrimitiveArrayCritical( outValuesArray, NULL)); - const float* values = rawPointerCoords->values; uint32_t index = 0; do { uint32_t axis = bits.clearFirstMarkedBit(); @@ -853,71 +854,41 @@ static JNINativeMethod gMotionEventMethods[] = { (void*)android_view_MotionEvent_nativeAxisFromString }, }; -#define FIND_CLASS(var, className) \ - var = env->FindClass(className); \ - LOG_FATAL_IF(! var, "Unable to find class " className); - -#define GET_STATIC_METHOD_ID(var, clazz, methodName, fieldDescriptor) \ - var = env->GetStaticMethodID(clazz, methodName, fieldDescriptor); \ - LOG_FATAL_IF(! var, "Unable to find static method" methodName); - -#define GET_METHOD_ID(var, clazz, methodName, fieldDescriptor) \ - var = env->GetMethodID(clazz, methodName, fieldDescriptor); \ - LOG_FATAL_IF(! var, "Unable to find method" methodName); - -#define GET_FIELD_ID(var, clazz, fieldName, fieldDescriptor) \ - var = env->GetFieldID(clazz, fieldName, fieldDescriptor); \ - LOG_FATAL_IF(! var, "Unable to find field " fieldName); - int register_android_view_MotionEvent(JNIEnv* env) { - int res = jniRegisterNativeMethods(env, "android/view/MotionEvent", - gMotionEventMethods, NELEM(gMotionEventMethods)); - LOG_FATAL_IF(res < 0, "Unable to register native methods."); + int res = RegisterMethodsOrDie(env, "android/view/MotionEvent", gMotionEventMethods, + NELEM(gMotionEventMethods)); - FIND_CLASS(gMotionEventClassInfo.clazz, "android/view/MotionEvent"); - gMotionEventClassInfo.clazz = jclass(env->NewGlobalRef(gMotionEventClassInfo.clazz)); + gMotionEventClassInfo.clazz = FindClassOrDie(env, "android/view/MotionEvent"); + gMotionEventClassInfo.clazz = MakeGlobalRefOrDie(env, gMotionEventClassInfo.clazz); - GET_STATIC_METHOD_ID(gMotionEventClassInfo.obtain, gMotionEventClassInfo.clazz, + gMotionEventClassInfo.obtain = GetStaticMethodIDOrDie(env, gMotionEventClassInfo.clazz, "obtain", "()Landroid/view/MotionEvent;"); - GET_METHOD_ID(gMotionEventClassInfo.recycle, gMotionEventClassInfo.clazz, + gMotionEventClassInfo.recycle = GetMethodIDOrDie(env, gMotionEventClassInfo.clazz, "recycle", "()V"); - GET_FIELD_ID(gMotionEventClassInfo.mNativePtr, gMotionEventClassInfo.clazz, + gMotionEventClassInfo.mNativePtr = GetFieldIDOrDie(env, gMotionEventClassInfo.clazz, "mNativePtr", "J"); - jclass clazz; - FIND_CLASS(clazz, "android/view/MotionEvent$PointerCoords"); - - GET_FIELD_ID(gPointerCoordsClassInfo.mPackedAxisBits, clazz, - "mPackedAxisBits", "J"); - GET_FIELD_ID(gPointerCoordsClassInfo.mPackedAxisValues, clazz, - "mPackedAxisValues", "[F"); - GET_FIELD_ID(gPointerCoordsClassInfo.x, clazz, - "x", "F"); - GET_FIELD_ID(gPointerCoordsClassInfo.y, clazz, - "y", "F"); - GET_FIELD_ID(gPointerCoordsClassInfo.pressure, clazz, - "pressure", "F"); - GET_FIELD_ID(gPointerCoordsClassInfo.size, clazz, - "size", "F"); - GET_FIELD_ID(gPointerCoordsClassInfo.touchMajor, clazz, - "touchMajor", "F"); - GET_FIELD_ID(gPointerCoordsClassInfo.touchMinor, clazz, - "touchMinor", "F"); - GET_FIELD_ID(gPointerCoordsClassInfo.toolMajor, clazz, - "toolMajor", "F"); - GET_FIELD_ID(gPointerCoordsClassInfo.toolMinor, clazz, - "toolMinor", "F"); - GET_FIELD_ID(gPointerCoordsClassInfo.orientation, clazz, - "orientation", "F"); - - FIND_CLASS(clazz, "android/view/MotionEvent$PointerProperties"); - - GET_FIELD_ID(gPointerPropertiesClassInfo.id, clazz, - "id", "I"); - GET_FIELD_ID(gPointerPropertiesClassInfo.toolType, clazz, - "toolType", "I"); + jclass clazz = FindClassOrDie(env, "android/view/MotionEvent$PointerCoords"); - return 0; + gPointerCoordsClassInfo.mPackedAxisBits = GetFieldIDOrDie(env, clazz, "mPackedAxisBits", "J"); + gPointerCoordsClassInfo.mPackedAxisValues = GetFieldIDOrDie(env, clazz, "mPackedAxisValues", + "[F"); + gPointerCoordsClassInfo.x = GetFieldIDOrDie(env, clazz, "x", "F"); + gPointerCoordsClassInfo.y = GetFieldIDOrDie(env, clazz, "y", "F"); + gPointerCoordsClassInfo.pressure = GetFieldIDOrDie(env, clazz, "pressure", "F"); + gPointerCoordsClassInfo.size = GetFieldIDOrDie(env, clazz, "size", "F"); + gPointerCoordsClassInfo.touchMajor = GetFieldIDOrDie(env, clazz, "touchMajor", "F"); + gPointerCoordsClassInfo.touchMinor = GetFieldIDOrDie(env, clazz, "touchMinor", "F"); + gPointerCoordsClassInfo.toolMajor = GetFieldIDOrDie(env, clazz, "toolMajor", "F"); + gPointerCoordsClassInfo.toolMinor = GetFieldIDOrDie(env, clazz, "toolMinor", "F"); + gPointerCoordsClassInfo.orientation = GetFieldIDOrDie(env, clazz, "orientation", "F"); + + clazz = FindClassOrDie(env, "android/view/MotionEvent$PointerProperties"); + + gPointerPropertiesClassInfo.id = GetFieldIDOrDie(env, clazz, "id", "I"); + gPointerPropertiesClassInfo.toolType = GetFieldIDOrDie(env, clazz, "toolType", "I"); + + return res; } } // namespace android diff --git a/core/jni/android_view_PointerIcon.cpp b/core/jni/android_view_PointerIcon.cpp index 5e29213477e4..bbd031ef04d6 100644 --- a/core/jni/android_view_PointerIcon.cpp +++ b/core/jni/android_view_PointerIcon.cpp @@ -25,6 +25,8 @@ #include <utils/Log.h> #include <android/graphics/GraphicsJNI.h> +#include "core_jni_helpers.h" + namespace android { static struct { @@ -106,42 +108,26 @@ status_t android_view_PointerIcon_loadSystemIcon(JNIEnv* env, jobject contextObj // --- JNI Registration --- -#define FIND_CLASS(var, className) \ - var = env->FindClass(className); \ - LOG_FATAL_IF(! var, "Unable to find class " className); \ - var = jclass(env->NewGlobalRef(var)); - -#define GET_STATIC_METHOD_ID(var, clazz, methodName, methodDescriptor) \ - var = env->GetStaticMethodID(clazz, methodName, methodDescriptor); \ - LOG_FATAL_IF(! var, "Unable to find method " methodName); - -#define GET_METHOD_ID(var, clazz, methodName, methodDescriptor) \ - var = env->GetMethodID(clazz, methodName, methodDescriptor); \ - LOG_FATAL_IF(! var, "Unable to find method " methodName); - -#define GET_FIELD_ID(var, clazz, fieldName, fieldDescriptor) \ - var = env->GetFieldID(clazz, fieldName, fieldDescriptor); \ - LOG_FATAL_IF(! var, "Unable to find field " fieldName); - int register_android_view_PointerIcon(JNIEnv* env) { - FIND_CLASS(gPointerIconClassInfo.clazz, "android/view/PointerIcon"); + jclass clazz = FindClassOrDie(env, "android/view/PointerIcon"); + gPointerIconClassInfo.clazz = MakeGlobalRefOrDie(env, clazz); - GET_FIELD_ID(gPointerIconClassInfo.mBitmap, gPointerIconClassInfo.clazz, + gPointerIconClassInfo.mBitmap = GetFieldIDOrDie(env, gPointerIconClassInfo.clazz, "mBitmap", "Landroid/graphics/Bitmap;"); - GET_FIELD_ID(gPointerIconClassInfo.mStyle, gPointerIconClassInfo.clazz, + gPointerIconClassInfo.mStyle = GetFieldIDOrDie(env, gPointerIconClassInfo.clazz, "mStyle", "I"); - GET_FIELD_ID(gPointerIconClassInfo.mHotSpotX, gPointerIconClassInfo.clazz, + gPointerIconClassInfo.mHotSpotX = GetFieldIDOrDie(env, gPointerIconClassInfo.clazz, "mHotSpotX", "F"); - GET_FIELD_ID(gPointerIconClassInfo.mHotSpotY, gPointerIconClassInfo.clazz, + gPointerIconClassInfo.mHotSpotY = GetFieldIDOrDie(env, gPointerIconClassInfo.clazz, "mHotSpotY", "F"); - GET_STATIC_METHOD_ID(gPointerIconClassInfo.getSystemIcon, gPointerIconClassInfo.clazz, + gPointerIconClassInfo.getSystemIcon = GetStaticMethodIDOrDie(env, gPointerIconClassInfo.clazz, "getSystemIcon", "(Landroid/content/Context;I)Landroid/view/PointerIcon;"); - GET_METHOD_ID(gPointerIconClassInfo.load, gPointerIconClassInfo.clazz, + gPointerIconClassInfo.load = GetMethodIDOrDie(env, gPointerIconClassInfo.clazz, "load", "(Landroid/content/Context;)Landroid/view/PointerIcon;"); return 0; diff --git a/core/jni/android_view_RenderNode.cpp b/core/jni/android_view_RenderNode.cpp index 050037ebada5..d1e693bce071 100644 --- a/core/jni/android_view_RenderNode.cpp +++ b/core/jni/android_view_RenderNode.cpp @@ -28,6 +28,8 @@ #include <RenderNode.h> #include <Paint.h> +#include "core_jni_helpers.h" + namespace android { using namespace uirenderer; @@ -551,21 +553,8 @@ static JNINativeMethod gMethods[] = { #endif }; -#ifdef USE_OPENGL_RENDERER - #define FIND_CLASS(var, className) \ - var = env->FindClass(className); \ - LOG_FATAL_IF(! var, "Unable to find class " className); - - #define GET_METHOD_ID(var, clazz, methodName, methodDescriptor) \ - var = env->GetMethodID(clazz, methodName, methodDescriptor); \ - LOG_FATAL_IF(! var, "Unable to find method " methodName); -#else - #define FIND_CLASS(var, className) - #define GET_METHOD_ID(var, clazz, methodName, methodDescriptor) -#endif - int register_android_view_RenderNode(JNIEnv* env) { - return AndroidRuntime::registerNativeMethods(env, kClassPathName, gMethods, NELEM(gMethods)); + return RegisterMethodsOrDie(env, kClassPathName, gMethods, NELEM(gMethods)); } }; diff --git a/core/jni/android_view_RenderNodeAnimator.cpp b/core/jni/android_view_RenderNodeAnimator.cpp index 84b7913a5462..90b311a96e35 100644 --- a/core/jni/android_view_RenderNodeAnimator.cpp +++ b/core/jni/android_view_RenderNodeAnimator.cpp @@ -25,6 +25,8 @@ #include <Interpolator.h> #include <RenderProperties.h> +#include "core_jni_helpers.h" + namespace android { using namespace uirenderer; @@ -148,11 +150,6 @@ static void setStartDelay(JNIEnv* env, jobject clazz, jlong animatorPtr, jlong s animator->setStartDelay(startDelay); } -static jlong getStartDelay(JNIEnv* env, jobject clazz, jlong animatorPtr) { - BaseRenderNodeAnimator* animator = reinterpret_cast<BaseRenderNodeAnimator*>(animatorPtr); - return static_cast<jlong>(animator->startDelay()); -} - static void setInterpolator(JNIEnv* env, jobject clazz, jlong animatorPtr, jlong interpolatorPtr) { BaseRenderNodeAnimator* animator = reinterpret_cast<BaseRenderNodeAnimator*>(animatorPtr); Interpolator* interpolator = reinterpret_cast<Interpolator*>(interpolatorPtr); @@ -202,22 +199,16 @@ static JNINativeMethod gMethods[] = { #endif }; -#define FIND_CLASS(var, className) \ - var = env->FindClass(className); \ - LOG_FATAL_IF(! var, "Unable to find class " className); - -#define GET_STATIC_METHOD_ID(var, clazz, methodName, methodDescriptor) \ - var = env->GetStaticMethodID(clazz, methodName, methodDescriptor); \ - LOG_FATAL_IF(! var, "Unable to find method " methodName); - int register_android_view_RenderNodeAnimator(JNIEnv* env) { - FIND_CLASS(gRenderNodeAnimatorClassInfo.clazz, kClassPathName); - gRenderNodeAnimatorClassInfo.clazz = jclass(env->NewGlobalRef(gRenderNodeAnimatorClassInfo.clazz)); + gRenderNodeAnimatorClassInfo.clazz = FindClassOrDie(env, kClassPathName); + gRenderNodeAnimatorClassInfo.clazz = MakeGlobalRefOrDie(env, + gRenderNodeAnimatorClassInfo.clazz); - GET_STATIC_METHOD_ID(gRenderNodeAnimatorClassInfo.callOnFinished, gRenderNodeAnimatorClassInfo.clazz, - "callOnFinished", "(Landroid/view/RenderNodeAnimator;)V"); + gRenderNodeAnimatorClassInfo.callOnFinished = GetStaticMethodIDOrDie( + env, gRenderNodeAnimatorClassInfo.clazz, "callOnFinished", + "(Landroid/view/RenderNodeAnimator;)V"); - return AndroidRuntime::registerNativeMethods(env, kClassPathName, gMethods, NELEM(gMethods)); + return RegisterMethodsOrDie(env, kClassPathName, gMethods, NELEM(gMethods)); } diff --git a/core/jni/android_view_Surface.cpp b/core/jni/android_view_Surface.cpp index 9bb8195b8901..3fe50a5fd3bd 100644 --- a/core/jni/android_view_Surface.cpp +++ b/core/jni/android_view_Surface.cpp @@ -23,7 +23,7 @@ #include "android_os_Parcel.h" #include "android/graphics/GraphicsJNI.h" -#include <android_runtime/AndroidRuntime.h> +#include "core_jni_helpers.h" #include <android_runtime/android_view_Surface.h> #include <android_runtime/android_graphics_SurfaceTexture.h> #include <android_runtime/Log.h> @@ -319,7 +319,7 @@ static jlong nativeReadFromParcel(JNIEnv* env, jclass clazz, // update the Surface only if the underlying IGraphicBufferProducer // has changed. if (self != NULL - && (self->getIGraphicBufferProducer()->asBinder() == binder)) { + && (IInterface::asBinder(self->getIGraphicBufferProducer()) == binder)) { // same IGraphicBufferProducer, return ourselves return jlong(self.get()); } @@ -349,7 +349,7 @@ static void nativeWriteToParcel(JNIEnv* env, jclass clazz, return; } sp<Surface> self(reinterpret_cast<Surface *>(nativeObject)); - parcel->writeStrongBinder( self != 0 ? self->getIGraphicBufferProducer()->asBinder() : NULL); + parcel->writeStrongBinder( self != 0 ? IInterface::asBinder(self->getIGraphicBufferProducer()) : NULL); } // ---------------------------------------------------------------------------- @@ -379,26 +379,26 @@ static JNINativeMethod gSurfaceMethods[] = { int register_android_view_Surface(JNIEnv* env) { - int err = AndroidRuntime::registerNativeMethods(env, "android/view/Surface", + int err = RegisterMethodsOrDie(env, "android/view/Surface", gSurfaceMethods, NELEM(gSurfaceMethods)); - jclass clazz = env->FindClass("android/view/Surface"); - gSurfaceClassInfo.clazz = jclass(env->NewGlobalRef(clazz)); - gSurfaceClassInfo.mNativeObject = - env->GetFieldID(gSurfaceClassInfo.clazz, "mNativeObject", "J"); - gSurfaceClassInfo.mLock = - env->GetFieldID(gSurfaceClassInfo.clazz, "mLock", "Ljava/lang/Object;"); - gSurfaceClassInfo.ctor = env->GetMethodID(gSurfaceClassInfo.clazz, "<init>", "(J)V"); - - clazz = env->FindClass("android/graphics/Canvas"); - gCanvasClassInfo.mSurfaceFormat = env->GetFieldID(clazz, "mSurfaceFormat", "I"); - gCanvasClassInfo.setNativeBitmap = env->GetMethodID(clazz, "setNativeBitmap", "(J)V"); - - clazz = env->FindClass("android/graphics/Rect"); - gRectClassInfo.left = env->GetFieldID(clazz, "left", "I"); - gRectClassInfo.top = env->GetFieldID(clazz, "top", "I"); - gRectClassInfo.right = env->GetFieldID(clazz, "right", "I"); - gRectClassInfo.bottom = env->GetFieldID(clazz, "bottom", "I"); + jclass clazz = FindClassOrDie(env, "android/view/Surface"); + gSurfaceClassInfo.clazz = MakeGlobalRefOrDie(env, clazz); + gSurfaceClassInfo.mNativeObject = GetFieldIDOrDie(env, + gSurfaceClassInfo.clazz, "mNativeObject", "J"); + gSurfaceClassInfo.mLock = GetFieldIDOrDie(env, + gSurfaceClassInfo.clazz, "mLock", "Ljava/lang/Object;"); + gSurfaceClassInfo.ctor = GetMethodIDOrDie(env, gSurfaceClassInfo.clazz, "<init>", "(J)V"); + + clazz = FindClassOrDie(env, "android/graphics/Canvas"); + gCanvasClassInfo.mSurfaceFormat = GetFieldIDOrDie(env, clazz, "mSurfaceFormat", "I"); + gCanvasClassInfo.setNativeBitmap = GetMethodIDOrDie(env, clazz, "setNativeBitmap", "(J)V"); + + clazz = FindClassOrDie(env, "android/graphics/Rect"); + gRectClassInfo.left = GetFieldIDOrDie(env, clazz, "left", "I"); + gRectClassInfo.top = GetFieldIDOrDie(env, clazz, "top", "I"); + gRectClassInfo.right = GetFieldIDOrDie(env, clazz, "right", "I"); + gRectClassInfo.bottom = GetFieldIDOrDie(env, clazz, "bottom", "I"); return err; } diff --git a/core/jni/android_view_SurfaceControl.cpp b/core/jni/android_view_SurfaceControl.cpp index 06c22aedda7f..13c373f6d3ce 100644 --- a/core/jni/android_view_SurfaceControl.cpp +++ b/core/jni/android_view_SurfaceControl.cpp @@ -26,7 +26,7 @@ #include "android/graphics/GraphicsJNI.h" #include "android/graphics/Region.h" -#include <android_runtime/AndroidRuntime.h> +#include "core_jni_helpers.h" #include <android_runtime/android_view_Surface.h> #include <android_runtime/android_view_SurfaceSession.h> @@ -134,7 +134,7 @@ static jobject nativeScreenshotBitmap(JNIEnv* env, jclass clazz, status_t res; if (allLayers) { minLayer = 0; - maxLayer = -1UL; + maxLayer = -1; } res = screenshot->update(displayToken, sourceCrop, width, height, @@ -647,41 +647,44 @@ static JNINativeMethod sSurfaceControlMethods[] = { int register_android_view_SurfaceControl(JNIEnv* env) { - int err = AndroidRuntime::registerNativeMethods(env, "android/view/SurfaceControl", + int err = RegisterMethodsOrDie(env, "android/view/SurfaceControl", sSurfaceControlMethods, NELEM(sSurfaceControlMethods)); - jclass clazz = env->FindClass("android/view/SurfaceControl$PhysicalDisplayInfo"); - gPhysicalDisplayInfoClassInfo.clazz = static_cast<jclass>(env->NewGlobalRef(clazz)); - gPhysicalDisplayInfoClassInfo.ctor = env->GetMethodID(gPhysicalDisplayInfoClassInfo.clazz, - "<init>", "()V"); - gPhysicalDisplayInfoClassInfo.width = env->GetFieldID(clazz, "width", "I"); - gPhysicalDisplayInfoClassInfo.height = env->GetFieldID(clazz, "height", "I"); - gPhysicalDisplayInfoClassInfo.refreshRate = env->GetFieldID(clazz, "refreshRate", "F"); - gPhysicalDisplayInfoClassInfo.density = env->GetFieldID(clazz, "density", "F"); - gPhysicalDisplayInfoClassInfo.xDpi = env->GetFieldID(clazz, "xDpi", "F"); - gPhysicalDisplayInfoClassInfo.yDpi = env->GetFieldID(clazz, "yDpi", "F"); - gPhysicalDisplayInfoClassInfo.secure = env->GetFieldID(clazz, "secure", "Z"); - gPhysicalDisplayInfoClassInfo.appVsyncOffsetNanos = env->GetFieldID(clazz, - "appVsyncOffsetNanos", "J"); - gPhysicalDisplayInfoClassInfo.presentationDeadlineNanos = env->GetFieldID(clazz, - "presentationDeadlineNanos", "J"); - - jclass rectClazz = env->FindClass("android/graphics/Rect"); - gRectClassInfo.bottom = env->GetFieldID(rectClazz, "bottom", "I"); - gRectClassInfo.left = env->GetFieldID(rectClazz, "left", "I"); - gRectClassInfo.right = env->GetFieldID(rectClazz, "right", "I"); - gRectClassInfo.top = env->GetFieldID(rectClazz, "top", "I"); - - jclass frameStatsClazz = env->FindClass("android/view/FrameStats"); - jfieldID undefined_time_nano_field = env->GetStaticFieldID(frameStatsClazz, "UNDEFINED_TIME_NANO", "J"); + jclass clazz = FindClassOrDie(env, "android/view/SurfaceControl$PhysicalDisplayInfo"); + gPhysicalDisplayInfoClassInfo.clazz = MakeGlobalRefOrDie(env, clazz); + gPhysicalDisplayInfoClassInfo.ctor = GetMethodIDOrDie(env, + gPhysicalDisplayInfoClassInfo.clazz, "<init>", "()V"); + gPhysicalDisplayInfoClassInfo.width = GetFieldIDOrDie(env, clazz, "width", "I"); + gPhysicalDisplayInfoClassInfo.height = GetFieldIDOrDie(env, clazz, "height", "I"); + gPhysicalDisplayInfoClassInfo.refreshRate = GetFieldIDOrDie(env, clazz, "refreshRate", "F"); + gPhysicalDisplayInfoClassInfo.density = GetFieldIDOrDie(env, clazz, "density", "F"); + gPhysicalDisplayInfoClassInfo.xDpi = GetFieldIDOrDie(env, clazz, "xDpi", "F"); + gPhysicalDisplayInfoClassInfo.yDpi = GetFieldIDOrDie(env, clazz, "yDpi", "F"); + gPhysicalDisplayInfoClassInfo.secure = GetFieldIDOrDie(env, clazz, "secure", "Z"); + gPhysicalDisplayInfoClassInfo.appVsyncOffsetNanos = GetFieldIDOrDie(env, + clazz, "appVsyncOffsetNanos", "J"); + gPhysicalDisplayInfoClassInfo.presentationDeadlineNanos = GetFieldIDOrDie(env, + clazz, "presentationDeadlineNanos", "J"); + + jclass rectClazz = FindClassOrDie(env, "android/graphics/Rect"); + gRectClassInfo.bottom = GetFieldIDOrDie(env, rectClazz, "bottom", "I"); + gRectClassInfo.left = GetFieldIDOrDie(env, rectClazz, "left", "I"); + gRectClassInfo.right = GetFieldIDOrDie(env, rectClazz, "right", "I"); + gRectClassInfo.top = GetFieldIDOrDie(env, rectClazz, "top", "I"); + + jclass frameStatsClazz = FindClassOrDie(env, "android/view/FrameStats"); + jfieldID undefined_time_nano_field = GetStaticFieldIDOrDie(env, + frameStatsClazz, "UNDEFINED_TIME_NANO", "J"); nsecs_t undefined_time_nano = env->GetStaticLongField(frameStatsClazz, undefined_time_nano_field); - jclass contFrameStatsClazz = env->FindClass("android/view/WindowContentFrameStats"); - gWindowContentFrameStatsClassInfo.init = env->GetMethodID(contFrameStatsClazz, "init", "(J[J[J[J)V"); + jclass contFrameStatsClazz = FindClassOrDie(env, "android/view/WindowContentFrameStats"); + gWindowContentFrameStatsClassInfo.init = GetMethodIDOrDie(env, + contFrameStatsClazz, "init", "(J[J[J[J)V"); gWindowContentFrameStatsClassInfo.UNDEFINED_TIME_NANO = undefined_time_nano; - jclass animFrameStatsClazz = env->FindClass("android/view/WindowAnimationFrameStats"); - gWindowAnimationFrameStatsClassInfo.init = env->GetMethodID(animFrameStatsClazz, "init", "(J[J)V"); + jclass animFrameStatsClazz = FindClassOrDie(env, "android/view/WindowAnimationFrameStats"); + gWindowAnimationFrameStatsClassInfo.init = GetMethodIDOrDie(env, + animFrameStatsClazz, "init", "(J[J)V"); gWindowAnimationFrameStatsClassInfo.UNDEFINED_TIME_NANO = undefined_time_nano; return err; diff --git a/core/jni/android_view_TextureView.cpp b/core/jni/android_view_TextureView.cpp index 5c04a78413a5..011c326d33a3 100644 --- a/core/jni/android_view_TextureView.cpp +++ b/core/jni/android_view_TextureView.cpp @@ -31,6 +31,8 @@ #include "android/graphics/GraphicsJNI.h" +#include "core_jni_helpers.h" + namespace android { // ---------------------------------------------------------------------------- @@ -212,35 +214,22 @@ static JNINativeMethod gMethods[] = { (void*) android_view_TextureView_unlockCanvasAndPost }, }; -#define FIND_CLASS(var, className) \ - var = env->FindClass(className); \ - LOG_FATAL_IF(!var, "Unable to find class " className); +int register_android_view_TextureView(JNIEnv* env) { + jclass clazz = FindClassOrDie(env, "android/graphics/Rect"); + gRectClassInfo.set = GetMethodIDOrDie(env, clazz, "set", "(IIII)V"); + gRectClassInfo.left = GetFieldIDOrDie(env, clazz, "left", "I"); + gRectClassInfo.top = GetFieldIDOrDie(env, clazz, "top", "I"); + gRectClassInfo.right = GetFieldIDOrDie(env, clazz, "right", "I"); + gRectClassInfo.bottom = GetFieldIDOrDie(env, clazz, "bottom", "I"); -#define GET_METHOD_ID(var, clazz, methodName, methodDescriptor) \ - var = env->GetMethodID(clazz, methodName, methodDescriptor); \ - LOG_FATAL_IF(!var, "Unable to find method " methodName); + clazz = FindClassOrDie(env, "android/graphics/Canvas"); + gCanvasClassInfo.mSurfaceFormat = GetFieldIDOrDie(env, clazz, "mSurfaceFormat", "I"); + gCanvasClassInfo.setNativeBitmap = GetMethodIDOrDie(env, clazz, "setNativeBitmap", "(J)V"); -#define GET_FIELD_ID(var, clazz, fieldName, fieldDescriptor) \ - var = env->GetFieldID(clazz, fieldName, fieldDescriptor); \ - LOG_FATAL_IF(!var, "Unable to find field" fieldName); + clazz = FindClassOrDie(env, "android/view/TextureView"); + gTextureViewClassInfo.nativeWindow = GetFieldIDOrDie(env, clazz, "mNativeWindow", "J"); -int register_android_view_TextureView(JNIEnv* env) { - jclass clazz; - FIND_CLASS(clazz, "android/graphics/Rect"); - GET_METHOD_ID(gRectClassInfo.set, clazz, "set", "(IIII)V"); - GET_FIELD_ID(gRectClassInfo.left, clazz, "left", "I"); - GET_FIELD_ID(gRectClassInfo.top, clazz, "top", "I"); - GET_FIELD_ID(gRectClassInfo.right, clazz, "right", "I"); - GET_FIELD_ID(gRectClassInfo.bottom, clazz, "bottom", "I"); - - FIND_CLASS(clazz, "android/graphics/Canvas"); - GET_FIELD_ID(gCanvasClassInfo.mSurfaceFormat, clazz, "mSurfaceFormat", "I"); - GET_METHOD_ID(gCanvasClassInfo.setNativeBitmap, clazz, "setNativeBitmap", "(J)V"); - - FIND_CLASS(clazz, "android/view/TextureView"); - GET_FIELD_ID(gTextureViewClassInfo.nativeWindow, clazz, "mNativeWindow", "J"); - - return AndroidRuntime::registerNativeMethods(env, kClassPathName, gMethods, NELEM(gMethods)); + return RegisterMethodsOrDie(env, kClassPathName, gMethods, NELEM(gMethods)); } }; diff --git a/core/jni/android_view_ThreadedRenderer.cpp b/core/jni/android_view_ThreadedRenderer.cpp index 6219956e9f52..499ff1619490 100644 --- a/core/jni/android_view_ThreadedRenderer.cpp +++ b/core/jni/android_view_ThreadedRenderer.cpp @@ -20,7 +20,7 @@ #include "jni.h" #include <nativehelper/JNIHelp.h> -#include <android_runtime/AndroidRuntime.h> +#include "core_jni_helpers.h" #include <EGL/egl.h> #include <EGL/eglext.h> @@ -454,7 +454,7 @@ static JNINativeMethod gMethods[] = { }; int register_android_view_ThreadedRenderer(JNIEnv* env) { - return AndroidRuntime::registerNativeMethods(env, kClassPathName, gMethods, NELEM(gMethods)); + return RegisterMethodsOrDie(env, kClassPathName, gMethods, NELEM(gMethods)); } }; // namespace android diff --git a/core/jni/android_view_VelocityTracker.cpp b/core/jni/android_view_VelocityTracker.cpp index 1e36932ac3d7..ddd5fc853d25 100644 --- a/core/jni/android_view_VelocityTracker.cpp +++ b/core/jni/android_view_VelocityTracker.cpp @@ -26,6 +26,7 @@ #include <ScopedUtfChars.h> +#include "core_jni_helpers.h" namespace android { @@ -242,31 +243,18 @@ static JNINativeMethod gVelocityTrackerMethods[] = { (void*)android_view_VelocityTracker_nativeGetEstimator }, }; -#define FIND_CLASS(var, className) \ - var = env->FindClass(className); \ - LOG_FATAL_IF(! var, "Unable to find class " className); +int register_android_view_VelocityTracker(JNIEnv* env) { + int res = RegisterMethodsOrDie(env, "android/view/VelocityTracker", gVelocityTrackerMethods, + NELEM(gVelocityTrackerMethods)); -#define GET_FIELD_ID(var, clazz, fieldName, fieldDescriptor) \ - var = env->GetFieldID(clazz, fieldName, fieldDescriptor); \ - LOG_FATAL_IF(! var, "Unable to find field " fieldName); + jclass clazz = FindClassOrDie(env, "android/view/VelocityTracker$Estimator"); -int register_android_view_VelocityTracker(JNIEnv* env) { - int res = jniRegisterNativeMethods(env, "android/view/VelocityTracker", - gVelocityTrackerMethods, NELEM(gVelocityTrackerMethods)); - LOG_FATAL_IF(res < 0, "Unable to register native methods."); - - jclass clazz; - FIND_CLASS(clazz, "android/view/VelocityTracker$Estimator"); - - GET_FIELD_ID(gEstimatorClassInfo.xCoeff, clazz, - "xCoeff", "[F"); - GET_FIELD_ID(gEstimatorClassInfo.yCoeff, clazz, - "yCoeff", "[F"); - GET_FIELD_ID(gEstimatorClassInfo.degree, clazz, - "degree", "I"); - GET_FIELD_ID(gEstimatorClassInfo.confidence, clazz, - "confidence", "F"); - return 0; + gEstimatorClassInfo.xCoeff = GetFieldIDOrDie(env, clazz, "xCoeff", "[F"); + gEstimatorClassInfo.yCoeff = GetFieldIDOrDie(env, clazz, "yCoeff", "[F"); + gEstimatorClassInfo.degree = GetFieldIDOrDie(env, clazz, "degree", "I"); + gEstimatorClassInfo.confidence = GetFieldIDOrDie(env, clazz, "confidence", "F"); + + return res; } } // namespace android diff --git a/core/jni/com_android_internal_content_NativeLibraryHelper.cpp b/core/jni/com_android_internal_content_NativeLibraryHelper.cpp index 226b76486e42..3c1993e8650b 100644 --- a/core/jni/com_android_internal_content_NativeLibraryHelper.cpp +++ b/core/jni/com_android_internal_content_NativeLibraryHelper.cpp @@ -17,7 +17,7 @@ #define LOG_TAG "NativeLibraryHelper" //#define LOG_NDEBUG 0 -#include <android_runtime/AndroidRuntime.h> +#include "core_jni_helpers.h" #include <ScopedUtfChars.h> #include <UniquePtr.h> @@ -117,7 +117,7 @@ isFileDifferent(const char* filePath, size_t fileSize, time_t modifiedTime, return true; } - if (st->st_size != fileSize) { + if (static_cast<uint64_t>(st->st_size) != static_cast<uint64_t>(fileSize)) { return true; } @@ -430,7 +430,6 @@ static int findSupportedAbi(JNIEnv *env, jlong apkHandle, jobjectArray supported } ZipEntryRO entry = NULL; - char fileName[PATH_MAX]; int status = NO_NATIVE_LIBRARIES; while ((entry = it->next()) != NULL) { // We're currently in the lib/ directory of the APK, so it does have some native @@ -564,8 +563,8 @@ static JNINativeMethod gMethods[] = { int register_com_android_internal_content_NativeLibraryHelper(JNIEnv *env) { - return AndroidRuntime::registerNativeMethods(env, - "com/android/internal/content/NativeLibraryHelper", gMethods, NELEM(gMethods)); + return RegisterMethodsOrDie(env, + "com/android/internal/content/NativeLibraryHelper", gMethods, NELEM(gMethods)); } }; diff --git a/core/jni/com_android_internal_net_NetworkStatsFactory.cpp b/core/jni/com_android_internal_net_NetworkStatsFactory.cpp index 2e2d0c7d8dcb..6c0b756591f7 100644 --- a/core/jni/com_android_internal_net_NetworkStatsFactory.cpp +++ b/core/jni/com_android_internal_net_NetworkStatsFactory.cpp @@ -17,10 +17,11 @@ #define LOG_TAG "NetworkStats" #include <errno.h> +#include <inttypes.h> #include <sys/stat.h> #include <sys/types.h> -#include <android_runtime/AndroidRuntime.h> +#include <core_jni_helpers.h> #include <jni.h> #include <ScopedUtfChars.h> @@ -187,7 +188,7 @@ static int readNetworkStatsDetail(JNIEnv* env, jclass clazz, jobject stats, if (endPos - pos == 3) { rawTag = 0; } else { - if (sscanf(pos, "%llx", &rawTag) != 1) { + if (sscanf(pos, "%" PRIx64, &rawTag) != 1) { ALOGE("bad tag: %s", pos); fclose(fp); return -1; @@ -204,7 +205,7 @@ static int readNetworkStatsDetail(JNIEnv* env, jclass clazz, jobject stats, while (*pos == ' ') pos++; // Parse remaining fields. - if (sscanf(pos, "%u %u %llu %llu %llu %llu", + if (sscanf(pos, "%u %u %" PRIu64 " %" PRIu64 " %" PRIu64 " %" PRIu64, &s.uid, &s.set, &s.rxBytes, &s.rxPackets, &s.txBytes, &s.txPackets) == 6) { if (limitUid != -1 && limitUid != s.uid) { @@ -283,16 +284,6 @@ static int readNetworkStatsDetail(JNIEnv* env, jclass clazz, jobject stats, return 0; } -static jclass findClass(JNIEnv* env, const char* name) { - ScopedLocalRef<jclass> localClass(env, env->FindClass(name)); - jclass result = reinterpret_cast<jclass>(env->NewGlobalRef(localClass.get())); - if (result == NULL) { - ALOGE("failed to find class '%s'", name); - abort(); - } - return result; -} - static JNINativeMethod gMethods[] = { { "nativeReadNetworkStatsDetail", "(Landroid/net/NetworkStats;Ljava/lang/String;I[Ljava/lang/String;I)I", @@ -300,24 +291,25 @@ static JNINativeMethod gMethods[] = { }; int register_com_android_internal_net_NetworkStatsFactory(JNIEnv* env) { - int err = AndroidRuntime::registerNativeMethods(env, + int err = RegisterMethodsOrDie(env, "com/android/internal/net/NetworkStatsFactory", gMethods, NELEM(gMethods)); - gStringClass = findClass(env, "java/lang/String"); - - jclass clazz = env->FindClass("android/net/NetworkStats"); - gNetworkStatsClassInfo.size = env->GetFieldID(clazz, "size", "I"); - gNetworkStatsClassInfo.capacity = env->GetFieldID(clazz, "capacity", "I"); - gNetworkStatsClassInfo.iface = env->GetFieldID(clazz, "iface", "[Ljava/lang/String;"); - gNetworkStatsClassInfo.uid = env->GetFieldID(clazz, "uid", "[I"); - gNetworkStatsClassInfo.set = env->GetFieldID(clazz, "set", "[I"); - gNetworkStatsClassInfo.tag = env->GetFieldID(clazz, "tag", "[I"); - gNetworkStatsClassInfo.rxBytes = env->GetFieldID(clazz, "rxBytes", "[J"); - gNetworkStatsClassInfo.rxPackets = env->GetFieldID(clazz, "rxPackets", "[J"); - gNetworkStatsClassInfo.txBytes = env->GetFieldID(clazz, "txBytes", "[J"); - gNetworkStatsClassInfo.txPackets = env->GetFieldID(clazz, "txPackets", "[J"); - gNetworkStatsClassInfo.operations = env->GetFieldID(clazz, "operations", "[J"); + gStringClass = FindClassOrDie(env, "java/lang/String"); + gStringClass = MakeGlobalRefOrDie(env, gStringClass); + + jclass clazz = FindClassOrDie(env, "android/net/NetworkStats"); + gNetworkStatsClassInfo.size = GetFieldIDOrDie(env, clazz, "size", "I"); + gNetworkStatsClassInfo.capacity = GetFieldIDOrDie(env, clazz, "capacity", "I"); + gNetworkStatsClassInfo.iface = GetFieldIDOrDie(env, clazz, "iface", "[Ljava/lang/String;"); + gNetworkStatsClassInfo.uid = GetFieldIDOrDie(env, clazz, "uid", "[I"); + gNetworkStatsClassInfo.set = GetFieldIDOrDie(env, clazz, "set", "[I"); + gNetworkStatsClassInfo.tag = GetFieldIDOrDie(env, clazz, "tag", "[I"); + gNetworkStatsClassInfo.rxBytes = GetFieldIDOrDie(env, clazz, "rxBytes", "[J"); + gNetworkStatsClassInfo.rxPackets = GetFieldIDOrDie(env, clazz, "rxPackets", "[J"); + gNetworkStatsClassInfo.txBytes = GetFieldIDOrDie(env, clazz, "txBytes", "[J"); + gNetworkStatsClassInfo.txPackets = GetFieldIDOrDie(env, clazz, "txPackets", "[J"); + gNetworkStatsClassInfo.operations = GetFieldIDOrDie(env, clazz, "operations", "[J"); return err; } diff --git a/core/jni/com_android_internal_os_Zygote.cpp b/core/jni/com_android_internal_os_Zygote.cpp index 69d9387fdc09..2bfeadb18e20 100644 --- a/core/jni/com_android_internal_os_Zygote.cpp +++ b/core/jni/com_android_internal_os_Zygote.cpp @@ -20,12 +20,12 @@ #include <sys/mount.h> #include <linux/fs.h> -#include <grp.h> #include <fcntl.h> +#include <grp.h> +#include <inttypes.h> #include <paths.h> #include <signal.h> #include <stdlib.h> -#include <unistd.h> #include <sys/capability.h> #include <sys/personality.h> #include <sys/prctl.h> @@ -34,7 +34,7 @@ #include <sys/types.h> #include <sys/utsname.h> #include <sys/wait.h> - +#include <unistd.h> #include <cutils/fs.h> #include <cutils/multiuser.h> @@ -44,7 +44,7 @@ #include <selinux/android.h> #include <processgroup/processgroup.h> -#include "android_runtime/AndroidRuntime.h" +#include "core_jni_helpers.h" #include "JNIHelp.h" #include "ScopedLocalRef.h" #include "ScopedPrimitiveArray.h" @@ -104,7 +104,7 @@ static void SigChldHandler(int /*signal_number*/) { // so that it is restarted by init and system server will be restarted // from there. if (pid == gSystemServerPid) { - ALOGE("Exit zygote because system server (%d) has terminated"); + ALOGE("Exit zygote because system server (%d) has terminated", pid); kill(getpid(), SIGKILL); } } @@ -189,7 +189,8 @@ static void SetRLimits(JNIEnv* env, jobjectArray javaRlimits) { int rc = setrlimit(javaRlimit[0], &rlim); if (rc == -1) { - ALOGE("setrlimit(%d, {%d, %d}) failed", javaRlimit[0], rlim.rlim_cur, rlim.rlim_max); + ALOGE("setrlimit(%d, {%ld, %ld}) failed", javaRlimit[0], rlim.rlim_cur, + rlim.rlim_max); RuntimeAbort(env); } } @@ -235,7 +236,7 @@ static void SetCapabilities(JNIEnv* env, int64_t permitted, int64_t effective) { capdata[1].permitted = permitted >> 32; if (capset(&capheader, &capdata[0]) == -1) { - ALOGE("capset(%lld, %lld) failed", permitted, effective); + ALOGE("capset(%" PRId64 ", %" PRId64 ") failed", permitted, effective); RuntimeAbort(env); } } @@ -612,15 +613,11 @@ static JNINativeMethod gMethods[] = { }; int register_com_android_internal_os_Zygote(JNIEnv* env) { - gZygoteClass = (jclass) env->NewGlobalRef(env->FindClass(kZygoteClassName)); - if (gZygoteClass == NULL) { - RuntimeAbort(env); - } - gCallPostForkChildHooks = env->GetStaticMethodID(gZygoteClass, "callPostForkChildHooks", + gZygoteClass = MakeGlobalRefOrDie(env, FindClassOrDie(env, kZygoteClassName)); + gCallPostForkChildHooks = GetStaticMethodIDOrDie(env, gZygoteClass, "callPostForkChildHooks", "(ILjava/lang/String;)V"); - return AndroidRuntime::registerNativeMethods(env, "com/android/internal/os/Zygote", - gMethods, NELEM(gMethods)); + return RegisterMethodsOrDie(env, "com/android/internal/os/Zygote", gMethods, NELEM(gMethods)); } } // namespace android diff --git a/core/jni/com_android_internal_os_ZygoteInit.cpp b/core/jni/com_android_internal_os_ZygoteInit.cpp index 10c6e2ce3a83..496f569c7f59 100644 --- a/core/jni/com_android_internal_os_ZygoteInit.cpp +++ b/core/jni/com_android_internal_os_ZygoteInit.cpp @@ -25,7 +25,7 @@ #include "jni.h" #include <JNIHelp.h> -#include "android_runtime/AndroidRuntime.h" +#include "core_jni_helpers.h" #include <sys/capability.h> #include <sys/prctl.h> @@ -258,7 +258,7 @@ static JNINativeMethod gMethods[] = { }; int register_com_android_internal_os_ZygoteInit(JNIEnv* env) { - return AndroidRuntime::registerNativeMethods(env, + return RegisterMethodsOrDie(env, "com/android/internal/os/ZygoteInit", gMethods, NELEM(gMethods)); } diff --git a/core/jni/com_android_internal_util_VirtualRefBasePtr.cpp b/core/jni/com_android_internal_util_VirtualRefBasePtr.cpp index ce6f207352a8..7a18c2d380ce 100644 --- a/core/jni/com_android_internal_util_VirtualRefBasePtr.cpp +++ b/core/jni/com_android_internal_util_VirtualRefBasePtr.cpp @@ -16,7 +16,7 @@ #include "jni.h" #include <nativehelper/JNIHelp.h> -#include <android_runtime/AndroidRuntime.h> +#include "core_jni_helpers.h" namespace android { @@ -42,7 +42,7 @@ static JNINativeMethod gMethods[] = { }; int register_com_android_internal_util_VirtualRefBasePtr(JNIEnv* env) { - return AndroidRuntime::registerNativeMethods(env, kClassPathName, gMethods, NELEM(gMethods)); + return RegisterMethodsOrDie(env, kClassPathName, gMethods, NELEM(gMethods)); } diff --git a/core/jni/com_android_internal_view_animation_NativeInterpolatorFactoryHelper.cpp b/core/jni/com_android_internal_view_animation_NativeInterpolatorFactoryHelper.cpp index 704e1be07177..c5c2e9d362a7 100644 --- a/core/jni/com_android_internal_view_animation_NativeInterpolatorFactoryHelper.cpp +++ b/core/jni/com_android_internal_view_animation_NativeInterpolatorFactoryHelper.cpp @@ -18,7 +18,7 @@ #include "jni.h" #include <nativehelper/JNIHelp.h> -#include <android_runtime/AndroidRuntime.h> +#include "core_jni_helpers.h" #include <Interpolator.h> @@ -98,7 +98,7 @@ static JNINativeMethod gMethods[] = { }; int register_com_android_internal_view_animation_NativeInterpolatorFactoryHelper(JNIEnv* env) { - return AndroidRuntime::registerNativeMethods(env, kClassPathName, gMethods, NELEM(gMethods)); + return RegisterMethodsOrDie(env, kClassPathName, gMethods, NELEM(gMethods)); } diff --git a/core/jni/com_google_android_gles_jni_GLImpl.cpp b/core/jni/com_google_android_gles_jni_GLImpl.cpp index 7975987844de..c5f330e772af 100644 --- a/core/jni/com_google_android_gles_jni_GLImpl.cpp +++ b/core/jni/com_google_android_gles_jni_GLImpl.cpp @@ -17,6 +17,10 @@ // This source file is automatically generated +#pragma GCC diagnostic ignored "-Wunused-variable" +#pragma GCC diagnostic ignored "-Wunused-but-set-variable" +#pragma GCC diagnostic ignored "-Wunused-function" + #include "jni.h" #include "JNIHelp.h" #include <android_runtime/AndroidRuntime.h> diff --git a/core/jni/core_jni_helpers.h b/core/jni/core_jni_helpers.h new file mode 100644 index 000000000000..3f169c365ca4 --- /dev/null +++ b/core/jni/core_jni_helpers.h @@ -0,0 +1,77 @@ +/* + * Copyright (C) 2014 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. + */ + +#ifndef CORE_JNI_HELPERS +#define CORE_JNI_HELPERS + +#include "JNIHelp.h" +#include <android_runtime/AndroidRuntime.h> + +namespace android { + +// Defines some helpful functions. + +static inline jclass FindClassOrDie(JNIEnv* env, const char* class_name) { + jclass clazz = env->FindClass(class_name); + LOG_ALWAYS_FATAL_IF(clazz == NULL, "Unable to find class %s", class_name); + return clazz; +} + +static inline jfieldID GetFieldIDOrDie(JNIEnv* env, jclass clazz, const char* field_name, + const char* field_signature) { + jfieldID res = env->GetFieldID(clazz, field_name, field_signature); + LOG_ALWAYS_FATAL_IF(res == NULL, "Unable to find static field %s", field_name); + return res; +} + +static inline jmethodID GetMethodIDOrDie(JNIEnv* env, jclass clazz, const char* method_name, + const char* method_signature) { + jmethodID res = env->GetMethodID(clazz, method_name, method_signature); + LOG_ALWAYS_FATAL_IF(res == NULL, "Unable to find method %s", method_name); + return res; +} + +static inline jfieldID GetStaticFieldIDOrDie(JNIEnv* env, jclass clazz, const char* field_name, + const char* field_signature) { + jfieldID res = env->GetStaticFieldID(clazz, field_name, field_signature); + LOG_ALWAYS_FATAL_IF(res == NULL, "Unable to find static field %s", field_name); + return res; +} + +static inline jmethodID GetStaticMethodIDOrDie(JNIEnv* env, jclass clazz, const char* method_name, + const char* method_signature) { + jmethodID res = env->GetStaticMethodID(clazz, method_name, method_signature); + LOG_ALWAYS_FATAL_IF(res == NULL, "Unable to find static method %s", method_name); + return res; +} + +template <typename T> +static inline T MakeGlobalRefOrDie(JNIEnv* env, T in) { + jobject res = env->NewGlobalRef(in); + LOG_ALWAYS_FATAL_IF(res == NULL, "Unable to create global reference."); + return static_cast<T>(res); +} + +static inline int RegisterMethodsOrDie(JNIEnv* env, const char* className, + const JNINativeMethod* gMethods, int numMethods) { + int res = AndroidRuntime::registerNativeMethods(env, className, gMethods, numMethods); + LOG_ALWAYS_FATAL_IF(res < 0, "Unable to register native methods."); + return res; +} + +} // namespace android + +#endif // CORE_JNI_HELPERS diff --git a/core/tests/coretests/src/android/text/TextUtilsTest.java b/core/tests/coretests/src/android/text/TextUtilsTest.java index d494c5d03b63..5a6ef3059d1f 100644 --- a/core/tests/coretests/src/android/text/TextUtilsTest.java +++ b/core/tests/coretests/src/android/text/TextUtilsTest.java @@ -353,6 +353,7 @@ public class TextUtilsTest extends TestCase { assertNull("null CharSequence should generate null from parcel", text); p = Parcel.obtain(); TextUtils.writeToParcel("test", p, 0); + p.setDataPosition(0); text = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(p); assertEquals("conversion to/from parcel failed", "test", text); } diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/Test.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/Test.java index bbdd3e5c5ccc..41b8956f55d0 100644 --- a/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/Test.java +++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/Test.java @@ -31,7 +31,7 @@ public class Test extends ActivityInstrumentationTestCase2<MainActivity> { assertEquals(3366, getActivity().getValue()); } - public void testAnnotation() { + public void testAnnotation() throws Exception { assertEquals(ReferencedByAnnotation.B, ((AnnotationWithEnum) TestApplication.annotation).value()); assertEquals(ReferencedByAnnotation.B, @@ -43,10 +43,25 @@ public class Test extends ActivityInstrumentationTestCase2<MainActivity> { ((AnnotationWithClass) TestApplication.annotation3).value()); // Just to verify that it doesn't crash ReferencedByClassInAnnotation.A.get(); + + // Tests about bug https://code.google.com/p/android/issues/detail?id=78144 + // Dalvik may throw IllegalAccessError when a class is in a different dex than an enum + // used in its annotations. + String annotationPackage = "com.android.multidexlegacytestapp.annotation."; + Class<?> clazz = Class.forName(annotationPackage + "Annotated"); + // Just to verify that it doesn't crash + clazz.getAnnotations(); + clazz = Class.forName(annotationPackage + "Annotated2"); + // Just to verify that it doesn't crash + clazz.getAnnotations(); + clazz = Class.forName(annotationPackage + "Annotated3"); + // Just to verify that it doesn't crash + clazz.getAnnotations(); } public void testInterface() { assertEquals(InterfaceWithEnum.class, TestApplication.interfaceClass); } + } diff --git a/core/java/android/webkit/MustOverrideException.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/annotation/Annotated.java index 0643bf0749a7..fb7787be1395 100644 --- a/core/java/android/webkit/MustOverrideException.java +++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/annotation/Annotated.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2012 The Android Open Source Project + * Copyright (C) 2014 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. @@ -14,12 +14,13 @@ * limitations under the License. */ -package android.webkit; +package com.android.multidexlegacytestapp.annotation; + +@TestAnnotation(AnnotationValue.V1) +public class Annotated { + + public void m() { -// TODO: Remove MustOverrideException and make all methods throwing it abstract instead; -// needs API file update. -class MustOverrideException extends RuntimeException { - MustOverrideException() { - super("abstract function called: must be overriden!"); } -}
\ No newline at end of file + +} diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/annotation/Annotated2.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/annotation/Annotated2.java new file mode 100644 index 000000000000..7e2dea7852ca --- /dev/null +++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/annotation/Annotated2.java @@ -0,0 +1,25 @@ +/* + * Copyright (C) 2014 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 com.android.multidexlegacytestapp.annotation; + +@TestAnnotation2(AnnotationValue.V1) +public class Annotated2 { + public void m() { + + } + +} diff --git a/core/java/android/net/http/Timer.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/annotation/Annotated3.java index cc15a3085f69..8a01c5b3960c 100644 --- a/core/java/android/net/http/Timer.java +++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/annotation/Annotated3.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2006 The Android Open Source Project + * Copyright (C) 2014 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. @@ -14,28 +14,14 @@ * limitations under the License. */ -package android.net.http; +package com.android.multidexlegacytestapp.annotation; -import android.os.SystemClock; +import com.android.multidexlegacytestapp.annotation.TestAnnotation3.Value; -/** - * {@hide} - * Debugging tool - */ -class Timer { - - private long mStart; - private long mLast; +@TestAnnotation3(Value.V1) +public class Annotated3 { + public void m() { - public Timer() { - mStart = mLast = SystemClock.uptimeMillis(); } - public void mark(String message) { - long now = SystemClock.uptimeMillis(); - if (HttpLog.LOGV) { - HttpLog.v(message + " " + (now - mLast) + " total " + (now - mStart)); - } - mLast = now; - } } diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/annotation/AnnotationValue.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/annotation/AnnotationValue.java new file mode 100644 index 000000000000..1322d73bd7a5 --- /dev/null +++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/annotation/AnnotationValue.java @@ -0,0 +1,23 @@ +/* + * Copyright (C) 2014 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 com.android.multidexlegacytestapp.annotation; + +public enum AnnotationValue { + V1, + V2; + +} diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/annotation/TestAnnotation.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/annotation/TestAnnotation.java new file mode 100644 index 000000000000..68684b685868 --- /dev/null +++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/annotation/TestAnnotation.java @@ -0,0 +1,25 @@ +/* + * Copyright (C) 2014 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 com.android.multidexlegacytestapp.annotation; + +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; + +@Retention(RetentionPolicy.RUNTIME) +public @interface TestAnnotation { + AnnotationValue value(); +} diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/annotation/TestAnnotation2.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/annotation/TestAnnotation2.java new file mode 100644 index 000000000000..327d49c6280f --- /dev/null +++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/annotation/TestAnnotation2.java @@ -0,0 +1,25 @@ +/* + * Copyright (C) 2014 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 com.android.multidexlegacytestapp.annotation; + +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; + +@Retention(RetentionPolicy.RUNTIME) +public @interface TestAnnotation2 { + AnnotationValue value(); +} diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/annotation/TestAnnotation3.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/annotation/TestAnnotation3.java new file mode 100644 index 000000000000..b1bf75efbc34 --- /dev/null +++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/annotation/TestAnnotation3.java @@ -0,0 +1,31 @@ +/* + * Copyright (C) 2014 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 com.android.multidexlegacytestapp.annotation; + +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; + +@Retention(RetentionPolicy.RUNTIME) +public @interface TestAnnotation3 { + public enum Value { + V1, + V2; + + } + + Value value(); +} diff --git a/data/keyboards/Vendor_046d_Product_b501.kl b/data/keyboards/Vendor_046d_Product_b501.kl new file mode 100644 index 000000000000..496ddc3eec06 --- /dev/null +++ b/data/keyboards/Vendor_046d_Product_b501.kl @@ -0,0 +1,65 @@ +# Copyright (C) 2014 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. + +# Logitech Bluetooth wireless gamepad (RedHawk) + +key 304 BUTTON_A +key 305 BUTTON_B +key 307 BUTTON_X +key 308 BUTTON_Y +key 310 BUTTON_L1 +key 311 BUTTON_R1 +key 312 BUTTON_L2 +key 313 BUTTON_R2 + +key 314 BUTTON_SELECT +key 315 BUTTON_START +key 316 BUTTON_MODE +key 317 BUTTON_THUMBL +key 318 BUTTON_THUMBR + +key 103 DPAD_UP +key 105 DPAD_LEFT +key 106 DPAD_RIGHT +key 108 DPAD_DOWN +key 353 DPAD_CENTER + +key 113 VOLUME_MUTE +key 114 VOLUME_DOWN +key 115 VOLUME_UP +key 152 POWER +key 163 MEDIA_NEXT +key 164 MEDIA_PLAY_PAUSE +key 165 MEDIA_PREVIOUS + +key 158 BACK +key 172 HOME + +key 217 SEARCH +key 580 APP_SWITCH +key 582 ASSIST + +axis 0x00 X +axis 0x01 Y +axis 0x02 Z +axis 0x05 RZ +axis 0x09 RTRIGGER +axis 0x0a LTRIGGER +axis 0x10 HAT_X +axis 0x11 HAT_Y + +led 0x00 CONTROLLER_1 +led 0x01 CONTROLLER_2 +led 0x02 CONTROLLER_3 +led 0x03 CONTROLLER_4 diff --git a/data/keyboards/Vendor_1532_Product_0900.kl b/data/keyboards/Vendor_1532_Product_0900.kl new file mode 100644 index 000000000000..c2fc1b4f9365 --- /dev/null +++ b/data/keyboards/Vendor_1532_Product_0900.kl @@ -0,0 +1,42 @@ +# Copyright (C) 2014 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. + +# Razer Serval + +key 304 BUTTON_A +key 305 BUTTON_B +key 307 BUTTON_X +key 308 BUTTON_Y +key 310 BUTTON_L1 +key 311 BUTTON_R1 +key 316 BUTTON_MODE +key 317 BUTTON_THUMBL +key 318 BUTTON_THUMBR + +key 158 BACK +key 172 HOME + +axis 0x00 X +axis 0x01 Y +axis 0x02 Z +axis 0x05 RZ +axis 0x09 RTRIGGER +axis 0x0a LTRIGGER +axis 0x10 HAT_X +axis 0x11 HAT_Y + +led 0x00 CONTROLLER_1 +led 0x01 CONTROLLER_2 +led 0x02 CONTROLLER_3 +led 0x03 CONTROLLER_4 diff --git a/docs/html/guide/topics/resources/string-resource.jd b/docs/html/guide/topics/resources/string-resource.jd index e2326eca432b..cbfa82e7dafd 100644 --- a/docs/html/guide/topics/resources/string-resource.jd +++ b/docs/html/guide/topics/resources/string-resource.jd @@ -237,7 +237,8 @@ distinctions at all, so you'll always get the <code>other</code> string. <p>The selection of which string to use is made solely based on grammatical <i>necessity</i>. In English, a string for <code>zero</code> will be ignored even if the quantity is 0, because 0 isn't grammatically different from 2, or any other number except 1 ("zero books", "one book", -"two books", and so on). +"two books", and so on). Conversely, in Korean <i>only</i> the <code>other</code> string will +ever be used. <p>Don't be misled either by the fact that, say, <code>two</code> sounds like it could only apply to the quantity 2: a language may require that 2, 12, 102 (and so on) are all treated like one @@ -343,7 +344,14 @@ values, with non-exhaustive examples in parentheses: <?xml version="1.0" encoding="utf-8"?> <resources> <plurals name="numberOfSongsAvailable"> - <item quantity="one">One song found.</item> + <!-- + As a developer, you should always supply "one" and "other" + strings. Your translators will know which strings are actually + needed for their language. Always include %d in "one" because + translators will need to use %d for languages where "one" + doesn't mean 1 (as explained above). + --> + <item quantity="one">%d song found.</item> <item quantity="other">%d songs found.</item> </plurals> </resources> @@ -353,7 +361,7 @@ values, with non-exhaustive examples in parentheses: <?xml version="1.0" encoding="utf-8"?> <resources> <plurals name="numberOfSongsAvailable"> - <item quantity="one">Znaleziono jedną piosenkę.</item> + <item quantity="one">Znaleziono %d piosenkę.</item> <item quantity="few">Znaleziono %d piosenki.</item> <item quantity="other">Znaleziono %d piosenek.</item> </plurals> @@ -597,4 +605,4 @@ with different types of styling applied to individual words: // and bold the entire sequence. CharSequence text = bold(italic(res.getString(R.string.hello)), color(Color.RED, res.getString(R.string.world))); -</pre>
\ No newline at end of file +</pre> diff --git a/docs/html/training/articles/perf-jni.jd b/docs/html/training/articles/perf-jni.jd index 1a40f6237679..5a9fa1e04b46 100644 --- a/docs/html/training/articles/perf-jni.jd +++ b/docs/html/training/articles/perf-jni.jd @@ -635,20 +635,31 @@ avoid some problems. <a name="faq_FindClass" id="faq_FindClass"></a> <h2>FAQ: Why didn't <code>FindClass</code> find my class?</h2> +<p>(Most of this advice applies equally well to failures to find methods +with <code>GetMethodID</code> or <code>GetStaticMethodID</code>, or fields +with <code>GetFieldID</code> or <code>GetStaticFieldID</code>.)</p> + <p>Make sure that the class name string has the correct format. JNI class names start with the package name and are separated with slashes, such as <code>java/lang/String</code>. If you're looking up an array class, you need to start with the appropriate number of square brackets and must also wrap the class with 'L' and ';', so a one-dimensional array of -<code>String</code> would be <code>[Ljava/lang/String;</code>.</p> +<code>String</code> would be <code>[Ljava/lang/String;</code>. +If you're looking up an inner class, use '$' rather than '.'. In general, +using <code>javap</code> on the .class file is a good way to find out the +internal name of your class.</p> + +<p>If you're using ProGuard, make sure that +<a href="{@docRoot}tools/help/proguard.html#configuring">ProGuard didn't +strip out your class</a>. This can happen if your class/method/field is only +used from JNI. <p>If the class name looks right, you could be running into a class loader issue. <code>FindClass</code> wants to start the class search in the class loader associated with your code. It examines the call stack, which will look something like: <pre> Foo.myfunc(Native Method) - Foo.main(Foo.java:10) - dalvik.system.NativeStart.main(Native Method)</pre> + Foo.main(Foo.java:10)</pre> <p>The topmost method is <code>Foo.myfunc</code>. <code>FindClass</code> finds the <code>ClassLoader</code> object associated with the <code>Foo</code> @@ -656,12 +667,9 @@ class and uses that.</p> <p>This usually does what you want. You can get into trouble if you create a thread yourself (perhaps by calling <code>pthread_create</code> -and then attaching it with <code>AttachCurrentThread</code>). -Now the stack trace looks like this:</p> -<pre> dalvik.system.NativeStart.run(Native Method)</pre> - -<p>The topmost method is <code>NativeStart.run</code>, which isn't part of -your application. If you call <code>FindClass</code> from this thread, the +and then attaching it with <code>AttachCurrentThread</code>). Now there +are no stack frames from your application. +If you call <code>FindClass</code> from this thread, the JavaVM will start in the "system" class loader instead of the one associated with your application, so attempts to find app-specific classes will fail.</p> diff --git a/drm/jni/Android.mk b/drm/jni/Android.mk index 474b9b299f86..08c7b953b813 100644 --- a/drm/jni/Android.mk +++ b/drm/jni/Android.mk @@ -39,8 +39,8 @@ LOCAL_C_INCLUDES += \ $(TOP)/frameworks/av/include \ $(TOP)/libcore/include - - LOCAL_MODULE_TAGS := optional +LOCAL_CFLAGS += -Wall -Werror -Wunused -Wunreachable-code + include $(BUILD_SHARED_LIBRARY) diff --git a/drm/jni/android_drm_DrmManagerClient.cpp b/drm/jni/android_drm_DrmManagerClient.cpp index d321baf68b46..52597e10609a 100644 --- a/drm/jni/android_drm_DrmManagerClient.cpp +++ b/drm/jni/android_drm_DrmManagerClient.cpp @@ -381,7 +381,8 @@ static jobjectArray android_drm_DrmManagerClient_getAllSupportInfo( } static void android_drm_DrmManagerClient_installDrmEngine( - JNIEnv* env, jobject thiz, jint uniqueId, jstring engineFilePath) { + JNIEnv* /* env */, jobject /* thiz */, jint /* uniqueId */, + jstring /* engineFilePath */) { ALOGV("installDrmEngine - Enter"); //getDrmManagerClient(env, thiz) // ->installDrmEngine(uniqueId, Utility::getStringValue(env, engineFilePath)); @@ -776,7 +777,7 @@ static int registerNativeMethods(JNIEnv* env) { return result; } -jint JNI_OnLoad(JavaVM* vm, void* reserved) { +jint JNI_OnLoad(JavaVM* vm, void* /* reserved */) { JNIEnv* env = NULL; jint result = -1; diff --git a/include/androidfw/ResourceTypes.h b/include/androidfw/ResourceTypes.h index ce30d8164668..a44975b37eb2 100644 --- a/include/androidfw/ResourceTypes.h +++ b/include/androidfw/ResourceTypes.h @@ -236,8 +236,8 @@ enum { #define Res_MAKEINTERNAL(entry) (0x01000000 | (entry&0xFFFF)) #define Res_MAKEARRAY(entry) (0x02000000 | (entry&0xFFFF)) -#define Res_MAXPACKAGE 255 -#define Res_MAXTYPE 255 +static const size_t Res_MAXPACKAGE = 255; +static const size_t Res_MAXTYPE = 255; /** * Representation of a value in a resource, supplying type @@ -1773,9 +1773,7 @@ public: const char* targetPath, const char* overlayPath, void** outData, size_t* outSize) const; - enum { - IDMAP_HEADER_SIZE_BYTES = 4 * sizeof(uint32_t) + 2 * 256, - }; + static const size_t IDMAP_HEADER_SIZE_BYTES = 4 * sizeof(uint32_t) + 2 * 256; // Retrieve idmap meta-data. // diff --git a/keystore/java/android/security/AndroidKeyPairGenerator.java b/keystore/java/android/security/AndroidKeyPairGenerator.java index 458a46c0c09e..a0ffb5f0d75c 100644 --- a/keystore/java/android/security/AndroidKeyPairGenerator.java +++ b/keystore/java/android/security/AndroidKeyPairGenerator.java @@ -17,7 +17,6 @@ package android.security; import com.android.org.bouncycastle.x509.X509V3CertificateGenerator; - import com.android.org.conscrypt.NativeCrypto; import com.android.org.conscrypt.OpenSSLEngine; @@ -34,7 +33,6 @@ import java.security.SecureRandom; import java.security.cert.CertificateEncodingException; import java.security.cert.X509Certificate; import java.security.spec.AlgorithmParameterSpec; -import java.security.spec.DSAParameterSpec; import java.security.spec.InvalidKeySpecException; import java.security.spec.RSAKeyGenParameterSpec; import java.security.spec.X509EncodedKeySpec; @@ -156,8 +154,6 @@ public class AndroidKeyPairGenerator extends KeyPairGeneratorSpi { private static String getDefaultSignatureAlgorithmForKeyType(String keyType) { if ("RSA".equalsIgnoreCase(keyType)) { return "sha256WithRSA"; - } else if ("DSA".equalsIgnoreCase(keyType)) { - return "sha1WithDSA"; } else if ("EC".equalsIgnoreCase(keyType)) { return "sha256WithECDSA"; } else { @@ -173,13 +169,6 @@ public class AndroidKeyPairGenerator extends KeyPairGeneratorSpi { return new byte[][] { rsaSpec.getPublicExponent().toByteArray() }; } break; - case NativeCrypto.EVP_PKEY_DSA: - if (spec instanceof DSAParameterSpec) { - DSAParameterSpec dsaSpec = (DSAParameterSpec) spec; - return new byte[][] { dsaSpec.getG().toByteArray(), - dsaSpec.getP().toByteArray(), dsaSpec.getQ().toByteArray() }; - } - break; } return null; } diff --git a/keystore/java/android/security/KeyChain.java b/keystore/java/android/security/KeyChain.java index 131e6893baa9..607817a7aa60 100644 --- a/keystore/java/android/security/KeyChain.java +++ b/keystore/java/android/security/KeyChain.java @@ -379,7 +379,7 @@ public final class KeyChain { */ public static boolean isKeyAlgorithmSupported(String algorithm) { final String algUpper = algorithm.toUpperCase(Locale.US); - return "DSA".equals(algUpper) || "EC".equals(algUpper) || "RSA".equals(algUpper); + return "EC".equals(algUpper) || "RSA".equals(algUpper); } /** diff --git a/keystore/java/android/security/KeyPairGeneratorSpec.java b/keystore/java/android/security/KeyPairGeneratorSpec.java index 4a823cc98bab..6b67f436bdd5 100644 --- a/keystore/java/android/security/KeyPairGeneratorSpec.java +++ b/keystore/java/android/security/KeyPairGeneratorSpec.java @@ -26,7 +26,6 @@ import java.security.NoSuchAlgorithmException; import java.security.PrivateKey; import java.security.cert.Certificate; import java.security.spec.AlgorithmParameterSpec; -import java.security.spec.DSAParameterSpec; import java.security.spec.RSAKeyGenParameterSpec; import java.util.Date; @@ -59,11 +58,6 @@ public final class KeyPairGeneratorSpec implements AlgorithmParameterSpec { * These must be kept in sync with system/security/keystore/defaults.h */ - /* DSA */ - private static final int DSA_DEFAULT_KEY_SIZE = 1024; - private static final int DSA_MIN_KEY_SIZE = 512; - private static final int DSA_MAX_KEY_SIZE = 8192; - /* EC */ private static final int EC_DEFAULT_KEY_SIZE = 256; private static final int EC_MIN_KEY_SIZE = 192; @@ -165,9 +159,7 @@ public final class KeyPairGeneratorSpec implements AlgorithmParameterSpec { } private static int getDefaultKeySizeForType(int keyType) { - if (keyType == NativeCrypto.EVP_PKEY_DSA) { - return DSA_DEFAULT_KEY_SIZE; - } else if (keyType == NativeCrypto.EVP_PKEY_EC) { + if (keyType == NativeCrypto.EVP_PKEY_EC) { return EC_DEFAULT_KEY_SIZE; } else if (keyType == NativeCrypto.EVP_PKEY_RSA) { return RSA_DEFAULT_KEY_SIZE; @@ -176,12 +168,7 @@ public final class KeyPairGeneratorSpec implements AlgorithmParameterSpec { } private static void checkValidKeySize(int keyType, int keySize) { - if (keyType == NativeCrypto.EVP_PKEY_DSA) { - if (keySize < DSA_MIN_KEY_SIZE || keySize > DSA_MAX_KEY_SIZE) { - throw new IllegalArgumentException("DSA keys must be >= " + DSA_MIN_KEY_SIZE - + " and <= " + DSA_MAX_KEY_SIZE); - } - } else if (keyType == NativeCrypto.EVP_PKEY_EC) { + if (keyType == NativeCrypto.EVP_PKEY_EC) { if (keySize < EC_MIN_KEY_SIZE || keySize > EC_MAX_KEY_SIZE) { throw new IllegalArgumentException("EC keys must be >= " + EC_MIN_KEY_SIZE + " and <= " + EC_MAX_KEY_SIZE); @@ -198,11 +185,7 @@ public final class KeyPairGeneratorSpec implements AlgorithmParameterSpec { private static void checkCorrectParametersSpec(int keyType, int keySize, AlgorithmParameterSpec spec) { - if (keyType == NativeCrypto.EVP_PKEY_DSA && spec != null) { - if (!(spec instanceof DSAParameterSpec)) { - throw new IllegalArgumentException("DSA keys must have DSAParameterSpec specified"); - } - } else if (keyType == NativeCrypto.EVP_PKEY_RSA && spec != null) { + if (keyType == NativeCrypto.EVP_PKEY_RSA && spec != null) { if (spec instanceof RSAKeyGenParameterSpec) { RSAKeyGenParameterSpec rsaSpec = (RSAKeyGenParameterSpec) spec; if (keySize != -1 && keySize != rsaSpec.getKeysize()) { diff --git a/keystore/java/android/security/KeyStore.java b/keystore/java/android/security/KeyStore.java index 0db8c7725d77..1dbdbfb6685d 100644 --- a/keystore/java/android/security/KeyStore.java +++ b/keystore/java/android/security/KeyStore.java @@ -71,8 +71,6 @@ public class KeyStore { static int getKeyTypeForAlgorithm(String keyType) throws IllegalArgumentException { if ("RSA".equalsIgnoreCase(keyType)) { return NativeCrypto.EVP_PKEY_RSA; - } else if ("DSA".equalsIgnoreCase(keyType)) { - return NativeCrypto.EVP_PKEY_DSA; } else if ("EC".equalsIgnoreCase(keyType)) { return NativeCrypto.EVP_PKEY_EC; } else { diff --git a/libs/androidfw/Android.mk b/libs/androidfw/Android.mk index 376b101a178d..9c0a7479f218 100644 --- a/libs/androidfw/Android.mk +++ b/libs/androidfw/Android.mk @@ -52,8 +52,10 @@ LOCAL_MODULE_TAGS := optional LOCAL_CFLAGS += -DSTATIC_ANDROIDFW_FOR_TOOLS +LOCAL_CFLAGS += -Wall -Werror -Wunused -Wunreachable-code + LOCAL_C_INCLUDES := \ - external/zlib + external/zlib LOCAL_STATIC_LIBRARIES := liblog libziparchive-host libutils @@ -69,11 +71,11 @@ LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk LOCAL_SRC_FILES:= $(deviceSources) LOCAL_SHARED_LIBRARIES := \ - libbinder \ - liblog \ - libcutils \ - libutils \ - libz + libbinder \ + liblog \ + libcutils \ + libutils \ + libz LOCAL_STATIC_LIBRARIES := libziparchive @@ -85,6 +87,8 @@ LOCAL_MODULE:= libandroidfw LOCAL_MODULE_TAGS := optional +LOCAL_CFLAGS += -Wall -Werror -Wunused -Wunreachable-code + include $(BUILD_SHARED_LIBRARY) diff --git a/libs/androidfw/Asset.cpp b/libs/androidfw/Asset.cpp index 589211fa60b8..4b3382e4fc5d 100644 --- a/libs/androidfw/Asset.cpp +++ b/libs/androidfw/Asset.cpp @@ -45,6 +45,8 @@ using namespace android; # define O_BINARY 0 #endif +static const bool kIsDebug = false; + static Mutex gAssetLock; static int32_t gCount = 0; static Asset* gHead = NULL; @@ -89,7 +91,9 @@ Asset::Asset(void) gTail->mNext = this; gTail = this; } - //ALOGI("Creating Asset %p #%d\n", this, gCount); + if (kIsDebug) { + ALOGI("Creating Asset %p #%d\n", this, gCount); + } } Asset::~Asset(void) @@ -109,7 +113,9 @@ Asset::~Asset(void) mPrev->mNext = mNext; } mNext = mPrev = NULL; - //ALOGI("Destroying Asset in %p #%d\n", this, gCount); + if (kIsDebug) { + ALOGI("Destroying Asset in %p #%d\n", this, gCount); + } } /* diff --git a/libs/androidfw/AssetManager.cpp b/libs/androidfw/AssetManager.cpp index a1f78589b804..6188edbb2c8f 100644 --- a/libs/androidfw/AssetManager.cpp +++ b/libs/androidfw/AssetManager.cpp @@ -64,6 +64,8 @@ using namespace android; +static const bool kIsDebug = false; + /* * Names for default app, locale, and vendor. We might want to change * these to be an actual locale, e.g. always use en-US as the default. @@ -152,15 +154,19 @@ AssetManager::AssetManager(CacheMode cacheMode) mResources(NULL), mConfig(new ResTable_config), mCacheMode(cacheMode), mCacheValid(false) { - int count = android_atomic_inc(&gCount)+1; - //ALOGI("Creating AssetManager %p #%d\n", this, count); + int count = android_atomic_inc(&gCount) + 1; + if (kIsDebug) { + ALOGI("Creating AssetManager %p #%d\n", this, count); + } memset(mConfig, 0, sizeof(ResTable_config)); } AssetManager::~AssetManager(void) { int count = android_atomic_dec(&gCount); - //ALOGI("Destroying AssetManager in %p #%d\n", this, count); + if (kIsDebug) { + ALOGI("Destroying AssetManager in %p #%d\n", this, count); + } delete mConfig; delete mResources; @@ -1868,7 +1874,9 @@ AssetManager::SharedZip::SharedZip(const String8& path, time_t modWhen) : mPath(path), mZipFile(NULL), mModWhen(modWhen), mResourceTableAsset(NULL), mResourceTable(NULL) { - //ALOGI("Creating SharedZip %p %s\n", this, (const char*)mPath); + if (kIsDebug) { + ALOGI("Creating SharedZip %p %s\n", this, (const char*)mPath); + } ALOGV("+++ opening zip '%s'\n", mPath.string()); mZipFile = ZipFileRO::open(mPath.string()); if (mZipFile == NULL) { @@ -1962,7 +1970,9 @@ bool AssetManager::SharedZip::getOverlay(size_t idx, asset_path* out) const AssetManager::SharedZip::~SharedZip() { - //ALOGI("Destroying SharedZip %p %s\n", this, (const char*)mPath); + if (kIsDebug) { + ALOGI("Destroying SharedZip %p %s\n", this, (const char*)mPath); + } if (mResourceTable != NULL) { delete mResourceTable; } diff --git a/libs/androidfw/BackupData.cpp b/libs/androidfw/BackupData.cpp index d16d54983973..ba4a4ff4fe63 100644 --- a/libs/androidfw/BackupData.cpp +++ b/libs/androidfw/BackupData.cpp @@ -27,7 +27,7 @@ namespace android { -static const bool DEBUG = false; +static const bool kIsDebug = false; /* * File Format (v1): @@ -45,12 +45,6 @@ static const bool DEBUG = false; const static int ROUND_UP[4] = { 0, 3, 2, 1 }; static inline size_t -round_up(size_t n) -{ - return n + ROUND_UP[n % 4]; -} - -static inline size_t padding_extra(size_t n) { return ROUND_UP[n % 4]; @@ -62,7 +56,7 @@ BackupDataWriter::BackupDataWriter(int fd) m_entityCount(0) { m_pos = (ssize_t) lseek(fd, 0, SEEK_CUR); - if (DEBUG) ALOGI("BackupDataWriter(%d) @ %ld", fd, (long)m_pos); + if (kIsDebug) ALOGI("BackupDataWriter(%d) @ %ld", fd, (long)m_pos); } BackupDataWriter::~BackupDataWriter() @@ -79,7 +73,7 @@ BackupDataWriter::write_padding_for(int n) paddingSize = padding_extra(n); if (paddingSize > 0) { uint32_t padding = 0xbcbcbcbc; - if (DEBUG) ALOGI("writing %zd padding bytes for %d", paddingSize, n); + if (kIsDebug) ALOGI("writing %zd padding bytes for %d", paddingSize, n); amt = write(m_fd, &padding, paddingSize); if (amt != paddingSize) { m_status = errno; @@ -112,7 +106,7 @@ BackupDataWriter::WriteEntityHeader(const String8& key, size_t dataSize) } else { k = key; } - if (DEBUG) { + if (kIsDebug) { ALOGD("Writing header: prefix='%s' key='%s' dataSize=%zu", m_keyPrefix.string(), key.string(), dataSize); } @@ -126,7 +120,7 @@ BackupDataWriter::WriteEntityHeader(const String8& key, size_t dataSize) header.keyLen = tolel(keyLen); header.dataSize = tolel(dataSize); - if (DEBUG) ALOGI("writing entity header, %zu bytes", sizeof(entity_header_v1)); + if (kIsDebug) ALOGI("writing entity header, %zu bytes", sizeof(entity_header_v1)); amt = write(m_fd, &header, sizeof(entity_header_v1)); if (amt != sizeof(entity_header_v1)) { m_status = errno; @@ -134,7 +128,7 @@ BackupDataWriter::WriteEntityHeader(const String8& key, size_t dataSize) } m_pos += amt; - if (DEBUG) ALOGI("writing entity header key, %zd bytes", keyLen+1); + if (kIsDebug) ALOGI("writing entity header key, %zd bytes", keyLen+1); amt = write(m_fd, k.string(), keyLen+1); if (amt != keyLen+1) { m_status = errno; @@ -152,10 +146,10 @@ BackupDataWriter::WriteEntityHeader(const String8& key, size_t dataSize) status_t BackupDataWriter::WriteEntityData(const void* data, size_t size) { - if (DEBUG) ALOGD("Writing data: size=%lu", (unsigned long) size); + if (kIsDebug) ALOGD("Writing data: size=%lu", (unsigned long) size); if (m_status != NO_ERROR) { - if (DEBUG) { + if (kIsDebug) { ALOGD("Not writing data - stream in error state %d (%s)", m_status, strerror(m_status)); } return m_status; @@ -167,7 +161,7 @@ BackupDataWriter::WriteEntityData(const void* data, size_t size) ssize_t amt = write(m_fd, data, size); if (amt != (ssize_t)size) { m_status = errno; - if (DEBUG) ALOGD("write returned error %d (%s)", m_status, strerror(m_status)); + if (kIsDebug) ALOGD("write returned error %d (%s)", m_status, strerror(m_status)); return m_status; } m_pos += amt; @@ -189,7 +183,7 @@ BackupDataReader::BackupDataReader(int fd) { memset(&m_header, 0, sizeof(m_header)); m_pos = (ssize_t) lseek(fd, 0, SEEK_CUR); - if (DEBUG) ALOGI("BackupDataReader(%d) @ %ld", fd, (long)m_pos); + if (kIsDebug) ALOGI("BackupDataReader(%d) @ %ld", fd, (long)m_pos); } BackupDataReader::~BackupDataReader() @@ -342,15 +336,19 @@ BackupDataReader::ReadEntityData(void* data, size_t size) return -1; } int remaining = m_dataEndPos - m_pos; - //ALOGD("ReadEntityData size=%d m_pos=0x%x m_dataEndPos=0x%x remaining=%d\n", - // size, m_pos, m_dataEndPos, remaining); + if (kIsDebug) { + ALOGD("ReadEntityData size=%zu m_pos=0x%zx m_dataEndPos=0x%zx remaining=%d\n", + size, m_pos, m_dataEndPos, remaining); + } if (remaining <= 0) { return 0; } if (((int)size) > remaining) { size = remaining; } - //ALOGD(" reading %d bytes", size); + if (kIsDebug) { + ALOGD(" reading %zu bytes", size); + } int amt = read(m_fd, data, size); if (amt < 0) { m_status = errno; diff --git a/libs/androidfw/BackupHelpers.cpp b/libs/androidfw/BackupHelpers.cpp index 52dce9f7f5c5..3f82830c4fa1 100644 --- a/libs/androidfw/BackupHelpers.cpp +++ b/libs/androidfw/BackupHelpers.cpp @@ -68,14 +68,11 @@ struct file_metadata_v1 { const static int CURRENT_METADATA_VERSION = 1; -#if 1 -#define LOGP(f, x...) -#else +static const bool kIsDebug = false; #if TEST_BACKUP_HELPERS -#define LOGP(f, x...) printf(f "\n", x) +#define LOGP(f, x...) if (kIsDebug) printf(f "\n", x) #else -#define LOGP(x...) ALOGD(x) -#endif +#define LOGP(x...) if (kIsDebug) ALOGD(x) #endif const static int ROUND_UP[4] = { 0, 3, 2, 1 }; @@ -205,13 +202,6 @@ write_snapshot_file(int fd, const KeyedVector<String8,FileRec>& snapshot) } static int -write_delete_file(BackupDataWriter* dataStream, const String8& key) -{ - LOGP("write_delete_file %s\n", key.string()); - return dataStream->WriteEntityHeader(key, -1); -} - -static int write_update_file(BackupDataWriter* dataStream, int fd, int mode, const String8& key, char const* realFilename) { @@ -225,8 +215,6 @@ write_update_file(BackupDataWriter* dataStream, int fd, int mode, const String8& file_metadata_v1 metadata; char* buf = (char*)malloc(bufsize); - int crc = crc32(0L, Z_NULL, 0); - fileSize = lseek(fd, 0, SEEK_END); lseek(fd, 0, SEEK_SET); @@ -442,18 +430,6 @@ back_up_files(int oldSnapshotFD, BackupDataWriter* dataStream, int newSnapshotFD return 0; } -// Utility function, equivalent to stpcpy(): perform a strcpy, but instead of -// returning the initial dest, return a pointer to the trailing NUL. -static char* strcpy_ptr(char* dest, const char* str) { - if (dest && str) { - while ((*dest = *str) != 0) { - dest++; - str++; - } - } - return dest; -} - static void calc_tar_checksum(char* buf) { // [ 148 : 8 ] checksum -- to be calculated with this field as space chars memset(buf + 148, ' ', 8); @@ -579,7 +555,7 @@ int write_tarfile(const String8& packageName, const String8& domain, snprintf(buf + 124, 12, "%011llo", (isdir) ? 0LL : s.st_size); // [ 136 : 12 ] last mod time as a UTC time_t - snprintf(buf + 136, 12, "%0lo", s.st_mtime); + snprintf(buf + 136, 12, "%0lo", (unsigned long)s.st_mtime); // [ 156 : 1 ] link/file type uint8_t type; @@ -635,7 +611,6 @@ int write_tarfile(const String8& packageName, const String8& domain, // construct the pax extended header data block memset(paxData, 0, BUFSIZE - (paxData - buf)); - int len; // size header -- calc len in digits by actually rendering the number // to a string - brute force but simple @@ -1200,7 +1175,6 @@ test_read_header_and_entity(BackupDataReader& reader, const char* str) size_t bufSize = strlen(str)+1; char* buf = (char*)malloc(bufSize); String8 string; - int cookie = 0x11111111; size_t actualSize; bool done; int type; @@ -1333,23 +1307,12 @@ get_mod_time(const char* filename, struct timeval times[2]) fprintf(stderr, "stat '%s' failed: %s\n", filename, strerror(errno)); return errno; } - times[0].tv_sec = st.st_atime; - times[1].tv_sec = st.st_mtime; - // If st_atime is a macro then struct stat64 uses struct timespec - // to store the access and modif time values and typically - // st_*time_nsec is not defined. In glibc, this is controlled by - // __USE_MISC. -#ifdef __USE_MISC -#if !defined(st_atime) || defined(st_atime_nsec) -#error "Check if this __USE_MISC conditional is still needed." -#endif + times[0].tv_sec = st.st_atim.tv_sec; times[0].tv_usec = st.st_atim.tv_nsec / 1000; + + times[1].tv_sec = st.st_mtim.tv_sec; times[1].tv_usec = st.st_mtim.tv_nsec / 1000; -#else - times[0].tv_usec = st.st_atime_nsec / 1000; - times[1].tv_usec = st.st_mtime_nsec / 1000; -#endif return 0; } @@ -1490,7 +1453,6 @@ int backup_helper_test_null_base() { int err; - int oldSnapshotFD; int dataStreamFD; int newSnapshotFD; @@ -1539,7 +1501,6 @@ int backup_helper_test_missing_file() { int err; - int oldSnapshotFD; int dataStreamFD; int newSnapshotFD; diff --git a/libs/androidfw/ObbFile.cpp b/libs/androidfw/ObbFile.cpp index ec59f0666c02..195fa9ac00d3 100644 --- a/libs/androidfw/ObbFile.cpp +++ b/libs/androidfw/ObbFile.cpp @@ -122,7 +122,7 @@ bool ObbFile::parseObbFile(int fd) if (fileLength < 0) { ALOGW("error seeking in ObbFile: %s\n", strerror(errno)); } else { - ALOGW("file is only %lld (less than %d minimum)\n", fileLength, kFooterMinSize); + ALOGW("file is only %lld (less than %d minimum)\n", (long long int)fileLength, kFooterMinSize); } return false; } @@ -150,8 +150,8 @@ bool ObbFile::parseObbFile(int fd) footerSize = get4LE((unsigned char*)footer); if (footerSize > (size_t)fileLength - kFooterTagSize || footerSize > kMaxBufSize) { - ALOGW("claimed footer size is too large (0x%08zx; file size is 0x%08llx)\n", - footerSize, fileLength); + ALOGW("claimed footer size is too large (0x%08zx; file size is 0x%08lld)\n", + footerSize, (long long int)fileLength); return false; } @@ -164,7 +164,7 @@ bool ObbFile::parseObbFile(int fd) off64_t fileOffset = fileLength - footerSize - kFooterTagSize; if (lseek64(fd, fileOffset, SEEK_SET) != fileOffset) { - ALOGW("seek %lld failed: %s\n", fileOffset, strerror(errno)); + ALOGW("seek %lld failed: %s\n", (long long int)fileOffset, strerror(errno)); return false; } diff --git a/libs/androidfw/ResourceTypes.cpp b/libs/androidfw/ResourceTypes.cpp index ebdd1676502f..d66c4a5ca06e 100644 --- a/libs/androidfw/ResourceTypes.cpp +++ b/libs/androidfw/ResourceTypes.cpp @@ -27,6 +27,10 @@ #include <utils/String16.h> #include <utils/String8.h> +#ifdef HAVE_ANDROID_OS +#include <binder/TextOutput.h> +#endif + #include <stdlib.h> #include <string.h> #include <memory.h> @@ -38,32 +42,15 @@ #define INT32_MAX ((int32_t)(2147483647)) #endif -#define STRING_POOL_NOISY(x) //x -#define XML_NOISY(x) //x -#define TABLE_NOISY(x) //x -#define TABLE_GETENTRY(x) //x -#define TABLE_SUPER_NOISY(x) //x -#define LOAD_TABLE_NOISY(x) //x -#define TABLE_THEME(x) //x -#define LIB_NOISY(x) //x - namespace android { #ifdef HAVE_WINSOCK #undef nhtol #undef htonl - -#ifdef HAVE_LITTLE_ENDIAN #define ntohl(x) ( ((x) << 24) | (((x) >> 24) & 255) | (((x) << 8) & 0xff0000) | (((x) >> 8) & 0xff00) ) #define htonl(x) ntohl(x) #define ntohs(x) ( (((x) << 8) & 0xff00) | (((x) >> 8) & 255) ) #define htons(x) ntohs(x) -#else -#define ntohl(x) (x) -#define htonl(x) (x) -#define ntohs(x) (x) -#define htons(x) (x) -#endif #endif #define IDMAP_MAGIC 0x504D4449 @@ -72,6 +59,19 @@ namespace android { #define APP_PACKAGE_ID 0x7f #define SYS_PACKAGE_ID 0x01 +static const bool kDebugStringPoolNoisy = false; +static const bool kDebugXMLNoisy = false; +static const bool kDebugTableNoisy = false; +static const bool kDebugTableGetEntry = false; +static const bool kDebugTableSuperNoisy = false; +static const bool kDebugLoadTableNoisy = false; +static const bool kDebugLoadTableSuperNoisy = false; +static const bool kDebugTableTheme = false; +static const bool kDebugResXMLTree = false; +static const bool kDebugLibNoisy = false; + +// TODO: This code uses 0xFFFFFFFF converted to bag_set* as a sentinel value. This is bad practice. + // Standard C isspace() is only required to look at the low byte of its input, so // produces incorrect results for UTF-16 characters. For safety's sake, assume that // any high-byte UTF-16 code point is not whitespace. @@ -719,12 +719,14 @@ const char16_t* ResStringPool::stringAt(size_t idx, size_t* u16len) const if (mCache == NULL) { #ifndef HAVE_ANDROID_OS - STRING_POOL_NOISY(ALOGI("CREATING STRING CACHE OF %d bytes", - mHeader->stringCount*sizeof(char16_t**))); + if (kDebugStringPoolNoisy) { + ALOGI("CREATING STRING CACHE OF %zu bytes", + mHeader->stringCount*sizeof(char16_t**)); + } #else // We do not want to be in this case when actually running Android. - ALOGW("CREATING STRING CACHE OF %d bytes", - mHeader->stringCount*sizeof(char16_t**)); + ALOGW("CREATING STRING CACHE OF %zu bytes", + static_cast<size_t>(mHeader->stringCount*sizeof(char16_t**))); #endif mCache = (char16_t**)calloc(mHeader->stringCount, sizeof(char16_t**)); if (mCache == NULL) { @@ -753,7 +755,9 @@ const char16_t* ResStringPool::stringAt(size_t idx, size_t* u16len) const return NULL; } - STRING_POOL_NOISY(ALOGI("Caching UTF8 string: %s", u8str)); + if (kDebugStringPoolNoisy) { + ALOGI("Caching UTF8 string: %s", u8str); + } utf8_to_utf16(u8str, u8len, u16str); mCache[idx] = u16str; return u16str; @@ -843,7 +847,9 @@ ssize_t ResStringPool::indexOfString(const char16_t* str, size_t strLen) const size_t len; if ((mHeader->flags&ResStringPool_header::UTF8_FLAG) != 0) { - STRING_POOL_NOISY(ALOGI("indexOfString UTF-8: %s", String8(str, strLen).string())); + if (kDebugStringPoolNoisy) { + ALOGI("indexOfString UTF-8: %s", String8(str, strLen).string()); + } // The string pool contains UTF 8 strings; we don't want to cause // temporary UTF-16 strings to be created as we search. @@ -869,10 +875,14 @@ ssize_t ResStringPool::indexOfString(const char16_t* str, size_t strLen) const } else { c = -1; } - STRING_POOL_NOISY(ALOGI("Looking at %s, cmp=%d, l/mid/h=%d/%d/%d\n", - (const char*)s, c, (int)l, (int)mid, (int)h)); + if (kDebugStringPoolNoisy) { + ALOGI("Looking at %s, cmp=%d, l/mid/h=%d/%d/%d\n", + (const char*)s, c, (int)l, (int)mid, (int)h); + } if (c == 0) { - STRING_POOL_NOISY(ALOGI("MATCH!")); + if (kDebugStringPoolNoisy) { + ALOGI("MATCH!"); + } free(convBuffer); return mid; } else if (c < 0) { @@ -891,18 +901,22 @@ ssize_t ResStringPool::indexOfString(const char16_t* str, size_t strLen) const const size_t str8Len = str8.size(); for (int i=mHeader->stringCount-1; i>=0; i--) { const char* s = string8At(i, &len); - STRING_POOL_NOISY(ALOGI("Looking at %s, i=%d\n", - String8(s).string(), - i)); + if (kDebugStringPoolNoisy) { + ALOGI("Looking at %s, i=%d\n", String8(s).string(), i); + } if (s && str8Len == len && memcmp(s, str8.string(), str8Len) == 0) { - STRING_POOL_NOISY(ALOGI("MATCH!")); + if (kDebugStringPoolNoisy) { + ALOGI("MATCH!"); + } return i; } } } } else { - STRING_POOL_NOISY(ALOGI("indexOfString UTF-16: %s", String8(str, strLen).string())); + if (kDebugStringPoolNoisy) { + ALOGI("indexOfString UTF-16: %s", String8(str, strLen).string()); + } if (mHeader->flags&ResStringPool_header::SORTED_FLAG) { // Do a binary search for the string... @@ -914,11 +928,14 @@ ssize_t ResStringPool::indexOfString(const char16_t* str, size_t strLen) const mid = l + (h - l)/2; const char16_t* s = stringAt(mid, &len); int c = s ? strzcmp16(s, len, str, strLen) : -1; - STRING_POOL_NOISY(ALOGI("Looking at %s, cmp=%d, l/mid/h=%d/%d/%d\n", - String8(s).string(), - c, (int)l, (int)mid, (int)h)); + if (kDebugStringPoolNoisy) { + ALOGI("Looking at %s, cmp=%d, l/mid/h=%d/%d/%d\n", + String8(s).string(), c, (int)l, (int)mid, (int)h); + } if (c == 0) { - STRING_POOL_NOISY(ALOGI("MATCH!")); + if (kDebugStringPoolNoisy) { + ALOGI("MATCH!"); + } return mid; } else if (c < 0) { l = mid + 1; @@ -933,11 +950,13 @@ ssize_t ResStringPool::indexOfString(const char16_t* str, size_t strLen) const // block, start searching at the back. for (int i=mHeader->stringCount-1; i>=0; i--) { const char16_t* s = stringAt(i, &len); - STRING_POOL_NOISY(ALOGI("Looking at %s, i=%d\n", - String8(s).string(), - i)); + if (kDebugStringPoolNoisy) { + ALOGI("Looking at %s, i=%d\n", String8(s).string(), i); + } if (s && strLen == len && strzcmp16(s, len, str, strLen) == 0) { - STRING_POOL_NOISY(ALOGI("MATCH!")); + if (kDebugStringPoolNoisy) { + ALOGI("MATCH!"); + } return i; } } @@ -1138,7 +1157,9 @@ const char16_t* ResXMLParser::getAttributeNamespace(size_t idx, size_t* outLen) { int32_t id = getAttributeNamespaceID(idx); //printf("attribute namespace=%d idx=%d event=%p\n", id, idx, mEventCode); - //XML_NOISY(printf("getAttributeNamespace 0x%x=0x%x\n", idx, id)); + if (kDebugXMLNoisy) { + printf("getAttributeNamespace 0x%zx=0x%x\n", idx, id); + } return id >= 0 ? mTree.mStrings.stringAt(id, outLen) : NULL; } @@ -1146,7 +1167,9 @@ const char* ResXMLParser::getAttributeNamespace8(size_t idx, size_t* outLen) con { int32_t id = getAttributeNamespaceID(idx); //printf("attribute namespace=%d idx=%d event=%p\n", id, idx, mEventCode); - //XML_NOISY(printf("getAttributeNamespace 0x%x=0x%x\n", idx, id)); + if (kDebugXMLNoisy) { + printf("getAttributeNamespace 0x%zx=0x%x\n", idx, id); + } return id >= 0 ? mTree.mStrings.string8At(id, outLen) : NULL; } @@ -1169,7 +1192,9 @@ const char16_t* ResXMLParser::getAttributeName(size_t idx, size_t* outLen) const { int32_t id = getAttributeNameID(idx); //printf("attribute name=%d idx=%d event=%p\n", id, idx, mEventCode); - //XML_NOISY(printf("getAttributeName 0x%x=0x%x\n", idx, id)); + if (kDebugXMLNoisy) { + printf("getAttributeName 0x%zx=0x%x\n", idx, id); + } return id >= 0 ? mTree.mStrings.stringAt(id, outLen) : NULL; } @@ -1177,7 +1202,9 @@ const char* ResXMLParser::getAttributeName8(size_t idx, size_t* outLen) const { int32_t id = getAttributeNameID(idx); //printf("attribute name=%d idx=%d event=%p\n", id, idx, mEventCode); - //XML_NOISY(printf("getAttributeName 0x%x=0x%x\n", idx, id)); + if (kDebugXMLNoisy) { + printf("getAttributeName 0x%zx=0x%x\n", idx, id); + } return id >= 0 ? mTree.mStrings.string8At(id, outLen) : NULL; } @@ -1208,7 +1235,9 @@ int32_t ResXMLParser::getAttributeValueStringID(size_t idx) const const char16_t* ResXMLParser::getAttributeStringValue(size_t idx, size_t* outLen) const { int32_t id = getAttributeValueStringID(idx); - //XML_NOISY(printf("getAttributeValue 0x%x=0x%x\n", idx, id)); + if (kDebugXMLNoisy) { + printf("getAttributeValue 0x%zx=0x%x\n", idx, id); + } return id >= 0 ? mTree.mStrings.stringAt(id, outLen) : NULL; } @@ -1299,54 +1328,69 @@ ssize_t ResXMLParser::indexOfAttribute(const char16_t* ns, size_t nsLen, ns8 = String8(ns, nsLen); } attr8 = String8(attr, attrLen); - STRING_POOL_NOISY(ALOGI("indexOfAttribute UTF8 %s (%d) / %s (%d)", ns8.string(), nsLen, - attr8.string(), attrLen)); + if (kDebugStringPoolNoisy) { + ALOGI("indexOfAttribute UTF8 %s (%zu) / %s (%zu)", ns8.string(), nsLen, + attr8.string(), attrLen); + } for (size_t i=0; i<N; i++) { size_t curNsLen = 0, curAttrLen = 0; const char* curNs = getAttributeNamespace8(i, &curNsLen); const char* curAttr = getAttributeName8(i, &curAttrLen); - STRING_POOL_NOISY(ALOGI(" curNs=%s (%d), curAttr=%s (%d)", curNs, curNsLen, - curAttr, curAttrLen)); + if (kDebugStringPoolNoisy) { + ALOGI(" curNs=%s (%zu), curAttr=%s (%zu)", curNs, curNsLen, curAttr, curAttrLen); + } if (curAttr != NULL && curNsLen == nsLen && curAttrLen == attrLen && memcmp(attr8.string(), curAttr, attrLen) == 0) { if (ns == NULL) { if (curNs == NULL) { - STRING_POOL_NOISY(ALOGI(" FOUND!")); + if (kDebugStringPoolNoisy) { + ALOGI(" FOUND!"); + } return i; } } else if (curNs != NULL) { //printf(" --> ns=%s, curNs=%s\n", // String8(ns).string(), String8(curNs).string()); if (memcmp(ns8.string(), curNs, nsLen) == 0) { - STRING_POOL_NOISY(ALOGI(" FOUND!")); + if (kDebugStringPoolNoisy) { + ALOGI(" FOUND!"); + } return i; } } } } } else { - STRING_POOL_NOISY(ALOGI("indexOfAttribute UTF16 %s (%d) / %s (%d)", - String8(ns, nsLen).string(), nsLen, - String8(attr, attrLen).string(), attrLen)); + if (kDebugStringPoolNoisy) { + ALOGI("indexOfAttribute UTF16 %s (%zu) / %s (%zu)", + String8(ns, nsLen).string(), nsLen, + String8(attr, attrLen).string(), attrLen); + } for (size_t i=0; i<N; i++) { size_t curNsLen = 0, curAttrLen = 0; const char16_t* curNs = getAttributeNamespace(i, &curNsLen); const char16_t* curAttr = getAttributeName(i, &curAttrLen); - STRING_POOL_NOISY(ALOGI(" curNs=%s (%d), curAttr=%s (%d)", - String8(curNs, curNsLen).string(), curNsLen, - String8(curAttr, curAttrLen).string(), curAttrLen)); + if (kDebugStringPoolNoisy) { + ALOGI(" curNs=%s (%zu), curAttr=%s (%zu)", + String8(curNs, curNsLen).string(), curNsLen, + String8(curAttr, curAttrLen).string(), curAttrLen); + } if (curAttr != NULL && curNsLen == nsLen && curAttrLen == attrLen && (memcmp(attr, curAttr, attrLen*sizeof(char16_t)) == 0)) { if (ns == NULL) { if (curNs == NULL) { - STRING_POOL_NOISY(ALOGI(" FOUND!")); + if (kDebugStringPoolNoisy) { + ALOGI(" FOUND!"); + } return i; } } else if (curNs != NULL) { //printf(" --> ns=%s, curNs=%s\n", // String8(ns).string(), String8(curNs).string()); if (memcmp(ns, curNs, nsLen*sizeof(char16_t)) == 0) { - STRING_POOL_NOISY(ALOGI(" FOUND!")); + if (kDebugStringPoolNoisy) { + ALOGI(" FOUND!"); + } return i; } } @@ -1394,7 +1438,9 @@ ResXMLParser::event_code_t ResXMLParser::nextNode() do { const ResXMLTree_node* next = (const ResXMLTree_node*) (((const uint8_t*)mCurNode) + dtohl(mCurNode->header.size)); - //ALOGW("Next node: prev=%p, next=%p\n", mCurNode, next); + if (kDebugXMLNoisy) { + ALOGI("Next node: prev=%p, next=%p\n", mCurNode, next); + } if (((const uint8_t*)next) >= mTree.mDataEnd) { mCurNode = NULL; @@ -1471,7 +1517,9 @@ ResXMLTree::ResXMLTree(const DynamicRefTable* dynamicRefTable) , mDynamicRefTable(dynamicRefTable) , mError(NO_INIT), mOwnedData(NULL) { - //ALOGI("Creating ResXMLTree %p #%d\n", this, android_atomic_inc(&gCount)+1); + if (kDebugResXMLTree) { + ALOGI("Creating ResXMLTree %p #%d\n", this, android_atomic_inc(&gCount)+1); + } restart(); } @@ -1480,13 +1528,17 @@ ResXMLTree::ResXMLTree() , mDynamicRefTable(NULL) , mError(NO_INIT), mOwnedData(NULL) { - //ALOGI("Creating ResXMLTree %p #%d\n", this, android_atomic_inc(&gCount)+1); + if (kDebugResXMLTree) { + ALOGI("Creating ResXMLTree %p #%d\n", this, android_atomic_inc(&gCount)+1); + } restart(); } ResXMLTree::~ResXMLTree() { - //ALOGI("Destroying ResXMLTree in %p #%d\n", this, android_atomic_dec(&gCount)-1); + if (kDebugResXMLTree) { + ALOGI("Destroying ResXMLTree in %p #%d\n", this, android_atomic_dec(&gCount)-1); + } uninit(); } @@ -1539,8 +1591,10 @@ status_t ResXMLTree::setTo(const void* data, size_t size, bool copyData) } const uint16_t type = dtohs(chunk->type); const size_t size = dtohl(chunk->size); - XML_NOISY(printf("Scanning @ %p: type=0x%x, size=0x%x\n", - (void*)(((uint32_t)chunk)-((uint32_t)mHeader)), type, size)); + if (kDebugXMLNoisy) { + printf("Scanning @ %p: type=0x%x, size=0x%zx\n", + (void*)(((uintptr_t)chunk)-((uintptr_t)mHeader)), type, size); + } if (type == RES_STRING_POOL_TYPE) { mStrings.setTo(chunk, size); } else if (type == RES_XML_RESOURCE_MAP_TYPE) { @@ -1563,7 +1617,9 @@ status_t ResXMLTree::setTo(const void* data, size_t size, bool copyData) mRootCode = mEventCode; break; } else { - XML_NOISY(printf("Skipping unknown chunk!\n")); + if (kDebugXMLNoisy) { + printf("Skipping unknown chunk!\n"); + } } lastChunk = chunk; chunk = (const ResChunk_header*) @@ -2147,9 +2203,11 @@ bool ResTable_config::isBetterThan(const ResTable_config& o, myDelta += requested->screenHeightDp - screenHeightDp; otherDelta += requested->screenHeightDp - o.screenHeightDp; } - //ALOGI("Comparing this %dx%d to other %dx%d in %dx%d: myDelta=%d otherDelta=%d", - // screenWidthDp, screenHeightDp, o.screenWidthDp, o.screenHeightDp, - // requested->screenWidthDp, requested->screenHeightDp, myDelta, otherDelta); + if (kDebugTableSuperNoisy) { + ALOGI("Comparing this %dx%d to other %dx%d in %dx%d: myDelta=%d otherDelta=%d", + screenWidthDp, screenHeightDp, o.screenWidthDp, o.screenHeightDp, + requested->screenWidthDp, requested->screenHeightDp, myDelta, otherDelta); + } if (myDelta != otherDelta) { return myDelta < otherDelta; } @@ -2404,11 +2462,17 @@ bool ResTable_config::match(const ResTable_config& settings) const { } if (screenSizeDp != 0) { if (screenWidthDp != 0 && screenWidthDp > settings.screenWidthDp) { - //ALOGI("Filtering out width %d in requested %d", screenWidthDp, settings.screenWidthDp); + if (kDebugTableSuperNoisy) { + ALOGI("Filtering out width %d in requested %d", screenWidthDp, + settings.screenWidthDp); + } return false; } if (screenHeightDp != 0 && screenHeightDp > settings.screenHeightDp) { - //ALOGI("Filtering out height %d in requested %d", screenHeightDp, settings.screenHeightDp); + if (kDebugTableSuperNoisy) { + ALOGI("Filtering out height %d in requested %d", screenHeightDp, + settings.screenHeightDp); + } return false; } } @@ -2428,9 +2492,13 @@ bool ResTable_config::match(const ResTable_config& settings) const { // For compatibility, we count a request for KEYSHIDDEN_NO as also // matching the more recent KEYSHIDDEN_SOFT. Basically // KEYSHIDDEN_NO means there is some kind of keyboard available. - //ALOGI("Matching keysHidden: have=%d, config=%d\n", keysHidden, setKeysHidden); + if (kDebugTableSuperNoisy) { + ALOGI("Matching keysHidden: have=%d, config=%d\n", keysHidden, setKeysHidden); + } if (keysHidden != KEYSHIDDEN_NO || setKeysHidden != KEYSHIDDEN_SOFT) { - //ALOGI("No match!"); + if (kDebugTableSuperNoisy) { + ALOGI("No match!"); + } return false; } } @@ -2935,17 +3003,25 @@ struct ResTable::PackageGroup void clearBagCache() { if (bags) { - TABLE_NOISY(printf("bags=%p\n", bags)); + if (kDebugTableNoisy) { + printf("bags=%p\n", bags); + } for (size_t i = 0; i < bags->size(); i++) { - TABLE_NOISY(printf("type=%d\n", i)); + if (kDebugTableNoisy) { + printf("type=%zu\n", i); + } const TypeList& typeList = types[i]; if (!typeList.isEmpty()) { bag_set** typeBags = bags->get(i); - TABLE_NOISY(printf("typeBags=%p\n", typeBags)); + if (kDebugTableNoisy) { + printf("typeBags=%p\n", typeBags); + } if (typeBags) { const size_t N = typeList[0]->entryCount; - TABLE_NOISY(printf("type->entryCount=%x\n", N)); - for (size_t j=0; j<N; j++) { + if (kDebugTableNoisy) { + printf("type->entryCount=%zu\n", N); + } + for (size_t j = 0; j < N; j++) { if (typeBags[j] && typeBags[j] != (bag_set*)0xFFFFFFFF) free(typeBags[j]); } @@ -3053,7 +3129,9 @@ status_t ResTable::Theme::applyStyle(uint32_t resID, bool force) uint32_t bagTypeSpecFlags = 0; mTable.lock(); const ssize_t N = mTable.getBagLocked(resID, &bag, &bagTypeSpecFlags); - TABLE_NOISY(ALOGV("Applying style 0x%08x to theme %p, count=%d", resID, this, N)); + if (kDebugTableNoisy) { + ALOGV("Applying style 0x%08x to theme %p, count=%zu", resID, this, N); + } if (N < 0) { mTable.unlock(); return N; @@ -3084,7 +3162,6 @@ status_t ResTable::Theme::applyStyle(uint32_t resID, bool force) curPackageIndex = pidx; curPI = mPackages[pidx]; if (curPI == NULL) { - PackageGroup* const grp = mTable.mPackageGroups[pidx]; curPI = (package_info*)malloc(sizeof(package_info)); memset(curPI, 0, sizeof(*curPI)); mPackages[pidx] = curPI; @@ -3116,9 +3193,11 @@ status_t ResTable::Theme::applyStyle(uint32_t resID, bool force) continue; } theme_entry* curEntry = curEntries + e; - TABLE_NOISY(ALOGV("Attr 0x%08x: type=0x%x, data=0x%08x; curType=0x%x", - attrRes, bag->map.value.dataType, bag->map.value.data, - curEntry->value.dataType)); + if (kDebugTableNoisy) { + ALOGV("Attr 0x%08x: type=0x%x, data=0x%08x; curType=0x%x", + attrRes, bag->map.value.dataType, bag->map.value.data, + curEntry->value.dataType); + } if (force || curEntry->value.dataType == Res_value::TYPE_NULL) { curEntry->stringBlock = bag->stringBlock; curEntry->typeSpecFlags |= bagTypeSpecFlags; @@ -3130,17 +3209,21 @@ status_t ResTable::Theme::applyStyle(uint32_t resID, bool force) mTable.unlock(); - //ALOGI("Applying style 0x%08x (force=%d) theme %p...\n", resID, force, this); - //dumpToLog(); + if (kDebugTableTheme) { + ALOGI("Applying style 0x%08x (force=%d) theme %p...\n", resID, force, this); + dumpToLog(); + } return NO_ERROR; } status_t ResTable::Theme::setTo(const Theme& other) { - //ALOGI("Setting theme %p from theme %p...\n", this, &other); - //dumpToLog(); - //other.dumpToLog(); + if (kDebugTableTheme) { + ALOGI("Setting theme %p from theme %p...\n", this, &other); + dumpToLog(); + other.dumpToLog(); + } if (&mTable == &other.mTable) { for (size_t i=0; i<Res_MAXPACKAGE; i++) { @@ -3169,8 +3252,10 @@ status_t ResTable::Theme::setTo(const Theme& other) } } - //ALOGI("Final theme:"); - //dumpToLog(); + if (kDebugTableTheme) { + ALOGI("Final theme:"); + dumpToLog(); + } return NO_ERROR; } @@ -3187,23 +3272,33 @@ ssize_t ResTable::Theme::getAttribute(uint32_t resID, Res_value* outValue, const uint32_t t = Res_GETTYPE(resID); const uint32_t e = Res_GETENTRY(resID); - TABLE_THEME(ALOGI("Looking up attr 0x%08x in theme %p", resID, this)); + if (kDebugTableTheme) { + ALOGI("Looking up attr 0x%08x in theme %p", resID, this); + } if (p >= 0) { const package_info* const pi = mPackages[p]; - TABLE_THEME(ALOGI("Found package: %p", pi)); + if (kDebugTableTheme) { + ALOGI("Found package: %p", pi); + } if (pi != NULL) { - TABLE_THEME(ALOGI("Desired type index is %ld in avail %d", t, Res_MAXTYPE + 1)); + if (kDebugTableTheme) { + ALOGI("Desired type index is %zd in avail %zu", t, Res_MAXTYPE + 1); + } if (t <= Res_MAXTYPE) { const type_info& ti = pi->types[t]; - TABLE_THEME(ALOGI("Desired entry index is %ld in avail %d", e, ti.numEntries)); + if (kDebugTableTheme) { + ALOGI("Desired entry index is %u in avail %zu", e, ti.numEntries); + } if (e < ti.numEntries) { const theme_entry& te = ti.entries[e]; if (outTypeSpecFlags != NULL) { *outTypeSpecFlags |= te.typeSpecFlags; } - TABLE_THEME(ALOGI("Theme value: type=0x%x, data=0x%08x", - te.value.dataType, te.value.data)); + if (kDebugTableTheme) { + ALOGI("Theme value: type=0x%x, data=0x%08x", + te.value.dataType, te.value.data); + } const uint8_t type = te.value.dataType; if (type == Res_value::TYPE_ATTRIBUTE) { if (cnt > 0) { @@ -3237,8 +3332,10 @@ ssize_t ResTable::Theme::resolveAttributeReference(Res_value* inOutValue, if (inOutValue->dataType == Res_value::TYPE_ATTRIBUTE) { uint32_t newTypeSpecFlags; blockIndex = getAttribute(inOutValue->data, inOutValue, &newTypeSpecFlags); - TABLE_THEME(ALOGI("Resolving attr reference: blockIndex=%d, type=0x%x, data=%p\n", - (int)blockIndex, (int)inOutValue->dataType, (void*)inOutValue->data)); + if (kDebugTableTheme) { + ALOGI("Resolving attr reference: blockIndex=%d, type=0x%x, data=0x%x\n", + (int)blockIndex, (int)inOutValue->dataType, inOutValue->data); + } if (inoutTypeSpecFlags != NULL) *inoutTypeSpecFlags |= newTypeSpecFlags; //printf("Retrieved attribute new type=0x%x\n", inOutValue->dataType); if (blockIndex < 0) { @@ -3277,7 +3374,9 @@ ResTable::ResTable() { memset(&mParams, 0, sizeof(mParams)); memset(mPackageMap, 0, sizeof(mPackageMap)); - //ALOGI("Creating ResTable %p\n", this); + if (kDebugTableSuperNoisy) { + ALOGI("Creating ResTable %p\n", this); + } } ResTable::ResTable(const void* data, size_t size, const int32_t cookie, bool copyData) @@ -3287,12 +3386,16 @@ ResTable::ResTable(const void* data, size_t size, const int32_t cookie, bool cop memset(mPackageMap, 0, sizeof(mPackageMap)); addInternal(data, size, NULL, 0, cookie, copyData); LOG_FATAL_IF(mError != NO_ERROR, "Error parsing resource table"); - //ALOGI("Creating ResTable %p\n", this); + if (kDebugTableSuperNoisy) { + ALOGI("Creating ResTable %p\n", this); + } } ResTable::~ResTable() { - //ALOGI("Destroying ResTable in %p\n", this); + if (kDebugTableSuperNoisy) { + ALOGI("Destroying ResTable in %p\n", this); + } uninit(); } @@ -3421,9 +3524,10 @@ status_t ResTable::addInternal(const void* data, size_t dataSize, const void* id const bool notDeviceEndian = htods(0xf0) != 0xf0; - LOAD_TABLE_NOISY( - ALOGV("Adding resources to ResTable: data=%p, size=0x%x, cookie=%d, copy=%d " - "idmap=%p\n", data, dataSize, cookie, copyData, idmap)); + if (kDebugLoadTableNoisy) { + ALOGV("Adding resources to ResTable: data=%p, size=%zu, cookie=%d, copy=%d " + "idmap=%p\n", data, dataSize, cookie, copyData, idmapData); + } if (copyData || notDeviceEndian) { header->ownedData = malloc(dataSize); @@ -3436,9 +3540,13 @@ status_t ResTable::addInternal(const void* data, size_t dataSize, const void* id header->header = (const ResTable_header*)data; header->size = dtohl(header->header->header.size); - //ALOGI("Got size 0x%x, again size 0x%x, raw size 0x%x\n", header->size, - // dtohl(header->header->header.size), header->header->header.size); - LOAD_TABLE_NOISY(ALOGV("Loading ResTable @%p:\n", header->header)); + if (kDebugLoadTableSuperNoisy) { + ALOGI("Got size %zu, again size 0x%x, raw size 0x%x\n", header->size, + dtohl(header->header->header.size), header->header->header.size); + } + if (kDebugLoadTableNoisy) { + ALOGV("Loading ResTable @%p:\n", header->header); + } if (dtohs(header->header->header.headerSize) > header->size || header->size > dataSize) { ALOGW("Bad resource table: header size 0x%x or total size 0x%x is larger than data size 0x%x\n", @@ -3466,9 +3574,11 @@ status_t ResTable::addInternal(const void* data, size_t dataSize, const void* id if (err != NO_ERROR) { return (mError=err); } - TABLE_NOISY(ALOGV("Chunk: type=0x%x, headerSize=0x%x, size=0x%x, pos=%p\n", - dtohs(chunk->type), dtohs(chunk->headerSize), dtohl(chunk->size), - (void*)(((const uint8_t*)chunk) - ((const uint8_t*)header->header)))); + if (kDebugTableNoisy) { + ALOGV("Chunk: type=0x%x, headerSize=0x%x, size=0x%x, pos=%p\n", + dtohs(chunk->type), dtohs(chunk->headerSize), dtohl(chunk->size), + (void*)(((const uint8_t*)chunk) - ((const uint8_t*)header->header))); + } const size_t csize = dtohl(chunk->size); const uint16_t ctype = dtohs(chunk->type); if (ctype == RES_STRING_POOL_TYPE) { @@ -3512,7 +3622,9 @@ status_t ResTable::addInternal(const void* data, size_t dataSize, const void* id ALOGW("No string values found in resource table!"); } - TABLE_NOISY(ALOGV("Returning from add with mError=%d\n", mError)); + if (kDebugTableNoisy) { + ALOGV("Returning from add with mError=%d\n", mError); + } return mError; } @@ -3674,15 +3786,16 @@ ssize_t ResTable::getResource(uint32_t resID, Res_value* outValue, bool mayBeBag return BAD_VALUE; } - TABLE_NOISY(size_t len; - printf("Found value: pkg=%d, type=%d, str=%s, int=%d\n", - entry.package->header->index, - outValue->dataType, - outValue->dataType == Res_value::TYPE_STRING - ? String8(entry.package->header->values.stringAt( - outValue->data, &len)).string() - : "", - outValue->data)); + if (kDebugTableNoisy) { + size_t len; + printf("Found value: pkg=%zu, type=%d, str=%s, int=%d\n", + entry.package->header->index, + outValue->dataType, + outValue->dataType == Res_value::TYPE_STRING ? + String8(entry.package->header->values.stringAt(outValue->data, &len)).string() : + "", + outValue->data); + } if (outSpecFlags != NULL) { *outSpecFlags = entry.specFlags; @@ -3703,15 +3816,16 @@ ssize_t ResTable::resolveReference(Res_value* value, ssize_t blockIndex, while (blockIndex >= 0 && value->dataType == Res_value::TYPE_REFERENCE && value->data != 0 && count < 20) { if (outLastRef) *outLastRef = value->data; - uint32_t lastRef = value->data; uint32_t newFlags = 0; const ssize_t newIndex = getResource(value->data, value, true, 0, &newFlags, outConfig); if (newIndex == BAD_INDEX) { return BAD_INDEX; } - TABLE_THEME(ALOGI("Resolving reference %p: newIndex=%d, type=0x%x, data=%p\n", - (void*)lastRef, (int)newIndex, (int)value->dataType, (void*)value->data)); + if (kDebugTableTheme) { + ALOGI("Resolving reference 0x%x: newIndex=%d, type=0x%x, data=0x%x\n", + value->data, (int)newIndex, (int)value->dataType, value->data); + } //printf("Getting reference 0x%08x: newIndex=%d\n", value->data, newIndex); if (inoutTypeSpecFlags != NULL) *inoutTypeSpecFlags |= newFlags; if (newIndex < 0) { @@ -3818,7 +3932,9 @@ ssize_t ResTable::getBagLocked(uint32_t resID, const bag_entry** outBag, *outTypeSpecFlags = set->typeSpecFlags; } *outBag = (bag_entry*)(set+1); - //ALOGI("Found existing bag for: %p\n", (void*)resID); + if (kDebugTableSuperNoisy) { + ALOGI("Found existing bag for: 0x%x\n", resID); + } return set->numAttrs; } ALOGW("Attempt to retrieve bag 0x%08x which is invalid or in a cycle.", @@ -3844,7 +3960,9 @@ ssize_t ResTable::getBagLocked(uint32_t resID, const bag_entry** outBag, // Mark that we are currently working on this one. typeSet[e] = (bag_set*)0xFFFFFFFF; - TABLE_NOISY(ALOGI("Building bag: %p\n", (void*)resID)); + if (kDebugTableNoisy) { + ALOGI("Building bag: %x\n", resID); + } // Now collect all bag attributes Entry entry; @@ -3861,13 +3979,13 @@ ssize_t ResTable::getBagLocked(uint32_t resID, const bag_entry** outBag, size_t N = count; - TABLE_NOISY(ALOGI("Found map: size=%p parent=%p count=%d\n", - entrySize, parent, count)); + if (kDebugTableNoisy) { + ALOGI("Found map: size=%x parent=%x count=%d\n", entrySize, parent, count); // If this map inherits from another, we need to start // with its parent's values. Otherwise start out empty. - TABLE_NOISY(printf("Creating new bag, entrySize=0x%08x, parent=0x%08x\n", - entrySize, parent)); + ALOGI("Creating new bag, entrySize=0x%08x, parent=0x%08x\n", entrySize, parent); + } // This is what we are building. bag_set* set = NULL; @@ -3896,9 +4014,13 @@ ssize_t ResTable::getBagLocked(uint32_t resID, const bag_entry** outBag, if (NP > 0) { memcpy(set+1, parentBag, NP*sizeof(bag_entry)); set->numAttrs = NP; - TABLE_NOISY(ALOGI("Initialized new bag with %d inherited attributes.\n", NP)); + if (kDebugTableNoisy) { + ALOGI("Initialized new bag with %zd inherited attributes.\n", NP); + } } else { - TABLE_NOISY(ALOGI("Initialized new bag with no inherited attributes.\n")); + if (kDebugTableNoisy) { + ALOGI("Initialized new bag with no inherited attributes.\n"); + } set->numAttrs = 0; } set->availAttrs = NT; @@ -3922,10 +4044,13 @@ ssize_t ResTable::getBagLocked(uint32_t resID, const bag_entry** outBag, bag_entry* entries = (bag_entry*)(set+1); size_t curEntry = 0; uint32_t pos = 0; - TABLE_NOISY(ALOGI("Starting with set %p, entries=%p, avail=%d\n", - set, entries, set->availAttrs)); + if (kDebugTableNoisy) { + ALOGI("Starting with set %p, entries=%p, avail=%zu\n", set, entries, set->availAttrs); + } while (pos < count) { - TABLE_NOISY(printf("Now at %p\n", (void*)curOff)); + if (kDebugTableNoisy) { + ALOGI("Now at %p\n", (void*)curOff); + } if (curOff > (dtohl(entry.type->header.size)-sizeof(ResTable_map))) { ALOGW("ResTable_map at %d is beyond type chunk data %d", @@ -3950,8 +4075,10 @@ ssize_t ResTable::getBagLocked(uint32_t resID, const bag_entry** outBag, uint32_t oldName = 0; while ((isInside=(curEntry < set->numAttrs)) && (oldName=entries[curEntry].map.name.ident) < newName) { - TABLE_NOISY(printf("#%d: Keeping existing attribute: 0x%08x\n", - curEntry, entries[curEntry].map.name.ident)); + if (kDebugTableNoisy) { + ALOGI("#%zu: Keeping existing attribute: 0x%08x\n", + curEntry, entries[curEntry].map.name.ident); + } curEntry++; } @@ -3968,8 +4095,10 @@ ssize_t ResTable::getBagLocked(uint32_t resID, const bag_entry** outBag, } set->availAttrs = newAvail; entries = (bag_entry*)(set+1); - TABLE_NOISY(printf("Reallocated set %p, entries=%p, avail=%d\n", - set, entries, set->availAttrs)); + if (kDebugTableNoisy) { + ALOGI("Reallocated set %p, entries=%p, avail=%zu\n", + set, entries, set->availAttrs); + } } if (isInside) { // Going in the middle, need to make space. @@ -3977,11 +4106,13 @@ ssize_t ResTable::getBagLocked(uint32_t resID, const bag_entry** outBag, sizeof(bag_entry)*(set->numAttrs-curEntry)); set->numAttrs++; } - TABLE_NOISY(printf("#%d: Inserting new attribute: 0x%08x\n", - curEntry, newName)); + if (kDebugTableNoisy) { + ALOGI("#%zu: Inserting new attribute: 0x%08x\n", curEntry, newName); + } } else { - TABLE_NOISY(printf("#%d: Replacing existing attribute: 0x%08x\n", - curEntry, oldName)); + if (kDebugTableNoisy) { + ALOGI("#%zu: Replacing existing attribute: 0x%08x\n", curEntry, oldName); + } } bag_entry* cur = entries+curEntry; @@ -3995,9 +4126,11 @@ ssize_t ResTable::getBagLocked(uint32_t resID, const bag_entry** outBag, return UNKNOWN_ERROR; } - TABLE_NOISY(printf("Setting entry #%d %p: block=%d, name=0x%08x, type=%d, data=0x%08x\n", - curEntry, cur, cur->stringBlock, cur->map.name.ident, - cur->map.value.dataType, cur->map.value.data)); + if (kDebugTableNoisy) { + ALOGI("Setting entry #%zu %p: block=%zd, name=0x%08d, type=%d, data=0x%08x\n", + curEntry, cur, cur->stringBlock, cur->map.name.ident, + cur->map.value.dataType, cur->map.value.data); + } // On to the next! curEntry++; @@ -4017,7 +4150,9 @@ ssize_t ResTable::getBagLocked(uint32_t resID, const bag_entry** outBag, *outTypeSpecFlags = set->typeSpecFlags; } *outBag = (bag_entry*)(set+1); - TABLE_NOISY(ALOGI("Returning %d attrs\n", set->numAttrs)); + if (kDebugTableNoisy) { + ALOGI("Returning %zu attrs\n", set->numAttrs); + } return set->numAttrs; } return BAD_INDEX; @@ -4026,10 +4161,14 @@ ssize_t ResTable::getBagLocked(uint32_t resID, const bag_entry** outBag, void ResTable::setParameters(const ResTable_config* params) { mLock.lock(); - TABLE_GETENTRY(ALOGI("Setting parameters: %s\n", params->toString().string())); + if (kDebugTableGetEntry) { + ALOGI("Setting parameters: %s\n", params->toString().string()); + } mParams = *params; for (size_t i=0; i<mPackageGroups.size(); i++) { - TABLE_NOISY(ALOGI("CLEARING BAGS FOR GROUP %d!", i)); + if (kDebugTableNoisy) { + ALOGI("CLEARING BAGS FOR GROUP %zu!", i); + } mPackageGroups[i]->clearBagCache(); } mLock.unlock(); @@ -4067,7 +4206,9 @@ uint32_t ResTable::identifierForName(const char16_t* name, size_t nameLen, size_t packageLen, uint32_t* outTypeSpecFlags) const { - TABLE_SUPER_NOISY(printf("Identifier for name: error=%d\n", mError)); + if (kDebugTableSuperNoisy) { + printf("Identifier for name: error=%d\n", mError); + } // Check for internal resource identifier as the very first thing, so // that we will always find them even when there are no resources. @@ -4160,10 +4301,12 @@ nope: } nameLen = nameEnd-name; - TABLE_NOISY(printf("Looking for identifier: type=%s, name=%s, package=%s\n", - String8(type, typeLen).string(), - String8(name, nameLen).string(), - String8(package, packageLen).string())); + if (kDebugTableNoisy) { + printf("Looking for identifier: type=%s, name=%s, package=%s\n", + String8(type, typeLen).string(), + String8(name, nameLen).string(), + String8(package, packageLen).string()); + } const size_t NG = mPackageGroups.size(); for (size_t ig=0; ig<NG; ig++) { @@ -4171,7 +4314,9 @@ nope: if (strzcmp16(package, packageLen, group->name.string(), group->name.size())) { - TABLE_NOISY(printf("Skipping package group: %s\n", String8(group->name).string())); + if (kDebugTableNoisy) { + printf("Skipping package group: %s\n", String8(group->name).string()); + } continue; } @@ -4186,8 +4331,10 @@ nope: const TypeList& typeList = group->types[ti]; if (typeList.isEmpty()) { - TABLE_NOISY(printf("Expected type structure not found in package %s for index %d\n", - String8(group->name).string(), ti)); + if (kDebugTableNoisy) { + ALOGI("Expected type structure not found in package %s for index %zd\n", + String8(group->name).string(), ti); + } continue; } @@ -4686,9 +4833,11 @@ bool ResTable::stringToValue(Res_value* outValue, String16* outString, rid = Res_MAKEID( accessor->getRemappedPackage(Res_GETPACKAGE(rid)), Res_GETTYPE(rid), Res_GETENTRY(rid)); - TABLE_NOISY(printf("Incl %s:%s/%s: 0x%08x\n", - String8(package).string(), String8(type).string(), - String8(name).string(), rid)); + if (kDebugTableNoisy) { + ALOGI("Incl %s:%s/%s: 0x%08x\n", + String8(package).string(), String8(type).string(), + String8(name).string(), rid); + } } uint32_t packageId = Res_GETPACKAGE(rid) + 1; @@ -4703,9 +4852,11 @@ bool ResTable::stringToValue(Res_value* outValue, String16* outString, uint32_t rid = accessor->getCustomResourceWithCreation(package, type, name, createIfNotFound); if (rid != 0) { - TABLE_NOISY(printf("Pckg %s:%s/%s: 0x%08x\n", - String8(package).string(), String8(type).string(), - String8(name).string(), rid)); + if (kDebugTableNoisy) { + ALOGI("Pckg %s:%s/%s: 0x%08x\n", + String8(package).string(), String8(type).string(), + String8(name).string(), rid); + } uint32_t packageId = Res_GETPACKAGE(rid) + 1; if (packageId == 0x00) { outValue->data = rid; @@ -5508,8 +5659,6 @@ status_t ResTable::getEntry( } // Check if there is the desired entry in this type. - const uint8_t* const end = reinterpret_cast<const uint8_t*>(thisType) - + dtohl(thisType->header.size); const uint32_t* const eindex = reinterpret_cast<const uint32_t*>( reinterpret_cast<const uint8_t*>(thisType) + dtohs(thisType->header.headerSize)); @@ -5698,9 +5847,11 @@ status_t ResTable::parsePackage(const ResTable_package* const pkg, const uint8_t* endPos = ((const uint8_t*)pkg) + dtohs(pkg->header.size); while (((const uint8_t*)chunk) <= (endPos-sizeof(ResChunk_header)) && ((const uint8_t*)chunk) <= (endPos-dtohl(chunk->size))) { - TABLE_NOISY(ALOGV("PackageChunk: type=0x%x, headerSize=0x%x, size=0x%x, pos=%p\n", - dtohs(chunk->type), dtohs(chunk->headerSize), dtohl(chunk->size), - (void*)(((const uint8_t*)chunk) - ((const uint8_t*)header->header)))); + if (kDebugTableNoisy) { + ALOGV("PackageChunk: type=0x%x, headerSize=0x%x, size=0x%x, pos=%p\n", + dtohs(chunk->type), dtohs(chunk->headerSize), dtohl(chunk->size), + (void*)(((const uint8_t*)chunk) - ((const uint8_t*)header->header))); + } const size_t csize = dtohl(chunk->size); const uint16_t ctype = dtohs(chunk->type); if (ctype == RES_TABLE_TYPE_SPEC_TYPE) { @@ -5714,11 +5865,13 @@ status_t ResTable::parsePackage(const ResTable_package* const pkg, const size_t typeSpecSize = dtohl(typeSpec->header.size); const size_t newEntryCount = dtohl(typeSpec->entryCount); - LOAD_TABLE_NOISY(printf("TypeSpec off %p: type=0x%x, headerSize=0x%x, size=%p\n", - (void*)(base-(const uint8_t*)chunk), - dtohs(typeSpec->header.type), - dtohs(typeSpec->header.headerSize), - (void*)typeSpecSize)); + if (kDebugLoadTableNoisy) { + ALOGI("TypeSpec off %p: type=0x%x, headerSize=0x%x, size=%p\n", + (void*)(base-(const uint8_t*)chunk), + dtohs(typeSpec->header.type), + dtohs(typeSpec->header.headerSize), + (void*)typeSpecSize); + } // look for block overrun or int overflow when multiplying by 4 if ((dtohl(typeSpec->entryCount) > (INT32_MAX/sizeof(uint32_t)) || dtohs(typeSpec->header.headerSize)+(sizeof(uint32_t)*newEntryCount) @@ -5776,13 +5929,14 @@ status_t ResTable::parsePackage(const ResTable_package* const pkg, const uint32_t typeSize = dtohl(type->header.size); const size_t newEntryCount = dtohl(type->entryCount); - LOAD_TABLE_NOISY(printf("Type off %p: type=0x%x, headerSize=0x%x, size=%p\n", - (void*)(base-(const uint8_t*)chunk), - dtohs(type->header.type), - dtohs(type->header.headerSize), - (void*)typeSize)); - if (dtohs(type->header.headerSize)+(sizeof(uint32_t)*newEntryCount) - > typeSize) { + if (kDebugLoadTableNoisy) { + printf("Type off %p: type=0x%x, headerSize=0x%x, size=%u\n", + (void*)(base-(const uint8_t*)chunk), + dtohs(type->header.type), + dtohs(type->header.headerSize), + typeSize); + } + if (dtohs(type->header.headerSize)+(sizeof(uint32_t)*newEntryCount) > typeSize) { ALOGW("ResTable_type entry index to %p extends beyond chunk end 0x%x.", (void*)(dtohs(type->header.headerSize) + (sizeof(uint32_t)*newEntryCount)), typeSize); @@ -5828,11 +5982,12 @@ status_t ResTable::parsePackage(const ResTable_package* const pkg, t->configs.add(type); - TABLE_GETENTRY( + if (kDebugTableGetEntry) { ResTable_config thisConfig; thisConfig.copyFromDtoH(type->config); - ALOGI("Adding config to type %d: %s\n", - type->id, thisConfig.toString().string())); + ALOGI("Adding config to type %d: %s\n", type->id, + thisConfig.toString().string()); + } } else { ALOGV("Skipping empty ResTable_type for type %d", type->id); } @@ -5893,8 +6048,10 @@ status_t DynamicRefTable::load(const ResTable_lib_header* const header) uint32_t packageId = dtohl(entry->packageId); char16_t tmpName[sizeof(entry->packageName) / sizeof(char16_t)]; strcpy16_dtoh(tmpName, entry->packageName, sizeof(entry->packageName) / sizeof(char16_t)); - LIB_NOISY(ALOGV("Found lib entry %s with id %d\n", String8(tmpName).string(), - dtohl(entry->packageId))); + if (kDebugLibNoisy) { + ALOGV("Found lib entry %s with id %d\n", String8(tmpName).string(), + dtohl(entry->packageId)); + } if (packageId >= 256) { ALOGE("Bad package id 0x%08x", packageId); return UNKNOWN_ERROR; @@ -6074,7 +6231,7 @@ status_t ResTable::createIdmap(const ResTable& overlay, if (Res_GETTYPE(overlayResID) + 1 != static_cast<size_t>(typeMap.overlayTypeId)) { ALOGE("idmap: can't mix type ids in entry map. Resource 0x%08x maps to 0x%08x" - " but entries should map to resources of type %02x", + " but entries should map to resources of type %02zx", resID, overlayResID, typeMap.overlayTypeId); return BAD_TYPE; } @@ -6401,9 +6558,6 @@ void ResTable::print(bool inclValues) const continue; } for (size_t entryIndex=0; entryIndex<entryCount; entryIndex++) { - - const uint8_t* const end = ((const uint8_t*)type) - + dtohl(type->header.size); const uint32_t* const eindex = (const uint32_t*) (((const uint8_t*)type) + dtohs(type->header.headerSize)); diff --git a/libs/androidfw/StreamingZipInflater.cpp b/libs/androidfw/StreamingZipInflater.cpp index 1dfec23cbe63..b39b5f0b8b36 100644 --- a/libs/androidfw/StreamingZipInflater.cpp +++ b/libs/androidfw/StreamingZipInflater.cpp @@ -41,6 +41,8 @@ _rc; }) #endif +static const bool kIsDebug = false; + static inline size_t min_of(size_t a, size_t b) { return (a < b) ? a : b; } using namespace android; @@ -209,7 +211,9 @@ int StreamingZipInflater::readNextChunk() { size_t toRead = min_of(mInBufSize, mInTotalSize - mInNextChunkOffset); if (toRead > 0) { ssize_t didRead = TEMP_FAILURE_RETRY(::read(mFd, mInBuf, toRead)); - //ALOGV("Reading input chunk, size %08x didread %08x", toRead, didRead); + if (kIsDebug) { + ALOGV("Reading input chunk, size %08zx didread %08zx", toRead, didRead); + } if (didRead < 0) { ALOGE("Error reading asset data: %s", strerror(errno)); return didRead; diff --git a/libs/androidfw/ZipFileRO.cpp b/libs/androidfw/ZipFileRO.cpp index 5f6e831a0200..ef0d07295120 100644 --- a/libs/androidfw/ZipFileRO.cpp +++ b/libs/androidfw/ZipFileRO.cpp @@ -34,14 +34,6 @@ #include <assert.h> #include <unistd.h> -/* - * We must open binary files using open(path, ... | O_BINARY) under Windows. - * Otherwise strange read errors will happen. - */ -#ifndef O_BINARY -# define O_BINARY 0 -#endif - using namespace android; class _ZipEntryRO { diff --git a/libs/androidfw/tests/Android.mk b/libs/androidfw/tests/Android.mk index 597250a3d290..8aaa887a90ea 100644 --- a/libs/androidfw/tests/Android.mk +++ b/libs/androidfw/tests/Android.mk @@ -37,12 +37,16 @@ include $(CLEAR_VARS) LOCAL_MODULE := libandroidfw_tests +LOCAL_CFLAGS += -Wall -Werror -Wunused -Wunreachable-code +# gtest is broken. +LOCAL_CFLAGS += -Wno-unnamed-type-template-args + LOCAL_SRC_FILES := $(testFiles) LOCAL_STATIC_LIBRARIES := \ libandroidfw \ libutils \ libcutils \ - liblog + liblog include $(BUILD_HOST_NATIVE_TEST) @@ -54,6 +58,10 @@ include $(CLEAR_VARS) LOCAL_MODULE := libandroidfw_tests +LOCAL_CFLAGS += -Wall -Werror -Wunused -Wunreachable-code +# gtest is broken. +LOCAL_CFLAGS += -Wno-unnamed-type-template-args + LOCAL_SRC_FILES := $(testFiles) \ BackupData_test.cpp \ ObbFile_test.cpp diff --git a/libs/common_time/Android.mk b/libs/common_time/Android.mk index 75eb5281f692..1fec504e7969 100644 --- a/libs/common_time/Android.mk +++ b/libs/common_time/Android.mk @@ -33,4 +33,6 @@ LOCAL_SHARED_LIBRARIES := \ LOCAL_MODULE_TAGS := optional LOCAL_MODULE := common_time +LOCAL_CFLAGS += -Wall -Werror -Wunused -Wunreachable-code + include $(BUILD_EXECUTABLE) diff --git a/libs/common_time/clock_recovery.cpp b/libs/common_time/clock_recovery.cpp index 3a7c70c3e17d..392caa0ca16f 100644 --- a/libs/common_time/clock_recovery.cpp +++ b/libs/common_time/clock_recovery.cpp @@ -22,6 +22,7 @@ #define __STDC_LIMIT_MACROS #define LOG_TAG "common_time" #include <utils/Log.h> +#include <inttypes.h> #include <stdint.h> #include <common_time/local_clock.h> @@ -280,7 +281,7 @@ bool ClockRecoveryLoop::pushDisciplineEvent(int64_t local_time, // system. setTargetCorrection_l(tgt_correction); - LOG_TS("clock_loop %lld %f %f %f %d\n", raw_delta, delta_f, CO, CObias, tgt_correction); + LOG_TS("clock_loop %" PRId64 " %f %f %f %d\n", raw_delta, delta_f, CO, CObias, tgt_correction); #ifdef TIME_SERVICE_DEBUG diag_thread_->pushDisciplineEvent( @@ -335,7 +336,6 @@ void ClockRecoveryLoop::setTargetCorrection_l(int32_t tgt) { // 300mSec. if (tgt_correction_ != tgt) { int64_t now = local_clock_->getLocalTime(); - status_t res; tgt_correction_ = tgt; diff --git a/libs/common_time/clock_recovery.h b/libs/common_time/clock_recovery.h index b6c87ffaf37e..278a75ef2b05 100644 --- a/libs/common_time/clock_recovery.h +++ b/libs/common_time/clock_recovery.h @@ -111,7 +111,6 @@ class ClockRecoveryLoop { bool last_error_est_valid_; int32_t last_error_est_usec_; float last_delta_f_; - int32_t integrated_error_; int32_t tgt_correction_; int32_t cur_correction_; LinearTransform time_to_cur_slew_; diff --git a/libs/common_time/common_clock.cpp b/libs/common_time/common_clock.cpp index c9eb3884440d..ee326e14d12b 100644 --- a/libs/common_time/common_clock.cpp +++ b/libs/common_time/common_clock.cpp @@ -19,6 +19,7 @@ #define LOG_TAG "common_time" #include <utils/Log.h> +#include <inttypes.h> #include <stdint.h> #include <utils/Errors.h> @@ -50,7 +51,7 @@ bool CommonClock::init(uint64_t local_freq) { LinearTransform::reduce(&numer, &denom); if ((numer > UINT32_MAX) || (denom > UINT32_MAX)) { - ALOGE("Overflow in CommonClock::init while trying to reduce %lld/%lld", + ALOGE("Overflow in CommonClock::init while trying to reduce %" PRIu64 "/%" PRIu64, kCommonFreq, local_freq); return false; } diff --git a/libs/common_time/common_clock_service.cpp b/libs/common_time/common_clock_service.cpp index 9ca6f3523084..592ab1dceab8 100644 --- a/libs/common_time/common_clock_service.cpp +++ b/libs/common_time/common_clock_service.cpp @@ -99,14 +99,14 @@ status_t CommonClockService::registerListener( Mutex::Autolock lock(mCallbackLock); // check whether this is a duplicate for (size_t i = 0; i < mListeners.size(); i++) { - if (mListeners[i]->asBinder() == listener->asBinder()) + if (IInterface::asBinder(mListeners[i]) == IInterface::asBinder(listener)) return ALREADY_EXISTS; } } mListeners.add(listener); mTimeServer.reevaluateAutoDisableState(0 != mListeners.size()); - return listener->asBinder()->linkToDeath(this); + return IInterface::asBinder(listener)->linkToDeath(this); } status_t CommonClockService::unregisterListener( @@ -117,8 +117,8 @@ status_t CommonClockService::unregisterListener( { // scoping for autolock pattern Mutex::Autolock lock(mCallbackLock); for (size_t i = 0; i < mListeners.size(); i++) { - if (mListeners[i]->asBinder() == listener->asBinder()) { - mListeners[i]->asBinder()->unlinkToDeath(this); + if (IInterface::asBinder(mListeners[i]) == IInterface::asBinder(listener)) { + IInterface::asBinder(mListeners[i])->unlinkToDeath(this); mListeners.removeAt(i); ret_val = OK; break; @@ -136,7 +136,7 @@ void CommonClockService::binderDied(const wp<IBinder>& who) { { // scoping for autolock pattern Mutex::Autolock lock(mCallbackLock); for (size_t i = 0; i < mListeners.size(); i++) { - if (mListeners[i]->asBinder() == who) { + if (IInterface::asBinder(mListeners[i]) == who) { mListeners.removeAt(i); break; } diff --git a/libs/common_time/common_time_server.cpp b/libs/common_time/common_time_server.cpp index 3e1198758264..01372e00cab8 100644 --- a/libs/common_time/common_time_server.cpp +++ b/libs/common_time/common_time_server.cpp @@ -25,6 +25,7 @@ #include <arpa/inet.h> #include <assert.h> #include <fcntl.h> +#include <inttypes.h> #include <linux/if_ether.h> #include <net/if.h> #include <net/if_arp.h> @@ -969,13 +970,14 @@ bool CommonTimeServer::handleSyncResponse( // if the RTT of the packet is significantly larger than the panic // threshold, we should simply discard it. Its better to do nothing // than to take cues from a packet like that. - int rttCommon = mCommonClock.localDurationToCommonDuration(rtt); + int64_t rttCommon = mCommonClock.localDurationToCommonDuration(rtt); if (rttCommon > (static_cast<int64_t>(mPanicThresholdUsec) * kRTTDiscardPanicThreshMultiplier)) { - ALOGV("Dropping sync response with RTT of %lld uSec", rttCommon); + ALOGV("Dropping sync response with RTT of %" PRId64 " uSec", rttCommon); mClient_ExpiredSyncRespsRXedFromCurMaster++; if (shouldPanicNotGettingGoodData()) return becomeInitial("RX panic, no good data"); + return true; } else { result = mClockRecovery.pushDisciplineEvent(avgLocal, avgCommon, rttCommon); mClient_LastGoodSyncRX = clientRxLocalTime; diff --git a/libs/common_time/common_time_server_api.cpp b/libs/common_time/common_time_server_api.cpp index e15707181bca..e0f35a9def8b 100644 --- a/libs/common_time/common_time_server_api.cpp +++ b/libs/common_time/common_time_server_api.cpp @@ -27,6 +27,8 @@ #include "common_time_server.h" +#include <inttypes.h> + namespace android { // @@ -286,7 +288,7 @@ void CommonTimeServer::reevaluateAutoDisableState(bool commonClockHasClients) { #define checked_percentage(a, b) ((0 == b) ? 0.0f : ((100.0f * a) / b)) status_t CommonTimeServer::dumpClockInterface(int fd, - const Vector<String16>& args, + const Vector<String16>& /* args */, size_t activeClients) { AutoMutex _lock(&mLock); const size_t SIZE = 256; @@ -308,15 +310,15 @@ status_t CommonTimeServer::dumpClockInterface(int fd, synced = (OK == mCommonClock.localToCommon(localTime, &commonTime)); sockaddrToString(mMasterEP, mMasterEPValid, maStr, sizeof(maStr)); - dump_printf("Common Clock Service Status\nLocal time : %lld\n", + dump_printf("Common Clock Service Status\nLocal time : %" PRId64 "\n", localTime); if (synced) - dump_printf("Common time : %lld\n", commonTime); + dump_printf("Common time : %" PRId64 "\n", commonTime); else dump_printf("Common time : %s\n", "not synced"); - dump_printf("Timeline ID : %016llx\n", mTimelineID); + dump_printf("Timeline ID : %016" PRIu64 "\n", mTimelineID); dump_printf("State : %s\n", stateToString(mState)); dump_printf("Master Addr : %s\n", maStr); @@ -349,10 +351,10 @@ status_t CommonTimeServer::dumpClockInterface(int fd, int64_t localDelta, usecDelta; localDelta = localTime - mClient_LastGoodSyncRX; usecDelta = mCommonClock.localDurationToCommonDuration(localDelta); - dump_printf("Last Good RX : %lld uSec ago\n", usecDelta); + dump_printf("Last Good RX : %" PRId64 " uSec ago\n", usecDelta); } - dump_printf("Active Clients : %u\n", activeClients); + dump_printf("Active Clients : %zu\n", activeClients); mClient_PacketRTTLog.dumpLog(fd, mCommonClock); mStateChangeLog.dumpLog(fd); mElectionLog.dumpLog(fd); @@ -363,7 +365,7 @@ status_t CommonTimeServer::dumpClockInterface(int fd, } status_t CommonTimeServer::dumpConfigInterface(int fd, - const Vector<String16>& args) { + const Vector<String16>& /* args */) { AutoMutex _lock(&mLock); const size_t SIZE = 256; char buffer[SIZE]; @@ -383,7 +385,7 @@ status_t CommonTimeServer::dumpConfigInterface(int fd, "Bound Interface : %s\n", mBindIfaceValid ? mBindIface.string() : "<unbound>"); dump_printf("Master Election Endpoint : %s\n", meStr); - dump_printf("Master Election Group ID : %016llx\n", mSyncGroupID); + dump_printf("Master Election Group ID : %016" PRIu64 "\n", mSyncGroupID); dump_printf("Master Announce Interval : %d mSec\n", mMasterAnnounceIntervalMs); dump_printf("Client Sync Interval : %d mSec\n", @@ -419,12 +421,12 @@ void CommonTimeServer::PacketRTTLog::dumpLog(int fd, const CommonClock& cclk) { if (rxTimes[i]) { int64_t delta = rxTimes[i] - txTimes[i]; int64_t deltaUsec = cclk.localDurationToCommonDuration(delta); - dump_printf("pkt[%2d] : localTX %12lld localRX %12lld " + dump_printf("pkt[%2d] : localTX %12" PRId64 " localRX %12" PRId64 " " "(%.3f msec RTT)\n", ndx, txTimes[i], rxTimes[i], static_cast<float>(deltaUsec) / 1000.0); } else { - dump_printf("pkt[%2d] : localTX %12lld localRX never\n", + dump_printf("pkt[%2d] : localTX %12" PRId64 " localRX never\n", ndx, txTimes[i]); } i = (i + 1) % RTT_LOG_SIZE; diff --git a/libs/common_time/main.cpp b/libs/common_time/main.cpp index 49eb30abab66..ac52c851daa3 100644 --- a/libs/common_time/main.cpp +++ b/libs/common_time/main.cpp @@ -27,7 +27,7 @@ #include "common_time_server.h" -int main(int argc, char *argv[]) { +int main() { using namespace android; sp<CommonTimeServer> service = new CommonTimeServer(); diff --git a/libs/hwui/AmbientShadow.cpp b/libs/hwui/AmbientShadow.cpp index cb3a002b07d5..f11437b06012 100644 --- a/libs/hwui/AmbientShadow.cpp +++ b/libs/hwui/AmbientShadow.cpp @@ -121,14 +121,14 @@ inline void computeBufferSize(int* totalVertexCount, int* totalIndexCount, *totalUmbraCount = 0; if (!isCasterOpaque) { // Add the centroid if occluder is translucent. - *totalVertexCount++; + (*totalVertexCount)++; *totalIndexCount += 2 * innerVertexCount + 1; *totalUmbraCount = innerVertexCount; } } inline bool needsExtraForEdge(float firstAlpha, float secondAlpha) { - return abs(firstAlpha - secondAlpha) > ALPHA_THRESHOLD; + return fabsf(firstAlpha - secondAlpha) > ALPHA_THRESHOLD; } /** diff --git a/libs/hwui/Android.mk b/libs/hwui/Android.mk index 5b74addb3e89..3e590a943074 100644 --- a/libs/hwui/Android.mk +++ b/libs/hwui/Android.mk @@ -13,107 +13,109 @@ LOCAL_CLANG_CFLAGS += \ # Only build libhwui when USE_OPENGL_RENDERER is # defined in the current device/board configuration ifeq ($(USE_OPENGL_RENDERER),true) - LOCAL_SRC_FILES := \ - utils/Blur.cpp \ - utils/GLUtils.cpp \ - utils/SortedListImpl.cpp \ - thread/TaskManager.cpp \ - font/CacheTexture.cpp \ - font/Font.cpp \ - AmbientShadow.cpp \ - AnimationContext.cpp \ - Animator.cpp \ - AnimatorManager.cpp \ - AssetAtlas.cpp \ - DamageAccumulator.cpp \ - FontRenderer.cpp \ - GammaFontRenderer.cpp \ - Caches.cpp \ - DisplayList.cpp \ - DeferredDisplayList.cpp \ - DeferredLayerUpdater.cpp \ - DisplayListLogBuffer.cpp \ - DisplayListRenderer.cpp \ - Dither.cpp \ - DrawProfiler.cpp \ - Extensions.cpp \ - FboCache.cpp \ - GradientCache.cpp \ - Image.cpp \ - Interpolator.cpp \ - Layer.cpp \ - LayerCache.cpp \ - LayerRenderer.cpp \ - Matrix.cpp \ - OpenGLRenderer.cpp \ - Patch.cpp \ - PatchCache.cpp \ - PathCache.cpp \ - PathTessellator.cpp \ - PixelBuffer.cpp \ - Program.cpp \ - ProgramCache.cpp \ - RenderBufferCache.cpp \ - RenderNode.cpp \ - RenderProperties.cpp \ - RenderState.cpp \ - ResourceCache.cpp \ - ShadowTessellator.cpp \ - SkiaShader.cpp \ - Snapshot.cpp \ - SpotShadow.cpp \ - StatefulBaseRenderer.cpp \ - Stencil.cpp \ - TessellationCache.cpp \ - Texture.cpp \ - TextureCache.cpp \ - TextDropShadowCache.cpp + LOCAL_SRC_FILES := \ + utils/Blur.cpp \ + utils/GLUtils.cpp \ + utils/SortedListImpl.cpp \ + thread/TaskManager.cpp \ + font/CacheTexture.cpp \ + font/Font.cpp \ + AmbientShadow.cpp \ + AnimationContext.cpp \ + Animator.cpp \ + AnimatorManager.cpp \ + AssetAtlas.cpp \ + DamageAccumulator.cpp \ + FontRenderer.cpp \ + GammaFontRenderer.cpp \ + Caches.cpp \ + DisplayList.cpp \ + DeferredDisplayList.cpp \ + DeferredLayerUpdater.cpp \ + DisplayListLogBuffer.cpp \ + DisplayListRenderer.cpp \ + Dither.cpp \ + DrawProfiler.cpp \ + Extensions.cpp \ + FboCache.cpp \ + GradientCache.cpp \ + Image.cpp \ + Interpolator.cpp \ + Layer.cpp \ + LayerCache.cpp \ + LayerRenderer.cpp \ + Matrix.cpp \ + OpenGLRenderer.cpp \ + Patch.cpp \ + PatchCache.cpp \ + PathCache.cpp \ + PathTessellator.cpp \ + PixelBuffer.cpp \ + Program.cpp \ + ProgramCache.cpp \ + RenderBufferCache.cpp \ + RenderNode.cpp \ + RenderProperties.cpp \ + RenderState.cpp \ + ResourceCache.cpp \ + ShadowTessellator.cpp \ + SkiaShader.cpp \ + Snapshot.cpp \ + SpotShadow.cpp \ + StatefulBaseRenderer.cpp \ + Stencil.cpp \ + TessellationCache.cpp \ + Texture.cpp \ + TextureCache.cpp \ + TextDropShadowCache.cpp # RenderThread stuff - LOCAL_SRC_FILES += \ - renderthread/CanvasContext.cpp \ - renderthread/DrawFrameTask.cpp \ - renderthread/EglManager.cpp \ - renderthread/RenderProxy.cpp \ - renderthread/RenderTask.cpp \ - renderthread/RenderThread.cpp \ - renderthread/TimeLord.cpp + LOCAL_SRC_FILES += \ + renderthread/CanvasContext.cpp \ + renderthread/DrawFrameTask.cpp \ + renderthread/EglManager.cpp \ + renderthread/RenderProxy.cpp \ + renderthread/RenderTask.cpp \ + renderthread/RenderThread.cpp \ + renderthread/TimeLord.cpp - intermediates := $(call intermediates-dir-for,STATIC_LIBRARIES,libRS,TARGET,) + intermediates := $(call intermediates-dir-for,STATIC_LIBRARIES,libRS,TARGET,) - LOCAL_C_INCLUDES += \ - external/skia/src/core + LOCAL_C_INCLUDES += \ + external/skia/src/core - LOCAL_CFLAGS += -DUSE_OPENGL_RENDERER -DEGL_EGLEXT_PROTOTYPES -DGL_GLEXT_PROTOTYPES - LOCAL_CFLAGS += -Wno-unused-parameter - LOCAL_MODULE_CLASS := SHARED_LIBRARIES - LOCAL_SHARED_LIBRARIES := liblog libcutils libutils libEGL libGLESv2 libskia libui libgui - LOCAL_MODULE := libhwui - LOCAL_MODULE_TAGS := optional + LOCAL_CFLAGS += -DUSE_OPENGL_RENDERER -DEGL_EGLEXT_PROTOTYPES -DGL_GLEXT_PROTOTYPES + LOCAL_CFLAGS += -Wno-unused-parameter + LOCAL_MODULE_CLASS := SHARED_LIBRARIES + LOCAL_SHARED_LIBRARIES := liblog libcutils libutils libEGL libGLESv2 libskia libui libgui + LOCAL_MODULE := libhwui + LOCAL_MODULE_TAGS := optional - ifneq (false,$(ANDROID_ENABLE_RENDERSCRIPT)) - LOCAL_CFLAGS += -DANDROID_ENABLE_RENDERSCRIPT - LOCAL_SHARED_LIBRARIES += libRS libRScpp - LOCAL_C_INCLUDES += \ - $(intermediates) \ - frameworks/rs/cpp \ - frameworks/rs \ + ifneq (false,$(ANDROID_ENABLE_RENDERSCRIPT)) + LOCAL_CFLAGS += -DANDROID_ENABLE_RENDERSCRIPT + LOCAL_SHARED_LIBRARIES += libRS libRScpp + LOCAL_C_INCLUDES += \ + $(intermediates) \ + frameworks/rs/cpp \ + frameworks/rs \ - endif + endif - ifndef HWUI_COMPILE_SYMBOLS - LOCAL_CFLAGS += -fvisibility=hidden - endif + ifndef HWUI_COMPILE_SYMBOLS + LOCAL_CFLAGS += -fvisibility=hidden + endif - ifdef HWUI_COMPILE_FOR_PERF - LOCAL_CFLAGS += -fno-omit-frame-pointer -marm -mapcs - endif + ifdef HWUI_COMPILE_FOR_PERF + # TODO: Non-arm? + LOCAL_CFLAGS += -fno-omit-frame-pointer -marm -mapcs + endif - # Defaults for ATRACE_TAG and LOG_TAG for libhwui - LOCAL_CFLAGS += -DATRACE_TAG=ATRACE_TAG_VIEW -DLOG_TAG=\"OpenGLRenderer\" + # Defaults for ATRACE_TAG and LOG_TAG for libhwui + LOCAL_CFLAGS += -DATRACE_TAG=ATRACE_TAG_VIEW -DLOG_TAG=\"OpenGLRenderer\" - include external/stlport/libstlport.mk - include $(BUILD_SHARED_LIBRARY) + LOCAL_CFLAGS += -Wall -Werror -Wunused -Wunreachable-code - include $(call all-makefiles-under,$(LOCAL_PATH)) + include $(BUILD_SHARED_LIBRARY) + + include $(call all-makefiles-under,$(LOCAL_PATH)) endif diff --git a/libs/hwui/DeferredDisplayList.cpp b/libs/hwui/DeferredDisplayList.cpp index a998594747d0..fbe2d3946979 100644 --- a/libs/hwui/DeferredDisplayList.cpp +++ b/libs/hwui/DeferredDisplayList.cpp @@ -333,7 +333,7 @@ private: class RestoreToCountBatch : public Batch { public: RestoreToCountBatch(const StateOp* op, const DeferredDisplayState* state, int restoreCount) : - mOp(op), mState(state), mRestoreCount(restoreCount) {} + mState(state), mRestoreCount(restoreCount) {} virtual status_t replay(OpenGLRenderer& renderer, Rect& dirty, int index) { DEFER_LOGD("batch %p restoring to count %d", this, mRestoreCount); @@ -345,7 +345,6 @@ public: private: // we use the state storage for the RestoreToCountOp, but don't replay the op itself - const StateOp* mOp; const DeferredDisplayState* mState; /* @@ -700,7 +699,6 @@ void DeferredDisplayList::discardDrawingBatches(const unsigned int maxIndex) { for (unsigned int i = mEarliestUnclearedIndex; i <= maxIndex; i++) { // leave deferred state ops alone for simplicity (empty save restore pairs may now exist) if (mBatches[i] && mBatches[i]->purelyDrawBatch()) { - DrawBatch* b = (DrawBatch*) mBatches[i]; delete mBatches[i]; mBatches.replaceAt(NULL, i); } diff --git a/libs/hwui/DeferredDisplayList.h b/libs/hwui/DeferredDisplayList.h index 8a015b21cb47..f7f30b101bc2 100644 --- a/libs/hwui/DeferredDisplayList.h +++ b/libs/hwui/DeferredDisplayList.h @@ -79,7 +79,7 @@ public: }; class DeferredDisplayList { - friend class DeferStateStruct; // used to give access to allocator + friend struct DeferStateStruct; // used to give access to allocator public: DeferredDisplayList(const Rect& bounds, bool avoidOverdraw = true) : mBounds(bounds), mAvoidOverdraw(avoidOverdraw) { diff --git a/libs/hwui/DisplayList.h b/libs/hwui/DisplayList.h index dea109cd57b7..9eb8ae35d5aa 100644 --- a/libs/hwui/DisplayList.h +++ b/libs/hwui/DisplayList.h @@ -82,7 +82,7 @@ public: LinearAllocator * const mAllocator; SkPath* allocPathForFrame() { - mTempPaths.push_back(); + mTempPaths.push_back(SkPath()); return &mTempPaths.back(); } @@ -91,8 +91,7 @@ private: std::vector<SkPath> mTempPaths; }; -class DeferStateStruct : public PlaybackStateStruct { -public: +struct DeferStateStruct : public PlaybackStateStruct { DeferStateStruct(DeferredDisplayList& deferredList, OpenGLRenderer& renderer, int replayFlags) : PlaybackStateStruct(renderer, replayFlags, &(deferredList.mAllocator)), mDeferredList(deferredList) {} diff --git a/libs/hwui/DisplayListLogBuffer.cpp b/libs/hwui/DisplayListLogBuffer.cpp index 45aaccac7abe..bc9e7bd70609 100644 --- a/libs/hwui/DisplayListLogBuffer.cpp +++ b/libs/hwui/DisplayListLogBuffer.cpp @@ -80,7 +80,7 @@ void DisplayListLogBuffer::outputCommands(FILE *file) fprintf(file, "%*s%s\n", 2 * tmpBufferPtr->level, "", tmpBufferPtr->label); - OpLog* nextOp = tmpBufferPtr++; + tmpBufferPtr++; if (tmpBufferPtr > mBufferLast) { tmpBufferPtr = mBufferFirst; } diff --git a/libs/hwui/FontRenderer.cpp b/libs/hwui/FontRenderer.cpp index 3910381d9e1a..5b5b09820670 100644 --- a/libs/hwui/FontRenderer.cpp +++ b/libs/hwui/FontRenderer.cpp @@ -358,7 +358,7 @@ void FontRenderer::cacheBitmap(const SkGlyph& glyph, CachedGlyphInfo* cachedGlyp break; } case SkMask::kBW_Format: { - uint32_t cacheX = 0, bX = 0, cacheY = 0, bY = 0; + uint32_t cacheX = 0, cacheY = 0; uint32_t row = (startY - TEXTURE_BORDER_SIZE) * cacheWidth + startX - TEXTURE_BORDER_SIZE; static const uint8_t COLORS[2] = { 0, 255 }; diff --git a/libs/hwui/Interpolator.cpp b/libs/hwui/Interpolator.cpp index ff8ff73f030f..0e62d7780780 100644 --- a/libs/hwui/Interpolator.cpp +++ b/libs/hwui/Interpolator.cpp @@ -14,6 +14,10 @@ * limitations under the License. */ +// LOG_TAG is being provided by the Makefile, reset. +#ifdef LOG_TAG +#undef LOG_TAG +#endif #define LOG_TAG "Interpolator" #include "Interpolator.h" diff --git a/libs/hwui/LayerCache.cpp b/libs/hwui/LayerCache.cpp index 833f64bc96e7..cb7a35026c27 100644 --- a/libs/hwui/LayerCache.cpp +++ b/libs/hwui/LayerCache.cpp @@ -80,8 +80,10 @@ int LayerCache::LayerEntry::compare(const LayerCache::LayerEntry& lhs, void LayerCache::deleteLayer(Layer* layer) { if (layer) { - LAYER_LOGD("Destroying layer %dx%d, fbo %d", layer->getWidth(), layer->getHeight(), - layer->getFbo()); + if (kDebugLayers) { + ALOGD("Destroying layer %dx%d, fbo %d", layer->getWidth(), layer->getHeight(), + layer->getFbo()); + } mSize -= layer->getWidth() * layer->getHeight() * 4; layer->state = Layer::kState_DeletedFromCache; Caches::getInstance().resourceCache.decrementRefcount(layer); @@ -110,9 +112,13 @@ Layer* LayerCache::get(RenderState& renderState, const uint32_t width, const uin layer->state = Layer::kState_RemovedFromCache; mSize -= layer->getWidth() * layer->getHeight() * 4; - LAYER_LOGD("Reusing layer %dx%d", layer->getWidth(), layer->getHeight()); + if (kDebugLayers) { + ALOGD("Reusing layer %dx%d", layer->getWidth(), layer->getHeight()); + } } else { - LAYER_LOGD("Creating new layer %dx%d", entry.mWidth, entry.mHeight); + if (kDebugLayers) { + ALOGD("Creating new layer %dx%d", entry.mWidth, entry.mHeight); + } layer = new Layer(Layer::kType_DisplayList, renderState, entry.mWidth, entry.mHeight); layer->setBlend(true); @@ -137,7 +143,9 @@ void LayerCache::dump() { size_t size = mCache.size(); for (size_t i = 0; i < size; i++) { const LayerEntry& entry = mCache.itemAt(i); - LAYER_LOGD(" Layer size %dx%d", entry.mWidth, entry.mHeight); + if (kDebugLayers) { + ALOGD(" Layer size %dx%d", entry.mWidth, entry.mHeight); + } } } @@ -157,8 +165,10 @@ bool LayerCache::put(Layer* layer) { deleteLayer(victim); mCache.removeAt(position); - LAYER_LOGD(" Deleting layer %.2fx%.2f", victim->layer.getWidth(), - victim->layer.getHeight()); + if (kDebugLayers) { + ALOGD(" Deleting layer %.2fx%.2f", victim->layer.getWidth(), + victim->layer.getHeight()); + } } layer->cancelDefer(); diff --git a/libs/hwui/LayerCache.h b/libs/hwui/LayerCache.h index 6b93e8fc86c5..81810acef163 100644 --- a/libs/hwui/LayerCache.h +++ b/libs/hwui/LayerCache.h @@ -26,15 +26,11 @@ namespace uirenderer { class RenderState; -/////////////////////////////////////////////////////////////////////////////// -// Defines -/////////////////////////////////////////////////////////////////////////////// - // Debug #if DEBUG_LAYERS - #define LAYER_LOGD(...) ALOGD(__VA_ARGS__) +static const bool kDebugLayers = true; #else - #define LAYER_LOGD(...) +static const bool kDebugLayers = false; #endif /////////////////////////////////////////////////////////////////////////////// diff --git a/libs/hwui/OpenGLRenderer.cpp b/libs/hwui/OpenGLRenderer.cpp index ce1d09fe149a..fdfcbe742f78 100755 --- a/libs/hwui/OpenGLRenderer.cpp +++ b/libs/hwui/OpenGLRenderer.cpp @@ -473,8 +473,6 @@ bool OpenGLRenderer::updateLayer(Layer* layer, bool inFrame) { && layer->renderNode.get() && layer->renderNode->isRenderable()) { ATRACE_CALL(); - Rect& dirty = layer->dirtyRect; - if (inFrame) { endTiling(); debugOverdraw(false, false); @@ -779,8 +777,10 @@ int OpenGLRenderer::saveLayerDeferred(float left, float top, float right, float */ bool OpenGLRenderer::createLayer(float left, float top, float right, float bottom, const SkPaint* paint, int flags, const SkPath* convexMask) { - LAYER_LOGD("Requesting layer %.2fx%.2f", right - left, bottom - top); - LAYER_LOGD("Layer cache size = %d", mCaches.layerCache.getSize()); + if (kDebugLayers) { + ALOGD("Requesting layer %.2fx%.2f", right - left, bottom - top); + ALOGD("Layer cache size = %d", mCaches.layerCache.getSize()); + } const bool fboLayer = flags & SkCanvas::kClipToLayer_SaveFlag; @@ -955,7 +955,9 @@ void OpenGLRenderer::composeLayer(const Snapshot& removed, const Snapshot& resto // Failing to add the layer to the cache should happen only if the layer is too large layer->setConvexMask(NULL); if (!mCaches.layerCache.put(layer)) { - LAYER_LOGD("Deleting layer"); + if (kDebugLayers) { + ALOGD("Deleting layer"); + } Caches::getInstance().resourceCache.decrementRefcount(layer); } } @@ -1605,13 +1607,7 @@ void OpenGLRenderer::setupDraw(bool clearLayer) { setScissorFromClip(); } - if (clearLayer) { - setStencilFromClip(); - } else { - // While clearing layer, force disable stencil buffer, since - // it's invalid to stencil-clip *during* the layer clear - mCaches.stencil.disable(); - } + setStencilFromClip(); } mDescription.reset(); @@ -1984,8 +1980,6 @@ status_t OpenGLRenderer::drawRenderNode(RenderNode* renderNode, Rect& dirty, int } void OpenGLRenderer::drawAlphaBitmap(Texture* texture, float left, float top, const SkPaint* paint) { - int color = paint != NULL ? paint->getColor() : 0; - float x = left; float y = top; @@ -2407,7 +2401,7 @@ status_t OpenGLRenderer::drawVertexBuffer(float translateX, float translateY, setupDrawShaderUniforms(getShader(paint)); const void* vertices = vertexBuffer.getBuffer(); - bool force = mCaches.unbindMeshBuffer(); + mCaches.unbindMeshBuffer(); mCaches.bindPositionVertexPointer(true, vertices, isAA ? gAlphaVertexStride : gVertexStride); mCaches.resetTexCoordsVertexPointer(); @@ -3182,14 +3176,6 @@ status_t OpenGLRenderer::drawRects(const float* rects, int count, const SkPaint* return drawColorRects(rects, count, paint, false, true, true); } -static void mapPointFakeZ(Vector3& point, const mat4& transformXY, const mat4& transformZ) { - // map z coordinate with true 3d matrix - point.z = transformZ.mapZ(point); - - // map x,y coordinates with draw/Skia matrix - transformXY.mapPoint(point.x, point.y); -} - status_t OpenGLRenderer::drawShadow(float casterAlpha, const VertexBuffer* ambientShadowVertexBuffer, const VertexBuffer* spotShadowVertexBuffer) { if (currentSnapshot()->isIgnored()) return DrawGlInfo::kStatusDone; diff --git a/libs/hwui/PathCache.cpp b/libs/hwui/PathCache.cpp index 9ba885496f6f..a3d70197cb0f 100644 --- a/libs/hwui/PathCache.cpp +++ b/libs/hwui/PathCache.cpp @@ -212,7 +212,7 @@ void PathCache::removeTexture(PathTexture* texture) { // before attempting our cleanup const sp<Task<SkBitmap*> >& task = texture->task(); if (task != NULL) { - SkBitmap* bitmap = task->getResult(); + task->getResult(); texture->clearTask(); } else { // If there is a pending task, the path was not added diff --git a/libs/hwui/PathTessellator.cpp b/libs/hwui/PathTessellator.cpp index 281ca02c39f1..b3f779f4f79d 100644 --- a/libs/hwui/PathTessellator.cpp +++ b/libs/hwui/PathTessellator.cpp @@ -279,7 +279,6 @@ void getStrokeVerticesFromUnclosedVertices(const PaintInfo& paintInfo, - (vertices[lastIndex].x - vertices[lastIndex - 1].x), vertices[lastIndex].y - vertices[lastIndex - 1].y); const float dTheta = PI / (extra + 1); - const float radialScale = 2.0f / (1 + cos(dTheta)); int capOffset; for (int i = 0; i < extra; i++) { @@ -290,14 +289,14 @@ void getStrokeVerticesFromUnclosedVertices(const PaintInfo& paintInfo, } beginTheta += dTheta; - Vector2 beginRadialOffset = {cos(beginTheta), sin(beginTheta)}; + Vector2 beginRadialOffset = {cosf(beginTheta), sinf(beginTheta)}; paintInfo.scaleOffsetForStrokeWidth(beginRadialOffset); Vertex::set(&buffer[capOffset], vertices[0].x + beginRadialOffset.x, vertices[0].y + beginRadialOffset.y); endTheta += dTheta; - Vector2 endRadialOffset = {cos(endTheta), sin(endTheta)}; + Vector2 endRadialOffset = {cosf(endTheta), sinf(endTheta)}; paintInfo.scaleOffsetForStrokeWidth(endRadialOffset); Vertex::set(&buffer[allocSize - 1 - capOffset], vertices[lastIndex].x + endRadialOffset.x, @@ -468,7 +467,7 @@ inline static void storeCapAA(const PaintInfo& paintInfo, const Vector<Vertex>& for (int i = 0; i < extra; i++) { theta += dTheta; - Vector2 radialOffset = {cos(theta), sin(theta)}; + Vector2 radialOffset = {cosf(theta), sinf(theta)}; // scale to compensate for pinching at sharp angles, see totalOffsetFromNormals() radialOffset *= radialScale; @@ -831,7 +830,6 @@ void PathTessellator::tessellatePoints(const float* points, int count, const SkP Rect bounds; // tessellate, then duplicate outline across points - int numPoints = count / 2; VertexBuffer tempBuffer; if (!paintInfo.isAA) { getFillVerticesFromPerimeter(outlineVertices, tempBuffer); diff --git a/libs/hwui/Properties.h b/libs/hwui/Properties.h index 7eb9a32843e1..8d529c64f485 100644 --- a/libs/hwui/Properties.h +++ b/libs/hwui/Properties.h @@ -244,7 +244,7 @@ enum DebugLevel { // Converts a number of kilo-bytes into bytes #define KB(s) s * 1024 -static DebugLevel readDebugLevel() { +static inline DebugLevel readDebugLevel() { char property[PROPERTY_VALUE_MAX]; if (property_get(PROPERTY_DEBUG, property, NULL) > 0) { return (DebugLevel) atoi(property); diff --git a/libs/hwui/RenderNode.cpp b/libs/hwui/RenderNode.cpp index 254492ff4384..22808e201889 100644 --- a/libs/hwui/RenderNode.cpp +++ b/libs/hwui/RenderNode.cpp @@ -736,7 +736,6 @@ void RenderNode::issueOperationsOf3dChildren(ChildrenSelectMode mode, int restoreTo = renderer.save(SkCanvas::kMatrix_SaveFlag); DrawRenderNodeOp* childOp = zTranslatedNodes[drawIndex].value; - RenderNode* child = childOp->mRenderNode; renderer.concatMatrix(childOp->mTransformFromParent); childOp->mSkipInOrderDraw = false; // this is horrible, I'm so sorry everyone @@ -885,7 +884,7 @@ void RenderNode::issueOperations(OpenGLRenderer& renderer, T& handler) { initialTransform, zTranslatedNodes, renderer, handler); - for (int opIndex = chunk.beginOpIndex; opIndex < chunk.endOpIndex; opIndex++) { + for (size_t opIndex = chunk.beginOpIndex; opIndex < chunk.endOpIndex; opIndex++) { DisplayListOp *op = mDisplayListData->displayListOps[opIndex]; #if DEBUG_DISPLAY_LIST op->output(level + 1); @@ -893,7 +892,8 @@ void RenderNode::issueOperations(OpenGLRenderer& renderer, T& handler) { logBuffer.writeCommand(level, op->name()); handler(op, saveCountOffset, properties().getClipToBounds()); - if (CC_UNLIKELY(!mProjectedNodes.isEmpty() && opIndex == projectionReceiveIndex)) { + if (CC_UNLIKELY(!mProjectedNodes.isEmpty() && projectionReceiveIndex >= 0 && + opIndex == static_cast<size_t>(projectionReceiveIndex))) { issueOperationsOfProjectedChildren(renderer, handler); } } diff --git a/libs/hwui/ShadowTessellator.cpp b/libs/hwui/ShadowTessellator.cpp index c1ffa0ab4807..93d4b317f03b 100644 --- a/libs/hwui/ShadowTessellator.cpp +++ b/libs/hwui/ShadowTessellator.cpp @@ -87,7 +87,6 @@ void ShadowTessellator::tessellateSpotShadow(bool isCasterOpaque, reverseReceiverTransform.loadInverse(receiverTransform); reverseReceiverTransform.mapPoint3d(adjustedLightCenter); - const int lightVertexCount = 8; if (CC_UNLIKELY(caches.propertyLightDiameter > 0)) { lightRadius = caches.propertyLightDiameter; } diff --git a/libs/hwui/TextDropShadowCache.cpp b/libs/hwui/TextDropShadowCache.cpp index 4eec4628323e..96c09e645196 100644 --- a/libs/hwui/TextDropShadowCache.cpp +++ b/libs/hwui/TextDropShadowCache.cpp @@ -40,7 +40,8 @@ hash_t ShadowText::hash() const { hash = JenkinsHashMix(hash, android::hash_type(italicStyle)); hash = JenkinsHashMix(hash, android::hash_type(scaleX)); if (text) { - hash = JenkinsHashMixShorts(hash, text, charCount); + hash = JenkinsHashMixShorts( + hash, reinterpret_cast<const uint16_t*>(text), charCount); } if (positions) { for (uint32_t i = 0; i < charCount * 2; i++) { diff --git a/libs/hwui/font/Font.cpp b/libs/hwui/font/Font.cpp index ba878bac00a9..bf555580b252 100644 --- a/libs/hwui/font/Font.cpp +++ b/libs/hwui/font/Font.cpp @@ -378,7 +378,7 @@ void Font::precache(const SkPaint* paint, const char* text, int numGlyphs) { break; } - CachedGlyphInfo* cachedGlyph = getCachedGlyph(paint, glyph, true); + getCachedGlyph(paint, glyph, true); glyphsCount++; } } @@ -403,8 +403,6 @@ void Font::render(const SkPaint* paint, const char* text, uint32_t start, uint32 text += start; int glyphsCount = 0; - const SkPaint::Align align = paint->getTextAlign(); - while (glyphsCount < numGlyphs) { glyph_t glyph = GET_GLYPH(text); diff --git a/libs/hwui/font/FontUtil.h b/libs/hwui/font/FontUtil.h index c2fd5f58e02d..4e5debe33c4a 100644 --- a/libs/hwui/font/FontUtil.h +++ b/libs/hwui/font/FontUtil.h @@ -30,9 +30,12 @@ #define DEFAULT_TEXT_LARGE_CACHE_WIDTH 2048 #define DEFAULT_TEXT_LARGE_CACHE_HEIGHT 512 -#define TEXTURE_BORDER_SIZE 1 -#if TEXTURE_BORDER_SIZE != 1 -# error TEXTURE_BORDER_SIZE other than 1 is not currently supported +#ifdef TEXTURE_BORDER_SIZE + #if TEXTURE_BORDER_SIZE != 1 + #error TEXTURE_BORDER_SIZE other than 1 is not currently supported + #endif +#else + #define TEXTURE_BORDER_SIZE 1 #endif #define CACHE_BLOCK_ROUNDING_SIZE 4 @@ -44,7 +47,7 @@ #define GET_GLYPH(text) nextGlyph((const uint16_t**) &text) #define IS_END_OF_STRING(glyph) false - static glyph_t nextGlyph(const uint16_t** srcPtr) { + static inline glyph_t nextGlyph(const uint16_t** srcPtr) { const uint16_t* src = *srcPtr; glyph_t g = *src++; *srcPtr = src; diff --git a/libs/hwui/renderthread/CanvasContext.cpp b/libs/hwui/renderthread/CanvasContext.cpp index b50a43378599..92a30e5dd29a 100644 --- a/libs/hwui/renderthread/CanvasContext.cpp +++ b/libs/hwui/renderthread/CanvasContext.cpp @@ -59,6 +59,7 @@ CanvasContext::~CanvasContext() { void CanvasContext::destroy() { stopDrawing(); + setSurface(NULL); freePrefetechedLayers(); destroyHardwareResources(); mAnimationContext->destroy(); @@ -66,7 +67,6 @@ void CanvasContext::destroy() { delete mCanvas; mCanvas = 0; } - setSurface(NULL); } void CanvasContext::setSurface(ANativeWindow* window) { diff --git a/libs/hwui/renderthread/RenderProxy.cpp b/libs/hwui/renderthread/RenderProxy.cpp index 047819de239a..c6ea82bbff30 100644 --- a/libs/hwui/renderthread/RenderProxy.cpp +++ b/libs/hwui/renderthread/RenderProxy.cpp @@ -349,8 +349,12 @@ CREATE_BRIDGE0(fence) { return NULL; } +template <typename T> +void UNUSED(T t) {} + void RenderProxy::fence() { SETUP_TASK(fence); + UNUSED(args); postAndWait(task); } diff --git a/libs/hwui/renderthread/RenderTask.cpp b/libs/hwui/renderthread/RenderTask.cpp index 7ca61e4838a9..13970bade02a 100644 --- a/libs/hwui/renderthread/RenderTask.cpp +++ b/libs/hwui/renderthread/RenderTask.cpp @@ -14,6 +14,10 @@ * limitations under the License. */ +// LOG_TAG is being provided by the Makefile, reset. +#ifdef LOG_TAG +#undef LOG_TAG +#endif #define LOG_TAG "RenderTask" #include "RenderTask.h" diff --git a/libs/input/Android.mk b/libs/input/Android.mk index a7fb0e212489..2bbfdcc8a816 100644 --- a/libs/input/Android.mk +++ b/libs/input/Android.mk @@ -27,14 +27,14 @@ LOCAL_SHARED_LIBRARIES := \ libskia \ libgui \ libui \ - libinput \ - libinputflinger + libinput \ + libinputflinger LOCAL_C_INCLUDES := \ frameworks/native/services -LOCAL_CFLAGS += -Wno-unused-parameter +LOCAL_CFLAGS += -Wall -Werror -Wunused -Wunreachable-code LOCAL_MODULE:= libinputservice diff --git a/libs/input/PointerController.cpp b/libs/input/PointerController.cpp index 9af521b7aba2..11527378f586 100644 --- a/libs/input/PointerController.cpp +++ b/libs/input/PointerController.cpp @@ -25,11 +25,14 @@ #include <cutils/log.h> +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wunused-parameter" #include <SkBitmap.h> #include <SkCanvas.h> #include <SkColor.h> #include <SkPaint.h> #include <SkXfermode.h> +#pragma GCC diagnostic pop namespace android { diff --git a/libs/input/SpriteController.cpp b/libs/input/SpriteController.cpp index 539139339197..0bc832a8fb37 100644 --- a/libs/input/SpriteController.cpp +++ b/libs/input/SpriteController.cpp @@ -24,11 +24,15 @@ #include <utils/String8.h> #include <gui/Surface.h> +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wunused-parameter" #include <SkBitmap.h> #include <SkCanvas.h> #include <SkColor.h> #include <SkPaint.h> #include <SkXfermode.h> +#pragma GCC diagnostic pop + #include <android/native_window.h> namespace android { diff --git a/libs/storage/Android.mk b/libs/storage/Android.mk index 7a9dd6c39157..fae2bf7c3457 100644 --- a/libs/storage/Android.mk +++ b/libs/storage/Android.mk @@ -9,4 +9,6 @@ LOCAL_SRC_FILES:= \ LOCAL_MODULE:= libstorage +LOCAL_CFLAGS += -Wall -Werror + include $(BUILD_STATIC_LIBRARY) diff --git a/libs/storage/IMountService.cpp b/libs/storage/IMountService.cpp index 621de18b1685..c643ed008a3b 100644 --- a/libs/storage/IMountService.cpp +++ b/libs/storage/IMountService.cpp @@ -64,7 +64,7 @@ public: { Parcel data, reply; data.writeInterfaceToken(IMountService::getInterfaceDescriptor()); - data.writeStrongBinder(listener->asBinder()); + data.writeStrongBinder(IInterface::asBinder(listener)); if (remote()->transact(TRANSACTION_registerListener, data, &reply) != NO_ERROR) { ALOGD("registerListener could not contact remote\n"); return; @@ -80,7 +80,7 @@ public: { Parcel data, reply; data.writeInterfaceToken(IMountService::getInterfaceDescriptor()); - data.writeStrongBinder(listener->asBinder()); + data.writeStrongBinder(IInterface::asBinder(listener)); if (remote()->transact(TRANSACTION_unregisterListener, data, &reply) != NO_ERROR) { ALOGD("unregisterListener could not contact remote\n"); return; @@ -207,12 +207,19 @@ public: ALOGD("getStorageUsers caught exception %d\n", err); return err; } - const int32_t numUsers = reply.readInt32(); + int32_t numUsersI = reply.readInt32(); + uint32_t numUsers; + if (numUsersI < 0) { + ALOGW("Number of users is negative: %d\n", numUsersI); + numUsers = 0; + } else { + numUsers = static_cast<uint32_t>(numUsersI); + } *users = (int32_t*)malloc(sizeof(int32_t)*numUsers); - for (int i = 0; i < numUsers; i++) { + for (size_t i = 0; i < numUsers; i++) { **users++ = reply.readInt32(); } - return numUsers; + return static_cast<int32_t>(numUsers); } int32_t getVolumeState(const String16& mountPoint) @@ -406,7 +413,7 @@ public: { Parcel data, reply; data.writeInterfaceToken(IMountService::getInterfaceDescriptor()); - data.writeStrongBinder(observer->asBinder()); + data.writeStrongBinder(IInterface::asBinder(observer)); if (remote()->transact(TRANSACTION_shutdown, data, &reply) != NO_ERROR) { ALOGD("shutdown could not contact remote\n"); return; @@ -443,7 +450,7 @@ public: data.writeString16(rawPath); data.writeString16(canonicalPath); data.writeString16(key); - data.writeStrongBinder(token->asBinder()); + data.writeStrongBinder(IInterface::asBinder(token)); data.writeInt32(nonce); if (remote()->transact(TRANSACTION_mountObb, data, &reply) != NO_ERROR) { ALOGD("mountObb could not contact remote\n"); @@ -463,7 +470,7 @@ public: data.writeInterfaceToken(IMountService::getInterfaceDescriptor()); data.writeString16(filename); data.writeInt32(force ? 1 : 0); - data.writeStrongBinder(token->asBinder()); + data.writeStrongBinder(IInterface::asBinder(token)); data.writeInt32(nonce); if (remote()->transact(TRANSACTION_unmountObb, data, &reply) != NO_ERROR) { ALOGD("unmountObb could not contact remote\n"); @@ -546,8 +553,8 @@ public: } }; -IMPLEMENT_META_INTERFACE(MountService, "IMountService"); +IMPLEMENT_META_INTERFACE(MountService, "IMountService") // ---------------------------------------------------------------------- -}; +} diff --git a/libs/storage/IMountServiceListener.cpp b/libs/storage/IMountServiceListener.cpp index c98a42461b15..11b53fdc1027 100644 --- a/libs/storage/IMountServiceListener.cpp +++ b/libs/storage/IMountServiceListener.cpp @@ -34,7 +34,7 @@ status_t BnMountServiceListener::onTransact( onUsbMassStorageConnectionChanged(connected); reply->writeNoException(); return NO_ERROR; - } break; + } case TRANSACTION_onStorageStateChanged: { CHECK_INTERFACE(IMountServiceListener, data, reply); String16 path = data.readString16(); @@ -50,4 +50,4 @@ status_t BnMountServiceListener::onTransact( } // ---------------------------------------------------------------------- -}; +} diff --git a/libs/storage/IMountShutdownObserver.cpp b/libs/storage/IMountShutdownObserver.cpp index 1a6fdeeac1d9..a74a768409bc 100644 --- a/libs/storage/IMountShutdownObserver.cpp +++ b/libs/storage/IMountShutdownObserver.cpp @@ -33,11 +33,11 @@ status_t BnMountShutdownObserver::onTransact( onShutDownComplete(statusCode); reply->writeNoException(); return NO_ERROR; - } break; + } default: return BBinder::onTransact(code, data, reply, flags); } } // ---------------------------------------------------------------------- -}; +} diff --git a/libs/storage/IObbActionListener.cpp b/libs/storage/IObbActionListener.cpp index eaa211ec98ab..9656e655e22c 100644 --- a/libs/storage/IObbActionListener.cpp +++ b/libs/storage/IObbActionListener.cpp @@ -30,10 +30,11 @@ public: : BpInterface<IObbActionListener>(impl) { } - virtual void onObbResult(const String16& filename, const int32_t nonce, const int32_t state) { } + virtual void onObbResult(const String16& /* filename */, const int32_t /* nonce */, + const int32_t /* state */) { } }; -IMPLEMENT_META_INTERFACE(ObbActionListener, "IObbActionListener"); +IMPLEMENT_META_INTERFACE(ObbActionListener, "IObbActionListener") // ---------------------------------------------------------------------- @@ -49,7 +50,7 @@ status_t BnObbActionListener::onTransact( onObbResult(filename, nonce, state); reply->writeNoException(); return NO_ERROR; - } break; + } default: return BBinder::onTransact(code, data, reply, flags); } @@ -57,4 +58,4 @@ status_t BnObbActionListener::onTransact( // ---------------------------------------------------------------------- -}; +} diff --git a/media/jni/Android.mk b/media/jni/Android.mk index 90fe6950335d..4ebbe2662a62 100644 --- a/media/jni/Android.mk +++ b/media/jni/Android.mk @@ -64,7 +64,7 @@ LOCAL_C_INCLUDES += \ $(PV_INCLUDES) \ $(JNI_H_INCLUDE) -LOCAL_CFLAGS += +LOCAL_CFLAGS += -Wall -Werror -Wunused -Wunreachable-code LOCAL_MODULE:= libmedia_jni diff --git a/media/jni/android_media_AmrInputStream.cpp b/media/jni/android_media_AmrInputStream.cpp index 3df653015fbd..afb5d5cbba74 100644 --- a/media/jni/android_media_AmrInputStream.cpp +++ b/media/jni/android_media_AmrInputStream.cpp @@ -50,7 +50,7 @@ struct GsmAmrEncoderState { }; static jlong android_media_AmrInputStream_GsmAmrEncoderNew - (JNIEnv *env, jclass clazz) { + (JNIEnv *env, jclass /* clazz */) { GsmAmrEncoderState* gae = new GsmAmrEncoderState(); if (gae == NULL) { jniThrowRuntimeException(env, "Out of memory"); @@ -59,7 +59,7 @@ static jlong android_media_AmrInputStream_GsmAmrEncoderNew } static void android_media_AmrInputStream_GsmAmrEncoderInitialize - (JNIEnv *env, jclass clazz, jlong gae) { + (JNIEnv *env, jclass /* clazz */, jlong gae) { GsmAmrEncoderState *state = (GsmAmrEncoderState *) gae; int32_t nResult = AMREncodeInit(&state->mEncState, &state->mSidState, false); if (nResult != OK) { @@ -69,7 +69,7 @@ static void android_media_AmrInputStream_GsmAmrEncoderInitialize } static jint android_media_AmrInputStream_GsmAmrEncoderEncode - (JNIEnv *env, jclass clazz, + (JNIEnv *env, jclass /* clazz */, jlong gae, jbyteArray pcm, jint pcmOffset, jbyteArray amr, jint amrOffset) { jbyte inBuf[BYTES_PER_FRAME]; @@ -105,7 +105,7 @@ static jint android_media_AmrInputStream_GsmAmrEncoderEncode } static void android_media_AmrInputStream_GsmAmrEncoderCleanup - (JNIEnv *env, jclass clazz, jlong gae) { + (JNIEnv* /* env */, jclass /* clazz */, jlong gae) { GsmAmrEncoderState *state = (GsmAmrEncoderState *) gae; AMREncodeExit(&state->mEncState, &state->mSidState); state->mEncState = NULL; @@ -113,7 +113,7 @@ static void android_media_AmrInputStream_GsmAmrEncoderCleanup } static void android_media_AmrInputStream_GsmAmrEncoderDelete - (JNIEnv *env, jclass clazz, jlong gae) { + (JNIEnv* /* env */, jclass /* clazz */, jlong gae) { delete (GsmAmrEncoderState*)gae; } diff --git a/media/jni/android_media_ImageReader.cpp b/media/jni/android_media_ImageReader.cpp index aaff9a2ce217..45377ad6b33d 100644 --- a/media/jni/android_media_ImageReader.cpp +++ b/media/jni/android_media_ImageReader.cpp @@ -502,7 +502,6 @@ static jint Image_imageGetPixelStride(JNIEnv* env, CpuConsumer::LockedBuffer* bu case HAL_PIXEL_FORMAT_Y8: // Single plane 8bpp data. ALOG_ASSERT(idx == 0, "Wrong index: %d", idx); - pixelStride; break; case HAL_PIXEL_FORMAT_YV12: pixelStride = 1; diff --git a/media/jni/android_media_MediaCodecList.cpp b/media/jni/android_media_MediaCodecList.cpp index 12eb7d24aed4..f8c349b54c53 100644 --- a/media/jni/android_media_MediaCodecList.cpp +++ b/media/jni/android_media_MediaCodecList.cpp @@ -42,7 +42,7 @@ static sp<IMediaCodecList> getCodecList(JNIEnv *env) { } static jint android_media_MediaCodecList_getCodecCount( - JNIEnv *env, jobject thiz) { + JNIEnv *env, jobject /* thiz */) { sp<IMediaCodecList> mcl = getCodecList(env); if (mcl == NULL) { // Runtime exception already pending. @@ -52,7 +52,7 @@ static jint android_media_MediaCodecList_getCodecCount( } static jstring android_media_MediaCodecList_getCodecName( - JNIEnv *env, jobject thiz, jint index) { + JNIEnv *env, jobject /* thiz */, jint index) { sp<IMediaCodecList> mcl = getCodecList(env); if (mcl == NULL) { // Runtime exception already pending. @@ -70,7 +70,7 @@ static jstring android_media_MediaCodecList_getCodecName( } static jint android_media_MediaCodecList_findCodecByName( - JNIEnv *env, jobject thiz, jstring name) { + JNIEnv *env, jobject /* thiz */, jstring name) { if (name == NULL) { jniThrowException(env, "java/lang/IllegalArgumentException", NULL); return -ENOENT; @@ -95,7 +95,7 @@ static jint android_media_MediaCodecList_findCodecByName( } static jboolean android_media_MediaCodecList_isEncoder( - JNIEnv *env, jobject thiz, jint index) { + JNIEnv *env, jobject /* thiz */, jint index) { sp<IMediaCodecList> mcl = getCodecList(env); if (mcl == NULL) { // Runtime exception already pending. @@ -112,7 +112,7 @@ static jboolean android_media_MediaCodecList_isEncoder( } static jarray android_media_MediaCodecList_getSupportedTypes( - JNIEnv *env, jobject thiz, jint index) { + JNIEnv *env, jobject /* thiz */, jint index) { sp<IMediaCodecList> mcl = getCodecList(env); if (mcl == NULL) { // Runtime exception already pending. @@ -144,7 +144,7 @@ static jarray android_media_MediaCodecList_getSupportedTypes( } static jobject android_media_MediaCodecList_getCodecCapabilities( - JNIEnv *env, jobject thiz, jint index, jstring type) { + JNIEnv *env, jobject /* thiz */, jint index, jstring type) { if (type == NULL) { jniThrowException(env, "java/lang/IllegalArgumentException", NULL); return NULL; @@ -262,7 +262,7 @@ static jobject android_media_MediaCodecList_getCodecCapabilities( return caps; } -static void android_media_MediaCodecList_native_init(JNIEnv *env) { +static void android_media_MediaCodecList_native_init(JNIEnv* /* env */) { } static JNINativeMethod gMethods[] = { diff --git a/media/jni/android_media_MediaCrypto.cpp b/media/jni/android_media_MediaCrypto.cpp index a6f8dcdda7ba..d2216fb97de4 100644 --- a/media/jni/android_media_MediaCrypto.cpp +++ b/media/jni/android_media_MediaCrypto.cpp @@ -224,7 +224,7 @@ static void android_media_MediaCrypto_native_finalize( } static jboolean android_media_MediaCrypto_isCryptoSchemeSupportedNative( - JNIEnv *env, jobject thiz, jbyteArray uuidObj) { + JNIEnv *env, jobject /* thiz */, jbyteArray uuidObj) { jsize uuidLength = env->GetArrayLength(uuidObj); if (uuidLength != 16) { diff --git a/media/jni/android_media_MediaDrm.cpp b/media/jni/android_media_MediaDrm.cpp index 0fed27e77ab7..91eb49975192 100644 --- a/media/jni/android_media_MediaDrm.cpp +++ b/media/jni/android_media_MediaDrm.cpp @@ -667,7 +667,7 @@ static void android_media_MediaDrm_native_finalize( } static jboolean android_media_MediaDrm_isCryptoSchemeSupportedNative( - JNIEnv *env, jobject thiz, jbyteArray uuidObj, jstring jmimeType) { + JNIEnv *env, jobject /* thiz */, jbyteArray uuidObj, jstring jmimeType) { if (uuidObj == NULL) { jniThrowException(env, "java/lang/IllegalArgumentException", NULL); @@ -1137,7 +1137,7 @@ static void android_media_MediaDrm_setPropertyByteArray( } static void android_media_MediaDrm_setCipherAlgorithmNative( - JNIEnv *env, jobject thiz, jobject jdrm, jbyteArray jsessionId, + JNIEnv *env, jobject /* thiz */, jobject jdrm, jbyteArray jsessionId, jstring jalgorithm) { sp<IDrm> drm = GetDrm(env, jdrm); @@ -1161,7 +1161,7 @@ static void android_media_MediaDrm_setCipherAlgorithmNative( } static void android_media_MediaDrm_setMacAlgorithmNative( - JNIEnv *env, jobject thiz, jobject jdrm, jbyteArray jsessionId, + JNIEnv *env, jobject /* thiz */, jobject jdrm, jbyteArray jsessionId, jstring jalgorithm) { sp<IDrm> drm = GetDrm(env, jdrm); @@ -1186,7 +1186,7 @@ static void android_media_MediaDrm_setMacAlgorithmNative( static jbyteArray android_media_MediaDrm_encryptNative( - JNIEnv *env, jobject thiz, jobject jdrm, jbyteArray jsessionId, + JNIEnv *env, jobject /* thiz */, jobject jdrm, jbyteArray jsessionId, jbyteArray jkeyId, jbyteArray jinput, jbyteArray jiv) { sp<IDrm> drm = GetDrm(env, jdrm); @@ -1217,7 +1217,7 @@ static jbyteArray android_media_MediaDrm_encryptNative( } static jbyteArray android_media_MediaDrm_decryptNative( - JNIEnv *env, jobject thiz, jobject jdrm, jbyteArray jsessionId, + JNIEnv *env, jobject /* thiz */, jobject jdrm, jbyteArray jsessionId, jbyteArray jkeyId, jbyteArray jinput, jbyteArray jiv) { sp<IDrm> drm = GetDrm(env, jdrm); @@ -1247,7 +1247,7 @@ static jbyteArray android_media_MediaDrm_decryptNative( } static jbyteArray android_media_MediaDrm_signNative( - JNIEnv *env, jobject thiz, jobject jdrm, jbyteArray jsessionId, + JNIEnv *env, jobject /* thiz */, jobject jdrm, jbyteArray jsessionId, jbyteArray jkeyId, jbyteArray jmessage) { sp<IDrm> drm = GetDrm(env, jdrm); @@ -1277,7 +1277,7 @@ static jbyteArray android_media_MediaDrm_signNative( } static jboolean android_media_MediaDrm_verifyNative( - JNIEnv *env, jobject thiz, jobject jdrm, jbyteArray jsessionId, + JNIEnv *env, jobject /* thiz */, jobject jdrm, jbyteArray jsessionId, jbyteArray jkeyId, jbyteArray jmessage, jbyteArray jsignature) { sp<IDrm> drm = GetDrm(env, jdrm); @@ -1306,7 +1306,7 @@ static jboolean android_media_MediaDrm_verifyNative( static jbyteArray android_media_MediaDrm_signRSANative( - JNIEnv *env, jobject thiz, jobject jdrm, jbyteArray jsessionId, + JNIEnv *env, jobject /* thiz */, jobject jdrm, jbyteArray jsessionId, jstring jalgorithm, jbyteArray jwrappedKey, jbyteArray jmessage) { sp<IDrm> drm = GetDrm(env, jdrm); diff --git a/media/jni/android_media_MediaExtractor.h b/media/jni/android_media_MediaExtractor.h index e5a0c16e3897..9f6250628869 100644 --- a/media/jni/android_media_MediaExtractor.h +++ b/media/jni/android_media_MediaExtractor.h @@ -30,7 +30,7 @@ namespace android { struct IMediaHTTPService; -struct MetaData; +class MetaData; struct NuMediaExtractor; struct JMediaExtractor : public RefBase { diff --git a/media/jni/android_media_MediaHTTPConnection.cpp b/media/jni/android_media_MediaHTTPConnection.cpp index 0e7d83ec9a1d..7226ef567cd1 100644 --- a/media/jni/android_media_MediaHTTPConnection.cpp +++ b/media/jni/android_media_MediaHTTPConnection.cpp @@ -128,7 +128,7 @@ static jobject android_media_MediaHTTPConnection_native_getIMemory( JNIEnv *env, jobject thiz) { sp<JMediaHTTPConnection> conn = getObject(env, thiz); - return javaObjectForIBinder(env, conn->getIMemory()->asBinder()); + return javaObjectForIBinder(env, IInterface::asBinder(conn->getIMemory())); } static jint android_media_MediaHTTPConnection_native_readAt( diff --git a/media/jni/android_media_MediaHTTPConnection.h b/media/jni/android_media_MediaHTTPConnection.h index 62ff678208f6..f87f1ebb0160 100644 --- a/media/jni/android_media_MediaHTTPConnection.h +++ b/media/jni/android_media_MediaHTTPConnection.h @@ -24,8 +24,8 @@ namespace android { -struct IMemory; -struct MemoryDealer; +class IMemory; +class MemoryDealer; struct JMediaHTTPConnection : public RefBase { enum { diff --git a/media/jni/android_media_MediaMetadataRetriever.cpp b/media/jni/android_media_MediaMetadataRetriever.cpp index fbe53402c673..dae6d3bbe4a7 100644 --- a/media/jni/android_media_MediaMetadataRetriever.cpp +++ b/media/jni/android_media_MediaMetadataRetriever.cpp @@ -77,7 +77,6 @@ static MediaMetadataRetriever* getRetriever(JNIEnv* env, jobject thiz) static void setRetriever(JNIEnv* env, jobject thiz, MediaMetadataRetriever* retriever) { // No lock is needed, since it is called internally by other methods that are protected - MediaMetadataRetriever *old = (MediaMetadataRetriever*) env->GetLongField(thiz, fields.context); env->SetLongField(thiz, fields.context, (jlong) retriever); } diff --git a/media/jni/android_media_MediaMuxer.cpp b/media/jni/android_media_MediaMuxer.cpp index 3fef446f0ca1..f234a1b6b937 100644 --- a/media/jni/android_media_MediaMuxer.cpp +++ b/media/jni/android_media_MediaMuxer.cpp @@ -41,7 +41,7 @@ static fields_t gFields; using namespace android; static jint android_media_MediaMuxer_addTrack( - JNIEnv *env, jclass clazz, jlong nativeObject, jobjectArray keys, + JNIEnv *env, jclass /* clazz */, jlong nativeObject, jobjectArray keys, jobjectArray values) { sp<MediaMuxer> muxer(reinterpret_cast<MediaMuxer *>(nativeObject)); if (muxer == NULL) { @@ -71,7 +71,7 @@ static jint android_media_MediaMuxer_addTrack( } static void android_media_MediaMuxer_writeSampleData( - JNIEnv *env, jclass clazz, jlong nativeObject, jint trackIndex, + JNIEnv *env, jclass /* clazz */, jlong nativeObject, jint trackIndex, jobject byteBuf, jint offset, jint size, jlong timeUs, jint flags) { sp<MediaMuxer> muxer(reinterpret_cast<MediaMuxer *>(nativeObject)); if (muxer == NULL) { @@ -146,7 +146,7 @@ static jlong android_media_MediaMuxer_native_setup( } static void android_media_MediaMuxer_setOrientationHint( - JNIEnv *env, jclass clazz, jlong nativeObject, jint degrees) { + JNIEnv *env, jclass /* clazz */, jlong nativeObject, jint degrees) { sp<MediaMuxer> muxer(reinterpret_cast<MediaMuxer *>(nativeObject)); if (muxer == NULL) { jniThrowException(env, "java/lang/IllegalStateException", @@ -164,7 +164,7 @@ static void android_media_MediaMuxer_setOrientationHint( } static void android_media_MediaMuxer_setLocation( - JNIEnv *env, jclass clazz, jlong nativeObject, jint latitude, jint longitude) { + JNIEnv *env, jclass /* clazz */, jlong nativeObject, jint latitude, jint longitude) { MediaMuxer* muxer = reinterpret_cast<MediaMuxer *>(nativeObject); status_t res = muxer->setLocation(latitude, longitude); @@ -175,7 +175,7 @@ static void android_media_MediaMuxer_setLocation( } } -static void android_media_MediaMuxer_start(JNIEnv *env, jclass clazz, +static void android_media_MediaMuxer_start(JNIEnv *env, jclass /* clazz */, jlong nativeObject) { sp<MediaMuxer> muxer(reinterpret_cast<MediaMuxer *>(nativeObject)); if (muxer == NULL) { @@ -193,7 +193,7 @@ static void android_media_MediaMuxer_start(JNIEnv *env, jclass clazz, } -static void android_media_MediaMuxer_stop(JNIEnv *env, jclass clazz, +static void android_media_MediaMuxer_stop(JNIEnv *env, jclass /* clazz */, jlong nativeObject) { sp<MediaMuxer> muxer(reinterpret_cast<MediaMuxer *>(nativeObject)); if (muxer == NULL) { @@ -212,7 +212,7 @@ static void android_media_MediaMuxer_stop(JNIEnv *env, jclass clazz, } static void android_media_MediaMuxer_native_release( - JNIEnv *env, jclass clazz, jlong nativeObject) { + JNIEnv* /* env */, jclass clazz, jlong nativeObject) { sp<MediaMuxer> muxer(reinterpret_cast<MediaMuxer *>(nativeObject)); if (muxer != NULL) { muxer->decStrong(clazz); diff --git a/media/jni/android_media_MediaPlayer.cpp b/media/jni/android_media_MediaPlayer.cpp index 73a924def2d3..820de5b1ab86 100644 --- a/media/jni/android_media_MediaPlayer.cpp +++ b/media/jni/android_media_MediaPlayer.cpp @@ -895,8 +895,6 @@ static JNINativeMethod gMethods[] = { {"setNextMediaPlayer", "(Landroid/media/MediaPlayer;)V", (void *)android_media_MediaPlayer_setNextMediaPlayer}, }; -static const char* const kClassPathName = "android/media/MediaPlayer"; - // This function only registers the native methods static int register_android_media_MediaPlayer(JNIEnv *env) { diff --git a/media/jni/android_media_MediaProfiles.cpp b/media/jni/android_media_MediaProfiles.cpp index 007fc1422f8d..ca9db91c5eed 100644 --- a/media/jni/android_media_MediaProfiles.cpp +++ b/media/jni/android_media_MediaProfiles.cpp @@ -34,7 +34,7 @@ MediaProfiles *sProfiles = NULL; // This function is called from a static block in MediaProfiles.java class, // which won't run until the first time an instance of this class is used. static void -android_media_MediaProfiles_native_init(JNIEnv *env) +android_media_MediaProfiles_native_init(JNIEnv* /* env */) { ALOGV("native_init"); Mutex::Autolock lock(sLock); @@ -45,14 +45,14 @@ android_media_MediaProfiles_native_init(JNIEnv *env) } static jint -android_media_MediaProfiles_native_get_num_file_formats(JNIEnv *env, jobject thiz) +android_media_MediaProfiles_native_get_num_file_formats(JNIEnv* /* env */, jobject /* thiz */) { ALOGV("native_get_num_file_formats"); return (jint) sProfiles->getOutputFileFormats().size(); } static jint -android_media_MediaProfiles_native_get_file_format(JNIEnv *env, jobject thiz, jint index) +android_media_MediaProfiles_native_get_file_format(JNIEnv *env, jobject /* thiz */, jint index) { ALOGV("native_get_file_format: %d", index); Vector<output_format> formats = sProfiles->getOutputFileFormats(); @@ -65,14 +65,15 @@ android_media_MediaProfiles_native_get_file_format(JNIEnv *env, jobject thiz, ji } static jint -android_media_MediaProfiles_native_get_num_video_encoders(JNIEnv *env, jobject thiz) +android_media_MediaProfiles_native_get_num_video_encoders(JNIEnv* /* env */, jobject /* thiz */) { ALOGV("native_get_num_video_encoders"); return sProfiles->getVideoEncoders().size(); } static jobject -android_media_MediaProfiles_native_get_video_encoder_cap(JNIEnv *env, jobject thiz, jint index) +android_media_MediaProfiles_native_get_video_encoder_cap(JNIEnv *env, jobject /* thiz */, + jint index) { ALOGV("native_get_video_encoder_cap: %d", index); Vector<video_encoder> encoders = sProfiles->getVideoEncoders(); @@ -116,14 +117,15 @@ android_media_MediaProfiles_native_get_video_encoder_cap(JNIEnv *env, jobject th } static jint -android_media_MediaProfiles_native_get_num_audio_encoders(JNIEnv *env, jobject thiz) +android_media_MediaProfiles_native_get_num_audio_encoders(JNIEnv* /* env */, jobject /* thiz */) { ALOGV("native_get_num_audio_encoders"); return (jint) sProfiles->getAudioEncoders().size(); } static jobject -android_media_MediaProfiles_native_get_audio_encoder_cap(JNIEnv *env, jobject thiz, jint index) +android_media_MediaProfiles_native_get_audio_encoder_cap(JNIEnv *env, jobject /* thiz */, + jint index) { ALOGV("native_get_audio_encoder_cap: %d", index); Vector<audio_encoder> encoders = sProfiles->getAudioEncoders(); @@ -172,7 +174,8 @@ static bool isCamcorderQualityKnown(int quality) } static jobject -android_media_MediaProfiles_native_get_camcorder_profile(JNIEnv *env, jobject thiz, jint id, jint quality) +android_media_MediaProfiles_native_get_camcorder_profile(JNIEnv *env, jobject /* thiz */, jint id, + jint quality) { ALOGV("native_get_camcorder_profile: %d %d", id, quality); if (!isCamcorderQualityKnown(quality)) { @@ -221,7 +224,8 @@ android_media_MediaProfiles_native_get_camcorder_profile(JNIEnv *env, jobject th } static jboolean -android_media_MediaProfiles_native_has_camcorder_profile(JNIEnv *env, jobject thiz, jint id, jint quality) +android_media_MediaProfiles_native_has_camcorder_profile(JNIEnv* /* env */, jobject /* thiz */, + jint id, jint quality) { ALOGV("native_has_camcorder_profile: %d %d", id, quality); if (!isCamcorderQualityKnown(quality)) { @@ -233,14 +237,15 @@ android_media_MediaProfiles_native_has_camcorder_profile(JNIEnv *env, jobject th } static jint -android_media_MediaProfiles_native_get_num_video_decoders(JNIEnv *env, jobject thiz) +android_media_MediaProfiles_native_get_num_video_decoders(JNIEnv* /* env */, jobject /* thiz */) { ALOGV("native_get_num_video_decoders"); return (jint) sProfiles->getVideoDecoders().size(); } static jint -android_media_MediaProfiles_native_get_video_decoder_type(JNIEnv *env, jobject thiz, jint index) +android_media_MediaProfiles_native_get_video_decoder_type(JNIEnv *env, jobject /* thiz */, + jint index) { ALOGV("native_get_video_decoder_type: %d", index); Vector<video_decoder> decoders = sProfiles->getVideoDecoders(); @@ -254,14 +259,15 @@ android_media_MediaProfiles_native_get_video_decoder_type(JNIEnv *env, jobject t } static jint -android_media_MediaProfiles_native_get_num_audio_decoders(JNIEnv *env, jobject thiz) +android_media_MediaProfiles_native_get_num_audio_decoders(JNIEnv* /* env */, jobject /* thiz */) { ALOGV("native_get_num_audio_decoders"); return (jint) sProfiles->getAudioDecoders().size(); } static jint -android_media_MediaProfiles_native_get_audio_decoder_type(JNIEnv *env, jobject thiz, jint index) +android_media_MediaProfiles_native_get_audio_decoder_type(JNIEnv *env, jobject /* thiz */, + jint index) { ALOGV("native_get_audio_decoder_type: %d", index); Vector<audio_decoder> decoders = sProfiles->getAudioDecoders(); @@ -275,14 +281,17 @@ android_media_MediaProfiles_native_get_audio_decoder_type(JNIEnv *env, jobject t } static jint -android_media_MediaProfiles_native_get_num_image_encoding_quality_levels(JNIEnv *env, jobject thiz, jint cameraId) +android_media_MediaProfiles_native_get_num_image_encoding_quality_levels(JNIEnv* /* env */, + jobject /* thiz */, + jint cameraId) { ALOGV("native_get_num_image_encoding_quality_levels"); return (jint) sProfiles->getImageEncodingQualityLevels(cameraId).size(); } static jint -android_media_MediaProfiles_native_get_image_encoding_quality_level(JNIEnv *env, jobject thiz, jint cameraId, jint index) +android_media_MediaProfiles_native_get_image_encoding_quality_level(JNIEnv *env, jobject /* thiz */, + jint cameraId, jint index) { ALOGV("native_get_image_encoding_quality_level"); Vector<int> levels = sProfiles->getImageEncodingQualityLevels(cameraId); diff --git a/media/jni/android_media_MediaRecorder.cpp b/media/jni/android_media_MediaRecorder.cpp index 56467403179d..ab8b4b8fd9c9 100644 --- a/media/jni/android_media_MediaRecorder.cpp +++ b/media/jni/android_media_MediaRecorder.cpp @@ -461,11 +461,13 @@ android_media_MediaRecorder_native_setup(JNIEnv *env, jobject thiz, jobject weak sp<JNIMediaRecorderListener> listener = new JNIMediaRecorderListener(env, thiz, weak_this); mr->setListener(listener); - // Convert client name jstring to String16 - const char16_t *rawClientName = env->GetStringChars(packageName, NULL); + // Convert client name jstring to String16 + const char16_t *rawClientName = reinterpret_cast<const char16_t*>( + env->GetStringChars(packageName, NULL)); jsize rawClientNameLen = env->GetStringLength(packageName); String16 clientName(rawClientName, rawClientNameLen); - env->ReleaseStringChars(packageName, rawClientName); + env->ReleaseStringChars(packageName, + reinterpret_cast<const jchar*>(rawClientName)); // pass client package name for permissions tracking mr->setClientName(clientName); @@ -507,8 +509,6 @@ static JNINativeMethod gMethods[] = { {"native_finalize", "()V", (void *)android_media_MediaRecorder_native_finalize}, }; -static const char* const kClassPathName = "android/media/MediaRecorder"; - // This function only registers the native methods, and is called from // JNI_OnLoad in android_media_MediaPlayer.cpp int register_android_media_MediaRecorder(JNIEnv *env) diff --git a/media/jni/android_media_MediaScanner.cpp b/media/jni/android_media_MediaScanner.cpp index 321c2e3dcc44..1a9384e6b2c8 100644 --- a/media/jni/android_media_MediaScanner.cpp +++ b/media/jni/android_media_MediaScanner.cpp @@ -360,7 +360,6 @@ android_media_MediaScanner_extractAlbumArt( env->SetByteArrayRegion(array, 0, mediaAlbumArt->size(), data); } -done: free(mediaAlbumArt); // if NewByteArray() returned NULL, an out-of-memory // exception will have been raised. I just want to diff --git a/media/jni/android_media_ResampleInputStream.cpp b/media/jni/android_media_ResampleInputStream.cpp index d5a4a1795d71..1549a301772a 100644 --- a/media/jni/android_media_ResampleInputStream.cpp +++ b/media/jni/android_media_ResampleInputStream.cpp @@ -73,7 +73,7 @@ static const int nFir21 = sizeof(fir21) / sizeof(fir21[0]); static const int BUF_SIZE = 2048; -static void android_media_ResampleInputStream_fir21(JNIEnv *env, jclass clazz, +static void android_media_ResampleInputStream_fir21(JNIEnv *env, jclass /* clazz */, jbyteArray jIn, jint jInOffset, jbyteArray jOut, jint jOutOffset, jint jNpoints) { diff --git a/media/jni/android_media_Utils.cpp b/media/jni/android_media_Utils.cpp index 54c5e9bdd267..ea33a2f52fc3 100644 --- a/media/jni/android_media_Utils.cpp +++ b/media/jni/android_media_Utils.cpp @@ -136,8 +136,7 @@ static void SetMapInt32( jstring keyObj = env->NewStringUTF(key); jobject valueObj = makeIntegerObject(env, value); - jobject res = env->CallObjectMethod( - hashMapObj, hashMapPutID, keyObj, valueObj); + env->CallObjectMethod(hashMapObj, hashMapPutID, keyObj, valueObj); env->DeleteLocalRef(valueObj); valueObj = NULL; env->DeleteLocalRef(keyObj); keyObj = NULL; @@ -266,8 +265,7 @@ status_t ConvertMessageToMap( if (valueObj != NULL) { jstring keyObj = env->NewStringUTF(key); - jobject res = env->CallObjectMethod( - hashMap, hashMapPutID, keyObj, valueObj); + env->CallObjectMethod(hashMap, hashMapPutID, keyObj, valueObj); env->DeleteLocalRef(keyObj); keyObj = NULL; env->DeleteLocalRef(valueObj); valueObj = NULL; diff --git a/media/jni/android_mtp_MtpDatabase.cpp b/media/jni/android_mtp_MtpDatabase.cpp index 19b54a6d8f78..f381488ae00d 100644 --- a/media/jni/android_mtp_MtpDatabase.cpp +++ b/media/jni/android_mtp_MtpDatabase.cpp @@ -761,7 +761,7 @@ MtpResponseCode MyMtpDatabase::getObjectPropertyList(MtpObjectHandle handle, return result; } -static void foreachentry(ExifEntry *entry, void *user) { +static void foreachentry(ExifEntry *entry, void* /* user */) { char buf[1024]; ALOGI("entry %x, format %d, size %d: %s", entry->tag, entry->format, entry->size, exif_entry_get_value(entry, buf, sizeof(buf))); @@ -779,7 +779,6 @@ static long getLongFromExifEntry(ExifEntry *e) { MtpResponseCode MyMtpDatabase::getObjectInfo(MtpObjectHandle handle, MtpObjectInfo& info) { - char date[20]; MtpString path; int64_t length; MtpObjectFormat format; @@ -807,13 +806,15 @@ MtpResponseCode MyMtpDatabase::getObjectInfo(MtpObjectHandle handle, info.mDateModified = longValues[1]; env->ReleaseLongArrayElements(mLongBuffer, longValues, 0); -// info.mAssociationType = (format == MTP_FORMAT_ASSOCIATION ? -// MTP_ASSOCIATION_TYPE_GENERIC_FOLDER : -// MTP_ASSOCIATION_TYPE_UNDEFINED); + if ((false)) { + info.mAssociationType = (format == MTP_FORMAT_ASSOCIATION ? + MTP_ASSOCIATION_TYPE_GENERIC_FOLDER : + MTP_ASSOCIATION_TYPE_UNDEFINED); + } info.mAssociationType = MTP_ASSOCIATION_TYPE_UNDEFINED; jchar* str = env->GetCharArrayElements(mStringBuffer, 0); - MtpString temp(str); + MtpString temp(reinterpret_cast<char16_t*>(str)); info.mName = strdup((const char *)temp); env->ReleaseCharArrayElements(mStringBuffer, str, 0); @@ -822,7 +823,9 @@ MtpResponseCode MyMtpDatabase::getObjectInfo(MtpObjectHandle handle, ExifData *exifdata = exif_data_new_from_file(path); if (exifdata) { - //exif_data_foreach_content(exifdata, foreachcontent, NULL); + if ((false)) { + exif_data_foreach_content(exifdata, foreachcontent, NULL); + } // XXX get this from exif, or parse jpeg header instead? ExifEntry *w = exif_content_get_entry( @@ -880,7 +883,8 @@ MtpResponseCode MyMtpDatabase::getObjectFilePath(MtpObjectHandle handle, } jchar* str = env->GetCharArrayElements(mStringBuffer, 0); - outFilePath.setTo(str, strlen16(str)); + outFilePath.setTo(reinterpret_cast<char16_t*>(str), + strlen16(reinterpret_cast<char16_t*>(str))); env->ReleaseCharArrayElements(mStringBuffer, str, 0); jlong* longValues = env->GetLongArrayElements(mLongBuffer, 0); @@ -1170,8 +1174,6 @@ static JNINativeMethod gMtpPropertyGroupMethods[] = { (void *)android_mtp_MtpPropertyGroup_format_date_time}, }; -static const char* const kClassPathName = "android/mtp/MtpDatabase"; - int register_android_mtp_MtpDatabase(JNIEnv *env) { jclass clazz; diff --git a/media/jni/android_mtp_MtpDevice.cpp b/media/jni/android_mtp_MtpDevice.cpp index 8e013a03316e..2dbd7dcc8335 100644 --- a/media/jni/android_mtp_MtpDevice.cpp +++ b/media/jni/android_mtp_MtpDevice.cpp @@ -91,14 +91,6 @@ MtpDevice* get_device_from_object(JNIEnv* env, jobject javaDevice) return (MtpDevice*)env->GetLongField(javaDevice, field_context); } -static void checkAndClearExceptionFromCallback(JNIEnv* env, const char* methodName) { - if (env->ExceptionCheck()) { - ALOGE("An exception was thrown by callback '%s'.", methodName); - LOGE_EX(env); - env->ExceptionClear(); - } -} - // ---------------------------------------------------------------------------- static jboolean @@ -425,8 +417,6 @@ static JNINativeMethod gMethods[] = { (void *)android_mtp_MtpDevice_import_file}, }; -static const char* const kClassPathName = "android/mtp/MtpDevice"; - int register_android_mtp_MtpDevice(JNIEnv *env) { jclass clazz; diff --git a/media/jni/android_mtp_MtpServer.cpp b/media/jni/android_mtp_MtpServer.cpp index 2f90dfede994..2ce2a904e0f0 100644 --- a/media/jni/android_mtp_MtpServer.cpp +++ b/media/jni/android_mtp_MtpServer.cpp @@ -193,8 +193,6 @@ static JNINativeMethod gMethods[] = { {"native_remove_storage", "(I)V", (void *)android_mtp_MtpServer_remove_storage}, }; -static const char* const kClassPathName = "android/mtp/MtpServer"; - int register_android_mtp_MtpServer(JNIEnv *env) { jclass clazz; diff --git a/media/jni/audioeffect/Android.mk b/media/jni/audioeffect/Android.mk index 3b1fb19fc01e..5c22c9b96761 100644 --- a/media/jni/audioeffect/Android.mk +++ b/media/jni/audioeffect/Android.mk @@ -2,20 +2,22 @@ LOCAL_PATH:= $(call my-dir) include $(CLEAR_VARS) LOCAL_SRC_FILES:= \ - android_media_AudioEffect.cpp \ - android_media_Visualizer.cpp + android_media_AudioEffect.cpp \ + android_media_Visualizer.cpp LOCAL_SHARED_LIBRARIES := \ - liblog \ - libcutils \ - libutils \ - libandroid_runtime \ - libnativehelper \ - libmedia + liblog \ + libcutils \ + libutils \ + libandroid_runtime \ + libnativehelper \ + libmedia LOCAL_C_INCLUDES := \ - $(call include-path-for, audio-effects) + $(call include-path-for, audio-effects) LOCAL_MODULE:= libaudioeffect_jni +LOCAL_CFLAGS += -Wall -Werror -Wunused -Wunreachable-code + include $(BUILD_SHARED_LIBRARY) diff --git a/media/jni/audioeffect/android_media_Visualizer.cpp b/media/jni/audioeffect/android_media_Visualizer.cpp index 8463d94ad3ff..9183ad2a42cf 100644 --- a/media/jni/audioeffect/android_media_Visualizer.cpp +++ b/media/jni/audioeffect/android_media_Visualizer.cpp @@ -162,10 +162,6 @@ static void captureCallback(void* user, uint8_t *fft, uint32_t samplingrate) { - int arg1 = 0; - int arg2 = 0; - size_t size; - visualizer_callback_cookie *callbackInfo = (visualizer_callback_cookie *)user; JNIEnv *env = AndroidRuntime::getJNIEnv(); @@ -486,7 +482,7 @@ android_media_visualizer_native_getEnabled(JNIEnv *env, jobject thiz) } static jintArray -android_media_visualizer_native_getCaptureSizeRange(JNIEnv *env, jobject thiz) +android_media_visualizer_native_getCaptureSizeRange(JNIEnv *env, jobject /* thiz */) { jintArray jRange = env->NewIntArray(2); jint *nRange = env->GetIntArrayElements(jRange, NULL); @@ -498,7 +494,7 @@ android_media_visualizer_native_getCaptureSizeRange(JNIEnv *env, jobject thiz) } static jint -android_media_visualizer_native_getMaxCaptureRate(JNIEnv *env, jobject thiz) +android_media_visualizer_native_getMaxCaptureRate(JNIEnv* /* env */, jobject /* thiz */) { return (jint) Visualizer::getMaxCaptureRate(); } diff --git a/media/jni/soundpool/Android.mk b/media/jni/soundpool/Android.mk index ed8d7c10f370..3382512f7444 100644 --- a/media/jni/soundpool/Android.mk +++ b/media/jni/soundpool/Android.mk @@ -2,16 +2,18 @@ LOCAL_PATH:= $(call my-dir) include $(CLEAR_VARS) LOCAL_SRC_FILES:= \ - android_media_SoundPool_SoundPoolImpl.cpp + android_media_SoundPool_SoundPoolImpl.cpp LOCAL_SHARED_LIBRARIES := \ - liblog \ - libcutils \ - libutils \ - libandroid_runtime \ - libnativehelper \ - libmedia + liblog \ + libcutils \ + libutils \ + libandroid_runtime \ + libnativehelper \ + libmedia LOCAL_MODULE:= libsoundpool +LOCAL_CFLAGS += -Wall -Werror -Wunused -Wunreachable-code + include $(BUILD_SHARED_LIBRARY) diff --git a/media/jni/soundpool/android_media_SoundPool_SoundPoolImpl.cpp b/media/jni/soundpool/android_media_SoundPool_SoundPoolImpl.cpp index 89b2893a648a..ce20e526cf7d 100644 --- a/media/jni/soundpool/android_media_SoundPool_SoundPoolImpl.cpp +++ b/media/jni/soundpool/android_media_SoundPool_SoundPoolImpl.cpp @@ -312,7 +312,7 @@ static JNINativeMethod gMethods[] = { static const char* const kClassPathName = "android/media/SoundPool$SoundPoolImpl"; -jint JNI_OnLoad(JavaVM* vm, void* reserved) +jint JNI_OnLoad(JavaVM* vm, void* /* reserved */) { JNIEnv* env = NULL; jint result = -1; diff --git a/media/mca/filterfw/Android.mk b/media/mca/filterfw/Android.mk index a5b4b275d234..a63d635a3926 100644 --- a/media/mca/filterfw/Android.mk +++ b/media/mca/filterfw/Android.mk @@ -49,5 +49,4 @@ LOCAL_SHARED_LIBRARIES := \ # part of a system image. LOCAL_PRELINK_MODULE := false -include external/stlport/libstlport.mk include $(BUILD_SHARED_LIBRARY) diff --git a/media/mca/filterfw/jni/Android.mk b/media/mca/filterfw/jni/Android.mk index 5aa5af17e90d..67337e03fe18 100644 --- a/media/mca/filterfw/jni/Android.mk +++ b/media/mca/filterfw/jni/Android.mk @@ -38,8 +38,8 @@ include $(LOCAL_PATH)/../native/libfilterfw.mk # Also need the JNI headers. LOCAL_C_INCLUDES += \ - $(JNI_H_INCLUDE) \ - $(LOCAL_PATH)/.. + $(JNI_H_INCLUDE) \ + $(LOCAL_PATH)/.. # Don't prelink this library. For more efficient code, you may want # to add this library to the prelink map and set this to true. However, @@ -47,5 +47,7 @@ LOCAL_C_INCLUDES += \ # part of a system image. LOCAL_PRELINK_MODULE := false +LOCAL_CFLAGS += -Wall -Werror -Wunused -Wunreachable-code + include $(BUILD_STATIC_LIBRARY) diff --git a/media/mca/filterfw/jni/jni_gl_environment.cpp b/media/mca/filterfw/jni/jni_gl_environment.cpp index 6da7b7c766fd..5f007396f287 100644 --- a/media/mca/filterfw/jni/jni_gl_environment.cpp +++ b/media/mca/filterfw/jni/jni_gl_environment.cpp @@ -20,8 +20,8 @@ #include "jni/jni_gl_environment.h" #include "jni/jni_util.h" -#include <media/mediarecorder.h> #include "native/core/gl_env.h" +#include <media/mediarecorder.h> #include <gui/IGraphicBufferProducer.h> #include <gui/Surface.h> @@ -92,8 +92,8 @@ jboolean Java_android_filterfw_core_GLEnvironment_nativeIsContextActive(JNIEnv* return gl_env ? ToJBool(gl_env->IsContextActive()) : JNI_FALSE; } -jboolean Java_android_filterfw_core_GLEnvironment_nativeIsAnyContextActive(JNIEnv* env, - jclass clazz) { +jboolean Java_android_filterfw_core_GLEnvironment_nativeIsAnyContextActive(JNIEnv* /* env */, + jclass /* clazz */) { return ToJBool(GLEnv::IsAnyContextActive()); } diff --git a/media/mca/filterfw/jni/jni_init.cpp b/media/mca/filterfw/jni/jni_init.cpp index 3b131f1478ad..956a5a5c9854 100644 --- a/media/mca/filterfw/jni/jni_init.cpp +++ b/media/mca/filterfw/jni/jni_init.cpp @@ -27,7 +27,7 @@ using namespace android::filterfw; JavaVM* g_current_java_vm_ = NULL; -jint JNI_OnLoad(JavaVM* vm, void* reserved) { +jint JNI_OnLoad(JavaVM* vm, void* /* reserved */) { // Set the current vm pointer g_current_java_vm_ = vm; diff --git a/media/mca/filterfw/jni/jni_util.h b/media/mca/filterfw/jni/jni_util.h index 68ff65371454..11c087170106 100644 --- a/media/mca/filterfw/jni/jni_util.h +++ b/media/mca/filterfw/jni/jni_util.h @@ -16,7 +16,7 @@ #include <jni.h> -#include <hash_map> +#include <unordered_map> #include <string> #include "base/utilities.h" @@ -188,8 +188,8 @@ class ObjectPool { id_field_name_(id_fld_name), next_id_(0) { } - typedef std::hash_map<int, T*> CObjMap; - typedef std::hash_map<int, bool> FlagMap; + typedef std::unordered_map<int, T*> CObjMap; + typedef std::unordered_map<int, bool> FlagMap; static ObjectPool* instance_; std::string jclass_name_; std::string id_field_name_; diff --git a/media/mca/filterfw/native/Android.mk b/media/mca/filterfw/native/Android.mk index 46ee28302cfa..7c4703fd5172 100644 --- a/media/mca/filterfw/native/Android.mk +++ b/media/mca/filterfw/native/Android.mk @@ -39,6 +39,8 @@ include $(LOCAL_PATH)/libfilterfw.mk # gcc should always be placed at the end. LOCAL_EXPORT_LDLIBS := -llog -lgcc +LOCAL_CFLAGS += -Wall -Werror -Wunused -Wunreachable-code + # TODO: Build a shared library as well? include $(BUILD_STATIC_LIBRARY) diff --git a/media/mca/filterfw/native/core/shader_program.cpp b/media/mca/filterfw/native/core/shader_program.cpp index d92eb313200e..f1ea7edc3764 100644 --- a/media/mca/filterfw/native/core/shader_program.cpp +++ b/media/mca/filterfw/native/core/shader_program.cpp @@ -30,9 +30,6 @@ namespace android { namespace filterfw { -// VBO attachment keys -static const int kDefaultVboKey = 1; - static const char* s_default_vertex_shader_source_ = "attribute vec4 a_position;\n" "attribute vec2 a_texcoord;\n" @@ -55,10 +52,6 @@ static void GetTileCoords(const float* b, float x, float y, float* xt, float* yt *yt = w0 * b[1] + w1 * b[3] + w2 * b[5] + w3 * b[7]; } -static inline float AdjustRatio(float current, float next) { - return (current + next) / 2.0; -} - // VertexAttrib implementation ///////////////////////////////////////////////// ShaderProgram::VertexAttrib::VertexAttrib() : is_const(true), @@ -318,15 +311,15 @@ GLuint ShaderProgram::CompileShader(GLenum shader_type, const char* source) { ALOGE("Problem compiling shader! Source:"); ALOGE("%s", source); std::string src(source); - unsigned int cur_pos = 0; - unsigned int next_pos = 0; - int line_number = 1; + size_t cur_pos = 0; + size_t next_pos = 0; + size_t line_number = 1; while ( (next_pos = src.find_first_of('\n', cur_pos)) != std::string::npos) { ALOGE("%03d : %s", line_number, src.substr(cur_pos, next_pos-cur_pos).c_str()); cur_pos = next_pos + 1; line_number++; } - ALOGE("%03d : %s", line_number, src.substr(cur_pos, next_pos-cur_pos).c_str()); + ALOGE("%03zu : %s", line_number, src.substr(cur_pos, next_pos-cur_pos).c_str()); GLint log_length = 0; glGetShaderiv(shader, GL_INFO_LOG_LENGTH, &log_length); diff --git a/media/mca/filterfw/native/core/vertex_frame.cpp b/media/mca/filterfw/native/core/vertex_frame.cpp index 822573fcc32a..9fb9eaa92721 100644 --- a/media/mca/filterfw/native/core/vertex_frame.cpp +++ b/media/mca/filterfw/native/core/vertex_frame.cpp @@ -25,10 +25,6 @@ namespace android { namespace filterfw { -// GL Extensions that are dynamically looked up at runtime -static PFNGLMAPBUFFEROESPROC GLMapBufferOES = NULL; -static PFNGLUNMAPBUFFEROESPROC GLUnmapBufferOES = NULL; - VertexFrame::VertexFrame(int size) : vbo_(0), size_(size) { diff --git a/media/mca/filterfw/native/libfilterfw.mk b/media/mca/filterfw/native/libfilterfw.mk index 4e88e6faa518..69227ce24c4d 100644 --- a/media/mca/filterfw/native/libfilterfw.mk +++ b/media/mca/filterfw/native/libfilterfw.mk @@ -18,9 +18,6 @@ FFW_PATH := $(call my-dir) # Uncomment the requirements below, once we need them: -# STLport -include external/stlport/libstlport.mk - # Neven FaceDetect SDK #LOCAL_C_INCLUDES += external/neven/FaceRecEm/common/src/b_FDSDK \ # external/neven/FaceRecEm/common/src \ diff --git a/media/mca/filterpacks/Android.mk b/media/mca/filterpacks/Android.mk index 6e54f604baa0..7e8661fd213b 100644 --- a/media/mca/filterpacks/Android.mk +++ b/media/mca/filterpacks/Android.mk @@ -28,7 +28,7 @@ LOCAL_SRC_FILES := native/base/geometry.cpp \ LOCAL_CFLAGS := -DANDROID -include external/stlport/libstlport.mk +LOCAL_CFLAGS += -Wall -Werror -Wunused -Wunreachable-code include $(BUILD_STATIC_LIBRARY) @@ -50,4 +50,6 @@ LOCAL_SHARED_LIBRARIES := liblog libutils libfilterfw LOCAL_PRELINK_MODULE := false +LOCAL_CFLAGS += -Wall -Werror -Wunused -Wunreachable-code + include $(BUILD_SHARED_LIBRARY) diff --git a/media/mca/filterpacks/native/imageproc/invert.c b/media/mca/filterpacks/native/imageproc/invert.c index 5938aac05ffc..f5f9e2728a85 100644 --- a/media/mca/filterpacks/native/imageproc/invert.c +++ b/media/mca/filterpacks/native/imageproc/invert.c @@ -16,12 +16,14 @@ #include <android/log.h> +#define ATTRIBUTE_UNUSED __attribute__((unused)) + int invert_process(const char** inputs, const int* input_sizes, int input_count, char* output, int output_size, - void* user_data) { + void* user_data ATTRIBUTE_UNUSED) { // Make sure we have exactly one input if (input_count != 1) return 0; diff --git a/media/mca/filterpacks/native/imageproc/to_rgba.c b/media/mca/filterpacks/native/imageproc/to_rgba.c index bf4db2afdd76..80094c0e703e 100644 --- a/media/mca/filterpacks/native/imageproc/to_rgba.c +++ b/media/mca/filterpacks/native/imageproc/to_rgba.c @@ -16,12 +16,14 @@ #include <stdlib.h> +#define ATTRIBUTE_UNUSED __attribute__((unused)) + int gray_to_rgb_process(const char** inputs, const int* input_sizes, int input_count, char* output, int output_size, - void* user_data) { + void* user_data ATTRIBUTE_UNUSED) { // Make sure we have exactly one input if (input_count != 1) return 0; @@ -52,7 +54,7 @@ int rgba_to_rgb_process(const char** inputs, int input_count, char* output, int output_size, - void* user_data) { + void* user_data ATTRIBUTE_UNUSED) { // Make sure we have exactly one input if (input_count != 1) return 0; @@ -84,7 +86,7 @@ int gray_to_rgba_process(const char** inputs, int input_count, char* output, int output_size, - void* user_data) { + void* user_data ATTRIBUTE_UNUSED) { // Make sure we have exactly one input if (input_count != 1) return 0; @@ -116,7 +118,7 @@ int rgb_to_rgba_process(const char** inputs, int input_count, char* output, int output_size, - void* user_data) { + void* user_data ATTRIBUTE_UNUSED) { // Make sure we have exactly one input if (input_count != 1) return 0; diff --git a/media/tests/audiotests/Android.mk b/media/tests/audiotests/Android.mk index 69f0bb5d185b..794e7f22419a 100644 --- a/media/tests/audiotests/Android.mk +++ b/media/tests/audiotests/Android.mk @@ -1,21 +1,23 @@ -ifeq ($(TARGET_ARCH),arm) LOCAL_PATH:= $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE:= shared_mem_test + LOCAL_SRC_FILES := \ - shared_mem_test.cpp + shared_mem_test.cpp + LOCAL_SHARED_LIBRARIES := \ - libc \ - libcutils \ - libutils \ - libbinder \ - libhardware_legacy \ - libmedia + libc \ + libcutils \ + libutils \ + libbinder \ + libhardware_legacy \ + libmedia + LOCAL_MODULE_TAGS := tests -include $(BUILD_EXECUTABLE) +LOCAL_CFLAGS += -Wall -Werror -Wunused -Wunreachable-code -endif +include $(BUILD_EXECUTABLE) diff --git a/media/tests/audiotests/shared_mem_test.cpp b/media/tests/audiotests/shared_mem_test.cpp index 992c900d31a2..2f5749933b54 100644 --- a/media/tests/audiotests/shared_mem_test.cpp +++ b/media/tests/audiotests/shared_mem_test.cpp @@ -133,12 +133,8 @@ int AudioTrackTest::Test01() { ************************************************************/ void AudioTrackTest::Generate(short *buffer, long bufferSz, long amplitude, unsigned long &phi, long dPhi) { - long pi13 = 25736; // 2^13*pi // fill buffer for(int i0=0; i0<bufferSz; i0++) { - long sample; - long l0, l1; - buffer[i0] = ComputeSine( amplitude, phi); phi += dPhi; } @@ -210,7 +206,7 @@ int main() { * global main * ************************************************************/ -int main(int argc, char *argv[]) { +int main() { return android::main(); } diff --git a/media/tests/omxjpegdecoder/Android.mk b/media/tests/omxjpegdecoder/Android.mk index b0bc5d4a2e36..70fdd050e73e 100644 --- a/media/tests/omxjpegdecoder/Android.mk +++ b/media/tests/omxjpegdecoder/Android.mk @@ -17,9 +17,9 @@ LOCAL_PATH:= $(call my-dir) include $(CLEAR_VARS) LOCAL_SRC_FILES := \ - omx_jpeg_decoder.cpp \ - jpeg_decoder_bench.cpp \ - StreamSource.cpp + omx_jpeg_decoder.cpp \ + jpeg_decoder_bench.cpp \ + StreamSource.cpp LOCAL_SHARED_LIBRARIES := \ libcutils \ @@ -42,4 +42,6 @@ LOCAL_MODULE := jpeg_bench LOCAL_MODULE_TAGS := optional +LOCAL_CFLAGS += -Wall -Werror -Wunused -Wunreachable-code + include $(BUILD_EXECUTABLE) diff --git a/media/tests/omxjpegdecoder/StreamSource.h b/media/tests/omxjpegdecoder/StreamSource.h index 980738590587..6e4adfbfae37 100644 --- a/media/tests/omxjpegdecoder/StreamSource.h +++ b/media/tests/omxjpegdecoder/StreamSource.h @@ -20,7 +20,11 @@ #include <stdio.h> +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wunused-parameter" #include <SkStream.h> +#pragma GCC diagnostic pop + #include <media/stagefright/DataSource.h> #include <media/stagefright/MediaErrors.h> #include <utils/threads.h> diff --git a/media/tests/omxjpegdecoder/jpeg_decoder_bench.cpp b/media/tests/omxjpegdecoder/jpeg_decoder_bench.cpp index de6294dabaeb..83474d7f0140 100644 --- a/media/tests/omxjpegdecoder/jpeg_decoder_bench.cpp +++ b/media/tests/omxjpegdecoder/jpeg_decoder_bench.cpp @@ -20,9 +20,13 @@ #include <binder/ProcessState.h> +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wunused-parameter" #include "SkBitmap.h" #include "SkImageDecoder.h" #include "SkStream.h" +#pragma GCC diagnostic pop + #include "omx_jpeg_decoder.h" class SkJPEGImageDecoder : public SkImageDecoder { @@ -101,6 +105,11 @@ int testDecoder(SkImageDecoder* decoder, char* filename) { } int main(int argc, char** argv) { + if (argc < 2) { + printf("Need a parameter!\n"); + return 1; + } + android::ProcessState::self()->startThreadPool(); printf("Decoding jpeg with libjpeg...\n"); diff --git a/media/tests/omxjpegdecoder/omx_jpeg_decoder.cpp b/media/tests/omxjpegdecoder/omx_jpeg_decoder.cpp index 229bfdb1a655..c54490e5d1e3 100644 --- a/media/tests/omxjpegdecoder/omx_jpeg_decoder.cpp +++ b/media/tests/omxjpegdecoder/omx_jpeg_decoder.cpp @@ -30,35 +30,18 @@ #include <media/stagefright/MetaData.h> #include <media/stagefright/OMXClient.h> #include <media/stagefright/OMXCodec.h> + +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wunused-parameter" #include <SkImage.h> #include <SkMallocPixelRef.h> +#pragma GCC diagnostic pop #include "omx_jpeg_decoder.h" #include "StreamSource.h" using namespace android; -static void getJpegOutput(MediaBuffer* buffer, const char* filename) { - int size = buffer->range_length(); - int offset = buffer->range_offset(); - FILE *pFile = fopen(filename, "w+"); - - if (pFile == NULL) { - printf("Error: cannot open %s.\n", filename); - } else { - char* data = (char*) buffer->data(); - data += offset; - while (size > 0) { - int numChars = fwrite(data, sizeof(char), 1024, pFile); - int numBytes = numChars * sizeof(char); - size -= numBytes; - data += numBytes; - } - fclose(pFile); - } - return; -} - extern int storeBitmapToFile(SkBitmap* bitmap, const char* filename) { bitmap->lockPixels(); uint8_t* data = (uint8_t *)bitmap->getPixels(); @@ -140,7 +123,7 @@ sp<MediaSource> OmxJpegImageDecoder::getDecoder( } bool OmxJpegImageDecoder::decodeSource(sp<MediaSource> decoder, - const sp<MediaSource>& source, SkBitmap* bm) { + const sp<MediaSource>& /* source */, SkBitmap* bm) { status_t rt = decoder->start(); if (rt != OK) { ALOGE("Cannot start OMX Decoder!"); @@ -169,7 +152,7 @@ bool OmxJpegImageDecoder::decodeSource(sp<MediaSource> decoder, return true; } -void OmxJpegImageDecoder::configBitmapSize(SkBitmap* bm, SkColorType pref, +void OmxJpegImageDecoder::configBitmapSize(SkBitmap* bm, SkColorType /* pref */, int width, int height) { // Set the color space to ARGB_8888 for now (ignoring pref) // because of limitation in hardware support. diff --git a/media/tests/omxjpegdecoder/omx_jpeg_decoder.h b/media/tests/omxjpegdecoder/omx_jpeg_decoder.h index e487245fd551..284410c8a803 100644 --- a/media/tests/omxjpegdecoder/omx_jpeg_decoder.h +++ b/media/tests/omxjpegdecoder/omx_jpeg_decoder.h @@ -25,8 +25,12 @@ #include <media/stagefright/MediaSource.h> #include <media/stagefright/OMXClient.h> #include <media/stagefright/OMXCodec.h> + +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wunused-parameter" #include <SkImageDecoder.h> #include <SkStream.h> +#pragma GCC diagnostic pop using namespace android; diff --git a/media/tests/players/Android.mk b/media/tests/players/Android.mk index adf0d304617b..7ab64584fe3a 100644 --- a/media/tests/players/Android.mk +++ b/media/tests/players/Android.mk @@ -26,5 +26,6 @@ LOCAL_SHARED_LIBRARIES:= \ LOCAL_MODULE:= invoke_mock_media_player LOCAL_MODULE_TAGS := tests eng +LOCAL_CFLAGS += -Wall -Werror -Wunused -Wunreachable-code include $(BUILD_SHARED_LIBRARY) diff --git a/media/tests/players/invoke_mock_media_player.cpp b/media/tests/players/invoke_mock_media_player.cpp index d1fed7bb95d9..0d0c7adcdb54 100644 --- a/media/tests/players/invoke_mock_media_player.cpp +++ b/media/tests/players/invoke_mock_media_player.cpp @@ -58,7 +58,7 @@ class Player: public MediaPlayerBase virtual bool hardwareOutput() {return true;} virtual status_t setDataSource( - const sp<IMediaHTTPService> &httpService, + const sp<IMediaHTTPService>& /* httpService */, const char *url, const KeyedVector<String8, String8> *) { ALOGV("setDataSource %s", url); @@ -69,24 +69,28 @@ class Player: public MediaPlayerBase return OK; } - virtual status_t setDataSource(int fd, int64_t offset, int64_t length) {return OK;} + virtual status_t setDataSource(int /* fd */, int64_t /* offset */, int64_t /* length */) { + return OK; + } virtual status_t setVideoSurfaceTexture( - const sp<IGraphicBufferProducer>& bufferProducer) {return OK;} - virtual status_t prepare() {return OK;} - virtual status_t prepareAsync() {return OK;} - virtual status_t start() {return OK;} - virtual status_t stop() {return OK;} - virtual status_t pause() {return OK;} - virtual bool isPlaying() {return true;} - virtual status_t seekTo(int msec) {return OK;} - virtual status_t getCurrentPosition(int *msec) {return OK;} - virtual status_t getDuration(int *msec) {return OK;} + const sp<IGraphicBufferProducer>& /* bufferProducer */) { + return OK; + } + virtual status_t prepare() { return OK; } + virtual status_t prepareAsync() { return OK; } + virtual status_t start() { return OK; } + virtual status_t stop() { return OK; } + virtual status_t pause() { return OK; } + virtual bool isPlaying() { return true; } + virtual status_t seekTo(int /* msec */) { return OK; } + virtual status_t getCurrentPosition(int* /* msec */) { return OK; } + virtual status_t getDuration(int* /* msec */) { return OK; } virtual status_t reset() {return OK;} - virtual status_t setLooping(int loop) {return OK;} + virtual status_t setLooping(int /* loop */) { return OK; } virtual player_type playerType() {return TEST_PLAYER;} virtual status_t invoke(const Parcel& request, Parcel *reply); - virtual status_t setParameter(int key, const Parcel &request) {return OK;} - virtual status_t getParameter(int key, Parcel *reply) {return OK;} + virtual status_t setParameter(int /* key */, const Parcel& /* request */) { return OK; } + virtual status_t getParameter(int /* key */, Parcel* /* reply */) { return OK; } private: diff --git a/native/android/Android.mk b/native/android/Android.mk index cda38e06270b..b3a74a87801f 100644 --- a/native/android/Android.mk +++ b/native/android/Android.mk @@ -34,6 +34,8 @@ LOCAL_C_INCLUDES += \ frameworks/base/native/include \ frameworks/base/core/jni/android -LOCAL_MODULE:= libandroid +LOCAL_MODULE := libandroid + +LOCAL_CFLAGS += -Wall -Werror -Wunused -Wunreachable-code include $(BUILD_SHARED_LIBRARY) diff --git a/native/graphics/jni/Android.mk b/native/graphics/jni/Android.mk index 31540307f586..88954f04cd33 100644 --- a/native/graphics/jni/Android.mk +++ b/native/graphics/jni/Android.mk @@ -6,27 +6,29 @@ include $(CLEAR_VARS) # setup for skia optimizations # ifneq ($(ARCH_ARM_HAVE_VFP),true) - LOCAL_CFLAGS += -DSK_SOFTWARE_FLOAT + LOCAL_CFLAGS += -DSK_SOFTWARE_FLOAT endif ifeq ($(ARCH_ARM_HAVE_NEON),true) - LOCAL_CFLAGS += -D__ARM_HAVE_NEON + LOCAL_CFLAGS += -D__ARM_HAVE_NEON endif # our source files # LOCAL_SRC_FILES:= \ - bitmap.cpp + bitmap.cpp LOCAL_SHARED_LIBRARIES := \ libandroid_runtime \ libskia LOCAL_C_INCLUDES += \ - frameworks/base/native/include \ - frameworks/base/core/jni/android/graphics + frameworks/base/native/include \ + frameworks/base/core/jni/android/graphics LOCAL_MODULE:= libjnigraphics +LOCAL_CFLAGS += -Wall -Werror -Wunused -Wunreachable-code + include $(BUILD_SHARED_LIBRARY) diff --git a/native/graphics/jni/bitmap.cpp b/native/graphics/jni/bitmap.cpp index df0751d0fe5f..ea32edc9955e 100644 --- a/native/graphics/jni/bitmap.cpp +++ b/native/graphics/jni/bitmap.cpp @@ -15,7 +15,11 @@ */ #include <android/bitmap.h> + +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wunused-parameter" #include <GraphicsJNI.h> +#pragma GCC diagnostic pop int AndroidBitmap_getInfo(JNIEnv* env, jobject jbitmap, AndroidBitmapInfo* info) { diff --git a/packages/DefaultContainerService/jni/Android.mk b/packages/DefaultContainerService/jni/Android.mk index ef4f6995011d..7808ae15336b 100644 --- a/packages/DefaultContainerService/jni/Android.mk +++ b/packages/DefaultContainerService/jni/Android.mk @@ -18,8 +18,6 @@ LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) - - LOCAL_SRC_FILES := \ com_android_defcontainer_MeasurementUtils.cpp @@ -37,4 +35,6 @@ LOCAL_STATIC_LIBRARIES := \ LOCAL_MODULE := libdefcontainer_jni LOCAL_MODULE_TAGS := optional +LOCAL_CFLAGS += -Wall -Werror -Wunused -Wunreachable-code + include $(BUILD_SHARED_LIBRARY) diff --git a/packages/DefaultContainerService/jni/com_android_defcontainer_MeasurementUtils.cpp b/packages/DefaultContainerService/jni/com_android_defcontainer_MeasurementUtils.cpp index 7390bb705b9d..6be48491ef10 100644 --- a/packages/DefaultContainerService/jni/com_android_defcontainer_MeasurementUtils.cpp +++ b/packages/DefaultContainerService/jni/com_android_defcontainer_MeasurementUtils.cpp @@ -29,7 +29,7 @@ namespace android { -static jlong native_measureDirectory(JNIEnv* env, jobject clazz, jstring directory) { +static jlong native_measureDirectory(JNIEnv* env, jobject /* clazz */, jstring directory) { jlong ret = 0L; const char* path = env->GetStringUTFChars(directory, NULL); @@ -65,7 +65,7 @@ int register_com_android_defcontainer(JNIEnv *env) { } // namespace android -int JNI_OnLoad(JavaVM *jvm, void* reserved) { +int JNI_OnLoad(JavaVM *jvm, void* /* reserved */) { JNIEnv *env; if (jvm->GetEnv((void**)&env, JNI_VERSION_1_6)) { diff --git a/packages/PrintSpooler/jni/Android.mk b/packages/PrintSpooler/jni/Android.mk index fe7d06b4c661..9fd4c84203c7 100644 --- a/packages/PrintSpooler/jni/Android.mk +++ b/packages/PrintSpooler/jni/Android.mk @@ -16,4 +16,6 @@ LOCAL_SHARED_LIBRARIES := \ LOCAL_MODULE := libprintspooler_jni LOCAL_MODULE_TAGS := optional +LOCAL_CFLAGS += -Wall -Werror -Wunused -Wunreachable-code + include $(BUILD_SHARED_LIBRARY) diff --git a/packages/PrintSpooler/jni/com_android_printspooler_util_BitmapSerializeUtils.cpp b/packages/PrintSpooler/jni/com_android_printspooler_util_BitmapSerializeUtils.cpp index 57281c8a0b05..b5d91385abe5 100644 --- a/packages/PrintSpooler/jni/com_android_printspooler_util_BitmapSerializeUtils.cpp +++ b/packages/PrintSpooler/jni/com_android_printspooler_util_BitmapSerializeUtils.cpp @@ -79,7 +79,7 @@ static void throwIllegalArgumentException(JNIEnv* env, char* message) { throwException(env, className, message); } -static void readBitmapPixels(JNIEnv* env, jclass clazz, jobject jbitmap, jint fd) { +static void readBitmapPixels(JNIEnv* env, jclass /* clazz */, jobject jbitmap, jint fd) { // Read the info. AndroidBitmapInfo readInfo; bool read = readAllBytes(fd, (void*) &readInfo, sizeof(AndroidBitmapInfo)); @@ -127,7 +127,7 @@ static void readBitmapPixels(JNIEnv* env, jclass clazz, jobject jbitmap, jint fd } } -static void writeBitmapPixels(JNIEnv* env, jclass clazz, jobject jbitmap, jint fd) { +static void writeBitmapPixels(JNIEnv* env, jclass /* clazz */, jobject jbitmap, jint fd) { // Get the info. AndroidBitmapInfo info; int result = AndroidBitmap_getInfo(env, jbitmap, &info); diff --git a/packages/services/PacProcessor/jni/Android.mk b/packages/services/PacProcessor/jni/Android.mk index f16c90b367dd..254cbc23c471 100644 --- a/packages/services/PacProcessor/jni/Android.mk +++ b/packages/services/PacProcessor/jni/Android.mk @@ -36,6 +36,6 @@ LOCAL_SHARED_LIBRARIES := \ LOCAL_MODULE := libjni_pacprocessor LOCAL_MODULE_TAGS := optional -include external/stlport/libstlport.mk +LOCAL_CFLAGS += -Wall -Werror -Wunused -Wunreachable-code include $(BUILD_SHARED_LIBRARY) diff --git a/packages/services/PacProcessor/jni/com_android_pacprocessor_PacNative.cpp b/packages/services/PacProcessor/jni/com_android_pacprocessor_PacNative.cpp index c5aa13bb26eb..272733893280 100644 --- a/packages/services/PacProcessor/jni/com_android_pacprocessor_PacNative.cpp +++ b/packages/services/PacProcessor/jni/com_android_pacprocessor_PacNative.cpp @@ -48,7 +48,8 @@ bool pacSet = false; String16 jstringToString16(JNIEnv* env, jstring jstr) { const jchar* str = env->GetStringCritical(jstr, 0); - String16 str16(str, env->GetStringLength(jstr)); + String16 str16(reinterpret_cast<const char16_t*>(str), + env->GetStringLength(jstr)); env->ReleaseStringCritical(jstr, str); return str16; } @@ -57,10 +58,10 @@ jstring string16ToJstring(JNIEnv* env, String16 string) { const char16_t* str = string.string(); size_t len = string.size(); - return env->NewString(str, len); + return env->NewString(reinterpret_cast<const jchar*>(str), len); } -static jboolean com_android_pacprocessor_PacNative_createV8ParserNativeLocked(JNIEnv* env, +static jboolean com_android_pacprocessor_PacNative_createV8ParserNativeLocked(JNIEnv* /* env */, jobject) { if (proxyResolver == NULL) { logger = new ProxyErrorLogger(); @@ -72,7 +73,7 @@ static jboolean com_android_pacprocessor_PacNative_createV8ParserNativeLocked(JN return JNI_TRUE; } -static jboolean com_android_pacprocessor_PacNative_destroyV8ParserNativeLocked(JNIEnv* env, +static jboolean com_android_pacprocessor_PacNative_destroyV8ParserNativeLocked(JNIEnv* /* env */, jobject) { if (proxyResolver != NULL) { delete logger; diff --git a/packages/services/PacProcessor/jni/jni_init.cpp b/packages/services/PacProcessor/jni/jni_init.cpp index bda33fb33c07..de844c87ec0b 100644 --- a/packages/services/PacProcessor/jni/jni_init.cpp +++ b/packages/services/PacProcessor/jni/jni_init.cpp @@ -25,7 +25,7 @@ namespace android { using namespace android; -extern "C" jint JNI_OnLoad(JavaVM* vm, void* reserved) { +extern "C" jint JNI_OnLoad(JavaVM* vm, void* /* reserved */) { JNIEnv *env; if (vm->GetEnv(reinterpret_cast<void**>(&env), JNI_VERSION_1_6) != JNI_OK) { ALOGE("ERROR: GetEnv failed"); diff --git a/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java b/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java index 2699d13b9b9e..ccc700daa909 100644 --- a/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java +++ b/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java @@ -4389,7 +4389,7 @@ public class PhoneWindowManager implements WindowManagerPolicy { result &= ~ACTION_PASS_TO_USER; if (down) { boolean panic = mImmersiveModeConfirmation.onPowerKeyDown(interactive, - event.getDownTime(), isImmersiveMode(mLastSystemUiFlags)); + SystemClock.elapsedRealtime(), isImmersiveMode(mLastSystemUiFlags)); if (panic) { mHandler.post(mRequestTransientNav); } diff --git a/rs/java/android/renderscript/ScriptIntrinsicResize.java b/rs/java/android/renderscript/ScriptIntrinsicResize.java index d6764ccab75e..cee4c33ee87d 100644 --- a/rs/java/android/renderscript/ScriptIntrinsicResize.java +++ b/rs/java/android/renderscript/ScriptIntrinsicResize.java @@ -29,6 +29,8 @@ public final class ScriptIntrinsicResize extends ScriptIntrinsic { /** * Supported elements types are {@link Element#U8}, {@link * Element#U8_2}, {@link Element#U8_3}, {@link Element#U8_4} + * {@link Element#F32}, {@link Element#F32_2}, {@link + * Element#F32_3}, {@link Element#F32_4} * * @param rs The RenderScript context * @@ -52,7 +54,11 @@ public final class ScriptIntrinsicResize extends ScriptIntrinsic { if (!e.isCompatible(Element.U8(mRS)) && !e.isCompatible(Element.U8_2(mRS)) && !e.isCompatible(Element.U8_3(mRS)) && - !e.isCompatible(Element.U8_4(mRS))) { + !e.isCompatible(Element.U8_4(mRS)) && + !e.isCompatible(Element.F32(mRS)) && + !e.isCompatible(Element.F32_2(mRS)) && + !e.isCompatible(Element.F32_3(mRS)) && + !e.isCompatible(Element.F32_4(mRS))) { throw new RSIllegalArgumentException("Unsuported element type."); } diff --git a/rs/jni/Android.mk b/rs/jni/Android.mk index f2c2e98a6a37..f1f0bfccc0b5 100644 --- a/rs/jni/Android.mk +++ b/rs/jni/Android.mk @@ -5,27 +5,28 @@ LOCAL_SRC_FILES:= \ android_renderscript_RenderScript.cpp LOCAL_SHARED_LIBRARIES := \ - libandroid_runtime \ - libandroidfw \ - libnativehelper \ - libRS \ - libcutils \ - liblog \ - libskia \ - libutils \ - libui \ - libgui + libandroid_runtime \ + libandroidfw \ + libnativehelper \ + libRS \ + libcutils \ + liblog \ + libskia \ + libutils \ + libui \ + libgui LOCAL_STATIC_LIBRARIES := rs_generated_include_dir := $(call intermediates-dir-for,SHARED_LIBRARIES,libRS,,) LOCAL_C_INCLUDES += \ - $(JNI_H_INCLUDE) \ - frameworks/rs \ - $(rs_generated_include_dir) + $(JNI_H_INCLUDE) \ + frameworks/rs \ + $(rs_generated_include_dir) LOCAL_CFLAGS += -Wno-unused-parameter -std=c++11 +LOCAL_CFLAGS += -Wall -Werror -Wunused -Wunreachable-code LOCAL_ADDITIONAL_DEPENDENCIES := $(addprefix $(rs_generated_include_dir)/,rsgApiFuncDecl.h) LOCAL_MODULE:= librs_jni diff --git a/rs/jni/android_renderscript_RenderScript.cpp b/rs/jni/android_renderscript_RenderScript.cpp index 2d9413164022..b46058e7bc29 100644 --- a/rs/jni/android_renderscript_RenderScript.cpp +++ b/rs/jni/android_renderscript_RenderScript.cpp @@ -22,6 +22,7 @@ #include <unistd.h> #include <math.h> #include <utils/misc.h> +#include <inttypes.h> #include <SkBitmap.h> @@ -43,10 +44,13 @@ #include <android_runtime/android_graphics_SurfaceTexture.h> //#define LOG_API ALOGE -#define LOG_API(...) +static constexpr bool kLogApi = false; using namespace android; +template <typename... T> +void UNUSED(T... t) {} + #define PER_ARRAY_TYPE(flag, fnc, readonly, ...) { \ jint len = 0; \ void *ptr = nullptr; \ @@ -106,6 +110,7 @@ using namespace android; default: \ break; \ } \ + UNUSED(len, ptr, typeBytes, relFlag); \ } @@ -168,7 +173,6 @@ private: static jfieldID gContextId = 0; static jfieldID gNativeBitmapID = 0; -static jfieldID gTypeNativeCache = 0; static void _nInit(JNIEnv *_env, jclass _this) { @@ -183,14 +187,18 @@ static void _nInit(JNIEnv *_env, jclass _this) static void nContextFinish(JNIEnv *_env, jobject _this, jlong con) { - LOG_API("nContextFinish, con(%p)", (RsContext)con); + if (kLogApi) { + ALOGD("nContextFinish, con(%p)", (RsContext)con); + } rsContextFinish((RsContext)con); } static void nAssignName(JNIEnv *_env, jobject _this, jlong con, jlong obj, jbyteArray str) { - LOG_API("nAssignName, con(%p), obj(%p)", (RsContext)con, (void *)obj); + if (kLogApi) { + ALOGD("nAssignName, con(%p), obj(%p)", (RsContext)con, (void *)obj); + } jint len = _env->GetArrayLength(str); jbyte * cptr = (jbyte *) _env->GetPrimitiveArrayCritical(str, 0); rsAssignName((RsContext)con, (void *)obj, (const char *)cptr, len); @@ -200,7 +208,9 @@ nAssignName(JNIEnv *_env, jobject _this, jlong con, jlong obj, jbyteArray str) static jstring nGetName(JNIEnv *_env, jobject _this, jlong con, jlong obj) { - LOG_API("nGetName, con(%p), obj(%p)", (RsContext)con, (void *)obj); + if (kLogApi) { + ALOGD("nGetName, con(%p), obj(%p)", (RsContext)con, (void *)obj); + } const char *name = nullptr; rsaGetName((RsContext)con, (void *)obj, &name); if(name == nullptr || strlen(name) == 0) { @@ -212,7 +222,9 @@ nGetName(JNIEnv *_env, jobject _this, jlong con, jlong obj) static void nObjDestroy(JNIEnv *_env, jobject _this, jlong con, jlong obj) { - LOG_API("nObjDestroy, con(%p) obj(%p)", (RsContext)con, (void *)obj); + if (kLogApi) { + ALOGD("nObjDestroy, con(%p) obj(%p)", (RsContext)con, (void *)obj); + } rsObjDestroy((RsContext)con, (void *)obj); } @@ -221,28 +233,36 @@ nObjDestroy(JNIEnv *_env, jobject _this, jlong con, jlong obj) static jlong nDeviceCreate(JNIEnv *_env, jobject _this) { - LOG_API("nDeviceCreate"); + if (kLogApi) { + ALOGD("nDeviceCreate"); + } return (jlong)(uintptr_t)rsDeviceCreate(); } static void nDeviceDestroy(JNIEnv *_env, jobject _this, jlong dev) { - LOG_API("nDeviceDestroy"); + if (kLogApi) { + ALOGD("nDeviceDestroy"); + } return rsDeviceDestroy((RsDevice)dev); } static void nDeviceSetConfig(JNIEnv *_env, jobject _this, jlong dev, jint p, jint value) { - LOG_API("nDeviceSetConfig dev(%p), param(%i), value(%i)", (void *)dev, p, value); + if (kLogApi) { + ALOGD("nDeviceSetConfig dev(%p), param(%i), value(%i)", (void *)dev, p, value); + } return rsDeviceSetConfig((RsDevice)dev, (RsDeviceParam)p, value); } static jlong nContextCreate(JNIEnv *_env, jobject _this, jlong dev, jint ver, jint sdkVer, jint ct) { - LOG_API("nContextCreate"); + if (kLogApi) { + ALOGD("nContextCreate"); + } return (jlong)(uintptr_t)rsContextCreate((RsDevice)dev, ver, sdkVer, (RsContextType)ct, 0); } @@ -266,14 +286,18 @@ nContextCreateGL(JNIEnv *_env, jobject _this, jlong dev, jint ver, jint sdkVer, sc.samplesPref = samplesPref; sc.samplesQ = samplesQ; - LOG_API("nContextCreateGL"); + if (kLogApi) { + ALOGD("nContextCreateGL"); + } return (jlong)(uintptr_t)rsContextCreateGL((RsDevice)dev, ver, sdkVer, sc, dpi); } static void nContextSetPriority(JNIEnv *_env, jobject _this, jlong con, jint p) { - LOG_API("ContextSetPriority, con(%p), priority(%i)", (RsContext)con, p); + if (kLogApi) { + ALOGD("ContextSetPriority, con(%p), priority(%i)", (RsContext)con, p); + } rsContextSetPriority((RsContext)con, p); } @@ -282,7 +306,10 @@ nContextSetPriority(JNIEnv *_env, jobject _this, jlong con, jint p) static void nContextSetSurface(JNIEnv *_env, jobject _this, jlong con, jint width, jint height, jobject wnd) { - LOG_API("nContextSetSurface, con(%p), width(%i), height(%i), surface(%p)", (RsContext)con, width, height, (Surface *)wnd); + if (kLogApi) { + ALOGD("nContextSetSurface, con(%p), width(%i), height(%i), surface(%p)", (RsContext)con, + width, height, (Surface *)wnd); + } ANativeWindow * window = nullptr; if (wnd == nullptr) { @@ -297,28 +324,36 @@ nContextSetSurface(JNIEnv *_env, jobject _this, jlong con, jint width, jint heig static void nContextDestroy(JNIEnv *_env, jobject _this, jlong con) { - LOG_API("nContextDestroy, con(%p)", (RsContext)con); + if (kLogApi) { + ALOGD("nContextDestroy, con(%p)", (RsContext)con); + } rsContextDestroy((RsContext)con); } static void nContextDump(JNIEnv *_env, jobject _this, jlong con, jint bits) { - LOG_API("nContextDump, con(%p) bits(%i)", (RsContext)con, bits); + if (kLogApi) { + ALOGD("nContextDump, con(%p) bits(%i)", (RsContext)con, bits); + } rsContextDump((RsContext)con, bits); } static void nContextPause(JNIEnv *_env, jobject _this, jlong con) { - LOG_API("nContextPause, con(%p)", (RsContext)con); + if (kLogApi) { + ALOGD("nContextPause, con(%p)", (RsContext)con); + } rsContextPause((RsContext)con); } static void nContextResume(JNIEnv *_env, jobject _this, jlong con) { - LOG_API("nContextResume, con(%p)", (RsContext)con); + if (kLogApi) { + ALOGD("nContextResume, con(%p)", (RsContext)con); + } rsContextResume((RsContext)con); } @@ -326,7 +361,9 @@ nContextResume(JNIEnv *_env, jobject _this, jlong con) static jstring nContextGetErrorMessage(JNIEnv *_env, jobject _this, jlong con) { - LOG_API("nContextGetErrorMessage, con(%p)", (RsContext)con); + if (kLogApi) { + ALOGD("nContextGetErrorMessage, con(%p)", (RsContext)con); + } char buf[1024]; size_t receiveLen; @@ -336,7 +373,7 @@ nContextGetErrorMessage(JNIEnv *_env, jobject _this, jlong con) &receiveLen, sizeof(receiveLen), &subID, sizeof(subID)); if (!id && receiveLen) { - ALOGV("message receive buffer too small. %i", receiveLen); + ALOGV("message receive buffer too small. %zu", receiveLen); } return _env->NewStringUTF(buf); } @@ -345,7 +382,9 @@ static jint nContextGetUserMessage(JNIEnv *_env, jobject _this, jlong con, jintArray data) { jint len = _env->GetArrayLength(data); - LOG_API("nContextGetMessage, con(%p), len(%i)", (RsContext)con, len); + if (kLogApi) { + ALOGD("nContextGetMessage, con(%p), len(%i)", (RsContext)con, len); + } jint *ptr = _env->GetIntArrayElements(data, nullptr); size_t receiveLen; uint32_t subID; @@ -354,7 +393,7 @@ nContextGetUserMessage(JNIEnv *_env, jobject _this, jlong con, jintArray data) &receiveLen, sizeof(receiveLen), &subID, sizeof(subID)); if (!id && receiveLen) { - ALOGV("message receive buffer too small. %i", receiveLen); + ALOGV("message receive buffer too small. %zu", receiveLen); } _env->ReleaseIntArrayElements(data, ptr, 0); return (jint)id; @@ -363,7 +402,9 @@ nContextGetUserMessage(JNIEnv *_env, jobject _this, jlong con, jintArray data) static jint nContextPeekMessage(JNIEnv *_env, jobject _this, jlong con, jintArray auxData) { - LOG_API("nContextPeekMessage, con(%p)", (RsContext)con); + if (kLogApi) { + ALOGD("nContextPeekMessage, con(%p)", (RsContext)con); + } jint *auxDataPtr = _env->GetIntArrayElements(auxData, nullptr); size_t receiveLen; uint32_t subID; @@ -377,13 +418,17 @@ nContextPeekMessage(JNIEnv *_env, jobject _this, jlong con, jintArray auxData) static void nContextInitToClient(JNIEnv *_env, jobject _this, jlong con) { - LOG_API("nContextInitToClient, con(%p)", (RsContext)con); + if (kLogApi) { + ALOGD("nContextInitToClient, con(%p)", (RsContext)con); + } rsContextInitToClient((RsContext)con); } static void nContextDeinitToClient(JNIEnv *_env, jobject _this, jlong con) { - LOG_API("nContextDeinitToClient, con(%p)", (RsContext)con); + if (kLogApi) { + ALOGD("nContextDeinitToClient, con(%p)", (RsContext)con); + } rsContextDeinitToClient((RsContext)con); } @@ -396,7 +441,9 @@ nContextSendMessage(JNIEnv *_env, jobject _this, jlong con, jint id, jintArray d len = _env->GetArrayLength(data); ptr = _env->GetIntArrayElements(data, nullptr); } - LOG_API("nContextSendMessage, con(%p), id(%i), len(%i)", (RsContext)con, id, len); + if (kLogApi) { + ALOGD("nContextSendMessage, con(%p), id(%i), len(%i)", (RsContext)con, id, len); + } rsContextSendMessage((RsContext)con, id, (const uint8_t *)ptr, len * sizeof(int)); if (data) { _env->ReleaseIntArrayElements(data, ptr, JNI_ABORT); @@ -406,10 +453,15 @@ nContextSendMessage(JNIEnv *_env, jobject _this, jlong con, jint id, jintArray d static jlong -nElementCreate(JNIEnv *_env, jobject _this, jlong con, jlong type, jint kind, jboolean norm, jint size) +nElementCreate(JNIEnv *_env, jobject _this, jlong con, jlong type, jint kind, jboolean norm, + jint size) { - LOG_API("nElementCreate, con(%p), type(%i), kind(%i), norm(%i), size(%i)", (RsContext)con, type, kind, norm, size); - return (jlong)(uintptr_t)rsElementCreate((RsContext)con, (RsDataType)type, (RsDataKind)kind, norm, size); + if (kLogApi) { + ALOGD("nElementCreate, con(%p), type(%" PRId64 "), kind(%i), norm(%i), size(%i)", (RsContext)con, + type, kind, norm, size); + } + return (jlong)(uintptr_t)rsElementCreate((RsContext)con, (RsDataType)type, (RsDataKind)kind, + norm, size); } static jlong @@ -417,7 +469,9 @@ nElementCreate2(JNIEnv *_env, jobject _this, jlong con, jlongArray _ids, jobjectArray _names, jintArray _arraySizes) { int fieldCount = _env->GetArrayLength(_ids); - LOG_API("nElementCreate2, con(%p)", (RsContext)con); + if (kLogApi) { + ALOGD("nElementCreate2, con(%p)", (RsContext)con); + } jlong *jIds = _env->GetLongArrayElements(_ids, nullptr); jint *jArraySizes = _env->GetIntArrayElements(_arraySizes, nullptr); @@ -452,7 +506,9 @@ static void nElementGetNativeData(JNIEnv *_env, jobject _this, jlong con, jlong id, jintArray _elementData) { int dataSize = _env->GetArrayLength(_elementData); - LOG_API("nElementGetNativeData, con(%p)", (RsContext)con); + if (kLogApi) { + ALOGD("nElementGetNativeData, con(%p)", (RsContext)con); + } // we will pack mType; mKind; mNormalized; mVectorSize; NumSubElements assert(dataSize == 5); @@ -474,13 +530,16 @@ nElementGetSubElements(JNIEnv *_env, jobject _this, jlong con, jlong id, jintArray _arraySizes) { uint32_t dataSize = _env->GetArrayLength(_IDs); - LOG_API("nElementGetSubElements, con(%p)", (RsContext)con); + if (kLogApi) { + ALOGD("nElementGetSubElements, con(%p)", (RsContext)con); + } uintptr_t *ids = (uintptr_t*)malloc(dataSize * sizeof(uintptr_t)); const char **names = (const char **)malloc(dataSize * sizeof(const char *)); uint32_t *arraySizes = (uint32_t *)malloc(dataSize * sizeof(uint32_t)); - rsaElementGetSubElements((RsContext)con, (RsElement)id, ids, names, arraySizes, (uint32_t)dataSize); + rsaElementGetSubElements((RsContext)con, (RsElement)id, ids, names, arraySizes, + (uint32_t)dataSize); for(uint32_t i = 0; i < dataSize; i++) { const jlong id = (jlong)(uintptr_t)ids[i]; @@ -501,10 +560,13 @@ static jlong nTypeCreate(JNIEnv *_env, jobject _this, jlong con, jlong eid, jint dimx, jint dimy, jint dimz, jboolean mips, jboolean faces, jint yuv) { - LOG_API("nTypeCreate, con(%p) eid(%p), x(%i), y(%i), z(%i), mips(%i), faces(%i), yuv(%i)", - (RsContext)con, eid, dimx, dimy, dimz, mips, faces, yuv); + if (kLogApi) { + ALOGD("nTypeCreate, con(%p) eid(%p), x(%i), y(%i), z(%i), mips(%i), faces(%i), yuv(%i)", + (RsContext)con, (void*)eid, dimx, dimy, dimz, mips, faces, yuv); + } - return (jlong)(uintptr_t)rsTypeCreate((RsContext)con, (RsElement)eid, dimx, dimy, dimz, mips, faces, yuv); + return (jlong)(uintptr_t)rsTypeCreate((RsContext)con, (RsElement)eid, dimx, dimy, dimz, mips, + faces, yuv); } static void @@ -515,7 +577,9 @@ nTypeGetNativeData(JNIEnv *_env, jobject _this, jlong con, jlong id, jlongArray int elementCount = _env->GetArrayLength(_typeData); assert(elementCount == 6); - LOG_API("nTypeGetNativeData, con(%p)", (RsContext)con); + if (kLogApi) { + ALOGD("nTypeGetNativeData, con(%p)", (RsContext)con); + } uintptr_t typeData[6]; rsaTypeGetNativeData((RsContext)con, (RsType)id, typeData, 6); @@ -529,25 +593,37 @@ nTypeGetNativeData(JNIEnv *_env, jobject _this, jlong con, jlong id, jlongArray // ----------------------------------- static jlong -nAllocationCreateTyped(JNIEnv *_env, jobject _this, jlong con, jlong type, jint mips, jint usage, jlong pointer) +nAllocationCreateTyped(JNIEnv *_env, jobject _this, jlong con, jlong type, jint mips, jint usage, + jlong pointer) { - LOG_API("nAllocationCreateTyped, con(%p), type(%p), mip(%i), usage(%i), ptr(%p)", (RsContext)con, (RsElement)type, mips, usage, (void *)pointer); - return (jlong)(uintptr_t) rsAllocationCreateTyped((RsContext)con, (RsType)type, (RsAllocationMipmapControl)mips, (uint32_t)usage, (uintptr_t)pointer); + if (kLogApi) { + ALOGD("nAllocationCreateTyped, con(%p), type(%p), mip(%i), usage(%i), ptr(%p)", + (RsContext)con, (RsElement)type, mips, usage, (void *)pointer); + } + return (jlong)(uintptr_t) rsAllocationCreateTyped((RsContext)con, (RsType)type, + (RsAllocationMipmapControl)mips, + (uint32_t)usage, (uintptr_t)pointer); } static void nAllocationSyncAll(JNIEnv *_env, jobject _this, jlong con, jlong a, jint bits) { - LOG_API("nAllocationSyncAll, con(%p), a(%p), bits(0x%08x)", (RsContext)con, (RsAllocation)a, bits); + if (kLogApi) { + ALOGD("nAllocationSyncAll, con(%p), a(%p), bits(0x%08x)", (RsContext)con, (RsAllocation)a, + bits); + } rsAllocationSyncAll((RsContext)con, (RsAllocation)a, (RsAllocationUsageType)bits); } static jobject nAllocationGetSurface(JNIEnv *_env, jobject _this, jlong con, jlong a) { - LOG_API("nAllocationGetSurface, con(%p), a(%p)", (RsContext)con, (RsAllocation)a); + if (kLogApi) { + ALOGD("nAllocationGetSurface, con(%p), a(%p)", (RsContext)con, (RsAllocation)a); + } - IGraphicBufferProducer *v = (IGraphicBufferProducer *)rsAllocationGetSurface((RsContext)con, (RsAllocation)a); + IGraphicBufferProducer *v = (IGraphicBufferProducer *)rsAllocationGetSurface((RsContext)con, + (RsAllocation)a); sp<IGraphicBufferProducer> bp = v; v->decStrong(nullptr); @@ -558,28 +634,35 @@ nAllocationGetSurface(JNIEnv *_env, jobject _this, jlong con, jlong a) static void nAllocationSetSurface(JNIEnv *_env, jobject _this, jlong con, jlong alloc, jobject sur) { - LOG_API("nAllocationSetSurface, con(%p), alloc(%p), surface(%p)", - (RsContext)con, (RsAllocation)alloc, (Surface *)sur); + if (kLogApi) { + ALOGD("nAllocationSetSurface, con(%p), alloc(%p), surface(%p)", (RsContext)con, + (RsAllocation)alloc, (Surface *)sur); + } sp<Surface> s; if (sur != 0) { s = android_view_Surface_getSurface(_env, sur); } - rsAllocationSetSurface((RsContext)con, (RsAllocation)alloc, static_cast<ANativeWindow *>(s.get())); + rsAllocationSetSurface((RsContext)con, (RsAllocation)alloc, + static_cast<ANativeWindow *>(s.get())); } static void nAllocationIoSend(JNIEnv *_env, jobject _this, jlong con, jlong alloc) { - LOG_API("nAllocationIoSend, con(%p), alloc(%p)", (RsContext)con, alloc); + if (kLogApi) { + ALOGD("nAllocationIoSend, con(%p), alloc(%p)", (RsContext)con, (RsAllocation)alloc); + } rsAllocationIoSend((RsContext)con, (RsAllocation)alloc); } static void nAllocationIoReceive(JNIEnv *_env, jobject _this, jlong con, jlong alloc) { - LOG_API("nAllocationIoReceive, con(%p), alloc(%p)", (RsContext)con, alloc); + if (kLogApi) { + ALOGD("nAllocationIoReceive, con(%p), alloc(%p)", (RsContext)con, (RsAllocation)alloc); + } rsAllocationIoReceive((RsContext)con, (RsAllocation)alloc); } @@ -587,12 +670,15 @@ nAllocationIoReceive(JNIEnv *_env, jobject _this, jlong con, jlong alloc) static void nAllocationGenerateMipmaps(JNIEnv *_env, jobject _this, jlong con, jlong alloc) { - LOG_API("nAllocationGenerateMipmaps, con(%p), a(%p)", (RsContext)con, (RsAllocation)alloc); + if (kLogApi) { + ALOGD("nAllocationGenerateMipmaps, con(%p), a(%p)", (RsContext)con, (RsAllocation)alloc); + } rsAllocationGenerateMipmaps((RsContext)con, (RsAllocation)alloc); } static jlong -nAllocationCreateFromBitmap(JNIEnv *_env, jobject _this, jlong con, jlong type, jint mip, jobject jbitmap, jint usage) +nAllocationCreateFromBitmap(JNIEnv *_env, jobject _this, jlong con, jlong type, jint mip, + jobject jbitmap, jint usage) { SkBitmap const * nativeBitmap = (SkBitmap const *)_env->GetLongField(jbitmap, gNativeBitmapID); @@ -608,7 +694,8 @@ nAllocationCreateFromBitmap(JNIEnv *_env, jobject _this, jlong con, jlong type, } static jlong -nAllocationCreateBitmapBackedAllocation(JNIEnv *_env, jobject _this, jlong con, jlong type, jint mip, jobject jbitmap, jint usage) +nAllocationCreateBitmapBackedAllocation(JNIEnv *_env, jobject _this, jlong con, jlong type, + jint mip, jobject jbitmap, jint usage) { SkBitmap const * nativeBitmap = (SkBitmap const *)_env->GetLongField(jbitmap, gNativeBitmapID); @@ -624,7 +711,8 @@ nAllocationCreateBitmapBackedAllocation(JNIEnv *_env, jobject _this, jlong con, } static jlong -nAllocationCubeCreateFromBitmap(JNIEnv *_env, jobject _this, jlong con, jlong type, jint mip, jobject jbitmap, jint usage) +nAllocationCubeCreateFromBitmap(JNIEnv *_env, jobject _this, jlong con, jlong type, jint mip, + jobject jbitmap, jint usage) { SkBitmap const * nativeBitmap = (SkBitmap const *)_env->GetLongField(jbitmap, gNativeBitmapID); @@ -670,31 +758,33 @@ nAllocationCopyToBitmap(JNIEnv *_env, jobject _this, jlong con, jlong alloc, job bitmap.notifyPixelsChanged(); } -static void ReleaseBitmapCallback(void *bmp) -{ - SkBitmap const * nativeBitmap = (SkBitmap const *)bmp; - nativeBitmap->unlockPixels(); -} - - // Copies from the Java object data into the Allocation pointed to by _alloc. static void nAllocationData1D(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, jint offset, jint lod, jint count, jobject data, jint sizeBytes, jint dataType) { RsAllocation *alloc = (RsAllocation *)_alloc; - LOG_API("nAllocation1DData, con(%p), adapter(%p), offset(%i), count(%i), sizeBytes(%i), dataType(%i)", - (RsContext)con, (RsAllocation)alloc, offset, count, sizeBytes, dataType); - PER_ARRAY_TYPE(nullptr, rsAllocation1DData, true, (RsContext)con, alloc, offset, lod, count, ptr, sizeBytes); + if (kLogApi) { + ALOGD("nAllocation1DData, con(%p), adapter(%p), offset(%i), count(%i), sizeBytes(%i), " + "dataType(%i)", (RsContext)con, (RsAllocation)alloc, offset, count, sizeBytes, + dataType); + } + PER_ARRAY_TYPE(nullptr, rsAllocation1DData, true, (RsContext)con, alloc, offset, lod, count, + ptr, sizeBytes); } // Copies from the Java array data into the Allocation pointed to by alloc. static void // native void rsnAllocationElementData1D(long con, long id, int xoff, int compIdx, byte[] d, int sizeBytes); -nAllocationElementData1D(JNIEnv *_env, jobject _this, jlong con, jlong alloc, jint offset, jint lod, jint compIdx, jbyteArray data, jint sizeBytes) +nAllocationElementData1D(JNIEnv *_env, jobject _this, jlong con, jlong alloc, jint offset, jint lod, + jint compIdx, jbyteArray data, jint sizeBytes) { jint len = _env->GetArrayLength(data); - LOG_API("nAllocationElementData1D, con(%p), alloc(%p), offset(%i), comp(%i), len(%i), sizeBytes(%i)", (RsContext)con, (RsAllocation)alloc, offset, compIdx, len, sizeBytes); + if (kLogApi) { + ALOGD("nAllocationElementData1D, con(%p), alloc(%p), offset(%i), comp(%i), len(%i), " + "sizeBytes(%i)", (RsContext)con, (RsAllocation)alloc, offset, compIdx, len, + sizeBytes); + } jbyte *ptr = _env->GetByteArrayElements(data, nullptr); rsAllocation1DElementData((RsContext)con, (RsAllocation)alloc, offset, lod, ptr, sizeBytes, compIdx); _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT); @@ -707,8 +797,10 @@ nAllocationData2D(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, jint xof { RsAllocation *alloc = (RsAllocation *)_alloc; RsAllocationCubemapFace face = (RsAllocationCubemapFace)_face; - LOG_API("nAllocation2DData, con(%p), adapter(%p), xoff(%i), yoff(%i), w(%i), h(%i), len(%i) type(%i)", - (RsContext)con, alloc, xoff, yoff, w, h, sizeBytes, dataType); + if (kLogApi) { + ALOGD("nAllocation2DData, con(%p), adapter(%p), xoff(%i), yoff(%i), w(%i), h(%i), len(%i) " + "type(%i)", (RsContext)con, alloc, xoff, yoff, w, h, sizeBytes, dataType); + } PER_ARRAY_TYPE(nullptr, rsAllocation2DData, true, (RsContext)con, alloc, xoff, yoff, lod, face, w, h, ptr, sizeBytes, 0); } @@ -722,11 +814,13 @@ nAllocationData2D_alloc(JNIEnv *_env, jobject _this, jlong con, jlong srcAlloc, jint srcXoff, jint srcYoff, jint srcMip, jint srcFace) { - LOG_API("nAllocation2DData_s, con(%p), dstAlloc(%p), dstXoff(%i), dstYoff(%i)," - " dstMip(%i), dstFace(%i), width(%i), height(%i)," - " srcAlloc(%p), srcXoff(%i), srcYoff(%i), srcMip(%i), srcFace(%i)", - (RsContext)con, (RsAllocation)dstAlloc, dstXoff, dstYoff, dstMip, dstFace, - width, height, (RsAllocation)srcAlloc, srcXoff, srcYoff, srcMip, srcFace); + if (kLogApi) { + ALOGD("nAllocation2DData_s, con(%p), dstAlloc(%p), dstXoff(%i), dstYoff(%i)," + " dstMip(%i), dstFace(%i), width(%i), height(%i)," + " srcAlloc(%p), srcXoff(%i), srcYoff(%i), srcMip(%i), srcFace(%i)", + (RsContext)con, (RsAllocation)dstAlloc, dstXoff, dstYoff, dstMip, dstFace, + width, height, (RsAllocation)srcAlloc, srcXoff, srcYoff, srcMip, srcFace); + } rsAllocationCopy2DRange((RsContext)con, (RsAllocation)dstAlloc, @@ -744,8 +838,11 @@ nAllocationData3D(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, jint xof jint w, jint h, jint d, jobject data, int sizeBytes, int dataType) { RsAllocation *alloc = (RsAllocation *)_alloc; - LOG_API("nAllocation3DData, con(%p), alloc(%p), xoff(%i), yoff(%i), zoff(%i), lod(%i), w(%i), h(%i), d(%i), sizeBytes(%i)", - (RsContext)con, (RsAllocation)alloc, xoff, yoff, zoff, lod, w, h, d, sizeBytes); + if (kLogApi) { + ALOGD("nAllocation3DData, con(%p), alloc(%p), xoff(%i), yoff(%i), zoff(%i), lod(%i), w(%i)," + " h(%i), d(%i), sizeBytes(%i)", (RsContext)con, (RsAllocation)alloc, xoff, yoff, zoff, + lod, w, h, d, sizeBytes); + } PER_ARRAY_TYPE(nullptr, rsAllocation3DData, true, (RsContext)con, alloc, xoff, yoff, zoff, lod, w, h, d, ptr, sizeBytes, 0); } @@ -759,11 +856,13 @@ nAllocationData3D_alloc(JNIEnv *_env, jobject _this, jlong con, jlong srcAlloc, jint srcXoff, jint srcYoff, jint srcZoff, jint srcMip) { - LOG_API("nAllocationData3D_alloc, con(%p), dstAlloc(%p), dstXoff(%i), dstYoff(%i)," - " dstMip(%i), width(%i), height(%i)," - " srcAlloc(%p), srcXoff(%i), srcYoff(%i), srcMip(%i)", - (RsContext)con, (RsAllocation)dstAlloc, dstXoff, dstYoff, dstMip, - width, height, (RsAllocation)srcAlloc, srcXoff, srcYoff, srcMip); + if (kLogApi) { + ALOGD("nAllocationData3D_alloc, con(%p), dstAlloc(%p), dstXoff(%i), dstYoff(%i)," + " dstMip(%i), width(%i), height(%i)," + " srcAlloc(%p), srcXoff(%i), srcYoff(%i), srcMip(%i)", + (RsContext)con, (RsAllocation)dstAlloc, dstXoff, dstYoff, dstMip, + width, height, (RsAllocation)srcAlloc, srcXoff, srcYoff, srcMip); + } rsAllocationCopy3DRange((RsContext)con, (RsAllocation)dstAlloc, @@ -779,7 +878,9 @@ static void nAllocationRead(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, jobject data, int dataType) { RsAllocation *alloc = (RsAllocation *)_alloc; - LOG_API("nAllocationRead, con(%p), alloc(%p)", (RsContext)con, (RsAllocation)alloc); + if (kLogApi) { + ALOGD("nAllocationRead, con(%p), alloc(%p)", (RsContext)con, (RsAllocation)alloc); + } PER_ARRAY_TYPE(0, rsAllocationRead, false, (RsContext)con, alloc, ptr, len * typeBytes); } @@ -789,8 +890,10 @@ nAllocationRead1D(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, jint off jint count, jobject data, int sizeBytes, int dataType) { RsAllocation *alloc = (RsAllocation *)_alloc; - LOG_API("nAllocation1DRead, con(%p), adapter(%p), offset(%i), count(%i), sizeBytes(%i), dataType(%i)", - (RsContext)con, alloc, offset, count, sizeBytes, dataType); + if (kLogApi) { + ALOGD("nAllocation1DRead, con(%p), adapter(%p), offset(%i), count(%i), sizeBytes(%i), " + "dataType(%i)", (RsContext)con, alloc, offset, count, sizeBytes, dataType); + } PER_ARRAY_TYPE(0, rsAllocation1DRead, false, (RsContext)con, alloc, offset, lod, count, ptr, sizeBytes); } @@ -801,22 +904,30 @@ nAllocationRead2D(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, jint xof { RsAllocation *alloc = (RsAllocation *)_alloc; RsAllocationCubemapFace face = (RsAllocationCubemapFace)_face; - LOG_API("nAllocation2DRead, con(%p), adapter(%p), xoff(%i), yoff(%i), w(%i), h(%i), len(%i) type(%i)", - (RsContext)con, alloc, xoff, yoff, w, h, sizeBytes, dataType); - PER_ARRAY_TYPE(0, rsAllocation2DRead, false, (RsContext)con, alloc, xoff, yoff, lod, face, w, h, ptr, sizeBytes, 0); + if (kLogApi) { + ALOGD("nAllocation2DRead, con(%p), adapter(%p), xoff(%i), yoff(%i), w(%i), h(%i), len(%i) " + "type(%i)", (RsContext)con, alloc, xoff, yoff, w, h, sizeBytes, dataType); + } + PER_ARRAY_TYPE(0, rsAllocation2DRead, false, (RsContext)con, alloc, xoff, yoff, lod, face, w, h, + ptr, sizeBytes, 0); } static jlong nAllocationGetType(JNIEnv *_env, jobject _this, jlong con, jlong a) { - LOG_API("nAllocationGetType, con(%p), a(%p)", (RsContext)con, (RsAllocation)a); + if (kLogApi) { + ALOGD("nAllocationGetType, con(%p), a(%p)", (RsContext)con, (RsAllocation)a); + } return (jlong)(uintptr_t) rsaAllocationGetType((RsContext)con, (RsAllocation)a); } static void nAllocationResize1D(JNIEnv *_env, jobject _this, jlong con, jlong alloc, jint dimX) { - LOG_API("nAllocationResize1D, con(%p), alloc(%p), sizeX(%i)", (RsContext)con, (RsAllocation)alloc, dimX); + if (kLogApi) { + ALOGD("nAllocationResize1D, con(%p), alloc(%p), sizeX(%i)", (RsContext)con, + (RsAllocation)alloc, dimX); + } rsAllocationResize1D((RsContext)con, (RsAllocation)alloc, dimX); } @@ -947,21 +1058,29 @@ nFontCreateFromAsset(JNIEnv *_env, jobject _this, jlong con, jobject _assetMgr, static void nScriptBindAllocation(JNIEnv *_env, jobject _this, jlong con, jlong script, jlong alloc, jint slot) { - LOG_API("nScriptBindAllocation, con(%p), script(%p), alloc(%p), slot(%i)", (RsContext)con, (RsScript)script, (RsAllocation)alloc, slot); + if (kLogApi) { + ALOGD("nScriptBindAllocation, con(%p), script(%p), alloc(%p), slot(%i)", (RsContext)con, + (RsScript)script, (RsAllocation)alloc, slot); + } rsScriptBindAllocation((RsContext)con, (RsScript)script, (RsAllocation)alloc, slot); } static void nScriptSetVarI(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jint val) { - LOG_API("nScriptSetVarI, con(%p), s(%p), slot(%i), val(%i)", (RsContext)con, (void *)script, slot, val); + if (kLogApi) { + ALOGD("nScriptSetVarI, con(%p), s(%p), slot(%i), val(%i)", (RsContext)con, (void *)script, + slot, val); + } rsScriptSetVarI((RsContext)con, (RsScript)script, slot, val); } static jint nScriptGetVarI(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot) { - LOG_API("nScriptGetVarI, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot); + if (kLogApi) { + ALOGD("nScriptGetVarI, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot); + } int value = 0; rsScriptGetVarV((RsContext)con, (RsScript)script, slot, &value, sizeof(value)); return value; @@ -970,21 +1089,29 @@ nScriptGetVarI(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot) static void nScriptSetVarObj(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jlong val) { - LOG_API("nScriptSetVarObj, con(%p), s(%p), slot(%i), val(%i)", (RsContext)con, (void *)script, slot, val); + if (kLogApi) { + ALOGD("nScriptSetVarObj, con(%p), s(%p), slot(%i), val(%" PRId64 ")", (RsContext)con, (void *)script, + slot, val); + } rsScriptSetVarObj((RsContext)con, (RsScript)script, slot, (RsObjectBase)val); } static void nScriptSetVarJ(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jlong val) { - LOG_API("nScriptSetVarJ, con(%p), s(%p), slot(%i), val(%lli)", (RsContext)con, (void *)script, slot, val); + if (kLogApi) { + ALOGD("nScriptSetVarJ, con(%p), s(%p), slot(%i), val(%" PRId64 ")", (RsContext)con, (void *)script, + slot, val); + } rsScriptSetVarJ((RsContext)con, (RsScript)script, slot, val); } static jlong nScriptGetVarJ(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot) { - LOG_API("nScriptGetVarJ, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot); + if (kLogApi) { + ALOGD("nScriptGetVarJ, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot); + } jlong value = 0; rsScriptGetVarV((RsContext)con, (RsScript)script, slot, &value, sizeof(value)); return value; @@ -993,14 +1120,19 @@ nScriptGetVarJ(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot) static void nScriptSetVarF(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, float val) { - LOG_API("nScriptSetVarF, con(%p), s(%p), slot(%i), val(%f)", (RsContext)con, (void *)script, slot, val); + if (kLogApi) { + ALOGD("nScriptSetVarF, con(%p), s(%p), slot(%i), val(%f)", (RsContext)con, (void *)script, + slot, val); + } rsScriptSetVarF((RsContext)con, (RsScript)script, slot, val); } static jfloat nScriptGetVarF(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot) { - LOG_API("nScriptGetVarF, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot); + if (kLogApi) { + ALOGD("nScriptGetVarF, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot); + } jfloat value = 0; rsScriptGetVarV((RsContext)con, (RsScript)script, slot, &value, sizeof(value)); return value; @@ -1009,14 +1141,19 @@ nScriptGetVarF(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot) static void nScriptSetVarD(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, double val) { - LOG_API("nScriptSetVarD, con(%p), s(%p), slot(%i), val(%lf)", (RsContext)con, (void *)script, slot, val); + if (kLogApi) { + ALOGD("nScriptSetVarD, con(%p), s(%p), slot(%i), val(%lf)", (RsContext)con, (void *)script, + slot, val); + } rsScriptSetVarD((RsContext)con, (RsScript)script, slot, val); } static jdouble nScriptGetVarD(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot) { - LOG_API("nScriptGetVarD, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot); + if (kLogApi) { + ALOGD("nScriptGetVarD, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot); + } jdouble value = 0; rsScriptGetVarV((RsContext)con, (RsScript)script, slot, &value, sizeof(value)); return value; @@ -1025,7 +1162,9 @@ nScriptGetVarD(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot) static void nScriptSetVarV(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jbyteArray data) { - LOG_API("nScriptSetVarV, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot); + if (kLogApi) { + ALOGD("nScriptSetVarV, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot); + } jint len = _env->GetArrayLength(data); jbyte *ptr = _env->GetByteArrayElements(data, nullptr); rsScriptSetVarV((RsContext)con, (RsScript)script, slot, ptr, len); @@ -1035,7 +1174,9 @@ nScriptSetVarV(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, static void nScriptGetVarV(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jbyteArray data) { - LOG_API("nScriptSetVarV, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot); + if (kLogApi) { + ALOGD("nScriptSetVarV, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot); + } jint len = _env->GetArrayLength(data); jbyte *ptr = _env->GetByteArrayElements(data, nullptr); rsScriptGetVarV((RsContext)con, (RsScript)script, slot, ptr, len); @@ -1043,9 +1184,12 @@ nScriptGetVarV(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, } static void -nScriptSetVarVE(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jbyteArray data, jlong elem, jintArray dims) +nScriptSetVarVE(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jbyteArray data, + jlong elem, jintArray dims) { - LOG_API("nScriptSetVarVE, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot); + if (kLogApi) { + ALOGD("nScriptSetVarVE, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot); + } jint len = _env->GetArrayLength(data); jbyte *ptr = _env->GetByteArrayElements(data, nullptr); jint dimsLen = _env->GetArrayLength(dims) * sizeof(int); @@ -1060,7 +1204,9 @@ nScriptSetVarVE(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, static void nScriptSetTimeZone(JNIEnv *_env, jobject _this, jlong con, jlong script, jbyteArray timeZone) { - LOG_API("nScriptCSetTimeZone, con(%p), s(%p)", (RsContext)con, (void *)script); + if (kLogApi) { + ALOGD("nScriptCSetTimeZone, con(%p), s(%p)", (RsContext)con, (void *)script); + } jint length = _env->GetArrayLength(timeZone); jbyte* timeZone_ptr; @@ -1076,14 +1222,18 @@ nScriptSetTimeZone(JNIEnv *_env, jobject _this, jlong con, jlong script, jbyteAr static void nScriptInvoke(JNIEnv *_env, jobject _this, jlong con, jlong obj, jint slot) { - LOG_API("nScriptInvoke, con(%p), script(%p)", (RsContext)con, (void *)obj); + if (kLogApi) { + ALOGD("nScriptInvoke, con(%p), script(%p)", (RsContext)con, (void *)obj); + } rsScriptInvoke((RsContext)con, (RsScript)obj, slot); } static void nScriptInvokeV(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jbyteArray data) { - LOG_API("nScriptInvokeV, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot); + if (kLogApi) { + ALOGD("nScriptInvokeV, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot); + } jint len = _env->GetArrayLength(data); jbyte *ptr = _env->GetByteArrayElements(data, nullptr); rsScriptInvokeV((RsContext)con, (RsScript)script, slot, ptr, len); @@ -1095,8 +1245,9 @@ nScriptForEach(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, jlongArray ains, jlong aout, jbyteArray params, jintArray limits) { - LOG_API("nScriptForEach, con(%p), s(%p), slot(%i)", (RsContext)con, - (void *)script, slot); + if (kLogApi) { + ALOGD("nScriptForEach, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot); + } jint in_len = 0; jlong *in_ptr = nullptr; @@ -1140,6 +1291,7 @@ nScriptForEach(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot, limit_ptr = _env->GetIntArrayElements(limits, nullptr); assert(limit_len == 6); + UNUSED(limit_len); // As the assert might not be compiled. sc.xStart = limit_ptr[0]; sc.xEnd = limit_ptr[1]; @@ -1176,7 +1328,9 @@ nScriptCCreate(JNIEnv *_env, jobject _this, jlong con, jstring resName, jstring cacheDir, jbyteArray scriptRef, jint length) { - LOG_API("nScriptCCreate, con(%p)", (RsContext)con); + if (kLogApi) { + ALOGD("nScriptCCreate, con(%p)", (RsContext)con); + } AutoJavaStringToUTF8 resNameUTF(_env, resName); AutoJavaStringToUTF8 cacheDirUTF(_env, cacheDir); @@ -1223,21 +1377,30 @@ exit: static jlong nScriptIntrinsicCreate(JNIEnv *_env, jobject _this, jlong con, jint id, jlong eid) { - LOG_API("nScriptIntrinsicCreate, con(%p) id(%i) element(%p)", (RsContext)con, id, (void *)eid); + if (kLogApi) { + ALOGD("nScriptIntrinsicCreate, con(%p) id(%i) element(%p)", (RsContext)con, id, + (void *)eid); + } return (jlong)(uintptr_t)rsScriptIntrinsicCreate((RsContext)con, id, (RsElement)eid); } static jlong nScriptKernelIDCreate(JNIEnv *_env, jobject _this, jlong con, jlong sid, jint slot, jint sig) { - LOG_API("nScriptKernelIDCreate, con(%p) script(%p), slot(%i), sig(%i)", (RsContext)con, (void *)sid, slot, sig); + if (kLogApi) { + ALOGD("nScriptKernelIDCreate, con(%p) script(%p), slot(%i), sig(%i)", (RsContext)con, + (void *)sid, slot, sig); + } return (jlong)(uintptr_t)rsScriptKernelIDCreate((RsContext)con, (RsScript)sid, slot, sig); } static jlong nScriptFieldIDCreate(JNIEnv *_env, jobject _this, jlong con, jlong sid, jint slot) { - LOG_API("nScriptFieldIDCreate, con(%p) script(%p), slot(%i)", (RsContext)con, (void *)sid, slot); + if (kLogApi) { + ALOGD("nScriptFieldIDCreate, con(%p) script(%p), slot(%i)", (RsContext)con, (void *)sid, + slot); + } return (jlong)(uintptr_t)rsScriptFieldIDCreate((RsContext)con, (RsScript)sid, slot); } @@ -1245,7 +1408,9 @@ static jlong nScriptGroupCreate(JNIEnv *_env, jobject _this, jlong con, jlongArray _kernels, jlongArray _src, jlongArray _dstk, jlongArray _dstf, jlongArray _types) { - LOG_API("nScriptGroupCreate, con(%p)", (RsContext)con); + if (kLogApi) { + ALOGD("nScriptGroupCreate, con(%p)", (RsContext)con); + } jint kernelsLen = _env->GetArrayLength(_kernels); jlong *jKernelsPtr = _env->GetLongArrayElements(_kernels, nullptr); @@ -1305,23 +1470,29 @@ nScriptGroupCreate(JNIEnv *_env, jobject _this, jlong con, jlongArray _kernels, static void nScriptGroupSetInput(JNIEnv *_env, jobject _this, jlong con, jlong gid, jlong kid, jlong alloc) { - LOG_API("nScriptGroupSetInput, con(%p) group(%p), kernelId(%p), alloc(%p)", (RsContext)con, - (void *)gid, (void *)kid, (void *)alloc); + if (kLogApi) { + ALOGD("nScriptGroupSetInput, con(%p) group(%p), kernelId(%p), alloc(%p)", (RsContext)con, + (void *)gid, (void *)kid, (void *)alloc); + } rsScriptGroupSetInput((RsContext)con, (RsScriptGroup)gid, (RsScriptKernelID)kid, (RsAllocation)alloc); } static void nScriptGroupSetOutput(JNIEnv *_env, jobject _this, jlong con, jlong gid, jlong kid, jlong alloc) { - LOG_API("nScriptGroupSetOutput, con(%p) group(%p), kernelId(%p), alloc(%p)", (RsContext)con, - (void *)gid, (void *)kid, (void *)alloc); + if (kLogApi) { + ALOGD("nScriptGroupSetOutput, con(%p) group(%p), kernelId(%p), alloc(%p)", (RsContext)con, + (void *)gid, (void *)kid, (void *)alloc); + } rsScriptGroupSetOutput((RsContext)con, (RsScriptGroup)gid, (RsScriptKernelID)kid, (RsAllocation)alloc); } static void nScriptGroupExecute(JNIEnv *_env, jobject _this, jlong con, jlong gid) { - LOG_API("nScriptGroupSetOutput, con(%p) group(%p)", (RsContext)con, (void *)gid); + if (kLogApi) { + ALOGD("nScriptGroupSetOutput, con(%p) group(%p)", (RsContext)con, (void *)gid); + } rsScriptGroupExecute((RsContext)con, (RsScriptGroup)gid); } @@ -1334,7 +1505,9 @@ nProgramStoreCreate(JNIEnv *_env, jobject _this, jlong con, jint srcFunc, jint destFunc, jint depthFunc) { - LOG_API("nProgramStoreCreate, con(%p)", (RsContext)con); + if (kLogApi) { + ALOGD("nProgramStoreCreate, con(%p)", (RsContext)con); + } return (jlong)(uintptr_t)rsProgramStoreCreate((RsContext)con, colorMaskR, colorMaskG, colorMaskB, colorMaskA, depthMask, ditherEnable, (RsBlendSrcFunc)srcFunc, (RsBlendDstFunc)destFunc, (RsDepthFunc)depthFunc); @@ -1345,21 +1518,30 @@ nProgramStoreCreate(JNIEnv *_env, jobject _this, jlong con, static void nProgramBindConstants(JNIEnv *_env, jobject _this, jlong con, jlong vpv, jint slot, jlong a) { - LOG_API("nProgramBindConstants, con(%p), vpf(%p), sloat(%i), a(%p)", (RsContext)con, (RsProgramVertex)vpv, slot, (RsAllocation)a); + if (kLogApi) { + ALOGD("nProgramBindConstants, con(%p), vpf(%p), sloat(%i), a(%p)", (RsContext)con, + (RsProgramVertex)vpv, slot, (RsAllocation)a); + } rsProgramBindConstants((RsContext)con, (RsProgram)vpv, slot, (RsAllocation)a); } static void nProgramBindTexture(JNIEnv *_env, jobject _this, jlong con, jlong vpf, jint slot, jlong a) { - LOG_API("nProgramBindTexture, con(%p), vpf(%p), slot(%i), a(%p)", (RsContext)con, (RsProgramFragment)vpf, slot, (RsAllocation)a); + if (kLogApi) { + ALOGD("nProgramBindTexture, con(%p), vpf(%p), slot(%i), a(%p)", (RsContext)con, + (RsProgramFragment)vpf, slot, (RsAllocation)a); + } rsProgramBindTexture((RsContext)con, (RsProgramFragment)vpf, slot, (RsAllocation)a); } static void nProgramBindSampler(JNIEnv *_env, jobject _this, jlong con, jlong vpf, jint slot, jlong a) { - LOG_API("nProgramBindSampler, con(%p), vpf(%p), slot(%i), a(%p)", (RsContext)con, (RsProgramFragment)vpf, slot, (RsSampler)a); + if (kLogApi) { + ALOGD("nProgramBindSampler, con(%p), vpf(%p), slot(%i), a(%p)", (RsContext)con, + (RsProgramFragment)vpf, slot, (RsSampler)a); + } rsProgramBindSampler((RsContext)con, (RsProgramFragment)vpf, slot, (RsSampler)a); } @@ -1378,7 +1560,9 @@ nProgramFragmentCreate(JNIEnv *_env, jobject _this, jlong con, jstring shader, const char ** nameArray = names.c_str(); size_t* sizeArray = names.c_str_len(); - LOG_API("nProgramFragmentCreate, con(%p), paramLen(%i)", (RsContext)con, paramLen); + if (kLogApi) { + ALOGD("nProgramFragmentCreate, con(%p), paramLen(%i)", (RsContext)con, paramLen); + } uintptr_t * paramPtr = (uintptr_t*) malloc(sizeof(uintptr_t) * paramLen); for(int i = 0; i < paramLen; ++i) { @@ -1404,7 +1588,9 @@ nProgramVertexCreate(JNIEnv *_env, jobject _this, jlong con, jstring shader, jlong *jParamPtr = _env->GetLongArrayElements(params, nullptr); jint paramLen = _env->GetArrayLength(params); - LOG_API("nProgramVertexCreate, con(%p), paramLen(%i)", (RsContext)con, paramLen); + if (kLogApi) { + ALOGD("nProgramVertexCreate, con(%p), paramLen(%i)", (RsContext)con, paramLen); + } int texCount = _env->GetArrayLength(texNames); AutoJavaStringArrayToUTF8 names(_env, texNames, texCount); @@ -1430,7 +1616,10 @@ nProgramVertexCreate(JNIEnv *_env, jobject _this, jlong con, jstring shader, static jlong nProgramRasterCreate(JNIEnv *_env, jobject _this, jlong con, jboolean pointSprite, jint cull) { - LOG_API("nProgramRasterCreate, con(%p), pointSprite(%i), cull(%i)", (RsContext)con, pointSprite, cull); + if (kLogApi) { + ALOGD("nProgramRasterCreate, con(%p), pointSprite(%i), cull(%i)", (RsContext)con, + pointSprite, cull); + } return (jlong)(uintptr_t)rsProgramRasterCreate((RsContext)con, pointSprite, (RsCullMode)cull); } @@ -1440,35 +1629,46 @@ nProgramRasterCreate(JNIEnv *_env, jobject _this, jlong con, jboolean pointSprit static void nContextBindRootScript(JNIEnv *_env, jobject _this, jlong con, jlong script) { - LOG_API("nContextBindRootScript, con(%p), script(%p)", (RsContext)con, (RsScript)script); + if (kLogApi) { + ALOGD("nContextBindRootScript, con(%p), script(%p)", (RsContext)con, (RsScript)script); + } rsContextBindRootScript((RsContext)con, (RsScript)script); } static void nContextBindProgramStore(JNIEnv *_env, jobject _this, jlong con, jlong pfs) { - LOG_API("nContextBindProgramStore, con(%p), pfs(%p)", (RsContext)con, (RsProgramStore)pfs); + if (kLogApi) { + ALOGD("nContextBindProgramStore, con(%p), pfs(%p)", (RsContext)con, (RsProgramStore)pfs); + } rsContextBindProgramStore((RsContext)con, (RsProgramStore)pfs); } static void nContextBindProgramFragment(JNIEnv *_env, jobject _this, jlong con, jlong pf) { - LOG_API("nContextBindProgramFragment, con(%p), pf(%p)", (RsContext)con, (RsProgramFragment)pf); + if (kLogApi) { + ALOGD("nContextBindProgramFragment, con(%p), pf(%p)", (RsContext)con, + (RsProgramFragment)pf); + } rsContextBindProgramFragment((RsContext)con, (RsProgramFragment)pf); } static void nContextBindProgramVertex(JNIEnv *_env, jobject _this, jlong con, jlong pf) { - LOG_API("nContextBindProgramVertex, con(%p), pf(%p)", (RsContext)con, (RsProgramVertex)pf); + if (kLogApi) { + ALOGD("nContextBindProgramVertex, con(%p), pf(%p)", (RsContext)con, (RsProgramVertex)pf); + } rsContextBindProgramVertex((RsContext)con, (RsProgramVertex)pf); } static void nContextBindProgramRaster(JNIEnv *_env, jobject _this, jlong con, jlong pf) { - LOG_API("nContextBindProgramRaster, con(%p), pf(%p)", (RsContext)con, (RsProgramRaster)pf); + if (kLogApi) { + ALOGD("nContextBindProgramRaster, con(%p), pf(%p)", (RsContext)con, (RsProgramRaster)pf); + } rsContextBindProgramRaster((RsContext)con, (RsProgramRaster)pf); } @@ -1479,7 +1679,9 @@ static jlong nSamplerCreate(JNIEnv *_env, jobject _this, jlong con, jint magFilter, jint minFilter, jint wrapS, jint wrapT, jint wrapR, jfloat aniso) { - LOG_API("nSamplerCreate, con(%p)", (RsContext)con); + if (kLogApi) { + ALOGD("nSamplerCreate, con(%p)", (RsContext)con); + } return (jlong)(uintptr_t)rsSamplerCreate((RsContext)con, (RsSamplerValue)magFilter, (RsSamplerValue)minFilter, @@ -1493,7 +1695,9 @@ nSamplerCreate(JNIEnv *_env, jobject _this, jlong con, jint magFilter, jint minF static jlong nPathCreate(JNIEnv *_env, jobject _this, jlong con, jint prim, jboolean isStatic, jlong _vtx, jlong _loop, jfloat q) { - LOG_API("nPathCreate, con(%p)", (RsContext)con); + if (kLogApi) { + ALOGD("nPathCreate, con(%p)", (RsContext)con); + } jlong id = (jlong)(uintptr_t)rsPathCreate((RsContext)con, (RsPathPrimitive)prim, isStatic, (RsAllocation)_vtx, @@ -1504,7 +1708,9 @@ nPathCreate(JNIEnv *_env, jobject _this, jlong con, jint prim, jboolean isStatic static jlong nMeshCreate(JNIEnv *_env, jobject _this, jlong con, jlongArray _vtx, jlongArray _idx, jintArray _prim) { - LOG_API("nMeshCreate, con(%p)", (RsContext)con); + if (kLogApi) { + ALOGD("nMeshCreate, con(%p)", (RsContext)con); + } jint vtxLen = _env->GetArrayLength(_vtx); jlong *jVtxPtr = _env->GetLongArrayElements(_vtx, nullptr); @@ -1539,7 +1745,9 @@ nMeshCreate(JNIEnv *_env, jobject _this, jlong con, jlongArray _vtx, jlongArray static jint nMeshGetVertexBufferCount(JNIEnv *_env, jobject _this, jlong con, jlong mesh) { - LOG_API("nMeshGetVertexBufferCount, con(%p), Mesh(%p)", (RsContext)con, (RsMesh)mesh); + if (kLogApi) { + ALOGD("nMeshGetVertexBufferCount, con(%p), Mesh(%p)", (RsContext)con, (RsMesh)mesh); + } jint vtxCount = 0; rsaMeshGetVertexBufferCount((RsContext)con, (RsMesh)mesh, &vtxCount); return vtxCount; @@ -1548,7 +1756,9 @@ nMeshGetVertexBufferCount(JNIEnv *_env, jobject _this, jlong con, jlong mesh) static jint nMeshGetIndexCount(JNIEnv *_env, jobject _this, jlong con, jlong mesh) { - LOG_API("nMeshGetIndexCount, con(%p), Mesh(%p)", (RsContext)con, (RsMesh)mesh); + if (kLogApi) { + ALOGD("nMeshGetIndexCount, con(%p), Mesh(%p)", (RsContext)con, (RsMesh)mesh); + } jint idxCount = 0; rsaMeshGetIndexCount((RsContext)con, (RsMesh)mesh, &idxCount); return idxCount; @@ -1557,7 +1767,9 @@ nMeshGetIndexCount(JNIEnv *_env, jobject _this, jlong con, jlong mesh) static void nMeshGetVertices(JNIEnv *_env, jobject _this, jlong con, jlong mesh, jlongArray _ids, jint numVtxIDs) { - LOG_API("nMeshGetVertices, con(%p), Mesh(%p)", (RsContext)con, (RsMesh)mesh); + if (kLogApi) { + ALOGD("nMeshGetVertices, con(%p), Mesh(%p)", (RsContext)con, (RsMesh)mesh); + } RsAllocation *allocs = (RsAllocation*)malloc((uint32_t)numVtxIDs * sizeof(RsAllocation)); rsaMeshGetVertices((RsContext)con, (RsMesh)mesh, allocs, (uint32_t)numVtxIDs); @@ -1573,7 +1785,9 @@ nMeshGetVertices(JNIEnv *_env, jobject _this, jlong con, jlong mesh, jlongArray static void nMeshGetIndices(JNIEnv *_env, jobject _this, jlong con, jlong mesh, jlongArray _idxIds, jintArray _primitives, jint numIndices) { - LOG_API("nMeshGetVertices, con(%p), Mesh(%p)", (RsContext)con, (RsMesh)mesh); + if (kLogApi) { + ALOGD("nMeshGetVertices, con(%p), Mesh(%p)", (RsContext)con, (RsMesh)mesh); + } RsAllocation *allocs = (RsAllocation*)malloc((uint32_t)numIndices * sizeof(RsAllocation)); uint32_t *prims= (uint32_t*)malloc((uint32_t)numIndices * sizeof(uint32_t)); diff --git a/services/core/java/com/android/server/LocationManagerService.java b/services/core/java/com/android/server/LocationManagerService.java index 28a6917cb0c7..9eb1a182bd4a 100644 --- a/services/core/java/com/android/server/LocationManagerService.java +++ b/services/core/java/com/android/server/LocationManagerService.java @@ -1450,14 +1450,13 @@ public class LocationManagerService extends ILocationManager.Stub { if (receiver == null) { receiver = new Receiver(listener, null, pid, uid, packageName, workSource, hideFromAppOps); - mReceivers.put(binder, receiver); - try { receiver.getListener().asBinder().linkToDeath(receiver, 0); } catch (RemoteException e) { Slog.e(TAG, "linkToDeath failed:", e); return null; } + mReceivers.put(binder, receiver); } return receiver; } diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java index 8dfb3217c0af..4cbf019e801b 100755 --- a/services/core/java/com/android/server/am/ActivityManagerService.java +++ b/services/core/java/com/android/server/am/ActivityManagerService.java @@ -81,6 +81,7 @@ import com.android.server.SystemServiceManager; import com.android.server.Watchdog; import com.android.server.am.ActivityStack.ActivityState; import com.android.server.firewall.IntentFirewall; +import com.android.server.pm.Installer; import com.android.server.pm.UserManagerService; import com.android.server.wm.AppTransition; import com.android.server.wm.WindowManagerService; @@ -370,6 +371,8 @@ public final class ActivityManagerService extends ActivityManagerNative /** All system services */ SystemServiceManager mSystemServiceManager; + private Installer mInstaller; + /** Run all ActivityStacks through this */ ActivityStackSupervisor mStackSupervisor; @@ -1833,7 +1836,9 @@ public final class ActivityManagerService extends ActivityManagerNative break; } case REQUEST_ALL_PSS_MSG: { - requestPssAllProcsLocked(SystemClock.uptimeMillis(), true, false); + synchronized (ActivityManagerService.this) { + requestPssAllProcsLocked(SystemClock.uptimeMillis(), true, false); + } break; } case START_PROFILES_MSG: { @@ -2358,6 +2363,10 @@ public final class ActivityManagerService extends ActivityManagerNative mSystemServiceManager = mgr; } + public void setInstaller(Installer installer) { + mInstaller = installer; + } + private void start() { Process.removeAllProcessGroups(); mProcessCpuThread.start(); @@ -3032,12 +3041,12 @@ public final class ActivityManagerService extends ActivityManagerNative if (app == null) { checkTime(startTime, "startProcess: creating new process record"); app = newProcessRecordLocked(info, processName, isolated, isolatedUid); - app.crashHandler = crashHandler; if (app == null) { Slog.w(TAG, "Failed making new process record for " + processName + "/" + info.uid + " isolated=" + isolated); return null; } + app.crashHandler = crashHandler; mProcessNames.put(processName, app.uid, app); if (isolated) { mIsolatedProcesses.put(app.uid, app); @@ -6091,6 +6100,7 @@ public final class ActivityManagerService extends ActivityManagerNative app.hasShownUi = false; app.debugging = false; app.cached = false; + app.killedByAm = false; mHandler.removeMessages(PROC_START_TIMEOUT_MSG, app); @@ -6326,6 +6336,18 @@ public final class ActivityManagerService extends ActivityManagerNative mCallFinishBooting = false; } + ArraySet<String> completedIsas = new ArraySet<String>(); + for (String abi : Build.SUPPORTED_ABIS) { + Process.establishZygoteConnectionForAbi(abi); + final String instructionSet = VMRuntime.getInstructionSet(abi); + if (!completedIsas.contains(instructionSet)) { + if (mInstaller.markBootComplete(VMRuntime.getInstructionSet(abi)) != 0) { + Slog.e(TAG, "Unable to mark boot complete for abi: " + abi); + } + completedIsas.add(instructionSet); + } + } + // Register receivers to handle package update events mPackageMonitor.register(mContext, Looper.getMainLooper(), UserHandle.ALL, false); @@ -9464,11 +9486,13 @@ public final class ActivityManagerService extends ActivityManagerNative if (DEBUG_PROVIDER) { Slog.d(TAG, "Installing in existing process " + proc); } - checkTime(startTime, "getContentProviderImpl: scheduling install"); - proc.pubProviders.put(cpi.name, cpr); - try { - proc.thread.scheduleInstallProvider(cpi); - } catch (RemoteException e) { + if (!proc.pubProviders.containsKey(cpi.name)) { + checkTime(startTime, "getContentProviderImpl: scheduling install"); + proc.pubProviders.put(cpi.name, cpr); + try { + proc.thread.scheduleInstallProvider(cpi); + } catch (RemoteException e) { + } } } else { checkTime(startTime, "getContentProviderImpl: before start process"); @@ -10032,10 +10056,9 @@ public final class ActivityManagerService extends ActivityManagerNative } finally { // Ensure that whatever happens, we clean up the identity state sCallerIdentity.remove(); + // Ensure we're done with the provider. + removeContentProviderExternalUnchecked(name, null, userId); } - - // We've got the fd now, so we're done with the provider. - removeContentProviderExternalUnchecked(name, null, userId); } else { Slog.d(TAG, "Failed to get provider for authority '" + name + "'"); } diff --git a/services/core/java/com/android/server/am/ActivityStack.java b/services/core/java/com/android/server/am/ActivityStack.java index e1b827843d6d..df4bf282e6de 100644 --- a/services/core/java/com/android/server/am/ActivityStack.java +++ b/services/core/java/com/android/server/am/ActivityStack.java @@ -1819,6 +1819,9 @@ final class ActivityStack { // Do over! mStackSupervisor.scheduleResumeTopActivities(); } + if (next == mLastScreenshotActivity) { + invalidateLastScreenshot(); + } if (mStackSupervisor.reportResumedActivityLocked(next)) { mNoAnimActivities.clear(); if (DEBUG_STACK) mStackSupervisor.validateTopActivitiesLocked(); diff --git a/services/core/java/com/android/server/am/BroadcastQueue.java b/services/core/java/com/android/server/am/BroadcastQueue.java index e01b98361fa4..3b774e17730b 100644 --- a/services/core/java/com/android/server/am/BroadcastQueue.java +++ b/services/core/java/com/android/server/am/BroadcastQueue.java @@ -352,7 +352,7 @@ public final class BroadcastQueue { } r.receiver = null; r.intent.setComponent(null); - if (r.curApp != null) { + if (r.curApp != null && r.curApp.curReceiver == r) { r.curApp.curReceiver = null; } if (r.curFilter != null) { diff --git a/services/core/java/com/android/server/pm/Installer.java b/services/core/java/com/android/server/pm/Installer.java index ca11862fa0f6..31c604face0c 100644 --- a/services/core/java/com/android/server/pm/Installer.java +++ b/services/core/java/com/android/server/pm/Installer.java @@ -216,6 +216,18 @@ public final class Installer extends SystemService { return mInstaller.execute(builder.toString()); } + public int markBootComplete(String instructionSet) { + if (!isValidInstructionSet(instructionSet)) { + Slog.e(TAG, "Invalid instruction set: " + instructionSet); + return -1; + } + + StringBuilder builder = new StringBuilder("markbootcomplete"); + builder.append(' '); + builder.append(instructionSet); + return mInstaller.execute(builder.toString()); + } + public boolean ping() { if (mInstaller.execute("ping") < 0) { return false; diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index b79e15756a11..2564962e192c 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -4225,6 +4225,14 @@ public class PackageManagerService extends IPackageManager.Stub { boolean updatedPkgBetter = false; // First check if this is a system package that may involve an update if (updatedPkg != null && (parseFlags&PackageParser.PARSE_IS_SYSTEM) != 0) { + // If new package is not located in "/system/priv-app" (e.g. due to an OTA), + // it needs to drop FLAG_PRIVILEGED. + if (locationIsPrivileged(scanFile)) { + updatedPkg.pkgFlags |= ApplicationInfo.FLAG_PRIVILEGED; + } else { + updatedPkg.pkgFlags &= ~ApplicationInfo.FLAG_PRIVILEGED; + } + if (ps != null && !ps.codePath.equals(scanFile)) { // The path has changed from what was last scanned... check the // version of the new path against what we have stored to determine @@ -4242,12 +4250,8 @@ public class PackageManagerService extends IPackageManager.Stub { + " to " + scanFile); updatedPkg.codePath = scanFile; updatedPkg.codePathString = scanFile.toString(); - // This is the point at which we know that the system-disk APK - // for this package has moved during a reboot (e.g. due to an OTA), - // so we need to reevaluate it for privilege policy. - if (locationIsPrivileged(scanFile)) { - updatedPkg.pkgFlags |= ApplicationInfo.FLAG_PRIVILEGED; - } + updatedPkg.resourcePath = scanFile; + updatedPkg.resourcePathString = scanFile.toString(); } updatedPkg.pkg = pkg; throw new PackageManagerException(INSTALL_FAILED_DUPLICATE_PACKAGE, null); @@ -7103,7 +7107,9 @@ public class PackageManagerService extends IPackageManager.Stub { // If the original was granted this permission, we take // that grant decision as read and propagate it to the // update. - allowed = true; + if (sysPs.isPrivileged()) { + allowed = true; + } } else { // The system apk may have been updated with an older // version of the one on the data partition, but which diff --git a/services/core/java/com/android/server/updates/ConfigUpdateInstallReceiver.java b/services/core/java/com/android/server/updates/ConfigUpdateInstallReceiver.java index 7f7aae380c93..1135dfe2f234 100644 --- a/services/core/java/com/android/server/updates/ConfigUpdateInstallReceiver.java +++ b/services/core/java/com/android/server/updates/ConfigUpdateInstallReceiver.java @@ -47,7 +47,6 @@ public class ConfigUpdateInstallReceiver extends BroadcastReceiver { private static final String TAG = "ConfigUpdateInstallReceiver"; - private static final String EXTRA_CONTENT_PATH = "CONTENT_PATH"; private static final String EXTRA_REQUIRED_HASH = "REQUIRED_HASH"; private static final String EXTRA_SIGNATURE = "SIGNATURE"; private static final String EXTRA_VERSION_NUMBER = "VERSION"; diff --git a/services/core/java/com/android/server/wm/StackTapPointerEventListener.java b/services/core/java/com/android/server/wm/StackTapPointerEventListener.java index 19d8ab372afe..80eb453cdfea 100644 --- a/services/core/java/com/android/server/wm/StackTapPointerEventListener.java +++ b/services/core/java/com/android/server/wm/StackTapPointerEventListener.java @@ -57,8 +57,9 @@ public class StackTapPointerEventListener implements PointerEventListener { if (mPointerId >= 0) { int index = motionEvent.findPointerIndex(mPointerId); if ((motionEvent.getEventTime() - motionEvent.getDownTime()) > TAP_TIMEOUT_MSEC - || (motionEvent.getX(index) - mDownX) > mMotionSlop - || (motionEvent.getY(index) - mDownY) > mMotionSlop) { + || index < 0 + || Math.abs(motionEvent.getX(index) - mDownX) > mMotionSlop + || Math.abs(motionEvent.getY(index) - mDownY) > mMotionSlop) { mPointerId = -1; } } @@ -73,7 +74,8 @@ public class StackTapPointerEventListener implements PointerEventListener { final int y = (int)motionEvent.getY(index); if ((motionEvent.getEventTime() - motionEvent.getDownTime()) < TAP_TIMEOUT_MSEC - && (x - mDownX) < mMotionSlop && (y - mDownY) < mMotionSlop + && Math.abs(x - mDownX) < mMotionSlop + && Math.abs(y - mDownY) < mMotionSlop && !mTouchExcludeRegion.contains(x, y)) { mService.mH.obtainMessage(H.TAP_OUTSIDE_STACK, x, y, mDisplayContent).sendToTarget(); diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java index 837672aaa146..1c03cedff31e 100644 --- a/services/core/java/com/android/server/wm/WindowManagerService.java +++ b/services/core/java/com/android/server/wm/WindowManagerService.java @@ -4000,6 +4000,15 @@ public class WindowManagerService extends IWindowManager.Stub if (changed) { mFocusedApp = newFocus; mInputMonitor.setFocusedAppLw(newFocus); + setFocusedStackFrame(); + if (SHOW_LIGHT_TRANSACTIONS) Slog.i(TAG, ">>> OPEN TRANSACTION setFocusedApp"); + SurfaceControl.openTransaction(); + try { + setFocusedStackLayer(); + } finally { + SurfaceControl.closeTransaction(); + if (SHOW_LIGHT_TRANSACTIONS) Slog.i(TAG, ">>> CLOSE TRANSACTION setFocusedApp"); + } } if (moveFocusNow && changed) { @@ -4820,8 +4829,19 @@ public class WindowManagerService extends IWindowManager.Stub if (NW > 0) { mWindowsChanged = true; } + int targetDisplayId = -1; + Task targetTask = mTaskIdToTask.get(token.appWindowToken.groupId); + if (targetTask != null) { + DisplayContent targetDisplayContent = targetTask.getDisplayContent(); + if (targetDisplayContent != null) { + targetDisplayId = targetDisplayContent.getDisplayId(); + } + } for (int i = 0; i < NW; i++) { WindowState win = windows.get(i); + if (targetDisplayId != -1 && win.getDisplayId() != targetDisplayId) { + continue; + } if (DEBUG_WINDOW_MOVEMENT) Slog.v(TAG, "Tmp removing app window " + win); win.getWindowList().remove(win); int j = win.mChildWindows.size(); @@ -6081,9 +6101,13 @@ public class WindowManagerService extends IWindowManager.Stub } if (ws.mAppToken != null && ws.mAppToken.token == appToken && - ws.isDisplayedLw()) { + ws.isDisplayedLw() && winAnim.mSurfaceShown) { screenshotReady = true; } + + if (ws.isFullscreen(dw, dh) && ws.isOpaqueDrawn()){ + break; + } } if (appToken != null && appWin == null) { @@ -7129,6 +7153,7 @@ public class WindowManagerService extends IWindowManager.Stub displayInfo.getAppMetrics(mDisplayMetrics); mDisplayManagerInternal.setDisplayInfoOverrideFromWindowManager( displayContent.getDisplayId(), displayInfo); + displayContent.mBaseDisplayRect.set(0, 0, dw, dh); } if (false) { Slog.i(TAG, "Set app display size: " + appWidth + " x " + appHeight); diff --git a/services/core/java/com/android/server/wm/WindowState.java b/services/core/java/com/android/server/wm/WindowState.java index b4a7f04272d9..04dab3e99342 100644 --- a/services/core/java/com/android/server/wm/WindowState.java +++ b/services/core/java/com/android/server/wm/WindowState.java @@ -386,28 +386,26 @@ final class WindowState implements WindowManagerPolicy.WindowState { mAttachedWindow = attachedWindow; if (WindowManagerService.DEBUG_ADD_REMOVE) Slog.v(TAG, "Adding " + this + " to " + mAttachedWindow); - int children_size = mAttachedWindow.mChildWindows.size(); - if (children_size == 0) { - mAttachedWindow.mChildWindows.add(this); + final WindowList childWindows = mAttachedWindow.mChildWindows; + final int numChildWindows = childWindows.size(); + if (numChildWindows == 0) { + childWindows.add(this); } else { - for (int i = 0; i < children_size; i++) { - WindowState child = (WindowState)mAttachedWindow.mChildWindows.get(i); - if (this.mSubLayer < child.mSubLayer) { - mAttachedWindow.mChildWindows.add(i, this); + boolean added = false; + for (int i = 0; i < numChildWindows; i++) { + final int childSubLayer = childWindows.get(i).mSubLayer; + if (mSubLayer < childSubLayer + || (mSubLayer == childSubLayer && childSubLayer < 0)) { + // We insert the child window into the list ordered by the sub-layer. For + // same sub-layers, the negative one should go below others; the positive + // one should go above others. + childWindows.add(i, this); + added = true; break; - } else if (this.mSubLayer > child.mSubLayer) { - continue; - } - - if (this.mBaseLayer <= child.mBaseLayer) { - mAttachedWindow.mChildWindows.add(i, this); - break; - } else { - continue; } } - if (children_size == mAttachedWindow.mChildWindows.size()) { - mAttachedWindow.mChildWindows.add(this); + if (!added) { + childWindows.add(this); } } diff --git a/services/core/jni/Android.mk b/services/core/jni/Android.mk index 7996f7346e15..dc073ad68d54 100644 --- a/services/core/jni/Android.mk +++ b/services/core/jni/Android.mk @@ -2,7 +2,7 @@ # files LOCAL_REL_DIR := core/jni -LOCAL_CFLAGS += -Wall -Werror +LOCAL_CFLAGS += -Wall -Werror -Wno-unused-parameter LOCAL_SRC_FILES += \ $(LOCAL_REL_DIR)/com_android_server_AlarmManagerService.cpp \ @@ -27,8 +27,6 @@ LOCAL_SRC_FILES += \ $(LOCAL_REL_DIR)/com_android_server_PersistentDataBlockService.cpp \ $(LOCAL_REL_DIR)/onload.cpp -include external/stlport/libstlport.mk - LOCAL_C_INCLUDES += \ $(JNI_H_INCLUDE) \ frameworks/base/services \ @@ -37,8 +35,8 @@ LOCAL_C_INCLUDES += \ frameworks/native/services \ libcore/include \ libcore/include/libsuspend \ - $(call include-path-for, libhardware)/hardware \ - $(call include-path-for, libhardware_legacy)/hardware_legacy \ + $(call include-path-for, libhardware)/hardware \ + $(call include-path-for, libhardware_legacy)/hardware_legacy \ LOCAL_SHARED_LIBRARIES += \ libandroid_runtime \ diff --git a/services/core/jni/com_android_server_UsbDeviceManager.cpp b/services/core/jni/com_android_server_UsbDeviceManager.cpp index 8d1a3383fdb5..a1bff9d850bf 100644 --- a/services/core/jni/com_android_server_UsbDeviceManager.cpp +++ b/services/core/jni/com_android_server_UsbDeviceManager.cpp @@ -41,20 +41,12 @@ static struct parcel_file_descriptor_offsets_t jmethodID mConstructor; } gParcelFileDescriptorOffsets; -static void checkAndClearExceptionFromCallback(JNIEnv* env, const char* methodName) { - if (env->ExceptionCheck()) { - ALOGE("An exception was thrown by callback '%s'.", methodName); - LOGE_EX(env); - env->ExceptionClear(); - } -} - static void set_accessory_string(JNIEnv *env, int fd, int cmd, jobjectArray strArray, int index) { char buffer[256]; buffer[0] = 0; - int length = ioctl(fd, cmd, buffer); + ioctl(fd, cmd, buffer); if (buffer[0]) { jstring obj = env->NewStringUTF(buffer); env->SetObjectArrayElement(strArray, index, obj); diff --git a/services/core/jni/com_android_server_hdmi_HdmiCecController.cpp b/services/core/jni/com_android_server_hdmi_HdmiCecController.cpp index 5c557b6e7c9a..4a08b2def730 100644 --- a/services/core/jni/com_android_server_hdmi_HdmiCecController.cpp +++ b/services/core/jni/com_android_server_hdmi_HdmiCecController.cpp @@ -408,6 +408,7 @@ static JNINativeMethod sMethods[] = { int register_android_server_hdmi_HdmiCecController(JNIEnv* env) { int res = jniRegisterNativeMethods(env, CLASS_PATH, sMethods, NELEM(sMethods)); LOG_FATAL_IF(res < 0, "Unable to register native methods."); + (void)res; // Don't scream about unused variable in the LOG_NDEBUG case return 0; } diff --git a/services/core/jni/com_android_server_input_InputApplicationHandle.cpp b/services/core/jni/com_android_server_input_InputApplicationHandle.cpp index f943d168e7d6..11388d80a9d2 100644 --- a/services/core/jni/com_android_server_input_InputApplicationHandle.cpp +++ b/services/core/jni/com_android_server_input_InputApplicationHandle.cpp @@ -137,6 +137,7 @@ static JNINativeMethod gInputApplicationHandleMethods[] = { int register_android_server_InputApplicationHandle(JNIEnv* env) { int res = jniRegisterNativeMethods(env, "com/android/server/input/InputApplicationHandle", gInputApplicationHandleMethods, NELEM(gInputApplicationHandleMethods)); + (void) res; // Faked use when LOG_NDEBUG. LOG_FATAL_IF(res < 0, "Unable to register native methods."); jclass clazz; diff --git a/services/core/jni/com_android_server_input_InputManagerService.cpp b/services/core/jni/com_android_server_input_InputManagerService.cpp index 5d73af8ea4e8..7c5980a74a8a 100644 --- a/services/core/jni/com_android_server_input_InputManagerService.cpp +++ b/services/core/jni/com_android_server_input_InputManagerService.cpp @@ -1416,6 +1416,7 @@ static JNINativeMethod gInputManagerMethods[] = { int register_android_server_InputManager(JNIEnv* env) { int res = jniRegisterNativeMethods(env, "com/android/server/input/InputManagerService", gInputManagerMethods, NELEM(gInputManagerMethods)); + (void) res; // Faked use when LOG_NDEBUG. LOG_FATAL_IF(res < 0, "Unable to register native methods."); // Callbacks diff --git a/services/core/jni/com_android_server_input_InputWindowHandle.cpp b/services/core/jni/com_android_server_input_InputWindowHandle.cpp index 03bf7eb2df99..5e15db573700 100644 --- a/services/core/jni/com_android_server_input_InputWindowHandle.cpp +++ b/services/core/jni/com_android_server_input_InputWindowHandle.cpp @@ -230,6 +230,7 @@ static JNINativeMethod gInputWindowHandleMethods[] = { int register_android_server_InputWindowHandle(JNIEnv* env) { int res = jniRegisterNativeMethods(env, "com/android/server/input/InputWindowHandle", gInputWindowHandleMethods, NELEM(gInputWindowHandleMethods)); + (void) res; // Faked use when LOG_NDEBUG. LOG_FATAL_IF(res < 0, "Unable to register native methods."); jclass clazz; diff --git a/services/core/jni/com_android_server_power_PowerManagerService.cpp b/services/core/jni/com_android_server_power_PowerManagerService.cpp index db642ddcf5eb..6dcdd9d08de6 100644 --- a/services/core/jni/com_android_server_power_PowerManagerService.cpp +++ b/services/core/jni/com_android_server_power_PowerManagerService.cpp @@ -189,6 +189,7 @@ static JNINativeMethod gPowerManagerServiceMethods[] = { int register_android_server_PowerManagerService(JNIEnv* env) { int res = jniRegisterNativeMethods(env, "com/android/server/power/PowerManagerService", gPowerManagerServiceMethods, NELEM(gPowerManagerServiceMethods)); + (void) res; // Faked use when LOG_NDEBUG. LOG_FATAL_IF(res < 0, "Unable to register native methods."); // Callbacks diff --git a/services/core/jni/com_android_server_tv_TvInputHal.cpp b/services/core/jni/com_android_server_tv_TvInputHal.cpp index d5abe0c25dae..4914c62b8f8c 100644 --- a/services/core/jni/com_android_server_tv_TvInputHal.cpp +++ b/services/core/jni/com_android_server_tv_TvInputHal.cpp @@ -634,6 +634,7 @@ int register_android_server_tv_TvInputHal(JNIEnv* env) { int res = jniRegisterNativeMethods(env, "com/android/server/tv/TvInputHal", gTvInputHalMethods, NELEM(gTvInputHalMethods)); LOG_FATAL_IF(res < 0, "Unable to register native methods."); + (void)res; // Don't complain about unused variable in the LOG_NDEBUG case jclass clazz; FIND_CLASS(clazz, "com/android/server/tv/TvInputHal"); diff --git a/services/java/com/android/server/SystemServer.java b/services/java/com/android/server/SystemServer.java index 92ad1ad742ba..5573017b3d0c 100644 --- a/services/java/com/android/server/SystemServer.java +++ b/services/java/com/android/server/SystemServer.java @@ -147,7 +147,6 @@ public final class SystemServer { private SystemServiceManager mSystemServiceManager; // TODO: remove all of these references by improving dependency resolution and boot phases - private Installer mInstaller; private PowerManagerService mPowerManagerService; private ActivityManagerService mActivityManagerService; private DisplayManagerService mDisplayManagerService; @@ -309,12 +308,13 @@ public final class SystemServer { // Wait for installd to finish starting up so that it has a chance to // create critical directories such as /data/user with the appropriate // permissions. We need this to complete before we initialize other services. - mInstaller = mSystemServiceManager.startService(Installer.class); + Installer installer = mSystemServiceManager.startService(Installer.class); // Activity manager runs the show. mActivityManagerService = mSystemServiceManager.startService( ActivityManagerService.Lifecycle.class).getService(); mActivityManagerService.setSystemServiceManager(mSystemServiceManager); + mActivityManagerService.setInstaller(installer); // Power manager needs to be started early because other services need it. // Native daemons may be watching for it to be registered so it must be ready @@ -345,7 +345,7 @@ public final class SystemServer { // Start the package manager. Slog.i(TAG, "Package Manager"); - mPackageManagerService = PackageManagerService.main(mSystemContext, mInstaller, + mPackageManagerService = PackageManagerService.main(mSystemContext, installer, mFactoryTestMode != FactoryTest.FACTORY_TEST_OFF, mOnlyCore); mFirstBoot = mPackageManagerService.isFirstBoot(); mPackageManager = mSystemContext.getPackageManager(); @@ -407,6 +407,7 @@ public final class SystemServer { ConsumerIrService consumerIr = null; AudioService audioService = null; MmsServiceBroker mmsService = null; + EntropyMixer entropyMixer = null; boolean disableStorage = SystemProperties.getBoolean("config.disable_storage", false); boolean disableMedia = SystemProperties.getBoolean("config.disable_media", false); @@ -430,7 +431,7 @@ public final class SystemServer { ServiceManager.addService("telephony.registry", telephonyRegistry); Slog.i(TAG, "Entropy Mixer"); - ServiceManager.addService("entropy", new EntropyMixer(context)); + entropyMixer = new EntropyMixer(context); mContentResolver = context.getContentResolver(); @@ -546,20 +547,6 @@ public final class SystemServer { reportWtf("making display ready", e); } - try { - mPackageManagerService.performBootDexOpt(); - } catch (Throwable e) { - reportWtf("performing boot dexopt", e); - } - - try { - ActivityManagerNative.getDefault().showBootMessage( - context.getResources().getText( - com.android.internal.R.string.android_upgrading_starting_apps), - false); - } catch (RemoteException e) { - } - if (mFactoryTestMode != FactoryTest.FACTORY_TEST_LOW_LEVEL) { if (!disableStorage && !"0".equals(SystemProperties.get("system_init.startmountservice"))) { @@ -575,7 +562,23 @@ public final class SystemServer { reportWtf("starting Mount Service", e); } } + } + try { + mPackageManagerService.performBootDexOpt(); + } catch (Throwable e) { + reportWtf("performing boot dexopt", e); + } + + try { + ActivityManagerNative.getDefault().showBootMessage( + context.getResources().getText( + com.android.internal.R.string.android_upgrading_starting_apps), + false); + } catch (RemoteException e) { + } + + if (mFactoryTestMode != FactoryTest.FACTORY_TEST_LOW_LEVEL) { if (!disableNonCoreServices) { try { Slog.i(TAG, "LockSettingsService"); diff --git a/tools/aapt/AaptXml.cpp b/tools/aapt/AaptXml.cpp index 708e4054e63a..b04a55d91b9c 100644 --- a/tools/aapt/AaptXml.cpp +++ b/tools/aapt/AaptXml.cpp @@ -41,7 +41,7 @@ static String8 getStringAttributeAtIndex(const ResXMLTree& tree, ssize_t attrInd } size_t len; - const uint16_t* str = tree.getAttributeStringValue(attrIndex, &len); + const char16_t* str = tree.getAttributeStringValue(attrIndex, &len); return str ? String8(str, len) : String8(); } @@ -103,7 +103,7 @@ String8 getResolvedAttribute(const ResTable& resTable, const ResXMLTree& tree, if (tree.getAttributeValue(idx, &value) != NO_ERROR) { if (value.dataType == Res_value::TYPE_STRING) { size_t len; - const uint16_t* str = tree.getAttributeStringValue(idx, &len); + const char16_t* str = tree.getAttributeStringValue(idx, &len); return str ? String8(str, len) : String8(); } resTable.resolveReference(&value, 0); diff --git a/tools/aapt/Android.mk b/tools/aapt/Android.mk index 6d3b73d1de2b..ba1411e0ec39 100644 --- a/tools/aapt/Android.mk +++ b/tools/aapt/Android.mk @@ -167,7 +167,6 @@ LOCAL_STATIC_LIBRARIES := \ LOCAL_CFLAGS += $(aaptCFlags) LOCAL_CPPFLAGS += -Wno-non-virtual-dtor -include external/stlport/libstlport.mk include $(BUILD_EXECUTABLE) endif # Not SDK_ONLY diff --git a/tools/aapt/ResourceTable.cpp b/tools/aapt/ResourceTable.cpp index 4cca57fdecb1..0ec1aebb8b40 100644 --- a/tools/aapt/ResourceTable.cpp +++ b/tools/aapt/ResourceTable.cpp @@ -3009,7 +3009,7 @@ status_t ResourceTable::flatten(Bundle* bundle, const sp<const ResourceFilter>& // We need to write one type chunk for each configuration for // which we have entries in this type. - const size_t NC = t->getUniqueConfigs().size(); + const size_t NC = t != NULL ? t->getUniqueConfigs().size() : 0; const size_t typeSize = sizeof(ResTable_type) + sizeof(uint32_t)*N; diff --git a/tools/aapt/ZipEntry.cpp b/tools/aapt/ZipEntry.cpp index f97f60457965..54a8e9c9b247 100644 --- a/tools/aapt/ZipEntry.cpp +++ b/tools/aapt/ZipEntry.cpp @@ -338,7 +338,7 @@ time_t ZipEntry::getModWhen(void) const */ void ZipEntry::setModWhen(time_t when) { -#ifdef HAVE_LOCALTIME_R +#if !defined(_WIN32) struct tm tmResult; #endif time_t even; @@ -350,7 +350,7 @@ void ZipEntry::setModWhen(time_t when) even = (time_t)(((unsigned long)(when) + 1) & (~1)); /* expand */ -#ifdef HAVE_LOCALTIME_R +#if !defined(_WIN32) ptm = localtime_r(&even, &tmResult); #else ptm = localtime(&even); diff --git a/tools/aidl/aidl.cpp b/tools/aidl/aidl.cpp index 45dd23b911e3..14c9f95a247b 100644 --- a/tools/aidl/aidl.cpp +++ b/tools/aidl/aidl.cpp @@ -228,7 +228,8 @@ check_filename(const char* filename, const char* package, buffer_type* name) } #endif -#ifdef OS_CASE_SENSITIVE + // aidl assumes case-insensitivity on Mac Os and Windows. +#if defined(__linux__) valid = (expected == p); #else valid = !strcasecmp(expected.c_str(), p); |