Surface: Add LAST_[DE]QUEUE_DURATION queries

Adds support for the NATIVE_WINDOW_LAST_DEQUEUE_DURATION and
NATIVE_WINDOW_LAST_QUEUE_DURATION queries.

Bug: 29413700
Change-Id: Iea4efa208e8390fb2de52d5ad9f083ae91bf50b0
diff --git a/include/gui/Surface.h b/include/gui/Surface.h
index af9dd50..b9ffc49 100644
--- a/include/gui/Surface.h
+++ b/include/gui/Surface.h
@@ -198,7 +198,6 @@
     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);
@@ -224,6 +223,7 @@
     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,
@@ -370,6 +370,10 @@
     // 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;
 };