Loading opengl/libs/EGL/eglApi.cpp +20 −0 Original line number Diff line number Diff line Loading @@ -477,6 +477,26 @@ EGLBoolean eglQuerySurface( EGLDisplay dpy, EGLSurface surface, return result; } void EGLAPI eglBeginFrame(EGLDisplay dpy, EGLSurface surface) { clearError(); egl_display_t const * const dp = validate_display(dpy); if (!dp) { return; } SurfaceRef _s(dp, surface); if (!_s.get()) { setError(EGL_BAD_SURFACE, EGL_FALSE); return; } int64_t timestamp = systemTime(SYSTEM_TIME_MONOTONIC); egl_surface_t const * const s = get_surface(surface); native_window_set_buffers_timestamp(s->win.get(), timestamp); } // ---------------------------------------------------------------------------- // Contexts // ---------------------------------------------------------------------------- Loading services/surfaceflinger/Layer.cpp +29 −0 Original line number Diff line number Diff line Loading @@ -63,6 +63,22 @@ Layer::Layer(SurfaceFlinger* flinger, { mCurrentCrop.makeInvalid(); glGenTextures(1, &mTextureName); mFrameLatencyNeeded = false; mFrameLatencyOffset = 0; for (int i = 0; i < 128; i++) { mFrameLatencies[i] = 0; } } void Layer::onLayerDisplayed() { if (mFrameLatencyNeeded) { int64_t now = systemTime(SYSTEM_TIME_MONOTONIC); mFrameLatencies[mFrameLatencyOffset] = now - mSurfaceTexture->getTimestamp(); mFrameLatencyOffset = (mFrameLatencyOffset + 1) % 128; mFrameLatencyNeeded = false; } } void Layer::onFirstRef() Loading Loading @@ -408,6 +424,7 @@ void Layer::lockPageFlip(bool& recomputeVisibleRegions) // update the active buffer mActiveBuffer = mSurfaceTexture->getCurrentBuffer(); mFrameLatencyNeeded = true; const Rect crop(mSurfaceTexture->getCurrentCrop()); const uint32_t transform(mSurfaceTexture->getCurrentTransform()); Loading Loading @@ -538,6 +555,18 @@ void Layer::dump(String8& result, char* buffer, size_t SIZE) const result.append(buffer); const int64_t* l = mFrameLatencies; int o = mFrameLatencyOffset; for (int i = 0; i < 128; i += 8) { snprintf(buffer, SIZE, " " "% 12lld % 12lld % 12lld % 12lld " "% 12lld % 12lld % 12lld % 12lld\n", l[(o+i+0)%128], l[(o+i+1)%128], l[(o+i+2)%128], l[(o+i+3)%128], l[(o+i+4)%128], l[(o+i+5)%128], l[(o+i+6)%128], l[(o+i+7)%128]); result.append(buffer); } if (mSurfaceTexture != 0) { mSurfaceTexture->dump(result, " ", buffer, SIZE); } Loading services/surfaceflinger/Layer.h +5 −0 Original line number Diff line number Diff line Loading @@ -78,6 +78,8 @@ public: // LayerBaseClient interface virtual wp<IBinder> getSurfaceTextureBinder() const; virtual void onLayerDisplayed(); // only for debugging inline const sp<GraphicBuffer>& getActiveBuffer() const { return mActiveBuffer; } Loading Loading @@ -110,6 +112,9 @@ private: uint32_t mCurrentTransform; uint32_t mCurrentScalingMode; bool mCurrentOpacity; bool mFrameLatencyNeeded; int mFrameLatencyOffset; int64_t mFrameLatencies[128]; // constants PixelFormat mFormat; Loading services/surfaceflinger/LayerBase.h +3 −1 Original line number Diff line number Diff line Loading @@ -206,6 +206,8 @@ public: * current list */ virtual void onRemoved() { }; virtual void onLayerDisplayed() { }; /** always call base class first */ virtual void dump(String8& result, char* scratch, size_t size) const; virtual void shortDump(String8& result, char* scratch, size_t size) const; Loading services/surfaceflinger/SurfaceFlinger.cpp +6 −0 Original line number Diff line number Diff line Loading @@ -445,6 +445,12 @@ void SurfaceFlinger::postFramebuffer() const nsecs_t now = systemTime(); mDebugInSwapBuffers = now; hw.flip(mSwapRegion); size_t numLayers = mVisibleLayersSortedByZ.size(); for (size_t i = 0; i < numLayers; i++) { mVisibleLayersSortedByZ[i]->onLayerDisplayed(); } mLastSwapBufferTime = systemTime() - now; mDebugInSwapBuffers = 0; mSwapRegion.clear(); Loading Loading
opengl/libs/EGL/eglApi.cpp +20 −0 Original line number Diff line number Diff line Loading @@ -477,6 +477,26 @@ EGLBoolean eglQuerySurface( EGLDisplay dpy, EGLSurface surface, return result; } void EGLAPI eglBeginFrame(EGLDisplay dpy, EGLSurface surface) { clearError(); egl_display_t const * const dp = validate_display(dpy); if (!dp) { return; } SurfaceRef _s(dp, surface); if (!_s.get()) { setError(EGL_BAD_SURFACE, EGL_FALSE); return; } int64_t timestamp = systemTime(SYSTEM_TIME_MONOTONIC); egl_surface_t const * const s = get_surface(surface); native_window_set_buffers_timestamp(s->win.get(), timestamp); } // ---------------------------------------------------------------------------- // Contexts // ---------------------------------------------------------------------------- Loading
services/surfaceflinger/Layer.cpp +29 −0 Original line number Diff line number Diff line Loading @@ -63,6 +63,22 @@ Layer::Layer(SurfaceFlinger* flinger, { mCurrentCrop.makeInvalid(); glGenTextures(1, &mTextureName); mFrameLatencyNeeded = false; mFrameLatencyOffset = 0; for (int i = 0; i < 128; i++) { mFrameLatencies[i] = 0; } } void Layer::onLayerDisplayed() { if (mFrameLatencyNeeded) { int64_t now = systemTime(SYSTEM_TIME_MONOTONIC); mFrameLatencies[mFrameLatencyOffset] = now - mSurfaceTexture->getTimestamp(); mFrameLatencyOffset = (mFrameLatencyOffset + 1) % 128; mFrameLatencyNeeded = false; } } void Layer::onFirstRef() Loading Loading @@ -408,6 +424,7 @@ void Layer::lockPageFlip(bool& recomputeVisibleRegions) // update the active buffer mActiveBuffer = mSurfaceTexture->getCurrentBuffer(); mFrameLatencyNeeded = true; const Rect crop(mSurfaceTexture->getCurrentCrop()); const uint32_t transform(mSurfaceTexture->getCurrentTransform()); Loading Loading @@ -538,6 +555,18 @@ void Layer::dump(String8& result, char* buffer, size_t SIZE) const result.append(buffer); const int64_t* l = mFrameLatencies; int o = mFrameLatencyOffset; for (int i = 0; i < 128; i += 8) { snprintf(buffer, SIZE, " " "% 12lld % 12lld % 12lld % 12lld " "% 12lld % 12lld % 12lld % 12lld\n", l[(o+i+0)%128], l[(o+i+1)%128], l[(o+i+2)%128], l[(o+i+3)%128], l[(o+i+4)%128], l[(o+i+5)%128], l[(o+i+6)%128], l[(o+i+7)%128]); result.append(buffer); } if (mSurfaceTexture != 0) { mSurfaceTexture->dump(result, " ", buffer, SIZE); } Loading
services/surfaceflinger/Layer.h +5 −0 Original line number Diff line number Diff line Loading @@ -78,6 +78,8 @@ public: // LayerBaseClient interface virtual wp<IBinder> getSurfaceTextureBinder() const; virtual void onLayerDisplayed(); // only for debugging inline const sp<GraphicBuffer>& getActiveBuffer() const { return mActiveBuffer; } Loading Loading @@ -110,6 +112,9 @@ private: uint32_t mCurrentTransform; uint32_t mCurrentScalingMode; bool mCurrentOpacity; bool mFrameLatencyNeeded; int mFrameLatencyOffset; int64_t mFrameLatencies[128]; // constants PixelFormat mFormat; Loading
services/surfaceflinger/LayerBase.h +3 −1 Original line number Diff line number Diff line Loading @@ -206,6 +206,8 @@ public: * current list */ virtual void onRemoved() { }; virtual void onLayerDisplayed() { }; /** always call base class first */ virtual void dump(String8& result, char* scratch, size_t size) const; virtual void shortDump(String8& result, char* scratch, size_t size) const; Loading
services/surfaceflinger/SurfaceFlinger.cpp +6 −0 Original line number Diff line number Diff line Loading @@ -445,6 +445,12 @@ void SurfaceFlinger::postFramebuffer() const nsecs_t now = systemTime(); mDebugInSwapBuffers = now; hw.flip(mSwapRegion); size_t numLayers = mVisibleLayersSortedByZ.size(); for (size_t i = 0; i < numLayers; i++) { mVisibleLayersSortedByZ[i]->onLayerDisplayed(); } mLastSwapBufferTime = systemTime() - now; mDebugInSwapBuffers = 0; mSwapRegion.clear(); Loading