Loading include/gui/Surface.h +5 −1 Original line number Diff line number Diff line Loading @@ -198,7 +198,6 @@ protected: virtual int cancelBuffer(ANativeWindowBuffer* buffer, int fenceFd); virtual int queueBuffer(ANativeWindowBuffer* buffer, int fenceFd); virtual int perform(int operation, va_list args); virtual int query(int what, int* value) const; virtual int setSwapInterval(int interval); virtual int lockBuffer_DEPRECATED(ANativeWindowBuffer* buffer); Loading @@ -224,6 +223,7 @@ public: virtual int setAutoRefresh(bool autoRefresh); virtual int lock(ANativeWindow_Buffer* outBuffer, ARect* inOutDirtyBounds); virtual int unlockAndPost(); virtual int query(int what, int* value) const; virtual int connect(int api, const sp<IProducerListener>& listener); virtual int detachNextBuffer(sp<GraphicBuffer>* outBuffer, Loading Loading @@ -370,6 +370,10 @@ private: // used to prevent a mismatch between the number of queue/dequeue calls. bool mSharedBufferHasBeenQueued; // These are used to satisfy the NATIVE_WINDOW_LAST_*_DURATION queries nsecs_t mLastDequeueDuration = 0; nsecs_t mLastQueueDuration = 0; Condition mQueueBufferCondition; }; Loading libs/gui/Surface.cpp +18 −0 Original line number Diff line number Diff line Loading @@ -292,8 +292,10 @@ int Surface::dequeueBuffer(android_native_buffer_t** buffer, int* fenceFd) { int buf = -1; sp<Fence> fence; nsecs_t now = systemTime(); status_t result = mGraphicBufferProducer->dequeueBuffer(&buf, &fence, reqWidth, reqHeight, reqFormat, reqUsage); mLastDequeueDuration = systemTime() - now; if (result < 0) { ALOGV("dequeueBuffer: IGraphicBufferProducer::dequeueBuffer" Loading Loading @@ -496,7 +498,9 @@ int Surface::queueBuffer(android_native_buffer_t* buffer, int fenceFd) { input.setSurfaceDamage(flippedRegion); } nsecs_t now = systemTime(); status_t err = mGraphicBufferProducer->queueBuffer(i, input, &output); mLastQueueDuration = systemTime() - now; if (err != OK) { ALOGE("queueBuffer: error queuing buffer to SurfaceTexture, %d", err); } Loading Loading @@ -575,6 +579,20 @@ int Surface::query(int what, int* value) const { } return err; } case NATIVE_WINDOW_LAST_DEQUEUE_DURATION: { int64_t durationUs = mLastDequeueDuration / 1000; *value = durationUs > std::numeric_limits<int>::max() ? std::numeric_limits<int>::max() : static_cast<int>(durationUs); return NO_ERROR; } case NATIVE_WINDOW_LAST_QUEUE_DURATION: { int64_t durationUs = mLastQueueDuration / 1000; *value = durationUs > std::numeric_limits<int>::max() ? std::numeric_limits<int>::max() : static_cast<int>(durationUs); return NO_ERROR; } } } return mGraphicBufferProducer->query(what, value); Loading Loading
include/gui/Surface.h +5 −1 Original line number Diff line number Diff line Loading @@ -198,7 +198,6 @@ protected: virtual int cancelBuffer(ANativeWindowBuffer* buffer, int fenceFd); virtual int queueBuffer(ANativeWindowBuffer* buffer, int fenceFd); virtual int perform(int operation, va_list args); virtual int query(int what, int* value) const; virtual int setSwapInterval(int interval); virtual int lockBuffer_DEPRECATED(ANativeWindowBuffer* buffer); Loading @@ -224,6 +223,7 @@ public: virtual int setAutoRefresh(bool autoRefresh); virtual int lock(ANativeWindow_Buffer* outBuffer, ARect* inOutDirtyBounds); virtual int unlockAndPost(); virtual int query(int what, int* value) const; virtual int connect(int api, const sp<IProducerListener>& listener); virtual int detachNextBuffer(sp<GraphicBuffer>* outBuffer, Loading Loading @@ -370,6 +370,10 @@ private: // used to prevent a mismatch between the number of queue/dequeue calls. bool mSharedBufferHasBeenQueued; // These are used to satisfy the NATIVE_WINDOW_LAST_*_DURATION queries nsecs_t mLastDequeueDuration = 0; nsecs_t mLastQueueDuration = 0; Condition mQueueBufferCondition; }; Loading
libs/gui/Surface.cpp +18 −0 Original line number Diff line number Diff line Loading @@ -292,8 +292,10 @@ int Surface::dequeueBuffer(android_native_buffer_t** buffer, int* fenceFd) { int buf = -1; sp<Fence> fence; nsecs_t now = systemTime(); status_t result = mGraphicBufferProducer->dequeueBuffer(&buf, &fence, reqWidth, reqHeight, reqFormat, reqUsage); mLastDequeueDuration = systemTime() - now; if (result < 0) { ALOGV("dequeueBuffer: IGraphicBufferProducer::dequeueBuffer" Loading Loading @@ -496,7 +498,9 @@ int Surface::queueBuffer(android_native_buffer_t* buffer, int fenceFd) { input.setSurfaceDamage(flippedRegion); } nsecs_t now = systemTime(); status_t err = mGraphicBufferProducer->queueBuffer(i, input, &output); mLastQueueDuration = systemTime() - now; if (err != OK) { ALOGE("queueBuffer: error queuing buffer to SurfaceTexture, %d", err); } Loading Loading @@ -575,6 +579,20 @@ int Surface::query(int what, int* value) const { } return err; } case NATIVE_WINDOW_LAST_DEQUEUE_DURATION: { int64_t durationUs = mLastDequeueDuration / 1000; *value = durationUs > std::numeric_limits<int>::max() ? std::numeric_limits<int>::max() : static_cast<int>(durationUs); return NO_ERROR; } case NATIVE_WINDOW_LAST_QUEUE_DURATION: { int64_t durationUs = mLastQueueDuration / 1000; *value = durationUs > std::numeric_limits<int>::max() ? std::numeric_limits<int>::max() : static_cast<int>(durationUs); return NO_ERROR; } } } return mGraphicBufferProducer->query(what, value); Loading