Loading cmds/bootanimation/Android.mk +16 −0 Original line number Diff line number Diff line Loading @@ -21,6 +21,22 @@ LOCAL_SHARED_LIBRARIES := \ LOCAL_C_INCLUDES := \ $(call include-path-for, corecg graphics) 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 Loading cmds/bootanimation/BootAnimation.cpp +52 −4 Original line number Diff line number Diff line Loading @@ -162,7 +162,11 @@ status_t BootAnimation::initTexture(void* buffer, size_t len) codec->setDitherImage(false); if (codec) { codec->decode(&stream, &bitmap, #ifdef USE_565 SkBitmap::kRGB_565_Config, #else SkBitmap::kARGB_8888_Config, #endif SkImageDecoder::kDecodePixels_Mode); delete codec; } Loading Loading @@ -289,6 +293,38 @@ status_t BootAnimation::readyToRun() { mAndroidAnimation = false; } #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(USER_BOOTANIMATION_FILE, R_OK) == 0) fd = fopen(USER_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; } Loading Loading @@ -446,7 +482,7 @@ bool BootAnimation::movie() const String8 path(entryName.getPathDir()); const String8 leaf(entryName.getPathLeaf()); if (leaf.size() > 0) { for (int j=0 ; j<pcount ; j++) { for (size_t j=0 ; j<pcount ; j++) { if (path == animation.parts[j].path) { int method; // supports only stored png files Loading Loading @@ -497,6 +533,15 @@ bool BootAnimation::movie() for (int 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); for (int r=0 ; !part.count || r<part.count ; r++) { Loading @@ -508,7 +553,7 @@ bool BootAnimation::movie() const Animation::Frame& frame(part.frames[j]); nsecs_t lastFrame = systemTime(); if (r > 0) { if (r > 0 && !noTextureCache) { glBindTexture(GL_TEXTURE_2D, frame.tid); } else { if (part.count != 1) { Loading Loading @@ -553,6 +598,9 @@ bool BootAnimation::movie() } checkExit(); if (noTextureCache) glDeleteTextures(1, &frame.tid); } usleep(part.pause * ns2us(frameDuration)); Loading @@ -563,8 +611,8 @@ bool BootAnimation::movie() } // free the textures for this part if (part.count != 1) { for (int j=0 ; j<fcount ; j++) { if (part.count != 1 && !noTextureCache) { for (size_t j=0 ; j<fcount ; j++) { const Animation::Frame& frame(part.frames[j]); glDeleteTextures(1, &frame.tid); } Loading Loading
cmds/bootanimation/Android.mk +16 −0 Original line number Diff line number Diff line Loading @@ -21,6 +21,22 @@ LOCAL_SHARED_LIBRARIES := \ LOCAL_C_INCLUDES := \ $(call include-path-for, corecg graphics) 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 Loading
cmds/bootanimation/BootAnimation.cpp +52 −4 Original line number Diff line number Diff line Loading @@ -162,7 +162,11 @@ status_t BootAnimation::initTexture(void* buffer, size_t len) codec->setDitherImage(false); if (codec) { codec->decode(&stream, &bitmap, #ifdef USE_565 SkBitmap::kRGB_565_Config, #else SkBitmap::kARGB_8888_Config, #endif SkImageDecoder::kDecodePixels_Mode); delete codec; } Loading Loading @@ -289,6 +293,38 @@ status_t BootAnimation::readyToRun() { mAndroidAnimation = false; } #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(USER_BOOTANIMATION_FILE, R_OK) == 0) fd = fopen(USER_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; } Loading Loading @@ -446,7 +482,7 @@ bool BootAnimation::movie() const String8 path(entryName.getPathDir()); const String8 leaf(entryName.getPathLeaf()); if (leaf.size() > 0) { for (int j=0 ; j<pcount ; j++) { for (size_t j=0 ; j<pcount ; j++) { if (path == animation.parts[j].path) { int method; // supports only stored png files Loading Loading @@ -497,6 +533,15 @@ bool BootAnimation::movie() for (int 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); for (int r=0 ; !part.count || r<part.count ; r++) { Loading @@ -508,7 +553,7 @@ bool BootAnimation::movie() const Animation::Frame& frame(part.frames[j]); nsecs_t lastFrame = systemTime(); if (r > 0) { if (r > 0 && !noTextureCache) { glBindTexture(GL_TEXTURE_2D, frame.tid); } else { if (part.count != 1) { Loading Loading @@ -553,6 +598,9 @@ bool BootAnimation::movie() } checkExit(); if (noTextureCache) glDeleteTextures(1, &frame.tid); } usleep(part.pause * ns2us(frameDuration)); Loading @@ -563,8 +611,8 @@ bool BootAnimation::movie() } // free the textures for this part if (part.count != 1) { for (int j=0 ; j<fcount ; j++) { if (part.count != 1 && !noTextureCache) { for (size_t j=0 ; j<fcount ; j++) { const Animation::Frame& frame(part.frames[j]); glDeleteTextures(1, &frame.tid); } Loading