Add metrics for TextureView dataspace changes

Bug: 329475035
Flag: EXEMPT logging only
Test: builds
Test: GraphicsAtomTests
Change-Id: Ia65ceb3bf205e3050b182aa6d170a453076bdc4c
diff --git a/libs/hwui/DeferredLayerUpdater.cpp b/libs/hwui/DeferredLayerUpdater.cpp
index b763a96..c016070 100644
--- a/libs/hwui/DeferredLayerUpdater.cpp
+++ b/libs/hwui/DeferredLayerUpdater.cpp
@@ -19,6 +19,7 @@
 #include <GLES2/gl2ext.h>
 
 // TODO: Use public SurfaceTexture APIs once available and include public NDK header file instead.
+#include <statslog_hwui.h>
 #include <surfacetexture/surface_texture_platform.h>
 
 #include "AutoBackendTextureRelease.h"
@@ -50,6 +51,14 @@
     setTransform(nullptr);
     mRenderState.removeContextCallback(this);
     destroyLayer();
+    if (mFirstTimeForDataspace > std::chrono::steady_clock::time_point::min()) {
+        auto currentTime = std::chrono::steady_clock::now();
+        stats_write(stats::TEXTURE_VIEW_EVENT, static_cast<int32_t>(getuid()),
+                    static_cast<int64_t>(std::chrono::duration_cast<std::chrono::milliseconds>(
+                                                 currentTime - mFirstTimeForDataspace)
+                                                 .count()),
+                    mDataspace);
+    }
 }
 
 void DeferredLayerUpdater::setSurfaceTexture(AutoTextureRelease&& consumer) {
@@ -195,6 +204,21 @@
                     updateLayer(forceFilter, layerImage, outTransform, currentCropRect,
                                 maxLuminanceNits);
                 }
+
+                if (dataspace != mDataspace ||
+                    mFirstTimeForDataspace == std::chrono::steady_clock::time_point::min()) {
+                    auto currentTime = std::chrono::steady_clock::now();
+                    if (mFirstTimeForDataspace > std::chrono::steady_clock::time_point::min()) {
+                        stats_write(stats::TEXTURE_VIEW_EVENT, static_cast<int32_t>(getuid()),
+                                    static_cast<int64_t>(
+                                            std::chrono::duration_cast<std::chrono::milliseconds>(
+                                                    currentTime - mFirstTimeForDataspace)
+                                                    .count()),
+                                    mDataspace);
+                    }
+                    mFirstTimeForDataspace = currentTime;
+                    mDataspace = dataspace;
+                }
             }
         }