summaryrefslogtreecommitdiffstats
path: root/cmds
diff options
context:
space:
mode:
authorPrashant Somashekar <prashsomash@gmail.com>2013-02-16 16:47:44 -0500
committerSteve Kondik <steve@cyngn.com>2015-10-26 16:09:10 -0700
commitf3d1bbb77f9f3dbe065d713721e0591ea3fa348f (patch)
treeeedb534219d45eff0dfec42c93d67fa8271ecf4a /cmds
parentb2ac9d7f1d33aa795f6c3827b120f7591678ab3b (diff)
downloadframeworks_base-f3d1bbb77f9f3dbe065d713721e0591ea3fa348f.zip
frameworks_base-f3d1bbb77f9f3dbe065d713721e0591ea3fa348f.tar.gz
frameworks_base-f3d1bbb77f9f3dbe065d713721e0591ea3fa348f.tar.bz2
bootanimation: performance/speedup enhancements (squashed from CM11)
bootanim: Don't cache textures if they're expected to use a lot of VRAM (rmcc) https://github.com/CyanogenMod/android_frameworks_base/commit/14f9eecd3f543a25c4a2053d6155a9396a777a3a#cmds/bootanimation bootanimation: performance enhancements (turl) https://github.com/CyanogenMod/android_frameworks_base/commit/e6b54405aa70d7503a114d9c90ef7518abdd7133#cmds/bootanimation bootanimation: fix usage of LOGW (intervigilium) https://github.com/CyanogenMod/android_frameworks_base/commit/e45cf7d232490f44aecf8f2447220a8b5ace4c10#cmds/bootanimation bootanimation: allow using RGB565 instead of ARGB8888 (tpruvot) https://github.com/CyanogenMod/android_frameworks_base/commit/204282870a9c69b04ad5ddecd73fafbd7996cbc0#cmds/bootanimation [mikeioannina]: Adjust for cm-12.0 Change-Id: I203fa23f77d1349fb822a7662e2cd3998ba4c814
Diffstat (limited to 'cmds')
-rw-r--r--cmds/bootanimation/Android.mk16
-rw-r--r--cmds/bootanimation/BootAnimation.cpp46
2 files changed, 61 insertions, 1 deletions
diff --git a/cmds/bootanimation/Android.mk b/cmds/bootanimation/Android.mk
index a2d5675..0c05ded 100644
--- a/cmds/bootanimation/Android.mk
+++ b/cmds/bootanimation/Android.mk
@@ -30,6 +30,22 @@ ifeq ($(TARGET_CONTINUOUS_SPLASH_ENABLED),true)
LOCAL_CFLAGS += -DCONTINUOUS_SPLASH
endif
+ifeq ($(TARGET_BOOTANIMATION_PRELOAD),true)
+ LOCAL_CFLAGS += -DPRELOAD_BOOTANIMATION
+endif
+
+ifeq ($(TARGET_BOOTANIMATION_TEXTURE_CACHE),true)
+ LOCAL_CFLAGS += -DNO_TEXTURE_CACHE=0
+endif
+
+ifeq ($(TARGET_BOOTANIMATION_TEXTURE_CACHE),false)
+ LOCAL_CFLAGS += -DNO_TEXTURE_CACHE=1
+endif
+
+ifeq ($(TARGET_BOOTANIMATION_USE_RGB565),true)
+ LOCAL_CFLAGS += -DUSE_565
+endif
+
LOCAL_MODULE:= bootanimation
ifdef TARGET_32_BIT_SURFACEFLINGER
diff --git a/cmds/bootanimation/BootAnimation.cpp b/cmds/bootanimation/BootAnimation.cpp
index e92e826..934539e 100644
--- a/cmds/bootanimation/BootAnimation.cpp
+++ b/cmds/bootanimation/BootAnimation.cpp
@@ -271,7 +271,11 @@ status_t BootAnimation::initTexture(const Animation::Frame& frame)
if (codec != NULL) {
codec->setDitherImage(false);
codec->decode(&stream, &bitmap,
+ #ifdef USE_565
+ kRGB_565_SkColorType,
+ #else
kN32_SkColorType,
+ #endif
SkImageDecoder::kDecodePixels_Mode);
delete codec;
}
@@ -425,6 +429,37 @@ status_t BootAnimation::readyToRun() {
mZip = zipFile;
}
+#ifdef PRELOAD_BOOTANIMATION
+ // Preload the bootanimation zip on memory, so we don't stutter
+ // when showing the animation
+ FILE* fd;
+ if (encryptedAnimation && access(SYSTEM_ENCRYPTED_BOOTANIMATION_FILE, R_OK) == 0)
+ fd = fopen(SYSTEM_ENCRYPTED_BOOTANIMATION_FILE, "r");
+ else if (access(OEM_BOOTANIMATION_FILE, R_OK) == 0)
+ fd = fopen(OEM_BOOTANIMATION_FILE, "r");
+ else if (access(SYSTEM_BOOTANIMATION_FILE, R_OK) == 0)
+ fd = fopen(SYSTEM_BOOTANIMATION_FILE, "r");
+ else
+ return NO_ERROR;
+
+ if (fd != NULL) {
+ // We could use readahead..
+ // ... if bionic supported it :(
+ //readahead(fd, 0, INT_MAX);
+ void *crappyBuffer = malloc(2*1024*1024);
+ if (crappyBuffer != NULL) {
+ // Read all the zip
+ while (!feof(fd))
+ fread(crappyBuffer, 1024, 2*1024, fd);
+
+ free(crappyBuffer);
+ } else {
+ ALOGW("Unable to allocate memory to preload the animation");
+ }
+ fclose(fd);
+ }
+#endif
+
return NO_ERROR;
}
@@ -717,6 +752,15 @@ bool BootAnimation::movie()
for (size_t i=0 ; i<pcount ; i++) {
const Animation::Part& part(animation.parts[i]);
const size_t fcount = part.frames.size();
+
+ // can be 1, 0, or not set
+ #ifdef NO_TEXTURE_CACHE
+ const int noTextureCache = NO_TEXTURE_CACHE;
+ #else
+ const int noTextureCache =
+ ((animation.width * animation.height * fcount) > 48 * 1024 * 1024) ? 1 : 0;
+ #endif
+
glBindTexture(GL_TEXTURE_2D, 0);
/*calculate if we need to runtime save memory
@@ -728,7 +772,7 @@ bool BootAnimation::movie()
GLuint mTextureid;
glGetIntegerv(GL_MAX_TEXTURE_SIZE, &mMaxTextureSize);
//ALOGD("freemem:%ld, %d", getFreeMemory(), mMaxTextureSize);
- if(getFreeMemory() < mMaxTextureSize * mMaxTextureSize * fcount / 1024) {
+ if(getFreeMemory() < mMaxTextureSize * mMaxTextureSize * fcount / 1024 || noTextureCache) {
ALOGD("Use save memory method, maybe small fps in actual.");
needSaveMem = true;
glGenTextures(1, &mTextureid);