In mapper, use rcReadColorBufferDMA if available

Bug: 189960317
Test: ./cts-tradefed run cts -m CtsViewTestCases -t
android.view.cts.ASurfaceControlBackPressureTest#testSurfaceTransaction_setEnableBackPressure
fails fewer frames
Test: ./cts-tradefed run cts -m CtsNativeHardwareTestCases 100%

Change-Id: I0be2dabb0b78818e53911864f0848d5e4954e8c9
Merged-In: I0be2dabb0b78818e53911864f0848d5e4954e8c9
diff --git a/system/hals/mapper3.cpp b/system/hals/mapper3.cpp
index 0788a0a..570ae5e 100644
--- a/system/hals/mapper3.cpp
+++ b/system/hals/mapper3.cpp
@@ -449,11 +449,24 @@
                     }
                 }
             } else {
-                rcEnc->rcReadColorBuffer(rcEnc,
-                                         cb.hostHandle,
-                                         0, 0, cb.width, cb.height,
-                                         cb.glFormat, cb.glType,
-                                         bufferBits);
+                if (rcEnc->featureInfo()->hasReadColorBufferDma) {
+                    {
+                        AEMU_SCOPED_TRACE("bindDmaDirectly");
+                        rcEnc->bindDmaDirectly(bufferBits,
+                                getMmapedPhysAddr(cb.getMmapedOffset()));
+                    }
+                    rcEnc->rcReadColorBufferDMA(rcEnc,
+                        cb.hostHandle,
+                        0, 0, cb.width, cb.height,
+                        cb.glFormat, cb.glType,
+                        bufferBits, cb.width * cb.height * cb.bytesPerPixel);
+                } else {
+                    rcEnc->rcReadColorBuffer(rcEnc,
+                        cb.hostHandle,
+                        0, 0, cb.width, cb.height,
+                        cb.glFormat, cb.glType,
+                        bufferBits);
+                }
             }
         }