diff options
author | android-build-team Robot <android-build-team-robot@google.com> | 2017-10-20 07:19:54 +0000 |
---|---|---|
committer | android-build-team Robot <android-build-team-robot@google.com> | 2017-10-20 07:19:54 +0000 |
commit | 0bdef3fc3cc8038e75b313b40283e51946adc393 (patch) | |
tree | a6e730f0a3b0c5bceb131f547f30692e7f19c5b8 | |
parent | 119f43dd89b8f45d0846f0e5f5e1c0f3b25ecf2f (diff) | |
parent | 4efb75b8bb5793cdde1add43e2176f9e2a4a3b36 (diff) | |
download | deqp-android-8.1.0_r15.tar.gz |
Snap for 4407597 from 4efb75b8bb5793cdde1add43e2176f9e2a4a3b36 to oc-mr1-releaseandroid-wear-8.1.0_r1android-security-8.1.0_r93android-security-8.1.0_r92android-security-8.1.0_r91android-security-8.1.0_r90android-security-8.1.0_r89android-security-8.1.0_r88android-security-8.1.0_r87android-security-8.1.0_r86android-security-8.1.0_r85android-security-8.1.0_r84android-security-8.1.0_r83android-security-8.1.0_r82android-cts-8.1_r1android-8.1.0_r81android-8.1.0_r80android-8.1.0_r79android-8.1.0_r78android-8.1.0_r77android-8.1.0_r76android-8.1.0_r75android-8.1.0_r74android-8.1.0_r73android-8.1.0_r72android-8.1.0_r71android-8.1.0_r70android-8.1.0_r69android-8.1.0_r68android-8.1.0_r66android-8.1.0_r6android-8.1.0_r5android-8.1.0_r4android-8.1.0_r3android-8.1.0_r23android-8.1.0_r19android-8.1.0_r16android-8.1.0_r15android-8.1.0_r12android-8.1.0_r11android-8.1.0_r10android-8.1.0_r1security-oc-mr1-releaseoreo-mr1-wear-releaseoreo-mr1-security-releaseoreo-mr1-s1-releaseoreo-mr1-releaseoreo-mr1-cuttlefish-testingoreo-m4-s1-release
Change-Id: Ica4fb0ebc809a16dd83ff922c2fa820fbed37dab
-rw-r--r-- | modules/egl/teglGetFrameTimestampsTests.cpp | 76 |
1 files changed, 48 insertions, 28 deletions
diff --git a/modules/egl/teglGetFrameTimestampsTests.cpp b/modules/egl/teglGetFrameTimestampsTests.cpp index 536589b41..f3963bbb4 100644 --- a/modules/egl/teglGetFrameTimestampsTests.cpp +++ b/modules/egl/teglGetFrameTimestampsTests.cpp @@ -47,6 +47,7 @@ #include "deClock.h" #include "deMath.h" #include "deUniquePtr.hpp" +#include "deStringUtil.hpp" #include "deThread.hpp" #include <algorithm> @@ -193,7 +194,8 @@ void populateFrameTimes(FrameTimes* frameTimes, TimestampInfoMap& map, const std bool timestampValid (EGLnsecsANDROID timestamp) { - return (timestamp >= 0) || (timestamp == EGL_TIMESTAMP_PENDING_ANDROID); + // \todo [2017-10-19 brianderson] Don't consider 0 invalid once kernel fix is in. + return (timestamp > 0) || (timestamp == EGL_TIMESTAMP_PENDING_ANDROID); } bool timestampPending (EGLnsecsANDROID timestamp) @@ -201,59 +203,77 @@ bool timestampPending (EGLnsecsANDROID timestamp) return timestamp == EGL_TIMESTAMP_PENDING_ANDROID; } +template<typename T> +void check_lt(tcu::ResultCollector& result, const T& a, const T& b, const std::string& msg) { + if (a < b) + return; + std::string m = msg + "!(" + de::toString(a) + " < " + de::toString(b) + ")"; + result.fail(m); +} + +template<typename T> +void check_le(tcu::ResultCollector& result, const T& a, const T& b, const std::string& msg) { + if (a <= b) + return; + std::string m = msg + "!(" + de::toString(a) + " <= " + de::toString(b) + ")"; + result.fail(m); +} + void verifySingleFrame (const FrameTimes& frameTimes, tcu::ResultCollector& result, bool verifyReadsDone) { // Verify CPU timeline is monotonic. - result.check(frameTimes.swapBufferBeginNs < frameTimes.latch, "Buffer latched before it was swapped."); - result.check(frameTimes.latch < frameTimes.firstCompositionStart, "Buffer composited before it was latched."); - result.check(frameTimes.firstCompositionStart <= frameTimes.lastCompositionStart, "First composition start after last composition start."); - result.check(frameTimes.lastCompositionStart < frameTimes.dequeueReady, "Buffer composited after it was ready to be dequeued."); + check_lt(result, frameTimes.swapBufferBeginNs, frameTimes.latch, "Buffer latched before it was swapped."); + check_lt(result, frameTimes.latch, frameTimes.firstCompositionStart, "Buffer composited before it was latched."); + check_le(result, frameTimes.firstCompositionStart, frameTimes.lastCompositionStart, "First composition start after last composition start."); + check_lt(result, frameTimes.lastCompositionStart, frameTimes.dequeueReady, "Buffer composited after it was ready to be dequeued."); // Verify GPU timeline is monotonic. if (timestampValid(frameTimes.firstCompositionGpuFinished)) - result.check(frameTimes.renderingComplete < frameTimes.firstCompositionGpuFinished, "Buffer rendering completed after compositor GPU work finished."); + check_lt(result, frameTimes.renderingComplete, frameTimes.firstCompositionGpuFinished, "Buffer rendering completed after compositor GPU work finished."); if (timestampValid(frameTimes.displayPresent)) - result.check(frameTimes.renderingComplete < frameTimes.displayPresent, "Buffer displayed before rendering completed."); + check_lt(result, frameTimes.renderingComplete, frameTimes.displayPresent, "Buffer displayed before rendering completed."); if (timestampValid(frameTimes.firstCompositionGpuFinished) && timestampValid(frameTimes.displayPresent)) - result.check(frameTimes.firstCompositionGpuFinished < frameTimes.displayPresent, "Buffer displayed before compositor GPU work completed"); + check_lt(result, frameTimes.firstCompositionGpuFinished, frameTimes.displayPresent, "Buffer displayed before compositor GPU work completed"); // Drivers may maintain shadow copies of the buffer, so the readsDone time // of the real buffer may be earlier than apparent dependencies. We can only // be sure that the readsDone time must be after the renderingComplete time. - if (verifyReadsDone) - result.check(frameTimes.renderingComplete < frameTimes.readsDone, "Buffer rendering completed after reads completed."); + // It may also be equal to the renderingComplete time if no reads were + // peformed. + if (verifyReadsDone && timestampValid(frameTimes.readsDone)) + check_le(result, frameTimes.renderingComplete, frameTimes.readsDone, "Buffer rendering completed after reads completed."); // Verify CPU/GPU dependencies - result.check(frameTimes.renderingComplete < frameTimes.latch, "Buffer latched before rendering completed."); + check_lt(result, frameTimes.renderingComplete, frameTimes.latch, "Buffer latched before rendering completed."); if (timestampValid(frameTimes.firstCompositionGpuFinished)) - result.check(frameTimes.firstCompositionStart < frameTimes.firstCompositionGpuFinished, "Composition CPU work started after GPU work finished."); + check_lt(result, frameTimes.firstCompositionStart, frameTimes.firstCompositionGpuFinished, "Composition CPU work started after GPU work finished."); if (timestampValid(frameTimes.displayPresent)) - result.check(frameTimes.firstCompositionStart < frameTimes.displayPresent, "Buffer displayed before it was composited."); + check_lt(result, frameTimes.firstCompositionStart, frameTimes.displayPresent, "Buffer displayed before it was composited."); } void verifyNeighboringFrames (const FrameTimes& frame1, const FrameTimes& frame2, tcu::ResultCollector& result, bool verifyReadsDone) { // CPU timeline. - result.check(frame1.swapBufferBeginNs < frame2.swapBufferBeginNs, "Swap begin times not monotonic."); - result.check(frame1.latch < frame2.latch, "Latch times not monotonic."); - result.check(frame1.lastCompositionStart < frame2.latch, "Old buffer composited after new buffer latched."); - result.check(frame1.lastCompositionStart < frame2.firstCompositionStart, "Composition times overlap."); - result.check(frame1.dequeueReady < frame2.dequeueReady, "Dequeue ready times not monotonic."); + check_lt(result, frame1.swapBufferBeginNs, frame2.swapBufferBeginNs, "Swap begin times not monotonic."); + check_lt(result, frame1.latch, frame2.latch, "Latch times not monotonic."); + check_lt(result, frame1.lastCompositionStart, frame2.latch, "Old buffer composited after new buffer latched."); + check_lt(result, frame1.lastCompositionStart, frame2.firstCompositionStart, "Composition times overlap."); + check_lt(result, frame1.dequeueReady, frame2.dequeueReady, "Dequeue ready times not monotonic."); // GPU timeline. - result.check(frame1.renderingComplete < frame2.renderingComplete, "Rendering complete times not monotonic."); + check_lt(result, frame1.renderingComplete, frame2.renderingComplete, "Rendering complete times not monotonic."); if (timestampValid(frame1.firstCompositionGpuFinished) && timestampValid(frame2.firstCompositionGpuFinished)) - result.check(frame1.firstCompositionGpuFinished < frame2.firstCompositionGpuFinished, "Composition GPU work complete times not monotonic."); + check_lt(result, frame1.firstCompositionGpuFinished, frame2.firstCompositionGpuFinished, "Composition GPU work complete times not monotonic."); if (timestampValid(frame1.displayPresent) && timestampValid(frame2.displayPresent)) - result.check(frame1.displayPresent < frame2.displayPresent, "Display present times not monotonic."); + check_lt(result, frame1.displayPresent, frame2.displayPresent, "Display present times not monotonic."); if (verifyReadsDone && timestampValid(frame1.readsDone) && timestampValid(frame2.readsDone)) - result.check(frame1.readsDone < frame2.readsDone, "Reads done times not monotonic."); + check_lt(result, frame1.readsDone, frame2.readsDone, "Reads done times not monotonic."); } EGLContext createGLES2Context (const Library& egl, EGLDisplay display, EGLConfig config) @@ -616,14 +636,14 @@ void GetFrameTimestampTest::executeForConfig (EGLDisplay display, EGLConfig conf frame.compositeToPresentLatency = compositorTimingValues[2]; // Verify compositor timing is sane. - m_result.check(1000000 < frame.compositeInterval, "Reported refresh rate greater than 1kHz."); - m_result.check(frame.compositeInterval < 1000000000, "Reported refresh rate less than 1Hz."); - m_result.check(0 < frame.compositeToPresentLatency, "Composite to present latency must be greater than 0."); - m_result.check(frame.compositeToPresentLatency < frame.compositeInterval * 3, "Composite to present latency is more than 3 vsyncs."); + check_lt<EGLnsecsANDROID>(m_result, 1000000, frame.compositeInterval, "Reported refresh rate greater than 1kHz."); + check_lt<EGLnsecsANDROID>(m_result, frame.compositeInterval, 1000000000, "Reported refresh rate less than 1Hz."); + check_lt<EGLnsecsANDROID>(m_result, 0, frame.compositeToPresentLatency, "Composite to present latency must be greater than 0."); + check_lt(m_result, frame.compositeToPresentLatency, frame.compositeInterval * 3, "Composite to present latency is more than 3 vsyncs."); const EGLnsecsANDROID minDeadline = now; - m_result.check(minDeadline < frame.compositeDeadline, "Next composite deadline is in the past."); + check_lt(m_result, minDeadline, frame.compositeDeadline, "Next composite deadline is in the past."); const EGLnsecsANDROID maxDeadline = now + frame.compositeInterval * 2; - m_result.check(frame.compositeDeadline < maxDeadline, "Next composite deadline over two intervals away."); + check_lt(m_result, frame.compositeDeadline, maxDeadline, "Next composite deadline over two intervals away."); const float colorAngle = (static_cast<float>(i) / static_cast<float>(frameCount)) * 6.28318f; gl.clearColor((1.0f + deFloatSin(colorAngle)) / 2.0f, 0.7f, (1.0f + deFloatCos(colorAngle)) / 2.0f, 1.0f); |