Loading cmds/bootanimation/Android.mk +12 −0 Original line number Diff line number Diff line Loading @@ -20,6 +20,18 @@ 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 LOCAL_MODULE:= bootanimation Loading cmds/bootanimation/BootAnimation.cpp +42 −4 Original line number Diff line number Diff line Loading @@ -281,6 +281,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 { LOGW("Unable to allocate memory to preload the animation"); } fclose(fd); } #endif return NO_ERROR; } Loading Loading @@ -420,7 +452,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 @@ -468,16 +500,22 @@ bool BootAnimation::movie() Region clearReg(Rect(mWidth, mHeight)); clearReg.subtractSelf(Rect(xc, yc, xc+animation.width, yc+animation.height)); for (int i=0 ; i<pcount && !exitPending() ; i++) { for (size_t i=0 ; i<pcount && !exitPending() ; 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++) { for (int j=0 ; j<fcount && !exitPending(); j++) { for (size_t j=0 ; j<fcount && !exitPending(); j++) { const Animation::Frame& frame(part.frames[j]); if (r > 0 && !noTextureCache) { Loading Loading @@ -523,7 +561,7 @@ bool BootAnimation::movie() // free the textures for this part if (part.count != 1 && !noTextureCache) { for (int j=0 ; j<fcount ; j++) { 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 +12 −0 Original line number Diff line number Diff line Loading @@ -20,6 +20,18 @@ 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 LOCAL_MODULE:= bootanimation Loading
cmds/bootanimation/BootAnimation.cpp +42 −4 Original line number Diff line number Diff line Loading @@ -281,6 +281,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 { LOGW("Unable to allocate memory to preload the animation"); } fclose(fd); } #endif return NO_ERROR; } Loading Loading @@ -420,7 +452,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 @@ -468,16 +500,22 @@ bool BootAnimation::movie() Region clearReg(Rect(mWidth, mHeight)); clearReg.subtractSelf(Rect(xc, yc, xc+animation.width, yc+animation.height)); for (int i=0 ; i<pcount && !exitPending() ; i++) { for (size_t i=0 ; i<pcount && !exitPending() ; 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++) { for (int j=0 ; j<fcount && !exitPending(); j++) { for (size_t j=0 ; j<fcount && !exitPending(); j++) { const Animation::Frame& frame(part.frames[j]); if (r > 0 && !noTextureCache) { Loading Loading @@ -523,7 +561,7 @@ bool BootAnimation::movie() // free the textures for this part if (part.count != 1 && !noTextureCache) { for (int j=0 ; j<fcount ; j++) { for (size_t j=0 ; j<fcount ; j++) { const Animation::Frame& frame(part.frames[j]); glDeleteTextures(1, &frame.tid); } Loading