Loading cmds/bootanimation/Android.mk 0 → 100644 +30 −0 Original line number Diff line number Diff line LOCAL_PATH:= $(call my-dir) include $(CLEAR_VARS) LOCAL_SRC_FILES:= \ bootanimation_main.cpp \ BootAnimation.cpp # need "-lrt" on Linux simulator to pick up clock_gettime ifeq ($(TARGET_SIMULATOR),true) ifeq ($(HOST_OS),linux) LOCAL_LDLIBS += -lrt endif endif LOCAL_SHARED_LIBRARIES := \ libcutils \ libutils \ libui \ libcorecg \ libsgl \ libEGL \ libGLESv1_CM LOCAL_C_INCLUDES := \ $(call include-path-for, corecg graphics) LOCAL_MODULE:= bootanimation include $(BUILD_EXECUTABLE) libs/surfaceflinger/BootAnimation.cpp→cmds/bootanimation/BootAnimation.cpp +15 −12 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ #include <fcntl.h> #include <utils/misc.h> #include <utils/IPCThreadState.h> #include <utils/threads.h> #include <utils/Atomic.h> #include <utils/Errors.h> Loading Loading @@ -49,10 +50,9 @@ namespace android { // --------------------------------------------------------------------------- BootAnimation::BootAnimation(const sp<ISurfaceComposer>& composer) : Thread(false) { mSession = SurfaceComposerClient::clientForConnection( composer->createConnection()->asBinder()); BootAnimation::BootAnimation() : Thread(false) { mSession = new SurfaceComposerClient(); } BootAnimation::~BootAnimation() { Loading Loading @@ -131,7 +131,7 @@ status_t BootAnimation::readyToRun() { // create the native surface sp<Surface> s = session()->createSurface(getpid(), 0, dinfo.w, dinfo.h, PIXEL_FORMAT_RGB_565); PIXEL_FORMAT_RGB_565, ISurfaceComposer::eGPU); session()->openTransaction(); s->setLayer(0x40000000); session()->closeTransaction(); Loading @@ -144,7 +144,10 @@ status_t BootAnimation::readyToRun() { EGLConfig config; EGLSurface surface; EGLContext context; EGLDisplay display = eglGetDisplay(EGL_DEFAULT_DISPLAY); eglInitialize(display, 0, 0); eglChooseConfig(display, attribs, &config, 1, &numConfigs); mNativeWindowSurface = new EGLNativeWindowSurface(s); Loading @@ -170,17 +173,15 @@ status_t BootAnimation::readyToRun() { return NO_ERROR; } void BootAnimation::requestExit() { mBarrier.open(); Thread::requestExit(); } bool BootAnimation::threadLoop() { bool r = android(); eglMakeCurrent(mDisplay, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT); eglDestroyContext(mDisplay, mContext); eglDestroySurface(mDisplay, mSurface); mNativeWindowSurface.clear(); mFlingerSurface.clear(); eglTerminate(mDisplay); IPCThreadState::self()->stopProcess(); return r; } Loading Loading @@ -227,7 +228,9 @@ bool BootAnimation::android() { glBindTexture(GL_TEXTURE_2D, mAndroid[0].name); glDrawTexiOES(xc, yc, 0, mAndroid[0].w, mAndroid[0].h); eglSwapBuffers(mDisplay, mSurface); EGLBoolean res = eglSwapBuffers(mDisplay, mSurface); if (res == EGL_FALSE) break; // 12fps: don't animate too fast to preserve CPU const nsecs_t sleepTime = 83333 - ns2us(systemTime() - now); Loading libs/surfaceflinger/BootAnimation.h→cmds/bootanimation/BootAnimation.h +1 −5 Original line number Diff line number Diff line Loading @@ -29,8 +29,6 @@ #include <EGL/egl.h> #include <GLES/gl.h> #include "Barrier.h" class SkBitmap; namespace android { Loading @@ -43,11 +41,10 @@ class EGLNativeWindowSurface; class BootAnimation : public Thread { public: BootAnimation(const sp<ISurfaceComposer>& composer); BootAnimation(); virtual ~BootAnimation(); const sp<SurfaceComposerClient>& session() const; virtual void requestExit(); private: virtual bool threadLoop(); Loading @@ -73,7 +70,6 @@ private: EGLDisplay mSurface; sp<Surface> mFlingerSurface; sp<EGLNativeWindowSurface> mNativeWindowSurface; Barrier mBarrier; }; // --------------------------------------------------------------------------- Loading cmds/bootanimation/bootanimation_main.cpp 0 → 100644 +52 −0 Original line number Diff line number Diff line /* * Copyright (C) 2007 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. */ #define LOG_TAG "BootAnimation" #include <utils/IPCThreadState.h> #include <utils/ProcessState.h> #include <utils/IServiceManager.h> #include <utils/Log.h> #include <utils/threads.h> #include <ui/ISurfaceComposer.h> #if defined(HAVE_PTHREADS) # include <pthread.h> # include <sys/resource.h> #endif #include "BootAnimation.h" using namespace android; // --------------------------------------------------------------------------- int main(int argc, char** argv) { #if defined(HAVE_PTHREADS) setpriority(PRIO_PROCESS, 0, ANDROID_PRIORITY_DISPLAY); #endif sp<ProcessState> proc(ProcessState::self()); ProcessState::self()->startThreadPool(); // create the boot animation object sp<BootAnimation> boot = new BootAnimation(); IPCThreadState::self()->joinThreadPool(); return 0; } data/etc/platform.xml +2 −0 Original line number Diff line number Diff line Loading @@ -138,6 +138,8 @@ <assign-permission name="android.permission.ACCESS_DRM" uid="media" /> <assign-permission name="android.permission.ACCESS_SURFACE_FLINGER" uid="media" /> <assign-permission name="android.permission.ACCESS_SURFACE_FLINGER" uid="graphics" /> <!-- This is a list of all the libraries available for application code to link against. --> Loading Loading
cmds/bootanimation/Android.mk 0 → 100644 +30 −0 Original line number Diff line number Diff line LOCAL_PATH:= $(call my-dir) include $(CLEAR_VARS) LOCAL_SRC_FILES:= \ bootanimation_main.cpp \ BootAnimation.cpp # need "-lrt" on Linux simulator to pick up clock_gettime ifeq ($(TARGET_SIMULATOR),true) ifeq ($(HOST_OS),linux) LOCAL_LDLIBS += -lrt endif endif LOCAL_SHARED_LIBRARIES := \ libcutils \ libutils \ libui \ libcorecg \ libsgl \ libEGL \ libGLESv1_CM LOCAL_C_INCLUDES := \ $(call include-path-for, corecg graphics) LOCAL_MODULE:= bootanimation include $(BUILD_EXECUTABLE)
libs/surfaceflinger/BootAnimation.cpp→cmds/bootanimation/BootAnimation.cpp +15 −12 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ #include <fcntl.h> #include <utils/misc.h> #include <utils/IPCThreadState.h> #include <utils/threads.h> #include <utils/Atomic.h> #include <utils/Errors.h> Loading Loading @@ -49,10 +50,9 @@ namespace android { // --------------------------------------------------------------------------- BootAnimation::BootAnimation(const sp<ISurfaceComposer>& composer) : Thread(false) { mSession = SurfaceComposerClient::clientForConnection( composer->createConnection()->asBinder()); BootAnimation::BootAnimation() : Thread(false) { mSession = new SurfaceComposerClient(); } BootAnimation::~BootAnimation() { Loading Loading @@ -131,7 +131,7 @@ status_t BootAnimation::readyToRun() { // create the native surface sp<Surface> s = session()->createSurface(getpid(), 0, dinfo.w, dinfo.h, PIXEL_FORMAT_RGB_565); PIXEL_FORMAT_RGB_565, ISurfaceComposer::eGPU); session()->openTransaction(); s->setLayer(0x40000000); session()->closeTransaction(); Loading @@ -144,7 +144,10 @@ status_t BootAnimation::readyToRun() { EGLConfig config; EGLSurface surface; EGLContext context; EGLDisplay display = eglGetDisplay(EGL_DEFAULT_DISPLAY); eglInitialize(display, 0, 0); eglChooseConfig(display, attribs, &config, 1, &numConfigs); mNativeWindowSurface = new EGLNativeWindowSurface(s); Loading @@ -170,17 +173,15 @@ status_t BootAnimation::readyToRun() { return NO_ERROR; } void BootAnimation::requestExit() { mBarrier.open(); Thread::requestExit(); } bool BootAnimation::threadLoop() { bool r = android(); eglMakeCurrent(mDisplay, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT); eglDestroyContext(mDisplay, mContext); eglDestroySurface(mDisplay, mSurface); mNativeWindowSurface.clear(); mFlingerSurface.clear(); eglTerminate(mDisplay); IPCThreadState::self()->stopProcess(); return r; } Loading Loading @@ -227,7 +228,9 @@ bool BootAnimation::android() { glBindTexture(GL_TEXTURE_2D, mAndroid[0].name); glDrawTexiOES(xc, yc, 0, mAndroid[0].w, mAndroid[0].h); eglSwapBuffers(mDisplay, mSurface); EGLBoolean res = eglSwapBuffers(mDisplay, mSurface); if (res == EGL_FALSE) break; // 12fps: don't animate too fast to preserve CPU const nsecs_t sleepTime = 83333 - ns2us(systemTime() - now); Loading
libs/surfaceflinger/BootAnimation.h→cmds/bootanimation/BootAnimation.h +1 −5 Original line number Diff line number Diff line Loading @@ -29,8 +29,6 @@ #include <EGL/egl.h> #include <GLES/gl.h> #include "Barrier.h" class SkBitmap; namespace android { Loading @@ -43,11 +41,10 @@ class EGLNativeWindowSurface; class BootAnimation : public Thread { public: BootAnimation(const sp<ISurfaceComposer>& composer); BootAnimation(); virtual ~BootAnimation(); const sp<SurfaceComposerClient>& session() const; virtual void requestExit(); private: virtual bool threadLoop(); Loading @@ -73,7 +70,6 @@ private: EGLDisplay mSurface; sp<Surface> mFlingerSurface; sp<EGLNativeWindowSurface> mNativeWindowSurface; Barrier mBarrier; }; // --------------------------------------------------------------------------- Loading
cmds/bootanimation/bootanimation_main.cpp 0 → 100644 +52 −0 Original line number Diff line number Diff line /* * Copyright (C) 2007 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. */ #define LOG_TAG "BootAnimation" #include <utils/IPCThreadState.h> #include <utils/ProcessState.h> #include <utils/IServiceManager.h> #include <utils/Log.h> #include <utils/threads.h> #include <ui/ISurfaceComposer.h> #if defined(HAVE_PTHREADS) # include <pthread.h> # include <sys/resource.h> #endif #include "BootAnimation.h" using namespace android; // --------------------------------------------------------------------------- int main(int argc, char** argv) { #if defined(HAVE_PTHREADS) setpriority(PRIO_PROCESS, 0, ANDROID_PRIORITY_DISPLAY); #endif sp<ProcessState> proc(ProcessState::self()); ProcessState::self()->startThreadPool(); // create the boot animation object sp<BootAnimation> boot = new BootAnimation(); IPCThreadState::self()->joinThreadPool(); return 0; }
data/etc/platform.xml +2 −0 Original line number Diff line number Diff line Loading @@ -138,6 +138,8 @@ <assign-permission name="android.permission.ACCESS_DRM" uid="media" /> <assign-permission name="android.permission.ACCESS_SURFACE_FLINGER" uid="media" /> <assign-permission name="android.permission.ACCESS_SURFACE_FLINGER" uid="graphics" /> <!-- This is a list of all the libraries available for application code to link against. --> Loading